Posts by saemonzixel@lor.sh
(DIR) Post #AWafGoJVAgRqqYztnE by saemonzixel@lor.sh
2023-06-11T18:41:59Z
0 likes, 0 repeats
Круто, можно просто позвонить в теплоэнерго и голосом сообщить лицевой счёт и показания счётчиков горячей воды роботу и он успешно всё поймёт и поблагодарит приятным, благодарным голосом в конце.Наверное, я уже стар, что радуюсь таким новаторствам в нашем мире)
(DIR) Post #AWp84CcuFOImEnr2Q4 by saemonzixel@lor.sh
2023-06-18T18:10:39Z
0 likes, 0 repeats
@skobkin @rf До конца июня точно - Новосибирск.После могу уехать в Ростов-на-Дону.Интересы: настолки, походы в театр, музеи
(DIR) Post #AWspPbvmExTKIo11VY by saemonzixel@lor.sh
2023-06-20T13:00:27Z
0 likes, 0 repeats
Блок-схемное программирование.Когда-то я напишу на эту тему статью: про свою реализацию и что из этого получилось. Но пока что будет только скриншот.#lang #dev
(DIR) Post #AXcdnyhY6JdI8W4Zu4 by saemonzixel@lor.sh
2023-07-12T15:27:06Z
0 likes, 1 repeats
Людей тоже можно воспринимать как животных. Они тоже могут есть, спать, срать и делать всё остальное как животные. Но я считаю, что люди - это люди, и к людям надо относиться как к людям, а не как к животным.Действия можно воспринимать как объекты. Они тоже могут иметь свойства, существуют сейчас или уже в прошлом, и их можно запустить или остановить и даже кому-то передать, проделегировать. Но я считаю, что действия - это действия, и создавать их надо как методы объектов, которые эти действия могут выполнять.Создавать действия как отдельные классы-сервисы можно, и есть случаи, когда это разумно, но я всё-таки считаю это ошибочный подход, который ведёт к плохим вещам.#dev #lang #oop
(DIR) Post #AXoFaeBizWPBkQohuq by saemonzixel@lor.sh
2023-07-18T05:52:18Z
0 likes, 1 repeats
Сегодня я ощутил полную мощь нововведений ECMAScript 6. После того, как кто-то написал в глобальном скопе "let i;" в своём блоке <script> , я потерял возможность использовать переменную "i" везде в циклах в глобальном скопе. Пришлось перейти на "n" в циклах.#js #javascript #ecmascript #dev
(DIR) Post #AYRgPqBbZKxH0P91nM by saemonzixel@lor.sh
2023-08-06T06:26:38Z
0 likes, 1 repeats
Раньше ядро linux пересобирали не только чтобы иметь свежее ядро оптимизированное под своё железо и быть крутым линуксоидом, но и иметь валидную связку kernel+gcc. Чтобы потом не иметь проблем с установкой модулей virtualbox, vmware, драйверов ati, nvidia и т.д.Сейчас пакет с новым ядром поставить можно, но искать gcc, которым оно скомпилено, геморрой ещё тот.#linux #kernel #gcc
(DIR) Post #AYoCdWRzv1Gx0BcAyG by saemonzixel@lor.sh
2023-08-17T03:11:20Z
0 likes, 1 repeats
Мои заметки про Prolog.Так случилось, что Пролог мне не удалось освоить с наскока. Во второй раз, на второй попытке я прочитал книгу про программирование на Visual Prolog. И тоже после прочтения книги ничего не смог запрограммировать на Прологе.В третий раз, в третий попытке, я вроде начал что-то понимать. И решил поделиться своими "пониманиями".Если сравнивать с Си, то предикаты можно воспринимать как функции. Возвращают они, правда, только всегда true или false. А результат вычислений складывают в переменную-аргумент переданный при вызове. Если вообще передали. Если не передали, то только true или false. Если передали несколько, то несколько и заполняют.Например, функция strstr('abcde', 'b') в Си вернёт номер позиции подстроки 'b' в строке 'abcde'. В Прологе можно эту функция записать как предикат с заголовком strstr('abcde', 'b', X). Когда Пролог встретит этот предикат, то попытается найти значение неизвестной переменной Х. Если это встроенный предикат, то он просто запустит соответствующий код, который сам вычислит соответствующее значение, положит его в X и потом вернёт true. Если не удалось вычислить, то вернёт false и оставит пустым X.В прологе можно и другие аргументы заменить неизвестными переменными. И пролог попытается их вычислить. Если это встроенный предикат, то просто запустить соответствующий код, который сам вычислит значение неизвестных аргументов (если умеет). А если невстроенный предикат, то начнёт вычислять тело предиката. Если тела нет, то будет искать по правилам все варианты значений неизвестных переменных.Например: strstr(X, 'b', 2) - должен вернуть даже не один, а все строки, где второй символ 'b'. Откуда он возьмёт эти строки - это его забота.А strstr('abcde', X, 2) вернёт одно значение X равное 'b'.А strstr('abcde', X, Y) вернёт все варианты подстрок и их позиций в 'abcde'.#prolog #lang #dev
(DIR) Post #AZ3bTHQwJDxpkyjPyy by saemonzixel@lor.sh
2023-08-24T13:30:16Z
0 likes, 1 repeats
Ценный лайфхак обнаружил.Заболел тут простудой. Правда я никогда не болею, т.к. принимаю всегда контрастный душ, но всё же. Обнаружил, что если лежать полностью горизонтально, то горло постоянно болит, аш уши закладывает. А если полусидя лежать в постели, то норм, горло не болит и можно спокойно спать. Забавно)
(DIR) Post #AZBwXTxJLXka3OOhay by saemonzixel@lor.sh
2023-08-28T14:04:02Z
0 likes, 1 repeats
Есть такое программное обеспечение Scela. Оно умеет следить за пользователем компьютера и отправлять всю эту информацию на удалённый сервер. Вот его я недавно и обнаружил на своём рабочем компьютере. Естественно я его отключил и заблокировал.Я думал, что не существует таких программ под Linux когда мне сказали, что в организации практикуют системы наблюдения за сотрудниками. Но, оказывается, существуют. И вполне хорошо работают и с задачей своей успешно справляются.Я, к сожалению, не помню, что было на собеседовании перед офером на эту тему. Но в трудовом договоре упоминается, что компания сама решает, что она будет делать с рабочим местом сотрудника. И на нём моя подпись уже стоит.В любом случае это мерзко: ощущать, что ты работаешь, а кто-то скрытно следит за твоим экраном постоянно. По этому я решил, что буду сотрудником бунтарём. И буду препятствовать установке таких программ на свой рабочий компьютер)
(DIR) Post #AZJFOiagp3164b4QvQ by saemonzixel@lor.sh
2023-09-01T02:38:18Z
0 likes, 1 repeats
Будни системного администрирования.Как настроить rewrite-правила в конфиге сайта в nginx?0. Найти тот файл-конфиг, который реально использует nginx для этого сайта(!) для этого типа соединения (http/https)! Файл-конфиг может иметь любое название!1. ...#devops
(DIR) Post #AZTilt2IlQ2QyZSdTE by saemonzixel@lor.sh
2023-09-06T03:54:34Z
0 likes, 1 repeats
Создавал новый образ в VisualWorks и опять всплыла сложность с отображением кириллицы. Пришлось напрягаться вспоминать как я N лет назад создавал образ и успешно настраивал отображение русских букв)Вспомнил всё-таки. Там надо открыть GUI Painter и в нём в меню есть настройки Named Fonts. Вот там надо указать вместо Helvetica свои гарнитуры. Я обычно указываю PT Sans Mono. После этого, в главном окне в настройках уже сменить named font на какой-нибудь другой (например, medium на small или large), чтоб образ переключился на выбранную гарнитуру.А ещё вспомнил как 7.4 не поддерживала UTF-8 и приходилось настраивать локаль koi8-r и запускать под ней образ, чтоб русский успешно работал. Но это было очень давно конечно)
(DIR) Post #AZYnQef8Jq7c8HuB28 by saemonzixel@lor.sh
2023-09-08T14:40:19Z
0 likes, 1 repeats
Про разделитель statement-ов и Пролог.Начал писать cgi-скрипт на прологе. Для начала, просто вывод всех переменных окружения HTTP-запроса. И почему-то после строки getenv('PATH_INFO', Path_info) вывод прерывался. В логах ничего нет кроме что-то там про "main goal" и "false".Несколько часов я потратил на изучения всего, что связано с отладкой на прологе. Внимательно почитал документацию по swi-prolog. Перепробовал примеры со StackOverflow. Что я только не перепробовал.И тут я вспомнил, что в прологе "," это AND, а ";" это OR. И соответственно в месте, где у меня было написано: getenv('PATH_INFO', Path_info), format('PATH_INFO=~w~n', Path_info) - после getenv() ничего дальше не выполнялось. Потому, что getenv() возвращал false. И, соответственно, результат всего выражения становился известен и не было необходимости вычислять его до конца.Вот так у меня проходит изучение новых языков программирования)#prolog #swiprolog #lang #dev
(DIR) Post #AaA38hJOAhBTzkRdPk by saemonzixel@lor.sh
2023-09-26T14:00:40Z
0 likes, 1 repeats
Решил стать ещё более не таким как все. Теперь я пингую не четыре 8ки, а четыре восьмёрки, перед которыми две 7ки. Т.е. две 7ки, две 8ки и под конец тоже по восьмёрки.
(DIR) Post #AaYM2RGFr1uXlMrySm by saemonzixel@lor.sh
2023-10-08T07:25:29Z
0 likes, 1 repeats
Несколько дней назад написал в тех.поддержку Хабра, что при просмотре основной ленты на моём старом iphone4 баннера мероприятий слишком большие, выходят за края экрана. Попросил поправить это. Они попросили прислать скриншот и после этого ответили стандартной отпиской, что старые браузеры и устройства они не поддерживают и исправлять они это не будут. Что в принципе здраво. Но я всё-таки я написал им позитивное и душевное письмо, что они хорошие профессионалы и я всё-таки жду, что они поправят это дело. На следующий день они ответили, почему они всё-таки не будут это делать. То, как они написали, насколько развёрнуто, аргументировано и здраво, не проигнорировав меня, у меня вызвало восхищение и большое уважение к нимЯ решил опубликовать своё и их письмо. Правда, не имея их согласия, но всё же.------ Моё письмо ------Я ничуть не сомневаюсь, что у вас работают талантливые и оченьпрофессиональные frontend-разработчики, которые могут найти, каксделать, чтоб на старых устройствах/браузерах баннера были в ширинуэкрана и их удобно было просматривать в основной ленте, не поломав приэтом работу сайта на новых устройствах и новых версиях браузеров. Будуждать, когда на моём любимом информационном ресурсе это поправят)Спасибо.------ Их ответ ------Возможно, они и могут найти. Но проблема гораздо шире.Зачастую, такие способы представляют собой костыли и надстройки, которые могут увеличивать нагрузку на все устройства, с которых заходят на наши сайты, а также, на серверы.Нам периодически пишут пользователи, которые заходят на наш сайт с абсолютно любых, редких, старых и экстравагантных устройств, вплоть до банкоматов. И все они просят оптимизировать сайт под их потребности. Но, насколько вы понимаете, невозможно оптимизировать сайт, построенный на новых стеках технологий, для такого спектра единичных и разных (порой, с трудом работающих) устройств, да еще и без ущерба для миллионов пользователей, использующих свежие браузеры на современных устройствах.Это первый момент.А второй момент заключается в целесообразности расходования ресурсов. Наши разработчики постоянно работают над улучшением и доработкой наших проектов, внедряют новые функции и технологии, и их очередь из задач выстроена на многие месяцы вперед. Если им будет все-же поручено "допилить" интерфейсы под старые устройства, то пострадает их основная работа - развитие и поддержка функциональности сайтов. Мы прекрасно понимаем, что каждый человек хочет, чтобы с его устройства всё работало хорошо. Но старые устройства уходят, приходят новые. И тратить ресурсы на разработку механизмов поддержки старых устройств просто не целесообразно.#habr
(DIR) Post #AanW3uxwKPsz0sLhDs by saemonzixel@lor.sh
2023-10-15T14:57:51Z
0 likes, 1 repeats
Надоело, что регулярно не дают доступы по FTP/SSH к сайтам. Что прошлось поизучать протокол webdav. И на просторах GitHub нашлась весьма грамотно и качественно сделанная реализация webdav-сервера - PicoDav. Правда, поизучав внутренности, она оказалась не pico и даже не nano. К тому же оно требует PHP 7.4 не менее. Поэтому пришлось её форкнуть и даунгреднуть. Так-же я попутно добавил дополнительные улучшения под себя.Название я сменил. Назвал MiniPicoDav, по большей части для лулзов)https://github.com/SaemonZixel/minipicodav#webdav #server #php #webdev #dev
(DIR) Post #AbIS9PHQMdR7bThnXc by saemonzixel@lor.sh
2023-10-30T13:10:42Z
0 likes, 1 repeats
Загрузил я значит minipicodav на сайт под видом плагина под WordPress. А при попытки подключится получаю "501 Not Implemented". Оказывается nginx на хостинге не пропускает PROPFIND, MKCOL и другие специфичные для WebDav методы до php-скриптов. И по этому webdav-е можно поставить крест. Придётся писать что-то своё...#dev #webdav #php
(DIR) Post #AbdCeoa7tVyIvzNgae by saemonzixel@lor.sh
2023-11-09T13:26:03Z
0 likes, 1 repeats
В JavaScript можно через defineProperty() или через старые __defineGetter__()/__defineSetter__() сделать свои функции обработчики присвоения/чтения свойств объектов. И это бывает выгодно при отладке. Можно добавить код "try { throw new Error(); } catch(ex) { console.log(ex.stack); }" и увидеть, кто и откуда присваивает/читает значения этого свойства объекта.Точно знаю, что подобное возможно ещё в PHP через магические методы __get(), __set(). В Python ещё есть декоратор @property. А в Java подобного нет и не будет.#javascript #dev
(DIR) Post #ApwzdR3aFTxdpH9RvU by saemonzixel@lor.sh
2025-01-10T18:11:24Z
0 likes, 0 repeats
UEFI оказалась не такой уж и сложной технологией.Оказывается, можно просто создать раздел FAT32 с типом ef, сделать его активным, создать там папку EFI, а в ней BOOT. И положить туда grubx64.efi переименовав его в bootx64.efi. И при перезагрузке прошивка EFI материнской платы сама найдёт этот раздел, залезет в папку EFI/BOOT и загрузит и запустит bootx64.efi. И появится командная строка GRUB2.Если подложить в правильное место grub.cfg, то появится меню, а не командная строка.Поскольку я использовал для экспериментов GRUB из ubuntu, то в нём был захардкожен путь /EFI/ubuntu. Соответственно, туда и пришлось класть grub.cfg и grubenv (для удобства).Но это при условии, если в NVRAM переменные BOOT001, BOOT002 и т.д. отсутствуют или ведут к несуществующим или поломанным загрузчикам. UEFI в первую очередь пытается загрузить файлы загрузчики из этих переменных.Можно ещё распаковать в EFI раздел rEFInd, который может загружать разные операционные системы в режиме EFI. А поскольку он основывается на GRUB2, тоже умеет напрямую грузить ядро linux.#uefi #efi #grub2 #refind #devops #linux
(DIR) Post #Asw0FlLSXHexWZpMQ4 by saemonzixel@lor.sh
2025-04-10T02:52:17Z
0 likes, 0 repeats
@dump_stack да, печаль. Хороший был инстанс. Мой первый стабильный блог в жизни.
(DIR) Post #Au3CPS7sYQo0vEjxeC by saemonzixel@lor.sh
2025-05-13T11:49:00Z
0 likes, 0 repeats
Qoto.org так и не прислало письмо с подтверждением регистрации после недели ожидания. Похоже он действительно полумёртв.Похоже все дороги ведут в mastodon.ml. Если у этого инстанса и была цель "подмять под себя" весь русский сегмент mastodon-сети, то она потихоньку достигается)#mastodon