2024-10-11

И снова Штирлиц заметил...

У меня есть инстанс GitLab, на котором я хостю свои проекты. Сначала кто-то начал рассылать спам с помощью GitLab Runner, который также хостится там. "Поломали", подумал я. Пришлось сменить пароли и отключить GitLab Runner.

В какой-то момент я заметил, что на инстансе стали появляться новые пользователи, которых я не создавал. "Опять поломали", подумал я! Пришлось удалить всех чужих пользователей, обновить GitLab и проверить логи. Уязвимостей не нашел. Однако пользователи продолжали появляться, а я продолжал их удалять. Использование своего инстанса уже не приносило радости.

И вот, когда мне это надоело, и я решил убрать публичную ссылку под VPN, чтобы извне никто не мог достучаться до инстанса, я обратил внимание, что на главной странице моего GitLab есть ссылка "Зарегистрироваться". То есть, всё это время любой, у кого была ссылка на мой GitLab, мог создавать там пользователей. Я сам не закрыл эту возможность, когда настраивал сервис — балда! Странно, что за всё это время никто не начал майнить биткойны.

 

Оставить комментарий

 
  2024-10-04

NoCode Программирование

В романе Сергея Лукьяненко «Рыцари сорока островов» героям запрещалось смотреть на небо на закате и на восходе, чтобы дети не увидели, как имитация неба на космической станции переключается с ночного режима на дневной и обратно.

У меня в ванной комнате свет тоже имеет два режима работы - ночной и дневной. Мне хочется, чтобы ночью свет в ванной был приглушённым, а не слепил, как днём. Для этого там стоят умные лампочки из ИКЕА, которые имеют управляемые яркость и цветовую температуру. Управляются они при помощи самодельного Zigbee-хаба на базе Zigbee2MQTT. Zigbee2MQTT легко интегрируется с любыми системами умного дома, у меня сейчас ничего умного не стоит, зато есть NodeRed который умеет автоматизировать простые сценарии, а также в нем есть расширение для работы с Zigbee2MQTT, что очень кстати. Всего ламп в ванной четыре: две над зеркалом и две на потолке. Ночью две лампочки над зеркалом выключаются, а лампы на потолке горят с половинной яркостью. Поскольку схема проводки под такую конфигурацию стандартная, включение и выключение света происходит обычным выключателем, к которому дополнительно подключён Zigbee-выключатель без нейтрали. Это маленькое устройство установлено за выключателем в подрозетнике и на использовании выключателя никак не сказывается. Зато оно позволяет включать свет на 30 секунд, чтобы перепрограммировать лампочки на ночной или дневной режим.

Вчера я немного улучшил логику переключения света. Первая реализация алгоритма иногда не срабатывала, так как после подачи напряжения на лампы Zigbee-сети требовалось больше времени для обновления конфигурации. В результате могла возникнуть ситуация, при которой одна из ламп либо не включалась, либо не выключалась, либо переключение вообще не срабатывало. Если переключение не сработало ночью, то худшее, что может случиться, — это то, что вы окончательно проснетесь от яркого света, когда пойдете ночью в туалет. Но если переключение не сработает утром, то чистить зубы придется перед полутемным зеркалом. Чтобы это исправить, я сохранил нужные параметры яркости в глобальных переменных, и если лампе не хватило времени, она скорректирует свою яркость при следующем включении. Вот так выглядит моя текущая конфигурация. Дополнительно потолком можно управлять через панель управления NodeRed и через Telegram-бота.

Что тут скажешь, во-первых, это красиво...

Красиво, да и только... На JavaScript этот алгоритм занял бы полстраницы. Классическое программирование вряд ли когда-либо будет вытеснено no-code решениями. Однако визуальные программы, безусловно, выглядят привлекательно по своей природе.

 

Оставить комментарий

 
  2024-09-15

Редактирование нескольких строк в Vim

Поскольку гитом я привык пользоваться из командной строки, мне часто приходится делать сквош нескольких коммитов. Vim у меня стоит редактором по умолчанию, и хочется использовать его более эффективно, чем при использовании nano. Вот так можно заменить первое слово в нескольких строках с минимальными усилиями.

 

Оставить комментарий

 
  2024-09-09

AR.js

AR.js - это JavaScript библиотека которая позволяет создавать дополненную реальность прямо в браузере мобильного телефона.

На выходных я немного с ней поигрался и сделал маленькую демку. Отсканируйте QR код, откройте страничку в браузере и наведите телефон на изображение еще раз. Если ваше устройсто совместимо с библиотекой, то поверх изображения вы сможете увидеть текст.

 

Оставить комментарий

 
  2024-08-28

JSCad

Стало любопытно, а существует ли версия OpenSCAD но только чтобы работала в браузере? Оказалось что есть! Называется OpenJSCad! OpenJSCad или JSCad - это javascript библиотека которая умеет визуализировать в браузере 3D сцены описанные в виде простых геометрических примитивов.

Проект распространяется под лицензией MIT. К сожалению, файлы OpenSCAD с OpenJSCad несовместимы - синтаксис хоть и похож, но все же немного отличается.

Тем не менее проект довольно интересный, если нужно что-то быстро нарисовать в 3D и нужно чтобы изображение можно было вращать прям в браузере - данное решение подойдет как нельзя лучше.

 

Оставить комментарий

 
  2024-08-21

Про Telegram

Генерал-майор в шинели громко плакал в докладной: террористы охренели, нет зацепки ни одной. Завели себе девайсы — интернет, секретный чат. И попробуй догадайся, с кем о чем они журчат. Где ни сунься — всюду шифр. Ни отмычек, ни ключей. Лишь вагон арабских цифр! И причем, неясно чей! Как ловить бандитов буду? Никаких зацепок нет, если шлет Аслан Махмуду зашифрованный пакет. Нам бы прежних инструментов! Чтобы мы в сетях могли: и проверить документы, и назначить патрули, и явиться с понятыми — всех на сайте мордой в пол. Кто такой? Прописка? Имя? Как давно сюда пришел? Адреса друзей и близких? Что в карманах, ё-моё? Где шкатулка с перепиской? Доставай, прочтем её... Кончилась эпоха Холмса с появлением сети! Мы бессильны! Мы сдаемся! Как нам следствие вести? Нам работать трудно очень! Не хватает важных мер! Нужно больше полномочий. Всех админских, например. Раскрываемости нету! Показатели в нуле! Вот бы сети интернета запретить по всей земле! Вы ж поймите, это важно! Вот вам докладной листок... И сморкался в камуфляжный влажный носовой платок. И так искренне, так чисто прозвучал его доклад, что кивали журналисты. А потом случился ад.

Как вулкан потухший, в жерло получив морской воды, вышел Холмс, который Шерлок. И вломил ему пизды. Встал как призрак из могилы, из музея Бейкер Стрит. «Ах ты ж йобаный мудила!» — он на кокни говорит. «Я всю жизнь проползал с лупой! Под дождем! В говне! В грязи! Подними свою залупу да по кнопкам повози! У тебя зацепок нету?! Ах ты сраный пидарас! А платежки?! А билеты?! Кучи электронных баз?! Вам же треки пишут соты, где носили телефон!!! Сука, блять, иди работай! Недоволен, сука, он! Я искал следы руками! Ты зажрался, стыдоба! У тебя там гроздья камер смотрят с каждого столба! Кто и с кем ходил в подъезды! Кто проехал по шоссе! Кто, куда во сколько ездил — с номерами, сука, все! У тебя народ как дети: трижды в день без выходных постят фоточки в соцсети — погугли хотя бы их! У тебя провайдер каждый видит на любой из хат, кто чего качал из граждан: порнохаб или джихад! Блять, ему работать плохо! Много цифры! Век не тот! Мне бы так в мою эпоху, ебанутый идиот! Ишь, сидят по кабинетам да растят на попе жир! Слишком много интернета! Страшный неуютный мир! Чем внедрять бойцов к бандитам, да учить язык фарси, он сидит себе, пиздит он! Шифры, блять, ему неси! Что просить назавтра будем? Охуели, дайте две! Микрофоны в жопу людям? Ключ от мыслей в голове? Блять, вернуть таких констеблей к нам на землю из кино можно лишь суровой еблей да маканием в говно. Вам совсем заняться нечем! В жопе сажа, бля, горит!» Шерлок Холмс, закончив речи, улетел на Бейкер Стрит.

Генерал-майор платочком вытер божию росу: если все согласны, точка, утверждать проект несу. А у нашего отдела стало больше важных дел: заведем на Холмса дело, чтобы много не пиздел.

(c) Леонид Каганов, 2017 год

 

Оставить комментарий

 
  2024-08-21

Обработка pdf файлов в ChatGPT

В данной статье я хочу рассказать как обработать папку с текстовыми PDF документами при помощи ChatGPT.

Время от времени у меня появляется задача обработать большое количество pdf-файлов содержащих нужную мне информацию. Для того чтобы обработать все документы, необходимо каждый PDF файл открыть прочитать и понять есть ли в файле нужная мне информация. Было бы здорово если бы я мог провести предварительную автоматическую обработку файлов и сохранить результат в текстовом файле, чтобы затем обработать только те файлы которые мне интересны.

К счастью современные технологии предоставляют такую возможность. Рассмотрим это задачу на примере папки на диске с резюме различных искателей я хочу вычленить из каждого документами фамилию имя отчество, должность и сколько лет опыта у каждого.

Сначала попробуем проверить возможно ли это на примере следующего запроса к chatgpt:

я хочу чтобы ты прочитал резюме кандидата и
вычленил профессиональные качества этого человека. 
Меня интересует следующая информация: имя, профессия, сколько лет опыта, индустрия
Постарайся выбирать только факты представленные в документе с минимумом допущений. 
Результат должен быть в json формате следующего вида 
{"ФИО":"Иванов Иван Иванович", "профессия": "software injeneer", "годаОпыта": "10 лет", "индустрия": "геймдев"}
Если информации недостаточно просто оставь поле пустым.

Как мы видим робот смог вычленить нужную мне информацию и вывести ее в нужном мне виде. Значит этот процесс можно автоматизировать.

Для начала на этой странице нужно создать ключи доступа к API chatgpt, чтобы обращаться к языковой модели программно:

После этого на этой странице следует оплатить стоимость API закинув любую сумму от 5 евро на счёт. Даже если у вас уже есть платная подписка к ChatGPT пользование API в нее не входит и оплачивается отдельно. Следует обратить внимание, что не все страны доступные для пользования API. России в частности в списке разрешённых стран нет.

Убедимся что у нас установлен nodejs и npm

# should be something like v20.11.1
node --version

# should be something like 10.8.2
npm --version

Для извлечения текста из pdf установим утилиту pdf2text

# ubuntu users
sudo apt-get install poppler-utils
# mac users
brew install poppler

pdftotext -h
# Copyright 2005-2024 The Poppler Developers - http://poppler.freedesktop.org
# Copyright 1996-2011, 2022 Glyph & Cog, LLC

Клонируем git репозиторий и устанавливаем зависимости.

git clone https://github.com/maxistar/pdf-analiser.git
cd pdf-analiser

# you can also use npm but pnpm is faster but you should install it first
pnpm install

В терминале экспортируем переменную окружения с нашим openai ключом.

export OPENAI_API_KEY="sk-xxxxx...

Запускаем командой npm start чтобы обработать тестовые pdf в папке data/cvs. После запуска результат обработки будет сохранен в файле data/output/files_yyyMMMddddhhmm.csv. Файл должен выглядить примерно вот так:

File Name,Size (bytes),name,title,experience,industry
Forrest Gump.pdf,155415,"Forrest Gump","house-husband/father","43 года","IT"
Forrest_Gump-1.pdf,155415,"Forrest Gump","House-husband/father","43 года",""
Forrest_Gump.pdf,155415,"Forrest Gump","","","Разработка ПО"

После того как мы убедились что все работает копируем наши файлы которые нужно обработать в папку data/cvs и запускаем обработку еще раз. 

Мы обработали папку с PDF файлами содержащими CV соискателей и сохранили интересующие нас данные в csv файл. Следует понимать что языковые модели могут выдавать при одних и тех-же запросах разные результаты, поэтому для более предсказуемого результата можно обработать набор несколько раз и усреднить результат.

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

 

Оставить комментарий

 
  2024-08-20

В GPT4All теперь можно загружать заметки

GPT4All это UI клиент компании Nomic который позволяет загружать большие языковые модели от разных производителей и работать с ними полностью offline.

Загрузил новую версию GPT4All и обнаружил что в ней теперь можно загружать свои файлы которые можно использовать для запросов к большой языковой модели.

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

 

Оставить комментарий

 
  2024-07-06

Сто звезд

Сегодня, зайдя на GitHub, я заметил, что у моего проекта "Простой Текстовый Редактор" кто-то поставил еще одну звездочку. Вроде и проектик простой, и написан не очень, а людям он почему-то нравится. Мне этот проект тоже нравится, и это хороший знак. В багтрекере проекта полно тикетов на тему того, что можно улучшить, а значит, с направлением работы на ближайшее время я определился: буду его улучшать и развивать. Если кто-то тоже захочет мне в этом помочь, я буду только рад!

 

Оставить комментарий

 
  2023-12-04

Большие Языковые Модели в CS50

Гарвардский университет добавил в свои знаменитые лекции по Computer Science CS50 лекцию, посвященную большим языковым моделям. Лекцию читает доктор Мэтт Велш.

Лекция рассчитана на широкий круг зрителей, в ней нет ни одного сложного термина. Эта лекция будет понятна даже для вашей бабушке!

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

Однако мне, почему-то, показалось интересным другое его утверждение. Примерно на временной метке 47:19 на доске спикера написано: "Nobody understands how large AI models works" - "Никто не понимает как большие языковые модели работают". И это то, что меня больше всего поразило в этой лекции.

Я то надеялся, что здесь мне наконец объяснят как работают большие языковые модели. На каком этапе вся эта мешанина тензоров и другой страшной математики превращается в осмысленную речь, а оказалось, что никто на этой планете этого не понимает!

И вот в этой новой реальности нам теперь предстоит жить: если раньше ученые не понимали как работает, например, квантовая физика, то теперь и инженеры признают, что они не понимают как работают машины, которые они создают... Печаль...

 

Оставить комментарий