Category: it

Category was added automatically. Read all entries about "it".

фотография, 4X_Pro, фото

Долгожданное затишье

Наконец-то жизнь замедлилась до приемлемого уровня, и появилась возможность пожить спокойно. Впрочем, совсем уйти в себя, как это было в 2014 году, не получается. Хотел было заняться написанием «нашего ответа Калинаускасу» по поводу трех этапов жизни для раздела «Мировоззренческое», но так и не сложилось. Зато сделал много другого. Вчера большую часть дня оптимизировал новую версию SiteKnockerBot. Разобрался, как преобразовывать массив байтов в строку без перевыделения памяти, и в итоге добился, что время обработки запроса стало примерно таким же, как в старой. Да и само потребление памяти уменьшилось почти на 30 Мб. Правда, это в версии с отключеной поддержкой GZIP-сжатия ответа серверов.

Еще с подачи ПнБ узнал про IDE под названием CodeLobster. Очень понравилась: есть всё, что мне нужно, и специализирована именно под PHP. Но так и не понял, можно ли использовать её бесплатно больше 30 дней или нет. А также заинтересовался frameworkом под названием Code Igniter. По описанию он мне понравился даже больше, чем Yii, но что-то своё писать пока не пробовал. Возможно, если соберусь делать отдельный движок для децентрализованной соцсети, то буду писать именно на нём.

Сегодня прогулялся немного по территории посёлка, вышел к пруду. Он совершенно зарос, вся поверхность зелёная от ряски. А еще читал «Шестой дозор» (с подачи Kitsune) и прохожу игру Rockman II.
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Первая польза от SiteKnockerBot

Только что впервые наблюдал реальную пользу от новой версии SiteKnockerBot. Внезапно он сообщил о том, что этот мой сайт и сайт IntB перестали быть доступными. Я заглянул на них, обнаружил сообщение об ошибке — не удаётся подключиться к базе. Стал разбираться, в чём дело. Обнаружилось, что упал сервер MySQL из-за нехватки памяти. Перезапустил его, через пару минут ситуация повторилась. После этого заглянул в логи, увидел там кучу запросов с какой-то подсети в Америке. Забанил сразу всю подсеть, и перезапустил MySQL еще раз. Вроде помогло.

Вопрос только в том, что это — DDoS атака против меня или же просто заглючивший спам-бот?
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Переписал SiteKnockerBot на Go

Вчера вечером выполнил еще один пункт из своего списка дел на период загородной жизни: дописал новую версию SiteKnockerBot на языке Go, что позволило выполнять проверки сайтов параллельно. Но закончил весьма поздно, поэтому тестирование на боевом сервере решил отложить на сегодня. Причем, думал, что управлюсь за час-полтора, а остаток дня потрачу на отдых и компьютерные игры. Но увы, я был бы не я, если бы не растянул намеченное дело на всё доступное время. Началось всё с того, что при первом запуске бот просто упал. Причина нашлась довольно быстро: в одной ситуации я поставил defer resp.Close до проверки на то, что нет ошибок. Перекомпилировал, загрузил на сервер, запустил снова. Вроде работает, но то и дело появляются ошибки — невозможно открыть сокет из-за нехватки количества файлов. Пришлось срочно разбираться, как увеличить количество открытых файлов, так как прежде я с этим лимитом никогда не сталкивался. Ещё один запуск: вроде работает, но появляется подозрительно много таймаутов. Уменьшил число goroutines, вроде стало лучше, но опять таймауты есть. Какое-то время пытался играться с числом goroutines и интервалом, через который они порождаются, но увы, таймауты никуда не девались. Пробовал смотреть эти сайты через curl на локальном компьютере — вроде всё нормально, выдаются 301 или 302 редиректы. Думал, что в Go они как-то некорректно обрабатываются, но нет. Разгадка пришла тогда, когда попытался открыть соответствующие адреса в броузере. Оказывается, в таких случаях происходят редиректы на другой адрес, который не отвечает.

И вообще, в базе обнаружилось на удивление много «битых» и подозрительных адресов. Такое ощущение, что чуть ли не четверть пользователей использовало бота для каких-то сайтов-однодневок и подозрительных целей…

После того, как разобрался с таймаутами, снова стал подбирать число goroutines и интервалы. Изначально план был таким: 500 параллельных запросов каждые 150 миллисекунд, что давало 1 миллион проверок за пятиминутный цикл. Но при этом время ответа многих сайтов оказывалось гораздо больше, чем на самом деле. Например, даже 2seconds, где вообще лежит статичная страница, открывался чуть больше 1 секунды. Я стал пытаться уменьшить интервалы до 20—30 мс, уменьшив также и количество параллельных запросов, но увы, либо это не помогало, либо приходилось ставить такие значения, что число проверок за цикл получалось бы равным 200—300 тыс, а не миллиону, как я задумывал изначально. В итоге уже почти смирился с тем, что придётся тремястами тысячами и ограничиться. Но потом решил пойти на крайние меры: интервал между запросами снизил всего до 6 мс, а их число — до 10. Сделав это, я обнаружил, что время снизилось до почти приемлемого: тот же 2seconds загружается за 400 мс, а в среднем время ответа менее на 100 мс больше, чем на старой версии бота. Но увы, даже так получается всего полмиллиона запросов за цикл.

На этом я и решил остановиться. Потом еще какое-то время провозился с настройкой systemd. Почему-то из командной строки новый бот запускался нормально, а через него — нет. Вскоре выяснилось, что systemd запускает старую версию бота, не видя изменений в unit-файле. Так до конца и не понял, почему, но в итоге добился нормальной работы. Потом стал искать, нельзя ли как-то оптимизировать работу HTTP-клиента в Go, наткнулся на проект fasthttp, где обещают гораздо более высокую скорость запросов. Но увы, переписывать бота ещё раз уже нет ресурса — выгорел полностью.

Но в любом случае, я впервые написал что-то достаточно серьёзное и законченное на относительно новом для себя языке — Go. До этого я использовал его только для решения задач на CodinGame, и то очень мало. Впечатления остались очень противоречивые. Понравилась лёгкость распараллеливания, легкость компиляции под другую архитектуру (я сначала собирал бота под x86, забыв, что у меня и на втором VDS стоит 64-битная OS) и то, что он делает полностью статичные бинарники бе всяких so. Правда, у этого есть и обратная сторона: большая прожорливость памяти. PHP-шная версия бота занимала вроде около 30 Мб, а новая — 65, а когда параллельных запросов было больше, то и все 110. Но что реально не нравится, так это использование всяких Readers/Writers для работы с HTTP-ответом (и не только с ним, они там на каждом шагу используются). Ну почему его нельзя получить просто в строку/массив байтов, как в PHP или JavaScript? Зачем эти лишние (и труднодоступные для понимания) сущности? (И тут я подумал, что надо было вообще использовать node.js, а не Go.)

А еще завершение бота — это ещё один выполненный пункт моего списка дел. Причем восьмой из шестнадцати — ровно половина сделана. Хех, как всегда, живу в 3—4 раза медленнее: планировал сделать 16 пунктов за месяц, сделал половину почти за два. Но, пожалуй, теперь стоит устроить несколько дней отдыха, чтобы прийти в себя после всего этого!
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

День солнцестояния

Сегодня был весьма необычный день: солнцестояние совпало с солнечным затмением. Обычно в дни солнцестояния я пишу о том, что лучшая часть года позади, но в этот раз, пожалуй, воздержусь. А то ведь так и будет… Впрочем, один плюс у этого года всё же есть: я сделал то, что хотел сделать давно — прожил на даче безвылазно с мая до солнцестояния. И ещё неизвестно сколько буду тут сидеть… DarLik так и вовсе предлагает до самых холодов.

Затмения от нас не было видно, но его влияние всё равно чувствуется. И у меня голова соображает плохо, а днём еще была непонятная раздражительнось, и многих знакомых глючит. Сегодня большая часть дня ушла на то, чтобы понять, почему в Go не работает обращение к базе данных не из главной goroutine, а из дополнительных. Только уже ночью нашёл, что завершение главной goroutine приводит к завершению приложения целиком, и остальные goroutines просто не успевают отработать. Впрочем, даже узнав это, проблему решил не сразу: забыл, что у меня в отладочных целях в середине main стоит return, а я пытался добавлять код в конец.

Ещё выбрался на прогулку к ближайшему водоёму, а потом вдоль Клязьмы. В целом прогулкой доволен, но каких-либо сильных впечатлений не осталось. А вечером была очень глючная игра в «Колонизаторов»: 6-ки выпадали реже, чем 9, 10 и 11! В итоге выиграл оранжевый игрок, у которого начальная расстановка была такая, что я думал, что он вообще на последнем месте останется. Но хотя он выигрывал с середины игры, почему-то против меня активно играл красный, часто блокируя мне 8-ку разбойником. В итоге за всю игру я недополучил чуть ли не десять карт ресурсов, что тоже сказалось на результате (я в итоге был вторым).


Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Дополнение для Chrome и прогулка после дождя

С тех пор, как я переехал за город, прошло уже больше месяца. Кажется, что заезд был очень-очень давно, а жизнь до эпидемии — вообще каким-то сном. Но увы, перестроиться на дачный режим жизни не получается. Видимо, дело не в том, где я нахожусь, а чем занимаюсь. Раньше, приехав на дачу, особенно весной, я выбирался и гулять, и кататься на велосипеде, а когда оставался дома, значительную часть времени проводил в оффлайновом режиме. В этот же раз всё не так.

Впрочем, в начале недели был момент, когда вроде бы начал выравнивать режим дня. Но увы, во вторник снова «сорвался», хоть и отключил Интернет рано вечером, всё равно засиделся до 5 утра, перечитыая «Драму на Ниобее» Сергея Снегова. (Хех, вот она, непредсказуемость потока жизни, которым меня вечно сносит: утром получил рассылку ЖЖ, в одном из комментариев упоминался этот автор, я решил поискать его в своем книжном архиве, и вот и результат…)

В среду проснулся поздно и был весьма недоволен этим фактом. Да и вообще, всё раздражало. По-прежнему было ощущение жуткой нехватки времени и увязания в болоте жизни: не было прогресса по своим задачам, во вторник накидали всякой фигни по freelance, да и погода сказывалась. К тому времени уже несколько дней подряд дожди шли почти непрерывно. У нас даже на участке начали грибы расти в огромных количествах, жаль только, что несъедобные. Вышел ненадолго в Сеть проверить сайты и глянуть обстановку на рынке. И вдруг понял, что всё раздражает. Решил отключить связь, и большую часть дня провёл в оффлайне. Удивительно, но это помогло: понемногу стало возвращаться ощущение внутренней целостности.

Увы, бессознательное сыграло со мной злую шутку. Оно полностью вытеснило то, что я пообещал Tellе выйти на связь в 22 часа (если бы не логи, которые могут врать, я бы и не поверил, что это было). Она кинула SMS, но её я тоже не увидел. И только где-то через час с небольшим, когда она прислала вторую, я вышел на связь. За это время она успела сильно «разогнаться» эмоционально, и ушло много времени на то, чтобы её успокоить.

Потом снова ушёл в оффлайн, поиграл немного в Ultima IX, завершил один из самых глючных побочных квестов. И наступил момент, когда все известные мне квесты выполнены, и главному герою приходит время отправляться в последний путь (в буквальном смысле этого слова) на остров Терфин. На этом я вышел из игры и уже подумывал было пойти спать, но тут случилось непредвиденное. Пока я днем сидел в оффлайне, у меня в голове снова возникала мысль о том, что хорошо бы сделать расширение для броузера, которое выделяло бы пользователей ВК с закрытым профилем. И вот в голове сложилась целостная картина, как это должно быть сделано.

Как писать расширения, я помнил очень смутно, поэтому для начала ограничился скриптом, который вставлял через консоль. Но на JavaScript я пишу мало и редко, поэтому долго провозился с отладкой. Причем большинство ошибок оказывались довольно глупыми. Самая частая, например, — это забыть об элементе верхнего уровня в присланном ответе, если он всего один, а пытаться сразу залезть в элемент следующего уровня. Из-за этого засиделся до 6 утра, а потом, когда всё заработало, еще не сразу мог уснуть из-за эмоционального подъема, который это вызвало.

Тем не менее, на следующий день проснулся даже раньше 12 часов. Естественно, состояние и работоспособность при этом были далеки от идеальных. Но тем не менее, я сел теперь уже за написание полноценного расширения. Сначала всё шло вроде бы хорошо: просто написал manifest.json, в котором прописал подключение уже написанного кода в качестве content script, сделал значки разных размеров и написал описание. Но затем решил немного всё облагородить, если так можно выразиться — вынести оформление выделенного пользователя в отдельный CSS-файл, учесть лимиты обращений к VK API, динамическую догрузку контента, сделать описание на русском и английском и т.п. Но со всем этим провозился еще несколько часов. В частности, очень надолго застрял при выносе стилей в CSS по очень глупой причине: забыл убрать кавычки вокруг значения свойства border. Из-за этого скрипт отрабатывал как надо, класс применялся, но внешне аватар пользователя никак не менялся. А из-за недосыпа была снижена внимательность, и долго не мог этого увидеть, ломая голову, что же идёт не так.

Настал момент, когда вроде бы всё заработало. Я решил отдохнуть и немного прогуляться по поселку, воспользовавшись тем, что в четверг потеплело. К этому времени как раз дождь кончился, и я отправился в путь. Идея гулять сразу после дождя оказалась очень удачной! Воздух был очень чист и прозрачен, на дороге оставалось еще много луж, в которых можно было рассматривать отражения облаков и деревьев, а на траве и кустах сирени — капли дождя. Я взял с собой фотоаппарат и отснял серию фотографий, которую так и назвал — «После дождя». Правда, выложил пока только в Instagram, где фото очень сильно уменьшаются и теряют в качестве. Но даже в таком виде фотографии очень понравились Tellе и goblincat.

Вечером вновь вернулся к работе над расширением. Стал готовить приложение к публикации, упаковал в CRX-файл. И тут меня ждала еще одна неожиданность. В какой-то момент регистрация в качестве разработчика на Chrome Store стала платной! Из-за этого пришлось отказаться от планов выложить расширение туда. К счастью, еще не всё прогнило в этом мире, и в аналогичном сервисе Opera можно выкладывать бесплатно. Но увы, у Opera пользователей гораздо меньше… Также решил выложить исходный код на GitHub. Но и тут без напрасных потерь времени не обошлось. При создании репозитория не указал, что не нужно его инициализировать файлами README и лицензией. Из-за этого никак не получалось синхронизировать его с локальным git-репозиторием. Так и пришлось удалить и создать заново пустой, и только после этого git push сработал.

Но тут меня ждала другая неприятность. Около полуночи расширение вдруг перестало работать, сначала в Opera, а потом и в Chrome. Стало выдавать ошибку, что fetch-запрос заблокирован. Писалось что-то про CORS. Я попытался было экспериментировать с режимами запроса или искать решение в Интернете, но к тому времени уже сильно хотелось спать и голова не соображала. На следующий день решение всё же нашлось. Оказалось, что совсем недавно произошло очередное ужесточение требований к безопасности: теперь из content-скриптов нельзя делать fetch-запросы вообще. Нужно выносить их в background worker. К счастью, там, где я это вычитал, приводился пример кода, который я смог быстро адаптировать для своих нужд. И вот, через несколько попыток расширение снова стало работать! Обрадовавшись, я побежал его пересобирать и выкладывать в Opera Addons. Но увы, попользовавшись им еще немного, обнаружил еще одну ошибку. Почему-то в списке участников группы оно правильно выделяло приватных пользователей только при первом заходе туда, а потом всё слетало. Ещё час, если не больше, я ломал над этим мозг. Потом причина ошибки обнаружилась: не вызывалась функция, отвечающая за само выделение аватаров, в том случае, если на странице добавлялись новые изменения в DOM-дереве, но не появлялось новых пользователей. Причем об этой ошибке я думал ещё вчера днём, хотел её исправить, но что-то отвлекло, а потом вылетело из головы. Снова пересборка crx-файла, снова выкладывание для Opera. И тут я захожу в чат и обнаруживаю, что пользователи не выделяются там. К счастью, этот вопрос решился быстро, но даже тут я не смог не сделать глупой ошибки: сначала для одного из классов забыл точку в селекторе. И вот только после этого я смог сказать «ну всё, вроде работает».

Так что сегодня у меня новый, совершенно внеплановый пуск! А еще это небольшая дополнительная опора личности (причем даже не само расширение как еще один пункт в списке моих проектов, а именно само знание, как их создавать). Ну и конечно же, избавление от того, что давно меня раздражало — заходить в чей-то профиль, и натыкаться на сообщение, что он закрыт.

Еще была мысль написать статью на Хабр, где подробно расписать весь процесс разработки и проблемы, которые я решал в процессе. Но ресурса на это уже нет: весь интерес к задаче выгорел еще сегодня утром, когда я решил проблему с CORS. Остальное доделывал уже на упорстве и принуждении себя. Эх, «проклятье трёх дней» по-прежнему действует…

А еще сегодня было лунное затмение. Увы, узнал о нём слишком поздно, и увидеть его не удалось. Зато ночью просто ненадолго вышел из дома и посмотрел на Луну и звёзды, послушал соловья. Это немного успокоило и стабилизировало эмоциональное состояние. Но быстро замёрз и вынужден был вернуться обратно.
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

День доделки дел

Сегодня получился какой-то день доделки дел. Во-первых, внезапно вчера ночью собрался и сделал поддержку reCAPTCHA для Intellect Board, а сегодня её оттестировал и выложил, во-вторых, закончил одну доделку по freelance-деятельности. И в-третьих, более-менее дописал 10-ую часть своей биографии, но пока не выкладывал (выложу вместе с 11-ой). В общем, всё то, что откладывал чуть ли не с начала переезда за город.
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Жизнь налаживается, но всё равно ничего не успеваю

Где-то со вторника жизнь вроде бы начала налаживаться. По крайней мере, голова снова стала нормально соображать. Видимо, дело было в биоритмическом спаде по интеллектуальной и эмоциональной составляющим. Но всё равно, раньше я был уверен, что способен выдержать «автономное плавание» без выхода на улицу как минимум полгода, а тут вдруг оказалось, что это не совсем так.

Вчера наконец-то дочитал «Эгоистичный ген» Докинза. Пожалуй, самое полезное, что оттуда вынес — понятие эволюционно-стабильной стратегии, которая позволяет объяснить того, почему все люди одновременно не могут быть «хорошими» или «плохими» (причем вне зависимости от того, какой конкретно смысл мы вкладываем в эти понятия), в частности, почему невозможен «заговор MGTOW», т.е. договоренность всех мужчин не тратить ресурсы на женщин, а взаимодействовать с ними только на условиях полного имущественного равенства. Впрочем, многое из этого я уже читал в «Моральном животном» Р. Райта.

Еще обновил на дачном ноутбуке систему до Lubuntu 18.04. Как выяснилось, уже даже вышла версия 20.04, но обновления до неё будут возможны то ли в июне, то ли июле. Была так же мысль не возиться с обновлениями (сначала они отказывались ставиться, потом выяснилось, что это из-за одного недообновленного пакета), а скопировать Mint с основного ноутбука. Но там у меня ядро самосборное конкретно под его железо, и запустится ли оно на новом — большой вопрос. (Вот она, обратная сторона custom kernels!). Впрочем, даже если бы и запустилось, всё равно пришлось бы пересобирать.

Еще реализовал одну идею по защите от спама, сначала на Типаче, потом перенес в текующую версию IntB, а сегодня (вернее, это уже вчера) — и на TextCMS. Заодно прошёлся по её официальному сайту и немного обновил его. Эх, всё же всему нужно внимание, без него оно глохнет и чахнет, а внимания на всё не хватает.

Также наконец-то продвинулся в Ultima IX. Там я застрял во Wrongе, и больше недели не мог понять, как открыть одну дверь, хотя облазил буквально всё. А потом загрузил более старое сохранение, прошёл сначала Minoc, а потом, когда стал проходить Wrong еще раз, дверь открылась сразу же. Видимо, игру сглючило в очередной раз…

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

К тому же, несмотря на всё перечисленное, опять вернулось это противное ощущение «ничего не успеваю». Так, например, сегодня не успел поиграть всё в ту же Ultima IX и посмотреть очередную неделю из курса по JavaScript. А это сообщение хотел написать ещё днём, но смог закончить только сейчас, засидевшись до утра. Впрочем, в последнее время у меня с режимом дня неизвестно что творится: позавчера проспал чуть больше четырех часов, вчера — целых 12.
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Внезапно жизнь начала налаживаться

Вчера вдруг жизнь начала налаживаться. Причем было так: ночью с позавчера на вчера присутствовало беспричинное раздражение на всё. Решил было устроить виртуальную прогулку по Яндекс.Панорамам. Но вроде бы не помогло. Потом попытался лечь спать, но к этому времени уже было около 6 утра, и заснуть не получалось. Полежав некоторое время, решил «ну и ладно», раздвинул шторы, впустил солнце в комнату. Потом взял планшет и стал читать одну книжку, которую давным-давно, ещё осенью, посоветовала Kistune. И в итоге где-то через час ушло раздражение, пришёл внутренний покой и какая-то легкость, если так можно выразиться.

Потом всё же заснул. Проснулся поздно, в результате чего день прошёл довольно бестолково, но наконец-то стал спокойным и перестал раздражаться на всё. К тому же впервые за последние дни глянул в Яндекс.Метрику и обнаружил хорошие новости: несколько дней назад на TYPTEST.RU был скачок посещаемости до 505 посетителей. Потом, правда, пошло на спад. Еще узнал, что Яндекс ввёл индикатор скорости загрузки сайта. Правда, почему-то он показывается сейчас только для TypTest.Ru и равен 3 из 5, что как-то на удивление мало (хотя сайт работает на TextCMS, без баз данных, и тормозить там просто нечему). Видимо, основным замедлителем является реклама.

Еще за последние дни посмотрел несколько обучающих видео. Во-первых, на Hexlet бегло просмотрел курс про логику и, спустя 20 лет, в очередной раз «исправил прошлое» — понял один момент, который упустил в Институте, и из-за которого мне тогда совершенно не давался раздел математическая логика в курсе ДМ. Во-вторых, посмотрел видео про Svelte и Sapper, но от него пользы вынес мало, так как оно ориентировано было на тех, кто знаком с React, и многое рассказывалось слишком бегло и на примере уже готового проекта, а не создаваемого на ходу. А еще начал проходить курс по продвинутому JavaScript на Coursera.

Также осознал еще один плюс самоизоляции: вроде бы выбрался из постоянного болтания в полузаболевшем состоянии из-за того, что не мерзну на улице и слежу дома за тем, чтобы не было сквозняков.
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Есть PostgreSQL в IntB!

В ночь со вторника на среду всё же собрался и доделал поддержку PostgeSQL в IntB. Со скрипом и скрежетом, но всё-таки теперь IntB работает на Postgres! Да и с поддержкой SQLite теперь, по идее, будет проще. Да и вообще, PostgreSQL мне всё больше нравится...

Единственная проблема, которую осталось решить — это как автоматизировать преобразование начального дампа, которым создается структура базы на этапе установки. В свое время писал про модуль Sqlt для Perl, который вроде бы умеет это делать, но, как выяснилось, очень криво. Во-первых, удаляет из дампа все INSERT-запросы, и приходится возвращать их вручную. Но это можно решить выносом их в отдельный файл, который будет общим для всех СУБД. Ещё есть мысль делать дамп в формат XML, и написать скрипт, который будет сравнивать структуру в дампе и реальной базе, и приводить в соответствие. Но это создаст дополнительное требование к хостингу: наличие SimpleXML, что не есть хорошо...

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

Ещё с подачи Ар.В. попробовал новую игру — Farmassone — чуть-чуть переделанную версию Каркассона. И, надо сказать, очень даже понравилось!
Репост с сайта 4xpro.ru.
фотография, 4X_Pro, фото

Прекрасный рассвет и день отдыха

Вчера ненадолго заснул около полуночи, после чего случился приступ бессонницы. Часов до 6 занимался переводом IntB на PostgreSQL. В итоге удалось вывести главную страницу и еще несколько служебных, но затем застрял на получении last_insert_id (уже сегодня выяснилось, это делается через SELECT lastval(), а не через pg_last_oid, как я пытался изначально).

Потом попытался лечь спать, но заснуть не мог совершенно. Поворочавшись где-то час, решил встать. Раздвинул шторы на окнах и увидел, что за окном потрясающее зимнее утро! Свет заполнил всю комнату, даже те части, куда не достаёт обычно, и сразу всё показалось совсем иным, чем обычно. Пришло какое-то внутреннее спокойствие, и ощущение, что в итоге всё будет хорошо. Давно такого не было…

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

А еще устроил себе день полуоффлайна: почти не заходил ВК, да и Telegram держал выключенным. Перепрошёл игру Rockman 4 полностью, и как всегда это вернуло мне ощущение спокойствия и внутренней гармонии, побегал на дорожке, почитал книгу. В общем, вспомнилась старая шутка про то, в каких случаях возникают положительные эмоции.

Вечером снова занялся доделками IntB. И есть очередное продвижение: удалось зарегистрировать пользователя, зайти в админку и создать раздел. Так что еще немного, и IntB будет полноценно работать на Postgres!
Репост с сайта 4xpro.ru.