Портрет 4X_Pro
Был в Сети 29 апр. 2024 г., 01:19
Мультиблог
4X_Pro
Кратко о себе: Web-разработчик. Пишу на PHP, Python, JavaScript. Знаю Ruby и Go, со студенческих времён более-менее помню C и asm. Сейчас специализируюсь на ускорении загрузки сайтов и разработке ботов для Telegram. Linuxоид (использую Debian+LXDE). Сторонник IndieWeb.

Социальные сети


Новости сайта в Telegram

t.me/4x_pro

Лог жизни

Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.


Пробую силы на фондовом рынке

4X_Pro
Где-то около месяца назад решил попробовать свои силы на фондовом рынке. И вчера получил первые дивиденды по акциям, правда, очень небольшие. А сегодня после четырех недель убытков вышел в плюс на 0.75% от стартового капитала. Впрочем, все это с учетом того, что в начале октября рынок ощутимо просел (эх, пришел бы я туда недели на две позже, можно было бы закупиться по низким ценам, но кто же знал), а потом я вляпался в акции Яндекса, НЛМК и Магнита, которые упали на 10% (впрочем, Яндекс сейчас вроде вылезает). Причем с Яндексом было так: за день до его резкого падения я ушел по его акциям в небольшой плюс, и даже хотел было их продать, но передумал, решив «пусть еще подрастет». А потом случилось то, что случилось.
Но вообще, по сравнению с Forex, на фондовом рынке в разы все проще из-за отсутствия торгового плеча. Даже если что-то падает, то это не вызывает паники, а просто воспринимается как неприятность, которую нужно переждать.

Доработки на ходу — путь к багам

4X_Pro
В очередной раз убедился, что доработки на ходу — путь к багам. В идеале код должен писаться раз и навсегда, и потом, после завершения начального тестирования и отладки, никогда не редактироваться, и только полностью переписываться лет через 10—15, когда окончательно устареет морально.
В частности, некоторое время назад в целях повышения защиты от CSRF-атак в IntB добавил проверку, что authkey обязательно должен быть в форме отправки сообщения. Но не учел, что при отправке через стандартные действия его генерация уже прописана, а вот для ситуаций, когда форма находится еще где-то, например, непосредственно в разделе микроблога или раздела «Анонимные вопросы» — нет. Но если с микроблогом я разобрался достаточно быстро (попытался добавить сообщение, словил ошибку, и сразу же поправил), то в раздел «Вопросы» заглядываю редко и уж тем более сам там темы не создаю. Поэтому прошло где-то два месяца, прежде чем я задумался над вопросом «а чего вдруг мне туда спам перестал приходить», и решил протестировать, нормально ли работает отправка. Оказалось, что нет. Потребовалась всего пара минут, чтобы ее исправить, но кто знает, сколько сообщений было упущено за это время…

Прогулка в Измайловский парк

4X_Pro
Вчера решил отправиться на прогулку в Измайловский парк — «поднимать серотонин». Тем более впервые за последнее время выдался по-настоящему солнечный день, и такое нельзя было упустить.
Сначала я отправился к Красному пруду через лес. Лес уже почти весь облетел, деревья стоят голые. Я вышел к дальней части Красного пруда, где есть птичья кормушка. Возле нее было много синиц и несколько поползней. Я пытался сфотографировать поползня, но увы, получилось не очень, а потом его спугнули, и он улетел. Затем я прошелся по дальнему берегу Красного пруда, сделал несколько фотографий. Но увы, как всегда, вышел на прогулку позже, чем хотел, поэтому солнце уже клонилось к закату, и снимать было трудно: получалось не совсем то, что я хотел. Затем дошагал до Второго Декоративного пруда. Возле него увидел еще какую-то неизвестную мне птичку, маленькую и серо-белую. Скорее всего, какая-то более редкая разновидность синиц. Потом посидел возле Третьего Декоративного, сфотографировал ивы, спустился к мосту над Серебрянкой возле впадения Красного ручья, и отправился домой. И хотя изначально от прогулки не ожидал каких-то особых впечатлений (так как думал «ну что я в Измайловском парке не видел»), в итоге остался очень доволен тем, что выбрался: ощутимо улучшилось настроение.

Впечатления об интенсиве

4X_Pro
Вчера все же собрался и досмотрел интенсив по нейрософии. Процесс шел очень тяжело и медленно, так как скорость подачи информации очень уж низкая, а последние полчаса — это просто открытая реклама большого курса. Все то же самое можно было бы легко изложить за час, если не ориентироваться на совсем уж тупых. (Эх, умел бы я связно что-то рассказывать в монологовом режиме перед камерой, можно было бы совместить эту информацию с двумя уровням амбициозности и проверкой желаний на истинность и соответствие миссии, и сделать свой курс.)
Еще удивило то, что автор утверждает, что постоянно высокий дофамин — это безусловно круто, и совершенно не учитывает то, что на самом деле дофамин выделяется при преследовании цели, предвкушении результата, а при ее достижении на смену дофамину должны приходить серотонин, и, если результат дает признание, окситоцин. Более того, в Интернете мы живем в условиях, когда вот этого ощущения достижения, завершенности не приходит, потому что количество не сделанного, не прочитанного, не посмотренного всегда оказывается больше, чем сделанного. И из-за этого постоянно высокого уровня дофамина наступает снижение чувствительности дофаминовых рецепторов, что и приводит к падению мотивации (кому интересно, можно поискать материалы про «дофаминовый детокс»).
Тем не менее, кое-что полезное я для себя все же вынес. Во-первых, это идея разрывания «кортизоловых цепочек», правда, конкретных рекомендаций, как это делать, там явно маловато. Во-вторых, осознал, что у меня явно не хватает серотонина, и в целом даже понял, почему. В-третьих, то, что именно при низком уровне серотонина падает уровень самоконтроля и автоматические реакции берут верх (в частности, мое то самое неосознанное переключение на что-то другое в те моменты, когда я сталкиваюсь с ситуацией «не знаю, как подойти к решению этой задачи»). В общем, наверное, именно с повышения серотонина и нужно начинать преодоление «эффекта Матфея».
В-четвертых, узнал о такой структуре мозга, как ретикулярная формация. Именно в ней происходит то, что я когда-то назвал Фильтрацией в информионике, да и «настройки» социотипа тоже спрятаны, скорее всего, именно там.

Очередные субботние игры

4X_Pro
В субботу в очередной раз выбрался на настольные игры в Goldfish. Но встреча чуть было не отменилась: в чате была какая-то просто подозрительно низкая активность, тех, кто указал, что обязательно придет, оказалось всего четыре человека. А когда я спросил, кто во сколько будет в GF, сначала никто не отозвался, и я уже подумал, что никто и не поедет. И даже сам решил остаться дома. Но через некоторое время на связь вышла Д.П. (увы, Сетевого имени у нее нет), которая тоже опасалась, что никого не будет, и придется сидеть одной. Мы договорились встретиться в метро в 19 часов. Узнав об этом, к нам решила присоединиться Liu Art, а потом внезапно решила приехать Tella.
Но увы, Д.П. опоздала на 15 минут, Liu Art об этом не предупредила, а та пришла в заведение, где тоже никого не было, и администраторша уже собиралась было идти домой, заявив Liu, что заведение сегодня не работает, но как раз к этому моменту пришли мы, а минут через пять подъехала Tella.
Стали определяться, во что играть, но процесс шел долго и тяжело. Хотели в Каркассон, но найти классическую версию без дополнений не удалось. Д.П. оказалась любительницей объяснялок, прозвучало даже страшное для меня слово Имаджинариум, но, к счастью, Д.П. и Lui Art — 2В по психософии, и увидев мою реакцию, они от этой идеи отказались. В итоге удалось уговорить всех на «Шакала». Увы, не учел я того, что никто, кроме меня в него не играл прежде, и пришлось рассказывать правила. Задача эта для меня, как всегда, оказалась непростой, но в целом вроде все всё поняли.
В начале игры в лидеры вырвалась Tella, у которой прямо рядом со стартом оказалось несколько сундуков, а следом за ней шла Д.П. Liu Art отправилась в центр карты, а я бродил вдоль своего берега, где только к середине игры смог найти пару сундуков. Потом Д.П. стащила несколько монет из сундука, найденного Liu в центре карты, а я — одну монету у Tellы. Сначала игра шла очень медленно, все то и дело отвлекались на разговоры, но потом пришлось ускоряться, чтобы успеть доиграть до закрытия. И последние ходы мы делали почти как шахматисты, играющие блиц.
В конце концов осталось только несколько неисследованных клеток возле Д.П., и мы все ринулись туда, кроме Tellы, у которой два пирата погибли, а третий застрял в яме. Там обнаружился один сундук с двумя монетами, но помешать Д.П. завладеть ими у нас так и не удалось, т.к. у нее рядом были все три пирата, а у нас — всего по одному. В итоге Д.П. и Tella собрали по 10 монет, Liu Art — 9, а я — всего 8. Liu, увидев то, что я из-за этого несколько расстроился, отдала мне одну свою, чем вызвала немалое восхищение.
Потом решили не расходиться сразу, а еще немного посидели в BurgerKing близ Марксистской. Но эти посиделки особо ничем не запомнились.
Но в любом случае, я очень рад, что выбрался! Это, наверное, была одна из самых позитивных встреч за последнее время!

Очередной конкурс от Яндекса

4X_Pro
Еще месяц назад узнал об очередных соревнованиях от Яндекса, и долгое время не мог определиться, участвовать или нет. У меня эти соревнования связаны со стрессом из-за очень жесткого ограничения по времени и того, что очень мало тестов, из-за чего сложно понять, что же я сделал не так. К тому же эта неделя получилась какой-то непонятной: вроде и дел особо важных не было, но время улетало неизвестно куда. И только сегодня, в последний день, все же выделил 4 часа на то, чтобы принять участие. И на этот решил, что нужно пытаться полностью дожать «одну» задачу, а не пытаться написать код для всех, а потом на всех же застрять на дальних тестах.
С самого начала все пошло не так. Во-первых, я перепутал и вместо участие в backend-конкурсе указал frontend. Впрочем, как выяснилось, задачи там все равно алгоритмические, с frontendом связанные скорее способом оформления результатов и тем, что пишутся на JavaScript. Взялся за решение самой первой задачи. Там сразу же давался готовый код, но утверждалось, что он не работает на больших объемах данных. Я стал думать, как его оптимизировать. В процессе узнал про TypedArrays, и решил применить Uint32Array. Но увы, не знаю, было ли это решение правильным. Оказалось, что Uint32Array не поддерживает операцию push, поэтому пришлось идти кривым путем — создавать второй массив, куда добавлялись элементы, порождаемые в процессе решения задачи, и в конце итерации склеивать из двух массивов один, а потом сортировать его. Это ощутимо усложнило алгоритм, и пришлось дольше возиться с отладкой. Но самое обидное — так и не помогло: пять последних тестов уходили за таймаут. А еще несколько — заканчивались wrong answer. И в итоге за эту задачу я получил всего три балла из 15 возможных.
Не будь таких жестких ограничений по времени, я пошел бы другим путем: оставил бы массив обычным, отсортировал бы его один раз, а дальше просто вставлял бы новые элементы в нужные позиции, находя их бинарным поиском. Если будет возможность потом порешать задачи в тестовом режиме, то все же попробую это сделать.
После этого я переключился на другую задачу. Там все было проще: нужно было сформировать barcode по определенным правилам и вывести его в броузер. Ошибиться там было просто негде, поэтому с первой же отправки кода я получил за нее 40 баллов.
Прочитав остальные задачи, я решил взяться за самую последнюю. Там нужно было разобраться с куском кода, который отрисовывал аналоговые часы с кнопкой сброса, и доделать его. В целом это получилось довольно быстро, но в коде было ограничение: стрелки часов при сбросе должны повернуться к нулю, двигаясь не быстрее определенной скорости. И вот тут я запутался с единицами измерения. На то, чтобы разобраться, ушло много времени, но где-то за 10 минут до окончания все же при выполнении в броузере код работал как надо. Но когда я отправил его на тестирование, тесты он не прошел. А самое главное, я вообще в упор не понимал, как они устроены (оказывается, там были положения стрелок на часах в градусах). И только через пару минут после того, как время вышло, наконец-то до меня это дошло. И только сейчас, когда писал это сообщение, понял, как вообще надо было тестировать эту задачу. В общем, получилось, что застрял всего в одном шаге от окончательного решения, и вместо 113 баллов получил всего 43. Впрочем, даже этого хватило, чтобы подняться до 65 места из 310.
Весь остаток дня пытался прийти в себя и злился на то, что так получилось. До сих пор слегка болит голова… А самое обидное то, что из-за «таймерного стресса» возникает положительная обратная связь: из-за него я задание понимаю со второго-третьего раза в лучшем случае, упускаю иногда важные детали, из-за чего напрасно тратится еще больше времени.

Оказывается, верстка может приносить удовльствие

4X_Pro
Вчера задумал написать статью о юзабилити шапки для Интернет-магазинов, в частности, о том, как должна быть устроена мобильная версия. И решил сверстать пример. А в процессе наконец-то разобрался, как сделать live preview в Visual Studio Code так, чтобы не надо было каждый раз переключаться в броузер и обновлять страницу. Для этого нужно было поставить одно из двух соответствующих дополнений (вот она, обратная сторона plugin-подхода: есть несколько версий для одного и того же, и нужно все время выбирать).
Причем если менять ширину окна, то можно предпросматривать сайт и в обычном, и в мобильном вариантах. А еще я наконец-то приучил себя использовать emmet. Так что теперь верстка сайта из процесса, который меня всегда раздражал, превратилась в процесс, который до некоторой степени приносит удовольствие. Правда, времени все равно занимает много из-за слишком большого количества мелочей, которым нужно уделять внимание.
А еще впервые сверстал сайт полностью через flexы. До этого пользовался ими только на уровне «костылей» в отдельных местах. И тоже очень понравилось: многое можно сделать всего парой свойств CSS, тогда как раньше приходилось всячески изворачиваться.

Осенний спад активности

4X_Pro
В последние дни что-то нет никакого желания писать в блог. Хотя происходило немало интересного, в частности, прогулка с Tellой на Воробьевы горы во вторник, и отличная настолочная встреча в субботу, где я всех обыграл в «Гномов-вредителей», да и в «японском бенге» себя неплохо проявил. Сегодня решил еще одну задачу, которую давно откладывал. А вот остальные дни шли куда-то мимо: делать ничего не хотелось, даже в чатах отвечать.
Только сегодня досмотрел первую часть тренинга нейрософии. В принципе, из всех двух часов можно было посмотреть только общую стратегию, что делать, где-то в районе 1:50. В теории все просто: выявлять кортизоловые привязки для полезных дел, заменять их сначала на нейтральные, потом на дофаминовые, и разрушать дофаминовые привязки к неполезным делам. Только вот у меня все сложнее: бессознательное ловко переключает внимание еще на этапе подготовки к «кортизольному» действию. Не помогает даже тот способ, про который я узнал из курса о поиске дела жизни: начать с какого-то предельного простого действия, которое выполняется одномоментно и не может содержать каких-либо сложностей. Например, запустить IDE для того, чтобы начать программировать или открыть видео того же тренинга для просмотра. Даже на таком простом действии часто происходит отвлечение внимания, и непонятно, как с этим бороться.
Еще не знаю, что все же делать с децентрализованными соцсетями. Поизучал немного Hubzilla в плане кода и структуры базы, и понял, что она мне категорически не нравится, и заниматься я ей не хочу. Поэтому остается два варианта: либо forkать Mastodon, либо писать свое на PHP. Впрочем, есть еще вариант заняться пока гейтом между ActivePub и ВКонтакте.
Впрочем, все чаще и чаще возникают мысли, что надо бы все-таки доделать сначала еще пару разделов в IntB, а потом уже браться за децентрализованные сети. В частности, раздел целей с подзадачами, аналогичный тому, что есть в SmartProgress, и в него же встроить все необходимые напоминальники (по отсутствию прогресса и т.п.) Плюс еще добавить в IntB поддержку OAuth и избавиться от использования uLogin. И вообще перепозиционировать с инструмента создания сообществ на инструмент преодоления цифровой фрагментации. А потом уже видно будет.

Временный возврат к консервативному сценарию

4X_Pro
После слишком активных понедельника и вторника наконец-то наступило затишье, появилась возможность посидеть дома и замедлить жизнь до приемлемой скорости. Снова вернулся на консервативный сценарий жизни. Среда прошла куда-то совсем мимо. Вчера наконец-довольно много времени потратил на исправление мелких ошибок в SiteKnockerBot и TypograferBot в Telegram. В первом, как выяснилось, у всех новых сайтов время ответа, который считался медленным, равнялось нулю: когда-то забыл в базе прописать значение по умолчанию. Еще узнал, что в SiteKnocker добавили уже более 2 тысяч сайтов! Снова подумываю о том, чтобы переписать «простукивающую» часть на Go (тем более, половина уже сделана).
Еще значительно улучшились результаты на Клавогонках. Появилась какая-то легкость в руках. Вчера даже впервые показал результат выше 500 знаков/минуту в безошибочном режиме. Но увы, чтобы его засчитали, нужно теперь пройти квалификацию со скоростью 420 знаков в минуту. А с учетом того, что квалификация сделана криво (те пять секунд, которые система выжидает перед исправлением ошибок, тоже засчитываются), это довольно непросто.
Возникла мысль переделать свой заброшенный канал на Дзене, где писал об итогах жизни в оффлайне, — сменить тематику на «Выживание в Интернете: как жить в условиях постоянного избытка информации» и начать писать дальше. Но это во-первых, еще больший возврат к консервативному сценарию, во-вторых, канал будет частично дублировать раздел «Личная эффективность» на моем сайте.
И уже третий день пытаюсь собраться и досмотреть видео нейрософии, но пока никак. В частности, сегодня вместо этого долго и нудно ругался в настолочном чате. Сначала пытался пресечь очередные поздравления кого-то там с днем рождения руганью, потом — тупо зафлуживанием темы, но помогло мало.

Немного повседневного без темы

4X_Pro
Интересно, почему даже если я решаю лечь спать раньше, все равно это не получается? Вчера из-за компьютера встал в 3 часа. Но потом еще больше часа просто лежал, думал и никак не мог заставить себя пойти в ванную? В чем тут скрытая выгода для моего бессознательного?
Сегодня из-за этого проснулся очень поздно. Занялся текущими делами (продлил несколько доменов, рассчитал налог УСН за очередной промежуток времени), а потом отправился на настольные игры. На этот раз встречались не в ПВ, а в GoldFish. Мне там больше нравится (в первую очередь, тишина), но почему-то большинство предпочитает ходить в ПВ. Ал.С. принесла новую версию Гномов-вредителей, и сыграли несколько конов в нее. В целом игра мне понравилась, но классические гномы все же лучше. В последний кон я отличился: играл за синих, но был вредителем, который играл в интересах желтых. И сумел сделать так, что запер своих (синих) почти на старте: сначала увел дорогу, которую они строили, совсем не туда, потом сам наглухо встал в узком проходе, который строили желтые, не позволяя их догнать, потом, когда синие попытались построить еще один проход, закрыл его троллем. В итоге одна из участниц желтого клана набрала 9 очков, а синие остались ни с чем. Но победил все равно игрок, который оба раза был нейтральным: он в предыдущие разы набрал 5 очков, тогда как у остальных было по одному в лучшем случае.
Затем играли в две новых игры. Первая — «Царь горы» — довольно простая, на первый взгляд. Но реально там многое зависит от стратегий других игроков (иными словами, задействован 8 уровень ТУАИ). К моему удивлению, я там выиграл с отрывом в одно очко. А затем — в «Дудо». Эта мне понравилась меньше, но и там я тоже победил. Вот что значит играть в тишине! В ПВ я просто от шума довольно быстро перестаю соображать что-либо. В общем, вполне доволен, что выбрался! Жаль только, что народу было мало (всего 6 человек).

Задать вопрос

Здесь можно задать мне вопрос или спросить совета по любой теме, затронутой в блогах или на форуме. После того, как я отвечу, вопрос и ответ появятся в соответствующем разделе. Но не забываем, что я — сторонник slow life, поэтому каких-либо сроков ответов не обещаю. Самые интересные вопросы станут основой для новых тем на форуме или записей в блоге.
Сразу предупреждаю: глупости, провокации, троллинг и тому подобное летит прямо в /dev/null.