Недавно, рассматривая карту окрестностей, обнаружил, что среди болотистой местности неподалеку от соседней деревни есть несколько озёр, и решил до них добраться. И вот сегодня, надев резиновые сапоги, отправился в путь. Доехал на велосипеде до места, где начинается болото, спрятал его в кусты, и отправился дальше пешком.
На болоте в больших количествах обнаружил какие-то неизвестные ягоды. (Потом, уже дома, предположил, что это брусника, так как в Wikimapia написано, что там ее много, и по фото вроде похожа). Прошагав полкилометра, подрался сквозь заросли травы на берегу, и вот наконец-то передо мной открылось первое из озёр. Вода в нем тёмная, само озеро спокойное, но какое-то мрачное и неприветливое. Посмотрел на него, сделал несколько фото и отправился дальше, ко второму озеру. К моему удивлению, несмотря на то, что места вроде бы довольно глухие, кое-где были протоптаны тропинки, правда, еле заметные.
Пока шел, увидел несколько грибов. В основном, сыроежки, валуи и подберезовик. Добрался до второго озера. Оно оказалось не таким глубоким, как первое, и с гораздо большим количеством водной растительности. Дальше возник вопрос: идти или не идти к третьему озеру. Оно было расположено так, что второе отделяло меня от него, и его нужно было обходить либо с северной стороны, либо с южной. Решил с южной, так как там была более-менее проходимая тропинка, но, как выяснилось, зря: когда попытался подойти к третьему озеру, наткнулся на густые поросли молодых берез и ольхи, продираться сквозь которые решимости не хватило.
Так и отправился обратно, тем более, что протоптанные дорожки наводили на мысль, что люди тут ходят не так уж редко, а это заставляло волноваться за велосипед. Но все обошлось, велосипед был на месте.
А вечером обнаружил, что для этих озер в Wikimapia нет фото, и загрузил туда свои, сделанные мобильником во время прогулки. Так что получился небольшой вклад в общее дело.
Был в Сети 9 нояб. 2024 г., 19:32
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb, slow lifer.
- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
В лес за малиной
В пятницу пошел на прогулку в лес за малиной. Хотел было идти в середине дня, но из-за пересборок ядра Linux, о которых писал в предыдущем сообщении, задержался, и вышел уже около 17 часов. Но прогулка получилась не очень: сказывался недосып, из-за которого как бы отключились эмоции, плюс я долго не мог найти тот малиновый куст, ради которого и пошел. Из-за этого нарезал круги по дорожкам, пройдя куда большее расстояние, чем рассчитывал В конце концов нашел место, которое выглядело похожим, но вместо большого куста там было несколько маленьких и чахлых. До сих пор не знаю, то ли его так вытоптали за эти два года, то ли это все же это было другое место. Тем не менее, несколько ягод я все же нашел, но не там, а на других кустах. Кроме этого снова попал к месту, где растет черника, а также видел языческое капище (см. фото в Instagram).
А когда пошел обратно, снова впал в то состояние, в котором принимаю очень странные решения: уже почти дойдя до выхода из леса, вдруг решил пройти по еще одной дорожке, в надежде, вдруг куст окажется там. А когда прошел, подумал, что теперь будет проще добраться по просеке ЛЭП до того соснового бора, о котором упоминал не раз. По карте возвращаться тем же путем и идти через бор выглядело примерно одинаково. Но увы, не учел, что после дождей даже с моей склонностью лезть во всякие труднопроходимые места пробраться по этой просеке стало очень сложно — местами она превратилась в болото. Пришлось делать то, чего я терпеть не могу больше всего — возвращаться назад, пройдя почти три лишних километра.
В общем, устал сильно, впечатления остались странные, но не могу сказать, что прямо уж совсем недоволен прогулкой.
А когда пошел обратно, снова впал в то состояние, в котором принимаю очень странные решения: уже почти дойдя до выхода из леса, вдруг решил пройти по еще одной дорожке, в надежде, вдруг куст окажется там. А когда прошел, подумал, что теперь будет проще добраться по просеке ЛЭП до того соснового бора, о котором упоминал не раз. По карте возвращаться тем же путем и идти через бор выглядело примерно одинаково. Но увы, не учел, что после дождей даже с моей склонностью лезть во всякие труднопроходимые места пробраться по этой просеке стало очень сложно — местами она превратилась в болото. Пришлось делать то, чего я терпеть не могу больше всего — возвращаться назад, пройдя почти три лишних километра.
В общем, устал сильно, впечатления остались странные, но не могу сказать, что прямо уж совсем недоволен прогулкой.
Сборка ядра Linux и новый рекорд скорости загрузки
В пятницу планировал снова пойти в лес на прогулку. Но, как всегда, стоит что-либо запланировать, как тут же находится причина сделать все иначе. В этот раз все началось с того, что ПНБ на форуме IntB задал мне вопрос, связанный со сборкой ядра Linux. В поисках ответа на этот вопрос я вспомнил, что у меня на дачном ноутбуке лежат исходники ядра, которые я выкачал их еще перед первым заездом из соображений «будет время — поизучаю», но потом благополучно о них забыл.
И вот в среду вечером пришла в голову мысль, почему бы не собрать свое ядро. Но увы, было слишком поздно, поэтому сборку я отложил на четверг. Как всегда, главными целями были экономия памяти и ускорение загрузки. Последний раз я пытался это сделать летом то ли прошлого, то ли позапрошлого года, но не получилось: ядро выдавало панику на этапе загрузки, а терпения разбираться, почему, у меня тогда не хватило. На этот раз решил идти более консервативным путем: не отключать сразу кучу всего, а взять за основу defconfig и дальше убирать или выносить в модули все пошагово. К моему удивлению, на этот раз все сработало, и новое ядро загрузилось! Причем оказалось, что грузится оно ощутимо быстрее штатного: что-то около 2 секунд вместо шести (речь идет о загрузке kernelspace).
Но вскоре выяснилось, что не все так хорошо, как казалось сначала: новое ядро не видит WiFi от слова совсем. Какое-то время ушло на то, чтобы порывшись в настройках ядра, найти там раздел с нужными драйверами и включить их. Но через пару перезагрузок я вдруг обнаружил, что время загрузки вдруг снова выросло до 6 секунд, и дело явно не в WiFi-драйвере. В результате остаток дня прошел в поисках возможных причин. И только глубокой ночью я вдруг вспомнил про то, как в городе отсутствие swap на Ubunutu 18 приводило к 30-секундному простою при загрузке. А поддержку swap я во время экспериментов с ядром как раз взял и выключил! Включил обратно, пересобрал, перезагрузился — лишние три секунды исчезли!
Потом еще экспериментировал с разными настройками безопасности: включал и отключал их, чтобы посмотреть, как это влияет на производительность. Оказалось, что включение запрета на отображение ядра в userspace ведет к весьма ощутимому падению скорости. Остальное влияет мало (если только не пересобирать весь дистрибутив без PIC/PIE-кода). За всеми этими экспериментами засиделся до пяти утра. Эх, прямо таки стереотипное красноглазие: бессонная ночь и консоль с потоком сообщений компилятора!
А в пятницу по каким-то непонятным причинам проснулся гораздо раньше, чем обычно в последнее время, где-то около 12 часов. Решил воспользоваться тем, что погода улучшилась, и пойти наконец-то в лес пособирать малину. Но перед этим вспомнил про то, что вчера так и не проверил работу с новым ядром нескольких устройств: Web-камеры, cardreader и мобильника в режиме модема при подключении по шнурку. Cardreader заработал сразу, а вот для остального пришлось подключать дополнительные модули и пересобирать ядро еще раз. Причем я толком не знал, что именно нужно, поэтому пошел таким путем: сначала делал модулями все, что хоть как-то имело отношение к тому, что нужно, а потом смотрел список, какие модули оставались загруженными, и оставлял только их.
Потом ушел на прогулку (ее опишу в отдельном сообщении). А когда вернулся и вновь занялся экспериментами с ядром. Наконец-то разобрался с вопросом, почему при попытке избавиться от initramfs получается kernel panic, даже несмотря на то, что все необходимые драйвера и модули вкомпилированы в ядро. Дело оказалось в том, что нужно указывать UUID раздела, а не файловой системы (я прежде вообще не знал, что они отличаются). После этого стало ясно, что основной оставшийся источник задержек при загрузке — это драйвер дискретной видеокарты nouveau. Немного подумав, я взял и отключил его вообще.
И вот, перезагрузившись, я увидел скорость, которая еще недавно казалась мне нереальной: по данным systemd время загрузки составляло чуть больше 1.2 сек. kernelspace и 1.0 сек. userspace, суммарно же меньше 2.3 секунды! Впервые мне удалось получить более хорошие показатели, чем у связки PC DOC 7.0 + Windows 3.11 на Pentium, которая была для меня эталоном быстроты! Причем это была не просто какая-нибудь экспериментальная система, а вполне реально работающая и поддерживающая все имеющиеся устройства, кроме дискретной видеокарты. Причем памяти она занимала всего 134 Мб против 181 при использовании штатного ядраю. Эх, во времена Pentium III такая экономия была бы просто прорывом. А сейчас, увы, этого разве что на лишнюю вкладку в броузере хватит…
Казалось бы, нужно сделать скриншот и закончить на этом эксперименты с ядром, вернувшись к обыденной жизни, но увы. Мысль о дискретной видеокарте не давала мне покоя, поэтому в субботу я снова занялся экспериментами с ядром. Сначала выяснил, что использование дискретной карты с nouveau приводит к отключению аппаратного ускорения в броузере (а если включить его принудительно — к весьма эффектным глюкам), без которого на дискретной карте показатели даже хуже, чем на встроенной с включенным ускорением. Поэтому осталась последняя надежда — пропиертарные драйвера от nVidia.
Увы, здесь меня ждало разочарование. Драйвера из дистрибутива собираться с новым ядром не хотели категорически. Я решил пойти другим путем — скачать драйвер с самого сайта nVidia. Скачал версию 390. Сначала все было хорошо: все установилось и собралось без проблем. Но при загрузке X Server драйвер почему-то не использовался. Из логов было видно, что X Server сначала загружает его, потом выгружает без каких-либо внятных объяснений, и вместо этого берет драйвер встроенной карты. После нескольких попыток сделать с этим хоть что-нибудь я решил попробовать другую версию — 340 (384-ой, увы, на сайте не было). Но с ней и вовсе получилось непонятно: если в каталоге с исходниками ядра был файл .config, она отказывалась собираться, ругаясь source is not clean, а при его отсутствии ругалась на то, что в ядре выключена поддержка модулей (при попытке включить которую создавался новый .config и история повторялась сначала). Потом еще были попытки собрать более новую версию nouveau из исходников на его сайте, попытки оптимизировать время загрузки обычного nouveau, задавая разные параметры командной строки, но все безрезультатно. В итоге пока что отключил его полностью, и все.
Но несмотря на это, я снова чувствую себя Настоящим Компьютерщиком, который знает и контролирует то, что происходит в его системе, а не воспринимает ее как некий черный ящик.
И вот в среду вечером пришла в голову мысль, почему бы не собрать свое ядро. Но увы, было слишком поздно, поэтому сборку я отложил на четверг. Как всегда, главными целями были экономия памяти и ускорение загрузки. Последний раз я пытался это сделать летом то ли прошлого, то ли позапрошлого года, но не получилось: ядро выдавало панику на этапе загрузки, а терпения разбираться, почему, у меня тогда не хватило. На этот раз решил идти более консервативным путем: не отключать сразу кучу всего, а взять за основу defconfig и дальше убирать или выносить в модули все пошагово. К моему удивлению, на этот раз все сработало, и новое ядро загрузилось! Причем оказалось, что грузится оно ощутимо быстрее штатного: что-то около 2 секунд вместо шести (речь идет о загрузке kernelspace).
Но вскоре выяснилось, что не все так хорошо, как казалось сначала: новое ядро не видит WiFi от слова совсем. Какое-то время ушло на то, чтобы порывшись в настройках ядра, найти там раздел с нужными драйверами и включить их. Но через пару перезагрузок я вдруг обнаружил, что время загрузки вдруг снова выросло до 6 секунд, и дело явно не в WiFi-драйвере. В результате остаток дня прошел в поисках возможных причин. И только глубокой ночью я вдруг вспомнил про то, как в городе отсутствие swap на Ubunutu 18 приводило к 30-секундному простою при загрузке. А поддержку swap я во время экспериментов с ядром как раз взял и выключил! Включил обратно, пересобрал, перезагрузился — лишние три секунды исчезли!
Потом еще экспериментировал с разными настройками безопасности: включал и отключал их, чтобы посмотреть, как это влияет на производительность. Оказалось, что включение запрета на отображение ядра в userspace ведет к весьма ощутимому падению скорости. Остальное влияет мало (если только не пересобирать весь дистрибутив без PIC/PIE-кода). За всеми этими экспериментами засиделся до пяти утра. Эх, прямо таки стереотипное красноглазие: бессонная ночь и консоль с потоком сообщений компилятора!
А в пятницу по каким-то непонятным причинам проснулся гораздо раньше, чем обычно в последнее время, где-то около 12 часов. Решил воспользоваться тем, что погода улучшилась, и пойти наконец-то в лес пособирать малину. Но перед этим вспомнил про то, что вчера так и не проверил работу с новым ядром нескольких устройств: Web-камеры, cardreader и мобильника в режиме модема при подключении по шнурку. Cardreader заработал сразу, а вот для остального пришлось подключать дополнительные модули и пересобирать ядро еще раз. Причем я толком не знал, что именно нужно, поэтому пошел таким путем: сначала делал модулями все, что хоть как-то имело отношение к тому, что нужно, а потом смотрел список, какие модули оставались загруженными, и оставлял только их.
Потом ушел на прогулку (ее опишу в отдельном сообщении). А когда вернулся и вновь занялся экспериментами с ядром. Наконец-то разобрался с вопросом, почему при попытке избавиться от initramfs получается kernel panic, даже несмотря на то, что все необходимые драйвера и модули вкомпилированы в ядро. Дело оказалось в том, что нужно указывать UUID раздела, а не файловой системы (я прежде вообще не знал, что они отличаются). После этого стало ясно, что основной оставшийся источник задержек при загрузке — это драйвер дискретной видеокарты nouveau. Немного подумав, я взял и отключил его вообще.
И вот, перезагрузившись, я увидел скорость, которая еще недавно казалась мне нереальной: по данным systemd время загрузки составляло чуть больше 1.2 сек. kernelspace и 1.0 сек. userspace, суммарно же меньше 2.3 секунды! Впервые мне удалось получить более хорошие показатели, чем у связки PC DOC 7.0 + Windows 3.11 на Pentium, которая была для меня эталоном быстроты! Причем это была не просто какая-нибудь экспериментальная система, а вполне реально работающая и поддерживающая все имеющиеся устройства, кроме дискретной видеокарты. Причем памяти она занимала всего 134 Мб против 181 при использовании штатного ядраю. Эх, во времена Pentium III такая экономия была бы просто прорывом. А сейчас, увы, этого разве что на лишнюю вкладку в броузере хватит…
Казалось бы, нужно сделать скриншот и закончить на этом эксперименты с ядром, вернувшись к обыденной жизни, но увы. Мысль о дискретной видеокарте не давала мне покоя, поэтому в субботу я снова занялся экспериментами с ядром. Сначала выяснил, что использование дискретной карты с nouveau приводит к отключению аппаратного ускорения в броузере (а если включить его принудительно — к весьма эффектным глюкам), без которого на дискретной карте показатели даже хуже, чем на встроенной с включенным ускорением. Поэтому осталась последняя надежда — пропиертарные драйвера от nVidia.
Увы, здесь меня ждало разочарование. Драйвера из дистрибутива собираться с новым ядром не хотели категорически. Я решил пойти другим путем — скачать драйвер с самого сайта nVidia. Скачал версию 390. Сначала все было хорошо: все установилось и собралось без проблем. Но при загрузке X Server драйвер почему-то не использовался. Из логов было видно, что X Server сначала загружает его, потом выгружает без каких-либо внятных объяснений, и вместо этого берет драйвер встроенной карты. После нескольких попыток сделать с этим хоть что-нибудь я решил попробовать другую версию — 340 (384-ой, увы, на сайте не было). Но с ней и вовсе получилось непонятно: если в каталоге с исходниками ядра был файл .config, она отказывалась собираться, ругаясь source is not clean, а при его отсутствии ругалась на то, что в ядре выключена поддержка модулей (при попытке включить которую создавался новый .config и история повторялась сначала). Потом еще были попытки собрать более новую версию nouveau из исходников на его сайте, попытки оптимизировать время загрузки обычного nouveau, задавая разные параметры командной строки, но все безрезультатно. В итоге пока что отключил его полностью, и все.
Но несмотря на это, я снова чувствую себя Настоящим Компьютерщиком, который знает и контролирует то, что происходит в его системе, а не воспринимает ее как некий черный ящик.
Продолжаю изучать Ruby on Rails
(Запись сделана 23 июля.)
Организм пытается перестроиться на загородный режим, но получается только частично. Спать ложусь около трех часов ночи, но потом еще несколько часов не могу заснуть, и просыпаюсь поздно. Из-за этого сегодня не поехал на прогулку в лес, ради которой, собственно, и заехал на дачу. Да и вообще день куда-то мимо прошел.
Разобраться с тем, как входить в то состояние целостного видения, о котором я писал в предыдущих сообщениях, пока не получается. Простого ограничения Интернета явно недостаточно. Зато, вспомнив, как я делал ту или иную разработку, я понял, что почти все, что получило хоть какое-нибудь признание, начинало делаться именно в этом состоянии!
Также продолжаю изучать Ruby on Rails. Уже голова пухнет от новой информации… Но в целом то, что узнаю, очень и очень нравится: о чем-то подобном я мечтал в 2010—2012 годах, когда начинал делать IntB. А до некоторых вещей так и не додумался, например, автоматической генерации helperов для путей для всех actions или предпросмотра генерируемых Email. А еще пришла в голову мысль, что изучение нового frameworkа или API подобно изучению иностранного языка: нужно быстро запомнить, как по-новому называется знакомое понятие, и, самое главное, вспомнить в нужный момент, чтобы не лезть опять в документацию. По идее, конечно, нужно делать что-то вроде шпаргалки, куда выписывать основные моменты, но увы, как-то я к таким вещам никогда не мог приучить себя. Поэтому остается только одно: время и практика.
Еще мне начали писать люди с конкурса «Цифровой прорыв». Предлагают вступить в команды, но я все же участвовать там не буду. Во-первых, хакатон, где за 36 часов нужно слепить что-то кое-как работающее — это не мой формат, во-вторых, из-за необходимости указывать оффлайновые данные. Но все равно приятно, что заметили!
Организм пытается перестроиться на загородный режим, но получается только частично. Спать ложусь около трех часов ночи, но потом еще несколько часов не могу заснуть, и просыпаюсь поздно. Из-за этого сегодня не поехал на прогулку в лес, ради которой, собственно, и заехал на дачу. Да и вообще день куда-то мимо прошел.
Разобраться с тем, как входить в то состояние целостного видения, о котором я писал в предыдущих сообщениях, пока не получается. Простого ограничения Интернета явно недостаточно. Зато, вспомнив, как я делал ту или иную разработку, я понял, что почти все, что получило хоть какое-нибудь признание, начинало делаться именно в этом состоянии!
Также продолжаю изучать Ruby on Rails. Уже голова пухнет от новой информации… Но в целом то, что узнаю, очень и очень нравится: о чем-то подобном я мечтал в 2010—2012 годах, когда начинал делать IntB. А до некоторых вещей так и не додумался, например, автоматической генерации helperов для путей для всех actions или предпросмотра генерируемых Email. А еще пришла в голову мысль, что изучение нового frameworkа или API подобно изучению иностранного языка: нужно быстро запомнить, как по-новому называется знакомое понятие, и, самое главное, вспомнить в нужный момент, чтобы не лезть опять в документацию. По идее, конечно, нужно делать что-то вроде шпаргалки, куда выписывать основные моменты, но увы, как-то я к таким вещам никогда не мог приучить себя. Поэтому остается только одно: время и практика.
Еще мне начали писать люди с конкурса «Цифровой прорыв». Предлагают вступить в команды, но я все же участвовать там не буду. Во-первых, хакатон, где за 36 часов нужно слепить что-то кое-как работающее — это не мой формат, во-вторых, из-за необходимости указывать оффлайновые данные. Но все равно приятно, что заметили!
О цели и внутреннем состоянии
Вчера вечером, когда закончил писать FUSE-модуль, пришла вдруг в голову мысль: важно не то, что именно я делаю, а то, из какого состояния. То есть если получается зайти в то самое состояние целостного видения (разновидность ЭСП №2), то любая задача превращается в интересное дело А если нет, то приходится себя заставлять. Соответственно, главная цель сейчас — научиться чаще входить в это самое состояние. Но чтобы оно возникало, нужно делать информационную разгрузку и выделять себе время на спокойное размышление, причем желательно либо утром после подъема, либо наоборот, поздно вечером. А вот с этим как раз и проблемы…
О FUSE для WAD-файлов
Вчера вдруг вспомнил о своей давней идее освоить FUSE (библиотеку для работы с файловыми системами из userspace). Когда-то я разбирал основы и тогда задумался над тем, чтобы написать модуль для монтирования WAD-файлов, которые использовались в старом добром Doom и ему подобных играх, так как у них довольно простая внутренняя структура.
И вот вчера внезапно произошло то самое складывание в голове всего в единую цельную картину. И это сразу же дало мотивацию сесть и начать писать. Сначала я сделал простую утилиту для извлечения отдельного элемента из WAD-файла для тестирования. Потом пришлось прерваться — мы с Tellой договорились прогуляться по городу. Прогулка прошла хорошо, если не считать, что чуть было не попали под дождь. Но своевременно это поняли и добрались до моста Богдана Хмельницкого буквально в момент начала дождя, где и спрятались. А перед дождем удалось сделать несколько весьма атмосферных фото.
Вернулся я достаточно поздно и занялся переделкой написанной утилиты для работы с FUSE. И тут меня ждала первая неприятность: я долго не мог понять, как правильно передавать имя файла, который требуется смонтировать. Потом выяснилось, что у FUSE есть собственные инструменты для разбора параметров командной строки, и нужно использовать их. Но с этим я разобрался только сегодня, и то далеко не сразу. И вот наконец, первый запуск программы, не приведший к ошибке. Захожу в подкаталог монтирования и с радостью вижу там имена элементов из WAD-файла! Правда, сначала они выводились криво из-за того, что я забыл добавить нулевой байт. Но это я исправил быстро. А вот с другой ошибкой — тем, что список файлов получить удалось, а прочитать какой-либо из них — нет, провозился долго. А ошибка там оказалась довольно примитивная. Я давно не писал на C и благополучно забыл, что функция fread возвращает не число прочитанных байт, а число прочитанных блоков указанного размера. Причем сначала я думал, что проблемы в поиске нужного элемента в WAD или определении его размера. Но сделал отладочный вывод — там было все нормально. И только когда вывел вообще все что можно, и обнаружил, что fread возвращает единицу, понял, откуда берется проблема.
После этого все заработало. Но не обошлось без last-minute bug. Решил сделать по-нормальному: вынести некоторые процедуры из h-файла в c-файл, а в заголовочном оставить только их объявления. Но ошибочно в спешке одну из процедур принял за структуру (ввело в заблуждение слово struct в начале), и оставил ее в h-файле. А потом долго не мог понять, почему линковщик ругается на дважды определенный символ, который к тому же вообще экспортироваться не должен. Потом еще какое-то время ушло на то, чтобы выгрузить получившееся на GitHub и написать краткое описание.
Но все это было не зря: снова удалось почувствовать себя Настоящим Компьютерщиком, который может творить то, что не каждому доступно!
А еще обнаружил, что кто-то поставил звездочку (GitHubовский аналог like) моей другой разработке — JavaScript-библиотеке CondiLoader для асинхронной загрузки JavaScript и CSS. Что ж, хоть кто-то ее заметил!
И вот вчера внезапно произошло то самое складывание в голове всего в единую цельную картину. И это сразу же дало мотивацию сесть и начать писать. Сначала я сделал простую утилиту для извлечения отдельного элемента из WAD-файла для тестирования. Потом пришлось прерваться — мы с Tellой договорились прогуляться по городу. Прогулка прошла хорошо, если не считать, что чуть было не попали под дождь. Но своевременно это поняли и добрались до моста Богдана Хмельницкого буквально в момент начала дождя, где и спрятались. А перед дождем удалось сделать несколько весьма атмосферных фото.
Вернулся я достаточно поздно и занялся переделкой написанной утилиты для работы с FUSE. И тут меня ждала первая неприятность: я долго не мог понять, как правильно передавать имя файла, который требуется смонтировать. Потом выяснилось, что у FUSE есть собственные инструменты для разбора параметров командной строки, и нужно использовать их. Но с этим я разобрался только сегодня, и то далеко не сразу. И вот наконец, первый запуск программы, не приведший к ошибке. Захожу в подкаталог монтирования и с радостью вижу там имена элементов из WAD-файла! Правда, сначала они выводились криво из-за того, что я забыл добавить нулевой байт. Но это я исправил быстро. А вот с другой ошибкой — тем, что список файлов получить удалось, а прочитать какой-либо из них — нет, провозился долго. А ошибка там оказалась довольно примитивная. Я давно не писал на C и благополучно забыл, что функция fread возвращает не число прочитанных байт, а число прочитанных блоков указанного размера. Причем сначала я думал, что проблемы в поиске нужного элемента в WAD или определении его размера. Но сделал отладочный вывод — там было все нормально. И только когда вывел вообще все что можно, и обнаружил, что fread возвращает единицу, понял, откуда берется проблема.
После этого все заработало. Но не обошлось без last-minute bug. Решил сделать по-нормальному: вынести некоторые процедуры из h-файла в c-файл, а в заголовочном оставить только их объявления. Но ошибочно в спешке одну из процедур принял за структуру (ввело в заблуждение слово struct в начале), и оставил ее в h-файле. А потом долго не мог понять, почему линковщик ругается на дважды определенный символ, который к тому же вообще экспортироваться не должен. Потом еще какое-то время ушло на то, чтобы выгрузить получившееся на GitHub и написать краткое описание.
Но все это было не зря: снова удалось почувствовать себя Настоящим Компьютерщиком, который может творить то, что не каждому доступно!
А еще обнаружил, что кто-то поставил звездочку (GitHubовский аналог like) моей другой разработке — JavaScript-библиотеке CondiLoader для асинхронной загрузки JavaScript и CSS. Что ж, хоть кто-то ее заметил!
Очередные настольные игры, весьма удачные
Вчера (вернее теперь уже позавчера) снова выбрался на настольные игры. Причем выбрался гораздо позже обычного: на улице была сильная гроза, и в какой-то момент даже решил было не ехать, подумав, что все равно никто не соберется. Но где-то к 20:30 гроза стихла, дождь почти закончился, а в чате написали, что уже присутствует довольно много народа. Поэтому все же я поехал.
И, надо сказать, не зря. Сыграл очень удачно: два из трех раз выиграл в «японский бенг» aka «Меч самурая». Причем первый раз — за играл за ронина. Сначала я играл не особо активно, периодически атаковал сегуна, но не особо результативно. В итоге у меня было два жетона чести Потом Ал.С. поверила, что я — ниндзя и решила разыграть так: она атаковала Dexterа (он играл за самурая) так, что у него оставался всего один жетон стойкости, и предполагала, что я на своем ходу его добью, а дальше добил Liu Art, у которой оставалось два жетона стойкости и один жетон чести. В результате игра закончилась, а у меня оказалось четыре жетона. У ронина при игре впятером они умножаются на два, и в итоге я выиграл.
Второй раз я опять же играл не слишком результативно. Я был ниндзей, Ал.С. — сегуном, и она постоянно атаковала меня из-за прошлой игры. В результате до конца я дошел всего с двумя жетонами, но зато припрятал карту дайме, а второй ниндзя (им был Dexter) набрал аж пять жетонов. И мы снова победили с 8 очками.
Третий раз мы с Liu Art были ниндзя и проиграли: противникам пришло слишком уж много карт защит и доспехов, и я просто ничего не мог сделать, несмотря на кучу карт хладнокровия. А у Liu Art, наоборот, была атака любой дальности, но было мало оружия и этих самых карт хладнокровия. Все-таки в «японском бенге» слишком многое решает случайность. А потом, когда до закрытия заведения осталось полчаса, решили сыграть в другую игру — «Зомби». Она более быстрая и гораздо более простая. Получилось так: Dexter активно обращал всех в зомби, и в конце остались мы с ним вдвоем. Но зомби в этой игре, хоть выиграть не могут, но могут помешать другим, чем Ал.С., К.Ш. и Liu Art и воспользовались. И совместными усилиями мы его и победили.
В общем, очень доволен, что выбрался и поиграл. Особенно с учетом того, что на следующей неделе такой возможности не будет.
А сегодня одержал очень необычную победу в «Колонизаторах» онлайн: не построил ни одного города, только пять поселений, а остальные очки добрал за дорогу, за армию и за карту развития. Причем победил с большим отрывом: у остальных игроков было по 6-7 очков только.
И, надо сказать, не зря. Сыграл очень удачно: два из трех раз выиграл в «японский бенг» aka «Меч самурая». Причем первый раз — за играл за ронина. Сначала я играл не особо активно, периодически атаковал сегуна, но не особо результативно. В итоге у меня было два жетона чести Потом Ал.С. поверила, что я — ниндзя и решила разыграть так: она атаковала Dexterа (он играл за самурая) так, что у него оставался всего один жетон стойкости, и предполагала, что я на своем ходу его добью, а дальше добил Liu Art, у которой оставалось два жетона стойкости и один жетон чести. В результате игра закончилась, а у меня оказалось четыре жетона. У ронина при игре впятером они умножаются на два, и в итоге я выиграл.
Второй раз я опять же играл не слишком результативно. Я был ниндзей, Ал.С. — сегуном, и она постоянно атаковала меня из-за прошлой игры. В результате до конца я дошел всего с двумя жетонами, но зато припрятал карту дайме, а второй ниндзя (им был Dexter) набрал аж пять жетонов. И мы снова победили с 8 очками.
Третий раз мы с Liu Art были ниндзя и проиграли: противникам пришло слишком уж много карт защит и доспехов, и я просто ничего не мог сделать, несмотря на кучу карт хладнокровия. А у Liu Art, наоборот, была атака любой дальности, но было мало оружия и этих самых карт хладнокровия. Все-таки в «японском бенге» слишком многое решает случайность. А потом, когда до закрытия заведения осталось полчаса, решили сыграть в другую игру — «Зомби». Она более быстрая и гораздо более простая. Получилось так: Dexter активно обращал всех в зомби, и в конце остались мы с ним вдвоем. Но зомби в этой игре, хоть выиграть не могут, но могут помешать другим, чем Ал.С., К.Ш. и Liu Art и воспользовались. И совместными усилиями мы его и победили.
В общем, очень доволен, что выбрался и поиграл. Особенно с учетом того, что на следующей неделе такой возможности не будет.
А сегодня одержал очень необычную победу в «Колонизаторах» онлайн: не построил ни одного города, только пять поселений, а остальные очки добрал за дорогу, за армию и за карту развития. Причем победил с большим отрывом: у остальных игроков было по 6-7 очков только.
Еще немного о Пути
Никогда нельзя предсказать, куда выведет Сетевой путь. Пару дней назад с подачи сэра Мика стал изучать возможность поездки в Коломну где-нибудь в августе. Рассматривая карту, обнаружил, что от станции Голутвин отходит железнодорожная линия до города Озеры. Заинтересовался, действует ли она еще. Стал искать информацию, нашел пару старых ЖЖ с фотографиями, сделанными на этой линии и впечатлениями о прогулках вдоль нее. А там в комментариях наткнулся на осколок Старого Доброго Интернета — сайт, на котором автор выложил свою повесть «Бусидо междупутья» и несколько рассказов на железнодорожную тематику. Не знаю почему, но решил прочитать, и очень впечатлило: не так часто встречаются авторы, которые могут сочетать живой и образный язык и динамичное развитие сюжета с большим количеством технических подробностей. Особенно понравилась третья часть повести, где поднимаются вопросы о том, что значит не допускать расчеловечивания, быть настоящим человеком (или, в моей терминологии, не скатываться в обывательство). Отчасти они сильно перекрываются с моими размышлениями, но с одной существенной разницей: у главного героя повести все же был четкий ответ, что и зачем он делает и почему поступает именно так. А я уже сколько времени задаюсь вопросом: что же из того, за что я пытаюсь взяться, окажется значимым для Вечности?
Непростая прогулка вдоль Яузы
Пару дней назад Tella предложила снова куда-нибудь сходить на прогулку. Но куда конкретно — идей не было. И тут я вспомнил, что когда-то давно собирался сходить вдоль Яузы в ее нижнем течении. Впервые идея сходить туда возникла года два назад, когда мне приснилось, что я туда пошел, и после этого я осознал, что в этой части города практически не был (кроме Лефортовского парка). Я решил, что настало время это исправить, и мы наметили прогулку на сегодня.
Но увы, с самого начала дня все пошло не так. Во-первых, я с большим трудом проснулся и чувствовал очень сильный спад энергии. Во-вторых, пока добирался, и на светофоре, и в метро подходил в самый неподходящий момент: к моменту переключения на красный/отправления поезда (причем в метро — оба раза). Видимо, высшие силы давали мне подсказку «не ходи туда», но я остался глух (тем более в ситуации, когда иду не один, а с кем-то, пересмотреть решение в разы сложнее). Прогулка началась вполне нормально. Мы шли, разговаривали, Tella только ругалась по поводу того, что набережная местами весьма грязная, да и река — тоже. В целом Яуза течет по не самым интересным местам. Пожалуй, единственное, что видели интересного — это шлюз на набережной Туполева, разлив реки за ним, пару церквей и парк с фонтанами на противоположной стороне. Так мы дошагали до пешеходного Салтыковского моста. Сделали несколько фотографий с него и допустили самую главную ошибку сегодняшнего дня: не стали переходить на другую сторону, а просто пошли дальше. Дошли до Новолефортовского моста, по которому проходит Третье транспортное кольцо. Там у меня возникли сомнения, а есть ли за этим мостом проход. Я даже хотел было перейти набережную и идти по ее дальней от реки стороне, но увы, пешеходного перехода там не было. Когда обошли мост, обнаружилось, что проход имеется, причем не просто проход, а вполне нормальная заасфальтированная набережная. Мы пошли дальше и выбрались к Лефортовскому мосту, который и планировался конечной целью нашей прогулки. И тут оказалось, что подняться на него оттуда где мы шли, просто нет возможности! Разве что карабкаться по крутому и совершенно неприспособленному склону между рекой и наземной частью ТТК с последующим перелезанием через перила. С другой стороны моста было то же самое: отсутствие перехода и спуска с моста. Мы оказались в ловушке, из которой виделось два выхода. Один заключался в том, чтобы прошагать более чем полкилометра назад, перейти дорогу там. Вторым, как мне казалось, был узкий проход между въездом в тоннель ТТК и рекой. И тут сказалось мое неумение признавать потери (пройденный лишний километр) и поворачивать назад. Поэтому я выбрал второй путь. Увы, глядя издалека я недооценил, насколько это узкий проход. Даже я протискивался с трудом и в конце концов пошел боком. К тому же кое-где торчали какие-то железки, и нужно было следить, чтобы за них не зацепиться. Впрочем, сначала идти было вполне приемлемо. Но мы поднимались вверх, а дорога уходила вниз, в тоннель, а ограждение со стороны тоннеля было очень и очень невысоким. И в какой-то момент, глядя на яму глубиной в несколько метров слева от себя, из которой почти непрерывным потоком на большой скорости неслись машины, я реально запаниковал — включился мой извечный страх высоты. Вцепился руками в ограждение со стороны реки и какое-то время непрерывно смотрел на воду, чтобы успокоиться. Сзади ругалась Tella на то, что я потащил ее по таким местам, но в шуме машин я с трудом понимал, что она говорит. Дальше — хуже: когда подобрались почти до самого верха, мне показалось, что там впереди — забор с сеткой, и мы забрались на эту высоту зря. И таки он и правда там когда-то был, но сетку выбили (или проржавела и вывались сама), от него осталась лишь одна верхняя перекладина. И вот, наконец-то последние метры: дорожка расширяется, затем тоннель остается позади! Мы пролезаем под перекладиной и можем спокойно идти вдоль реки! Впрочем, и там перехода через набережную не было и там, так и тащились до следующего моста — Госпитального.
И вот тут до меня задним числом дошло, как мы рисковали, и начался, что называется, отходняк. Голова соображала с трудом, даже путь до Бауманской нормально просчитать не мог. В итоге мы нашли какое-то заведение типа ресторана, гордо именуемое корчмой, засели там, и просидели часа, наверное, полтора, и после этого отправились по домам. Но зато я теперь знаю, почему прогулки вдоль Яузы совершенно не пользуются популярностью!
Но увы, с самого начала дня все пошло не так. Во-первых, я с большим трудом проснулся и чувствовал очень сильный спад энергии. Во-вторых, пока добирался, и на светофоре, и в метро подходил в самый неподходящий момент: к моменту переключения на красный/отправления поезда (причем в метро — оба раза). Видимо, высшие силы давали мне подсказку «не ходи туда», но я остался глух (тем более в ситуации, когда иду не один, а с кем-то, пересмотреть решение в разы сложнее). Прогулка началась вполне нормально. Мы шли, разговаривали, Tella только ругалась по поводу того, что набережная местами весьма грязная, да и река — тоже. В целом Яуза течет по не самым интересным местам. Пожалуй, единственное, что видели интересного — это шлюз на набережной Туполева, разлив реки за ним, пару церквей и парк с фонтанами на противоположной стороне. Так мы дошагали до пешеходного Салтыковского моста. Сделали несколько фотографий с него и допустили самую главную ошибку сегодняшнего дня: не стали переходить на другую сторону, а просто пошли дальше. Дошли до Новолефортовского моста, по которому проходит Третье транспортное кольцо. Там у меня возникли сомнения, а есть ли за этим мостом проход. Я даже хотел было перейти набережную и идти по ее дальней от реки стороне, но увы, пешеходного перехода там не было. Когда обошли мост, обнаружилось, что проход имеется, причем не просто проход, а вполне нормальная заасфальтированная набережная. Мы пошли дальше и выбрались к Лефортовскому мосту, который и планировался конечной целью нашей прогулки. И тут оказалось, что подняться на него оттуда где мы шли, просто нет возможности! Разве что карабкаться по крутому и совершенно неприспособленному склону между рекой и наземной частью ТТК с последующим перелезанием через перила. С другой стороны моста было то же самое: отсутствие перехода и спуска с моста. Мы оказались в ловушке, из которой виделось два выхода. Один заключался в том, чтобы прошагать более чем полкилометра назад, перейти дорогу там. Вторым, как мне казалось, был узкий проход между въездом в тоннель ТТК и рекой. И тут сказалось мое неумение признавать потери (пройденный лишний километр) и поворачивать назад. Поэтому я выбрал второй путь. Увы, глядя издалека я недооценил, насколько это узкий проход. Даже я протискивался с трудом и в конце концов пошел боком. К тому же кое-где торчали какие-то железки, и нужно было следить, чтобы за них не зацепиться. Впрочем, сначала идти было вполне приемлемо. Но мы поднимались вверх, а дорога уходила вниз, в тоннель, а ограждение со стороны тоннеля было очень и очень невысоким. И в какой-то момент, глядя на яму глубиной в несколько метров слева от себя, из которой почти непрерывным потоком на большой скорости неслись машины, я реально запаниковал — включился мой извечный страх высоты. Вцепился руками в ограждение со стороны реки и какое-то время непрерывно смотрел на воду, чтобы успокоиться. Сзади ругалась Tella на то, что я потащил ее по таким местам, но в шуме машин я с трудом понимал, что она говорит. Дальше — хуже: когда подобрались почти до самого верха, мне показалось, что там впереди — забор с сеткой, и мы забрались на эту высоту зря. И таки он и правда там когда-то был, но сетку выбили (или проржавела и вывались сама), от него осталась лишь одна верхняя перекладина. И вот, наконец-то последние метры: дорожка расширяется, затем тоннель остается позади! Мы пролезаем под перекладиной и можем спокойно идти вдоль реки! Впрочем, и там перехода через набережную не было и там, так и тащились до следующего моста — Госпитального.
И вот тут до меня задним числом дошло, как мы рисковали, и начался, что называется, отходняк. Голова соображала с трудом, даже путь до Бауманской нормально просчитать не мог. В итоге мы нашли какое-то заведение типа ресторана, гордо именуемое корчмой, засели там, и просидели часа, наверное, полтора, и после этого отправились по домам. Но зато я теперь знаю, почему прогулки вдоль Яузы совершенно не пользуются популярностью!
О счастье и ощущении контроля над жизнью
Кажется, я понял, чего мне не хватает для счастья. Ощущения некоторой степени контроля над жизнью. Но не в глобальном плане (я в это все равно не верю, да и не нужно оно мне, ибо противоречит идеологии), а в локальном. Сейчас меня тащит по какой-то накатанной колее, не я управляю своим организмом, а организм — мной. В частности, я не могу встать и пойти/поехать куда-то достаточно рано, даже если хочу этого: мало того, что ранний подъем обернется кучей проблем, так еще на то, чтобы заставить себя поесть в непроснувшемся состоянии, уходит еще куча времени. Не могу лечь спать быстро (между моментом выключения компьютера и отходом ко сну в лучшем случае проходит час, а обычно и больше), не могу взять и сделать что-то быстро и сразу, а не когда придет состояние внутренней готовности (впрочем, последнее — это Бестийность по КЛ в самом чистом ее виде). Например, на то, чтобы собраться исправить мелкий баг с тегом font в моем форумном движке, ушло почти два месяца.
Из этого же следует невозможность жить по плану и заниматься чем-то регулярно. Впрочем, последнее отчасти удается победить в тех случаях, когда нет воздействий извне типа приглашений сходить куда-нибудь или freelance-задач.
Причем вот что интересно: на даче это выражено в гораздо меньшей степени, чем в Городе. Но с чем связана такая разница (кроме ограниченности Интернета, о которой я писал недавно), я все еще не могу понять.
Из этого же следует невозможность жить по плану и заниматься чем-то регулярно. Впрочем, последнее отчасти удается победить в тех случаях, когда нет воздействий извне типа приглашений сходить куда-нибудь или freelance-задач.
Причем вот что интересно: на даче это выражено в гораздо меньшей степени, чем в Городе. Но с чем связана такая разница (кроме ограниченности Интернета, о которой я писал недавно), я все еще не могу понять.
Страницы:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139