Понедельник, 31 августа

День был тёмный и мокрый. Вот такой:

150831-181339

Манечка утром возила Сашика на занятие по вождению, а потом помогала детям собраться в школу. Я на работе разбирался с тем, как разговаривать с дисками через маленький разъём (это на самом деле serial port, только низковольтный), и чтобы дело шло повеселее — на Питоне. Я уж и забыл как на Питоне приятно программировать…

Воскресенье, 30 августа

Ночью опять шёл дождь, а днём была странная погода: то темнело и дождик брызгал, то солнышко выглядывало, с периодом где-то в час.

Вчера мы чуть-чуть пообщались с Ванечкой, а сегодня утром я ему послал ссылку на хорошую заметку одной психологини, но он не ответил.

День провели, занимаясь разными делами, кто чем. Манечка дорабатывала фон на последней картине, ездила за едой, поменяла Сашику занавески в комнате, а то очень уж у него мрачно было. Тим программировал свои Minecraft plug-ins, у него случился хороший случай познакомиться с regular expressions, и он даже написал правильный код, но боюсь, что всего их потенциала не осознал. Сашик утверждает, что тоже делал что-то полезное, но я подозреваю, что не очень-то. Я изучал что в программистском мире происходит, соображал, чего бы такого сделать, чтобы было что показывать потенциальным работодателям. Научился собирать chromium, ужаснулся его размеру. Что-то не уверен я, что хочу с ним связываться… Вспомнил свою «крутилку» на JavaScript, начал её приживлять в Apache Cordova. Обновил golang до нынешней версии 1.5. Попробую поработать над читалкой-писалкой exif metadata на go для разминки…

Вечером все вместе сходили погулять в ближайший парк, и тоже начало капать, мы забоялись и вернулись домой. А уже после прогулки я сфотографировал вот этих синичек, называемых по-местному Bush Tits:

150830-181526

Они, кажется, так и живут дружным коллективом. Это сфотографировано 45-175мм объективом с 1.5x Никоновским удлиннителем — получается чуть ли не лучше, чем сломавшимся 100-300, который я вчера послал в ремонт.

Суббота, 29 августа

Ночью прошёл обещанный дождь, я сквозь сон слышал жуткий шум воды и ветра. Утром к нам приходили гости, и мы даже собирались погулять, потому что наступило затишье, и на виде из космоса был виден большущий просвет в облаках как раз над нами. Но стоило нам выйти из дома, как подозрительно закапало, и мы передумали. А потом начались сильные порывы ветра, такие, что триста тыщ человек остались без электричества. Нас, впрочем, миловало: один раз моргнуло, и всё (только сервер в гараже и роутеры перегрузились). Днём ездили вчетвером в любимый Тимошей Bento Box, по дороге получилась вот такая фотография:

 150829-152215

А потом каждый занимался своими делами — до вечера. Вечером посмотрели все вместе первую серию Jeeves and Wooster (Саша говорит, что уже видел первые серии, а Тим — нет). И опять пошёл дождь, такой сильный, что пришлось прочищать водостоки перед домом, а то уже гараж начало заливать. Интересно, утром электричество будет у нас?

Пятница, 28 августа

Манечка в шесть утра посмотрела в тёмное окно, послушала как капает дождь, и дальше спать легла. А её художественная подруга Л. таки поехала в поля рисовать, не такая уж плохая погода потом оказалась. А Манечка зато закончила натюрморт с яблоками, по-моему, прекрасный. А Тимошик доделал тот Minecraft plug-in, что вчера делал, и новый сегодня, кажется, запрограммировал. Сашик, правда, ничего такого выдающегося не сделал, только недолго поскоблил старую краску, а потом убежал домой, сославшись на дождь. А я победил наконец-то IOCTL, уже вечером. Поймал Натана, который как раз проходил мимо, объяснил ему в чём проблема, и в процессе объяснения сам понял: оказывается, storport отвинчивает SCSI_PASS_THROUGH запросы у которых MinorFunction 0. Это, естественно, нигде не написано, а узнать можно, не работая в Микрософте, только терпеливо продираясь через ассемблерный код в отладчике, на пятом примерно уровне в глубину. Теперь у меня команды посылаются, и я могу с чистой совестью радоваться выходным и не заботиться о том, что будет в понедельник. Примерно как эта синичка, похожая на европейского воробья:

150828-185547

А завтра обещают сильный шторм…

Четверг, 27 августа

Жара, лето. 30°C, было, вроде как. А завтра обещают резкое похолодание и дождь на весь день, ура!

Манечка возила мальчишек и Сашиного друга Павлика на экскурсию в местный университет, а я сидел на работе. Первым делом починил отладчик, дурацкие паузы исчезли. Подозреваю, что дело было не в Serial vs Network, а в том, что symbol path был чуть-чуть корявый. Теория о том, что в драйвере неправильно упакована структура SCSI_PASS_THROUGH оказалась неправильной. В тестовой user mode программке, откомпилированной для x64, размер тоже 0x38, но она работает. Упростил логику, перенёс всю возню с сигналами в отдельный thread, почистил обработку того случая, когда уже нашли искомое, и надо предотвратить все дальнейшие обращения к диску. Код стал выглядеть прилично, но всё равно не работает — storport/usbport ругаются, говорят «параметр неправильный». И только к вечеру, уже уходя с работы, я придумал новую теорию: наверное, надо вместо IOCTL сделать нормальный IRP с IRP_MJ_SCSI, надо посмотреть в исходные тексты disk/classpnp, которые есть в WDK — не они ли превращают этот IOCTL в SCSI?

Мы, вообще-то, собирались с Манечкой и её подругой Л. завтра вместе поехать в Palouse Country рисовать-фотографировать, а потом в город с прекрасным названием Coeur D’Alene на выставку какого-то хорошего художника (уровня Фешина), которая открыта только до первого сентября. Но говорят, что там сильно дымно от лесных пожаров, поэтому решили не ехать. А я, раз такое дело, пойду на работу добивать специальные команды.

Гулять не получилось выйти, фотография кухонная — «Манечка опаздывает на волейбол»:

150827-204345

Среда, 26 августа

Уфф… Целый день пытался послать Force Debug Stop из драйвера, и пока что не получилось. Во-первых, выяснилось, что IoBuildDeviceIoControlRequest нельзя вызывать из, например, completion routine. В документации этого не написано, но эмпирически — нельзя. Пришлось сильно менять логику, получилось не очень красиво. Во-вторых, выяснилось, что USBSTOR вроде бы пропускает «разрешить секретные команды», но сама команда ему потом не нравится, причём очень странным образом, а в STORPORT даже и «разрешить» не лезет, причём код ошибки там другой. Ну и процесс почему-то связан с чуть ли не минутными замираниями загрузки тестовой машины, реакции отладчика на кнопку, и т.д.

Я-то собирался сегодня закончить, а завтра составить компанию Манечке и детям на экскурсию в местный университет, а вот не вышло…

Вечером когда я с работы приехал, дома никого не было, они все в парке в теннис играли:

150826-184157

Испекли пиццу, съездили с Сашиком покататься, выбрали фотографию, и всё, пора спать.

Вторник, 25 августа

Полдня прошло в совещаниях с высоким начальником. Ничего такого, что имело бы немедленную практическую важность, он не сказал, но и хорошего тоже, к сожалению. Манечка поскольку сегодня возила детей в школу регистрироваться, а потом встречала Г.Я. в аэропорту, обедал я с мужиками. Они надеются, что до Рождества у нас никаких катаклизмов не будет. А Натан считает, что запросто могут нас всех разогнать, приводя в пример Honeywell — тоже старая инженерная компания, однако легко увольняла людей прямо перед праздниками…

После обеда я всё-таки доехал до дома, помог Манечке и Сашику собрать новый кухонно-столовый стол, который она оторвала с какой-то огромной скидкой (а старый, купленный с рук давным-давно совсем уже разваливался), сделал им всем кофе, и поехал дальше работать. Много не наработал, только убедился, что тот же самый IOCTL_SCSI_PASS_TRHOUGH с ATA_PASSTHROUGH16 замечательно работает как для USB, так и для SATA, и осознал, что таки надо обязательно вызывать KeBugCheckEx сразу как только команда послана, а то Windows немедленно опять начинает с диском разговаривать.

Вечером недолго погуляли с Манечкой:

150825-192209

А потом она убежала на день рождения к Аньке, а мы с мальчишками посмотрели последние две серии «Rick and Morty», и я работать-учиться сел.