Во время последнего заезда на дачу обдумывал, как сделать свой скрипт каталога сайтов. Вернулся к тому, о чём думал во времена начала работы над IntB 3.x в 2007 году — хранить все сущности, которые могут быть выведены в виде Web-страниц, в одной таблице: сами сайты, категории, подборки по формату сайтов, пользовательские подборки, вспомогательные фильтры, теги и т.п. По сути, у всего этого атрибуты одинаковые: название, описание, HURL, владелец, основной текст, дата создания и последней модификации, а также поле для сериализованных специфических атрибутов. Но в отличие от IntB, где предполагалась чисто иерархическая структура, предусмотреть таблицу для возможности связывать сущности произвольно. К тому же, как выяснилось, современные версии MySQL и Postgres позволяют хранить такие атрибуты в виде JSON с возможностью выборки по атрибутам внутри JSON и даже создавать по этим атрибутам индексы!
Потом мысль пошла дальше — решил сделать собственный микрофреймворк, взяв за основу тот код, который я писал для движка MLCE в прошлом году. И потом на нём реализовать и каталог сайтов, и мобильное сообщество, и, возможно, в дальнейшем вернуться движку для сообщества идеалистов, только переделать его на SQL вместо MongoDB. Но потом застрял на вопросе, использовать ли namespaces и загромождать код противоестественными конструкциями вида \MLFW\App\Router или \MLFW\Models\Entity или писать в духе CMS двухтысячных, используя namespaces только для указания путей, где искать необходимые классы (то есть Models\Entity или Templates\MainPage).

- Перово, Москва, Россия
- me@4xpro.ru
- x4_pro
- XXXXPro
Новости сайта в Telegram
t.me/4x_proЛог жизни
Лог моей жизни, где я фиксирую наиболее эмоционально значимые для меня события и текущее настроение. Является продолжением блога, который я вел в ЖЖ с ноября 2004 по апрель 2018 года.
О скрипте каталога и фреймворке для него

Дачный сезон закончился

Четыре дня, прожитые на даче, можно назвать днями вынужденного slow life. Ни разу даже за пределы участка не выбрался, хотя хотел сходить напоследок к реке. Но не сложилось: в пятницу и воскресенье была слишком уж неподходящая погода, а в субботу было не до этого — занимались с отцом обрезкой деревьев.
Зато вдруг начал налаживаться режим дня. Правда, ценой жёсткого недосыпа в пятницу, которая вообще оказалась каким-то особо неэффективным днём. Не получалось ничего из того, за что брался. Хотел было старый роутер настроить в режиме ретранслятора — не получилось, обновить Linux на старых ноутбуках — тоже. Видимо, у Ventoy всё же есть какие-то ограничения, и для совсем старых компьютеров нужно делать загрузочные флешки обычным образом.
Уезжал с противоречивыми чувствами. С одной стороны, было жалко, что всё закончилось, и что теперь полгода, если не больше, не увижу эти места. Хотелось даже ещё на несколько дней остаться. С другой — было ясно, что жить тут теперь слишком уж холодно и некомфортно, и ехать всё же надо.
Возвращение было долгим и мучительным, так как ехали не на электричке, а по шоссе с ужасными пробками. Приехал уставший и даже не стал пытаться сделать что-то за остаток дня. Зато отоспался и сегодня проснулся в состоянии повышенной бодрости. А Welltory (её наконец-то обновили, и новая версия и замеряет нормально, и результаты выдаёт без задержек) показала вообще 22% стресса и 99% энергии. Не думал, что для меня такое возможно.
Но даже несмотря на то, что сил много, в голове полнейший бардак в плане того, что делать. Нужно и по freelance очередную задачу столкнуть, и бытовыми делами заняться, и ответить на накопившиеся сообщения. (Вообще, заметил, что после того, как переболел коронавирусом, резко сократился ресурс на общение, стал подолгу не отвечать на сообщения.) А вместо этого хочется либо заняться своим frameworkом, либо вообще сесть играть в Arcanum.
Осенний заезд на дачу

Вчера снова приехал на дачу. Заезд отчасти вынужденный — обещал в субботу помочь отцу с обрезкой орешника. Тут холодно и мрачно, и спать начинает хотеться уже в 22 часа. Впрочем, несмотря на это, вчера всё равно засиделся за компьютером до 3:30, а потом ещё час готовился ко сну. Весь день был пасмурный, но ночью небо полностью расчистилось, благодаря чему удалось посмотреть на звёзды, а ещё увидеть Юпитер и Марс.
Из-за холода долго не мог уснуть: мерзли ноги. Только около 6 утра сообразил встать и найти шерстяные носки. В итоге сегодня не выспался и вынужденно сделал день полного безделья. Даже не обновил ArchLinux на одном из старых компьютеров, хотя хотел это сделать, и не протестировал старый роутер в режиме ретранслятора. Только купил несколько акций на фондовом рынке.
Зато, в отличие от предыдущих заездов, есть то самое чувство затерянности, удаленности от людей и цивилизации, ради которого и стоит ездить на дачу.
Немного о программировании

Интересное наблюдение: раньше (во времена создания IntB 2.x) я писал код с позиции «Я — ведущий разработчик, тут я решаю, что и как будет в проекте. Кому не нравится — идите подальше отсюда и там пишите сами с нуля, как считаете нужным.» А сейчас стал слишком часто задумываться над вопросами типа «какое решение будет выглядеть более профессиональным, что лучше соответствует общепринятым практикам и т.п.». Естественно, производительности это не способствует…
Возвращаюсь к идее каталога сайтов

В последние дни снова крутил в голове идею сделать каталог сайтов. Но долгое время не было в голове цельной картины, какова же должна быть его структура. Создал в Obsidian заметку, где попытался систематизировать сайты из раздела «Интересные материалы» или просто те, которыми хотел бы поделиться, и быстро понял, что простая древовидная не подходит. Думал на тему фасетов, активным сторонником которых является Evg, но они — хорошее решение для больших каталогов уровня YaCa и DMOZ, тогда как я на такие масштабы не замахиваюсь.
А в ночь с четверга на пятницу случился приступ бессонницы, когда я лежал и крутил в голове эту тему. И вроде решение пришло! Нужно предусмотреть выбор по двум параметрам: формат (официальный сайт, онлайн-сервис, канал в ТГ, блог, видеоблог и т.п.) и тематическая категория. Причём тематические категории — одноуровневые, но с возможностью создания для каждой категории набора фильтров. Например, для программного обеспечения это будут «Платформа», «Лицензия» и «Тематика». И ещё нужно сделать хороший поиск, который учитывал бы и название сайта, и URL, и описание и фильтры.
Из-за необходимости поиска я даже подумывал о том, чтобы вместо MySQL использовать MongoDB (там легко настроить поиск с учётом морфологии), но потом пришла в голову мысль сделать иначе — задействовать MySQL + Sphinx.
А ещё в этот же каталог можно встроить мою давнюю-давнюю идею [социального поиска](http://4xpro.ru/ideas/social-search/), предусмотрев для зарегистрированных пользователей возможность составлять свои подборки и рейтинговать их.
Интереса ради попробовал поискать на GitHubе и в Google современные скрипты каталогов сайтов, но ничего толком не нашлось! Теперь вот думаю, взяться за эту задачу или нет.
Противоречивые настолки

Сегодня впервые с мая съездил на настольные игры. Из того заведения, где они проводились прежде, нас выжили (слишком мало денег приносим). Теперь собираемся в ДК ЗИЛ на Автозаводской. Я там был впервые, вход нашёл не сразу, и само здание оставило какое-то неприятное впечатление очень странной и неудобной планировки. Кроме того, ДК закрывается в 22 часа, поэтому и на игры приходится приезжать раньше. Мы договорились начать в 18, я опоздал минут на 20, но всё равно приехал вторым, вскоре после Ал.С. Мы с ней сыграли в «Каркассон», причём я выиграл с большим отрывом. Потом пришёл ещё один человек (причём из тех, кто присоединился недавно), сели играть в «Меч самурая» (в просторечии японский бэнг). Новый участник в японский бэнг не умел, поэтому Ал.С. посадила его и села сама играть за ниндзю, а меня — за сёгуна, который при игре втроём получает целый ряд преимуществ: дополнительную атаку, дополнительную карту, неуязвимость к «Бусидо» и целых шесть жетонов чести. На начальном этапе мне ещё очень повезло: пришло несколько карт усиления и «чайных церемоний». В итоге я сходу отобрал ещё три жетона чести у ниндзя, но дальше дело встало. Дальше всё время приходила одна-две карты защиты, и ещё какая-нибудь малополезная в моей ситуации, изредка — оружие. Я их разыгрывал, и оставался без карт, в результате чего ниндзя ничего не могли мне сделать, но и я тоже не мог развить успех. Но после очередной пересдачи колоды ко мне снова пришло несколько карт «чайной церемонии». С одной стороны, я получил возможность атаковать противника (и постепенно выбил все защиты), с другой — не успевал тратить всё оружие за ход (а синие карты усиления к тому времени мне все снесли) и стал получать ответные атаки. В какой-то момент даже стал бояться, что проиграю, но через некоторое время смог выбить все защиты у нового игрока и отобрать у него последний жетон чести, закончив игру, кажется, с шестью жетонами.
Потом долго разбирались с новой игрой под названием «Дедуля винчестер». Когда уже готовы были приступить к игре, пришёл YKrop Ukropovich, у которого был «Остров кошек», и мы с Ал.С. переместились туда, а оставшиеся игроки решили сыграть вместо этого в «Каркассон», решив, что в «Дедулю» на троих неинтересно.
В «Остров кошек» я начал неплохо. Но дальше допустил ряд ошибок. Во-первых, взял задание «оставить средний ряд корабля полностью пустым», которое стоит целых 25 баллов. На первый взгляд кажется, что это легко, но оказалось, что в этом случае быстро становится негде размещать кошек. Но самое обидное — я отказался от карты, которая давала возможность размещать кошек и сверху, и снизу корабля, оставляя этот средний ряд пустым. В третьем раунде место закончилось от слова совсем, поэтому я принял тяжёлое решение на это задание забить. Но к этому времени уже успел наразмещать кошек очень неэффективно, не думая о заполнении кают.
Во-вторых, вспоминая впечатления от прошлых игр, когда на последних ходах сильно не хватало корзин, ударился в другую крайность: начал активно на них тратиться. В итоге набрал целых три штуки, но потратил на это слишком много рыб. В итоге последняя корзина постоянно оставалась незадействованной из-за их нехватки. В общем, моя вечная проблема, что в «Кошках», что в «Роскоши», что в «Project L»: не могу поймать момент, когда нужно переходить от вкладывания ресурсов в развитие «инфраструктуры» к их трате на основную задачу.
Ну и третьим просчётом была ставка на сокровища. У меня была карта, дающая 7 очков, если я к концу игры буду обладателем самого большого их количества. В итоге каждый ход я тратил как минимум одну карту на их получение, плюс ещё дважды потратился на кошек неподходящих цветов только ради сокровищ и закрытия каюты. Но каким-то образом у того же YKrop Ukropovich в итоге сокровищ оказалось всё равно больше!
Итог — полнейший разгром с таким счётом, что я был в полном шоке, и пришлось всё пересчитывать дважды, так как думал, что кто-то где-то ошибся. Но безрезультатно. Огромные минусы из-за незаполненных кают, плюс в этот раз я мало набрал там, где беру обычно максимум — на картах заданий. Они мне просто не шли (плюс несколько я сбросил в начале ради корзины).
В итоге домой возвращался сильно злой на всё вокруг. Плюс ещё удручали новости из Интернета. Да ещё, оказывается, сегодня день города, и в метро просто толпы народа. Но, видимо, высшие силы меня оберегали: и сидячее место в поезде оба раза удачно занял сразу же, и люди кругом были спокойные и миролюбивые, ни с кем цапаться не хотелось. Плюс Ал.С. успела всё же частично снять негатив (не знаю только, осознанно или нет).
Настройка роутера

Сегодня ходил к отцу на вторую квартиру. Он купил новый роутер, и нужно было помочь с настройкой. Я думал, что всё это займёт минут пять, но получилось как всегда: постоянно вылезали какие-то мелочи, и провозился почти час. Сначала попытался настроить статический IP-адрес, который указан в приложении к договору. Траффик не пошёл. Выключил новый роутер (чтобы не было конфликта двух сетей с одинаковым названием), включил старый, залез в его настройки, там стояло получение адреса по DHCP. Поставил так же на новом, но снова без толку: вроде IP-адрес дали, но траффик наружу не идёт. В какой-то момент даже стал думать, не кончились ли деньги на счету, но зайти в личный кабинет тоже не получалось. Стал думать, что делать. Отец уже хотел звонить в техподдержку провайдера, но это не есть путь Настоящего Компьютерщика. Потом вдруг вспомнил, что при подключении мастер записывал MAC-адрес роутера. Подумал, что, возможно, есть привязка подключения к MAC. К счастью, новый роутер позволял легко делать подмену MAC-адреса программным путём. Вбил в него старый адрес, и всё заработало!
Потом пришлось повозиться с принтером, который не умеет подключаться к сети в 5 ГГц-диапазоне. Сеть со старым названием я сделал именно там, а в 2.4 ГГц назвал по-другому, и нужно было вновь ввести эти данные. Долго вспоминал, где вообще это настраивается на принтере, потом пытался подключить его по PIN-коду WPS, но не сработало. Причём во время попытки принтер никак не позволяет отметить это действие: только либо дождаться таймаута, либо включить/выключить (и загружаться он будет примерно то же самое время). В итоге пришлось вбивать ключ сети с самого принтера. Там система ввода такая же, как на кнопочных телефонах, а после принтер перезагружается. Со второго раза получилось. Потом ещё делал привязку IP к MAC, чтобы принтеру всегда давался один и тот же адрес, пришлось ещё раз перезагрузить. В общем, на всё это час и ушёл.
В итоге домой шёл несколько недовольный, несмотря на то, что всё было сделано, и даже без нервотрёпки. Кстати, второй раз за неделю вожусь с чужими компьютерами, и оба раза всё получается спокойно, без нервов, хоть и долго, и с непредвиденными сложностями.
День размышлений

В последние дни жизнь замедлилась до комфортного уровня, и это радует. Наконец-то живу в своём ритме, без необходимости ломать его, чтобы успеть отреагировать на что-то внешнее. А сегодня сам собой получился день размышлений.
Началось всё с того, что проснувшись, я вдруг осознал ответ на свой извечный вопрос «куда девается время, почему я всё время живу в вечном отставании». Всё оказалось достаточно просто: я совершенно не учитываю время на переработку впечатлений и разгрузку мозга. Между тем, это настолько важно для моей психики, что бессознательное просто не даёт мне не делать этого.
Ещё я не могу бросить какое-либо действие без хоть какого-то логического завершения. Поэтому часто бывает так: заинтересуюсь каким-то вопросом, который, как кажется сначала, займёт пару минут, открываю кучу вкладок, а потом не могу прерваться, не дочитав (или хотя бы бегло просмотрев) их все. Собственно, это основная причина, почему и спать ложусь всё время позже, и из дома выхожу с опозданием. Помогает только начать завершать процессы заранее… (Эх, вспомнился Windows 2000 с его медленным выключением.)
Потом на связь вышла DarLik. Переслала мне цитату из книги Бейтсона «Экология разума» о том, что человека может приводить в движение «безымянная, бесформенная нелокализованная надежда на грандиозное достижение». В ответ я написал ей огромное сообщение про то, почему у меня теперь нет таких надежд: и сам мир поменялся, и я стал понимать, почему именно сейчас то, на что я надеялся раньше, не работает. И снова вылез давний вопрос: это я плохой, потому что не могу ничего сделать стоящего в последнее время, или Интернет плохой, потому стало слишком сложно стать замеченным.
А в ходе написания случайно сформулировал свою истинную цель жизни, хотя до этого много лет ходил вокруг да около. Цель такова: доказать, что мир, где люди творят и созидают что-то ради самой идеи, не думая о личной выгоде и материальных благах, лучше, чем мир баблорубов и ускорителей жизни. На самом деле именно это для меня важнее, чем slow life, антиускорительство и тому подобное.
И ещё придумался образ, который можно использовать как метафору идеально свободной жизни, к которой следует стремиться: это подросток на каникулах между школой и универом, когда все волнения, связанные с поступлением, позади, до занятий ещё далеко, нет никаких других обязательств, и можно чувствовать себя свободным как ветер.
Бесшумность достигнута

И всё-таки я решил проблему бесшумного ноутбука без переустановки системы! Сегодня нашёл, как включить управление вентилятором в той версии ядра, которой пользуюсь. Оказалось, для этого нужен модуль asus_nb_wmi, а чтобы была возможность его включить, нужно добавить поддержку PCI hotplug. После этого пересобрал ядро и появился файл для ручного управления вентилятором, где задаётся коэффициент от 0 до 100. Поэкспериментировав, обнаружил, что при значении 40 вентиляторы начинают включаться до слышимых значений только при температуре порядка 60 °C. А без них при обычном серфинге в Интернете температура устойчиво держится в диапазоне 53—55 °C.
Правда, есть и обратная сторона: если всё же нагрузка возникнет и ноутбук прогреется выше 60, то остывать будет долго. По-хорошему, нужно либо thermald настраивать (но у него слишком уж мозголомный конфиг), либо набросать на C свою простенькую утилиту, которая будет при превышении 60 °C менять этот коэффициент на тот же 85, который выставляется по умолчанию.
Ещё интересная особенность: если переключиться на ручное управление вентилятором, посмотреть его скорость становится невозможно. Не очень понимаю, чем это вызвано, но это так.
Теперь сижу и наслаждаюсь полной тишиной. А ещё снова задумался, не купить ли под него подставку для лучшего охлаждения.
А ещё разобрался, как решить проблему со встроенной встроенной панелью. Нужно просто дать команду на её отключение и последующее включение. Только вот когда я написал скрипт, который это делает и попытался добавить его в systemd, оказалось, что он не видит соответствующих файлов в /sys (хотя если запустить его вручную после загрузки системы, всё отрабатывает нормально). Экспериментировал с различными targets, но безрезультатно… В чём причина — так и не понял.
Испытания Manjaro с xfce4

Поробовал сегодня запустить Manjaro с xfce4 с флешки на основном ноутбуке. Как всегда, возникли проблемы при старте с подключенным внешним монитором. Пришлось отключать его на момент запуска. В целом впечатления сложились вполне благпориятные. Во-первых, корректно распознался датчик вентилятора. Во-вторых, температура процессора каким-то образом получается существенно меньше: с запущенным броузером (правда, это Firefox, а не Chromium) всего 51 градус даже при запущенном ВК. Видимо, более корректно отключается дискретная карта. И вентилятора почти не слышно. Только если ухо как следует напрячь, можно разобрать лёгкое высокочастотное гудение (он крутится на 3000-3200 rpm). Попытался замерить приложением-шумометром в мобильнике, разница между включённым и выключенным компьютером составляет где-то 6-7 dB, при этом я спокойно различаю уличные шумы с закрытым окном.
Интерфейс производит двоякое впечатление. С одной стороны, у Lubuntu тема гораздо красивее. С другой — тема по умолчанию xfce выглядит куда современнее, а значки напоминают оболочку EMUI на планшете. Ещё обнаружилось, что можно вынести на панель задач аналог командной строки! Я об этом мечтал со времён, кажется, Windows 2000 или XP. Причём туда можно вводить как названия исполняемых файлов, так и пути, URLы и даже поисковые запросы для DuckDuckGo (правда, последним я всё равно не пользуюсь).
Кое-что остаётся непривычным. В частности, то, что окно терминала закрывалось после запуска какого-либо приложения. (Потом нашёл, как это отключить.) Пока не нашёл, где настроить опцию typo для клавиатуры, без которой уже чувствую себя как без рук. Ну и памяти съедает всё же многовато: после загрузки — 510 Mb (LXDE, кажется, 280, если запускаться без MySQL и Apache).
- 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
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153