Про мою кросс-публикацию блогов | 03 мая 2024 года, 18:46

Доработал механизм кросс-публикации на русскоязычный и англоязычный блоги. Во-первых, я разобрался, как сгруппировать посты по темам, присвоить им теги, и отнести к категории. Плюс это еще делается на лету для новых постов. Я попозже напишу на hybrismart статью, но смысл в том, что сначала создаются openAI векторы для всех постов, потом через KMeans они разбиваются на 50 групп и сортируются по дальности от центра, затем берутся первые посты (так, чтобы не выходило за рамки N Кб), и скрипт спрашивает openai, по какой теме этот кластер постов. В итоге у меня получается 50 тем, из которых я выбираю, скажем, Арт или Книги, и затем уже вытаскиваю все посты, близкие к теме арта или книг, опять же отсортированные по дальности от темы. Выходит не очень точно, особенно для постов, в которых мало текста. Поэтому каждый пост скармливается LLAMA3 8B локальной, на ноуте, и та решает, правда ли он в этой теме или нет. В целом, тоже с редкими ошибками, но из 2000 найденных скриптом по близости он оставил 600 по теме арта, и в целом неплохо.

Отдельный скрипт проходится по постам на beinginamerica, и там уже исправляет теги и категории для постов из списка, переданного скриптом выше.

Я уже раскидал посты на темы art, books, science. В целом, все автоматизировано, можно легко 10 новых тем еще сделать. Буду потихоньку делать. Пока теги только на beinginamerica, на raufaliev.com буду делать позже.

Кроме этого, если в посте есть ENG в скобках, то он на англоязычный сайт кидает кусок после ENG, а на русскоязычный — кусок после ENG below в скобках. Удобно, когда я сразу пишу пост на двух языках.

Заголовок у меня для архива делался через LLAMA3 8B, но openAI все-таки мощнее, но дороже. Для новых постов уже используется openAI GPT-4.

LLAMA3, да и OpenAI GPT-4, не очень хороши в придумывании заголовков текстам, которые слишком малы и неинформативны, и гонит иногда всякую пургу. Можете почитать и улыбнуться.

#TechStories

15 апреля 2024 года, 16:05

Опубликовал новую статью на Hybrismart — про delta detection в механизмах импорта данных и поисковой индексации. Только за счет него удалось смягчить тупизну систем выше по течению и в десять раз ускорить обновление данных

https://hybrismart.com/2024/04/15/delta-detection-and-incremental-updates-in-the-integration-processes-reducing-unnecessary-writes-to-the-database/

https://hybrismart.com/2024/04/15/delta-detection-and-incremental-updates-in-the-integration-processes-reducing-unnecessary-writes-to-the-database/

06 апреля 2024 года, 10:21

Написал подробную статью об одном интересном опыте на одном из проектов. Мне нужно было разобрать логику большого эксель файла — там несколько сотен довольно сложных формул, и работал он так: менеджер вводил с десяток параметров на одной вкладке, и все остальные были готовы для печати сметы для клиента. Там довольно сложная специфика и сложные товары, с массой особенностей типа с таким-то товаров должен идти такой-то сервис, а вот тут нужно умножать на два если там четыре. Никто у клиента до конца это не понимал, оно просто работало больше десяти лет, и все эти десять лет люди по чуть-чуть подправляли там логику, в пределах своего понимания. Документации не было, но даже если бы была, она бы только мешала, потому что сделанное потом по документации наверняка бы не билось с тем, что выдает Excel, и избежать реинженеринга все равно не удалось бы.

Я тогда поломал голову, как сделать этот реинжиниринг возможным в конечное время, исчисляемое единицами недель, и придумал решение, основанное на функциональном программировании на Groovy.

Публикую подробный разбор решения и репозиторий с кодом. Код пришлось написать с нуля для статьи, как и придумать эксель для демонстрации (в сотни раз проще того).

https://hybrismart.com/2024/04/06/how-i-reverse-engineered-huge-excel-file-full-of-complex-formulas/

https://hybrismart.com/2024/04/06/how-i-reverse-engineered-huge-excel-file-full-of-complex-formulas/

26 сентября 2023 года, 10:09

Зацените как мой поиск работает, по 14000 страниц пока.

Запрос может быть на любом языке.

Например, на русском “За небольшими растениями и высокими деревьями возле пруда, лес раскрывает высокие башни из светлой древесины, гладкоствольные деревья и темное, насыщенное дерево.”

Он выдает английский оригинал

“…Beyond the bushes and the mighty , crowding cedars around the lake , the forest opened — feathered spires of balsa , clean- trunked locust and mahogany…”

02 сентября 2022 года, 18:08

Сделал подушки для кресла. Ну что, первый блин не совсем комом, даже пользоваться можно. Но самое главное, разобрался в технологии и набил руку и шишки. Наверное, это была главная цель, а подушки, это так, побочный продукт.

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

С экономической точки зрения проще было выбросить кресло и купить новое б/у. Подушки обошлись в ~70 долларов, включая ткань, поролон, нитки, молнию и около 6 часов на работу – это с учётом часов 20 перед этим на всякое разное другое, чтобы с подушками уже не ошибаться и с первого раза сделать более-менее правильно.

30 августа 2021 года, 16:23

Напечатал на 3D-принтере держатель для бутылки. Ее обычное место занято велозамком, да и такое положение гораздо более удобное: легко брать и легко класть обратно. А на место, где обычно крепится бутылка я планирую треугольную велосумку. Инженерное счастье – когда что-то придумал, и вот оно, работает. Первые 30 км уже откатало

Быстрый Прототип для Умной Миски: Первый Шаг к СSmart Feeding | 09 августа 2021 года, 19:05

Первый быстрый прототип умной миски для собаки. Сделал за последние два часа из подручных материалов. Arduino внутри картонной коробки отсылает вес корма на сервер (logz) каждую секунду. Понаблюдаем. Не исключено, что Юки разнесет эту конструкцию довольно быстро. Но прототип он на то и прототип. Вообще в планах поставить платформу на такие же весы, где будет стоять собака едя, и заодно взвешивать и собаку. Это относительно несложно (только габаритно), но забавно будет смотреть, как граммы из тарелки перелетают в собаку. Также в планах сделать дозатор, который будет насыпать корм по расписанию и ровно столько, чтобы заполнить миску. Тоже ничего сложного, нужно чтобы теперь руки дошли.

05 июня 2021 года, 00:56

Я не говорил, что я волейболом увлекся? Только вылезла из инфракрасной печи. Размер около 10 см. Сам дизайн, конечно, не мой, но я уже несколько дней подряд учусь как такое делать в Blender по фото с нуля.

Моя работа в монополии: история о фиаско | 28 мая 2021 года, 10:27

Очень смешная история. Но вообще я поработал в свое время в таких компаниях и в целом понимаю, как понимать такие ситуации. Ну с позиции Software Architect.

Расскажу как программист с опытом оптимизации процессов в крупной компании.

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

Любые ошибки в коде такой общей программы болезненны, потому что страдает вся сеть. Уходят годы на полировку.

Насколько хорошо такие программы-процессы должны покрывать всякие нештатные или редкие ситуации? Понятно, что все ситуации не предусмотришь, поэтому ждут, пока число инцидентов превысит некоторый threshold, а затем начинают это системно решать. Если не превышает, то дешевле забить. Иначе сложность процессов будет такой, что в них будут ошибаться на местах чаще.

Если же превысило threshold, нужно выпускать и распространять “патч”. Этот патч может починить одно, но сломать другое. Поэтому патч нужно тестировать на маленькой сети отделений, а потом постепенно распространять на более крупные. Это все довольно долго, потому что нужно собрать статистику и фидбэк, понять, ничего ли важного не ломает и т.д.

Ну и в такой системе всегда есть огромный перечень фич, который нужно имплементировать и внедрить. Фактически это очень длинный бэклог. Поставьте себя на место владельца такой сети – вы скорее выберете фичу, которая положительно влияет на выручку (плюс 0.05%) или фичу, которая влияет на удовлетворенность 0.05% клиентов?

Плюс очень часто выходит так, что неудобства и проблемы просто не пересекают этот threshold просто потому, что не налажена нормально система обратной связи. Клиенты не жалуются, потому что “оно всегда так было” и потому что “не с чем сравнивать, они тут вообще одни в городе”. Сотрудники не жалуются, потому что и так работает, чего себе работы прибавлять.

Кроме всего, такую распределенная система постоянно подвергается “атакам” и “взломам”. Не только со стороны конечных пользователей, но и со стороны ее операторов – сотрудников отделений. Это когда слабости начинаются использоваться для собственной выгоды. Часто это даже не незаконно. Как и в ситуации с “оптимизацией налогов”, тут просто включается русская смекалка – как использовать слабости в процессах себе на пользу. И получается как со стульями в Икее, которые берут на выходные на пикник, чтобы вернуть в понедельник обратно в магазин.

Любая очень большая система просто полна таких проблем. Решить их можно только раздроблением системы на куски меньшего размера, которые бы между собой конкурировали за качество обслуживания. Так устроены франшизы – взять тот же Макдональдс. Также важно, чтобы на одном поле работало более одной компании – конкуренция все исправит. Это бы починило “Почту России”, которая монополист.

Мои любимые и не любимые стороны работы | 08 апреля 2021 года, 11:46

Я разобрался, что мне больше всего нравится в работе:

1) искать причину проблемы в сложной системе или решение сложной задачи. Это то, что называется troubleshooting, но часто для этого не нужно даже прикасаться к клавиатуре. Еще это часто попадает в категорию reinvent the bicycle. В первом случае это что-то типа головоломки, для решения которых мозг генерит много потенциальных решений, и они друг с другом соревнуются. А руки уже проверяют эти решения и сужают круг вариантов для рассмотрения. Этот режим часто не выпускает меня с работы до поздней-поздней ночи. Во втором случае это желание сделать что-то не из готовых черных ящиков, а с нуля, чтобы разобраться. Коррелирует с п.3

2) создавать что-то по типу: придумал, и вот оно уже работает. Не только в программировании, но и в электронике и механике. Когда-то двадцать с чем-то лет назад я писал тетрис и 3D-редактор. Сложно было объяснить зачем, но было интересно. Ну ок, за 3D-редактор мне какие-то даже деньги заплатили.

3) узнавать новое, учиться новым навыкам и умениям до определенного уровня. Начиная с этого уровня начинается рутина, и какие-то более интересные темы, еще не освоенные, занимают место этих. Типичный пример – когда-то увлекся барабанами и гитарой, и первые шаги было делать очень интересно, а после определенного уровня стало уже не так. В целом, пианино и рисование тоже в этой категории.

Эти пункты крупные. Есть один мелкий – загружать мозг большим числом параллельных задач и с трудом с ними справляться. Видимо, мозг получает от такой нагрузки какие-то нужные ему вещества.

Что не нравится:

1) любые регулярные рутинные вещи. Их приходится делать, но я всегда с удивлением узнаю, что есть люди, которые это любят.

2) принимать участие в общении, темп которого отстает от моего личного темпа и тема не интересна мне лично. Я теряю фокус и со временем перестаю слушать вообще.

3) делать вещи, польза которых мне непонятна, но другие люди говорят, что это им полезно, во что я не очень верю. Такое сплошь и рядом в компаниях, где идет имитация бурной деятельности.

4) организовывать рабочее пространство. Сюда входит все – от порядка на столе до порядка в файловой системе и в окошках в браузере.

с кем у меня совпадают интересы и неинтересы?