2025-01-01

Программа для синхронизации заметок на телефоне

Долгое время использую для синхронизации связку Termux + git и доволен как слон. Однако настройка всего этого занимает массу времени и подходит только для технических задротов вроде меня. Подумал, существует ли что-то проще? Поиски в сети не дали каких-либо работающих решений, поэтому мне стало интересно, а можно ли запрограммировать что-то с нуля. Оказалось, что вполне реально. Существует реализация JGit под Java, которая вполне работает, если ее встроить в Android-приложение. Единственную проблему, которую я сейчас пытаюсь решить, это то, что файлы должны быть доступны в общем хранилище андроид-устройства, а напрямую доступа в это хранилище у Android-приложения нет, поэтому приходится дополнительно к операциям с git реализовать операции копирования из внутреннего хранилища устройства во внешнее и наоборот. Как сделать проще, я пока не придумал. Из-за этого мое решение работает значительно медленнее, чем решение на базе Termux. В принципе, не сильно критично, но неприятно - у меня в заметках несколько тысяч файлов, и ждать полторы минуты вместо сорока секунд, когда они синхронизируются, мне не хочется...

Если получится ускорить решение опубликую на Play Market вдруг такая программа не только мне окажется полезной?

Upd: Проблему со скоростью решил, теперь работает даже быстрее чем Termux, потестирую еще некорое время на предмет багов, но кажется получилось что-то полезное...

 

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

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

 

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