Журнал инженера-программиста
245 subscribers
205 photos
7 videos
167 links
Мир глазами программиста. Истории и размышления.

Автор: @Dementor_AK
https://www.linkedin.com/in/dv-kinash
Download Telegram
(начало)

Выбор идеи для пет-проекта на Go


Я как раз в новостях прочитал про очередное OSINT-расследование по GPS-координатам из фоток. Любопытно. Почему бы не анализировать EXIF и прочие метаданные?

К тому же это не накладывало на меня никаких обязательств, так как это хоть и не создание 100500-й версии ToDo-списков или домашних финансов, но различных бесплатных EXIF-сервисов в интернете просто море, практически в каждом графическом редакторе есть просмотр и изменение мета-тегов, уже не говоря про мегапопулярную опенсурсную утилиту ExifTool.


Собрал для реализации короткий список типов изображений, которые поддерживают именно EXIF мета-теги: JPEG, TIFF, PNG и WebP. Небольшой список. Ведь некоторые популярные форматы (такие как BMP) вообще не содержат встроенных метаданных. А другие же (как GIF) могут содержать лишь метки XMP, но их можно засунуть почти всюду и я решил не распыляться.

Хотя именно для GIF я хотел сделать исключение и даже добавил его в детектирование типов файлов для извлечения меток, но потом о нем позорно забыл. Это к слову, о необходимости иметь проигнорированный мною PRD (концепция, требования и поведение) даже на микро-уровнях пет-проектов.


Поскольку я все равно "вскрывал" бинарники картинок и вытаскивал EXIF, то решил заодно вытащить другие популярные (благодаря Photoshop) форматы: IPTC и XMP.

Библиотечные функции анализа файлов сами по себе не интересны и потому к ним нужен интерфейс. Я выбрал все возможные варианты: работа в консоли с аргументами командной строки, работа в консоли в режиме каналов (Piping), работа как web-сервер и работа в привычном оконном графическом интерфейсе.

Я старался максимально опираться на стандартную библиотеку, но там не предусмотрели работу с GUI и пришлось выбирать среди ряда популярных вариантов:
- Wails, что-то типа Electron - нужно описать HTML-интерфейс, который будет работать поверх встроенных WebView2/WebKit;
- Gio, который использует нативные графические элементы из DirectX, Metal и Vulkan/OpenGL, что полнофункционально, но каждая из платформ требует отдельную разработку;
- Fyne, требующий декларативное описание интерфейсов, которые будут выглядеть плюс-минус похожи на всех платформах, но требуют определенный компилятор C для сборки под нужную архитектуру.

Поскольку десктопные вебаппы меня всегда бесили, а с почти нативной разработкой интерфейса связываться не хотелось, то я выбрал последний вариант - Fyne.

Но полностью от веб-интерфейса не отказался. Для демонстрации работы в режиме веб-сервиса добавил демо-страницу, которая демонстрировала работу с API на примере анализа предложенного изображения.


#AI #ИИ #эксперимент #обучение
👍2
За прошедшие два дня я уже достаточно сообщил предысторию проекта и пора заканчивать с интригами 🤓

Результат моего экспериментального обучения языку Go тут:
https://github.com/DementorAK/photometa

Готовые бинарники можно взять из раздела релизов. Но сразу предупреждаю, что это консольная утилита и для запуска GUI варианта все равно нужен запуск из консоли с указанием ключика (в README.md все детально описано).

Если среди моих двух сотен читателей еще кто-то кроме @ellavs знает язык Go, то буду признателен за ваш фидбек.

Но это еще не все. До конца недели будут еще три материала, чтобы подвести черту:

1) впечатления от Go, его идеологии и базовых утилит
2) Google-вабкодинг - что могло пойти не так? проблем хватило
3) неделя попыток задеплоится на Github - взрывы мозга из-за CI

#эксперимент #обучение #Go #AI #ИИ
👍1
Чем интересен язык Go

1. Прост и лаконичен. Он настолько прост, что в языке всего 25 ключевых слова (для сравнения 50 в Java, 90 в C++, а в 1С даже не считая языка запросов и языка СКД - целых 151).

2. Обратно совместим. Уже с самой первой версии языка, разработчики Go пообещали, что любой написанный код будет успешно выполняться на всех последующих версиях языка. Всем знакомы примеры, когда код перестал работать при переходах Python 2 -> Python 3, PHP 3 -> PHP 4 -> PHP 5, 1C 7.7 -> 1C 8.0/8.1 -> 1C 8.3/8.5... А на Go можно найти репозиторий десятилетней давности и он сразу будет работать на текущем компиляторе!

3. Единый стиль. С языком поставляются стандартные проверки оформления и стиля кода - "go fmt" (правильное форматирование), "go vet" (проверка на ошибки и подозрительные места) и "golint" ("дотошник" по стилю, который отругает даже за лишний перенос строк или его отсутствие). Как результат, большинство проектов на Go выглядят очень похоже и для программистов не проблема переключатся между проектами и заняться чем-то новым.

4. Уникальные конструкции. По сути это местный синтаксический сахар и возможно подобное есть в других языках, но я встречаю такое впервые. Ключевое слово Defer описывает команды, которые нужно выполнять при завершении текущей процедуры - т.е. если вы явно открыли файл, то тут же можете оставить завершающую команду по его закрытия, чтобы бы не забыть и далее описывать только логику чтения/записи. Slice как уникальный динамический массив, чтобы явно не выделять память и потом не заниматься явным переносом данных на новое место, когда нужно добавить элемент в уже переполненный массив.

5. Особая обработка ошибок. Большинство функция возвращают два результата - сам результат и ошибку (если ошибки не было, то nil), а разработчик в точке вызова сам думает что с этим дальше делать. Исключений и Try-Catch тут как таковых нет, но можно бросить "панику", которую нужно в текущем потоке (горутине) обработать в блоке defer или вся программа упадет. А еще тут любая ошибка - это по своей сути просто строка без стека вызова.

6. Использование отсутствия переменной - "_" (нижнее подчеркивание). Как я упомянул выше, многие вызовы возвращают сразу два значения - свой результат и ошибку (а при переборе коллекций - индекс элемента коллекции и его значение), но когда они не нужны, то вместо переменной указываем "_" (если создадим переменную, а потом с нею ничего не сделаем, то получим на орехи от линтера)

7. Сильная стандартная библиотека. Из коробки сразу есть работа с файлами, JSON, сетевыми подключениями и так далее.

8. Встроенное тестирование. Можно обойтись без внешних фреймворков тестирования - достаточно "go test", который может и все тесты прогнать, и гонку данных найти, и покрытие кода посчитать. Особенность - тесты не выносятся в отдельные директории и лежат прямо рядом с тестируемым кодом внутри своих пакетов (а потому имеют доступ к не-экспортируемым свойствам и методам) и их файлы имеют предопределенный суффикс в названии "*_test.go". А так же есть поддержка "примеров использования" - это подвид тестов, где имя функции начинается на префикса "Example*", и где показан пример вызова с некими значениями и описан ожидаемый результат (с ним идет сравнение при тестировании).

9. Встроенная документация. Код и тесты с примерами формируют автодокументацию, которую можно просматривать стандартными утилитами: "go doc" для консоли и "godoc" или pkgsite для веб-версии.

===

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

Вероятно нужно сделать что-то более серьёзное, чтобы прочувствовать всю силу гоферной философии и поймать хотя бы половину популярных шишек на граблях. Но пока в новом языке все выглядит очень просто и радужно. Особенно на фоне опыта с 1С 🥸

#обучение #Go
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍1
Я попробовал вайбкодить (точнее писать код выше уровня учебного пет-проекта на языке, который практически не знаю) в среде Google Antigravity. В целом все получилось, но были нюансы.

Сразу о плюсах:

0) Antigravity - это VS Code, а следовательно крутые общие плагины, из которых я сразу установил: работу с Go, GitHub, Markdown, Mermaid (диаграммы Markdown) и специфический Antigravity Cockpit для анализа использования токенов.

1) чат агента поддерживает простую смену LLM - если закончились токены на Claude Opus, то работу можно заканчивать с GPT или моделями Gemini.

2) можно вести несколько чатов и переключаться между ними из истории (например, для параллельных взаимозависимых робот, когда не хочешь перегружать контекст конкретного агента суммарным описанием задач)

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

4) даже при завершении лимитов всех моделей, умное редактирование кода продолжает работать (автодополнение имен переменных, автозавершение типовых блоков кода, перемещение по умному Tab и так далее)

5) когда программа падает с ошибкой или выводит в консоль отладочную информацию, то содержимое консоли можно выделить и тут же задать агенту вопрос по проблеме или даже просто потребовать исправить.

6) когда синтаксический контроль подсвечивает ошибку в коде, то при наведении мышкой можно не только прочитать описание ошибки, но прямо тут нажать кнопку исправления и тем самым запустим агент на исправление проблемного места.

Но были и минусы:

1) Режими работы иногда не работали - если Claude Opus/Sonnet в режиме Плана еще как-то придерживались правил и сперва предлагали на утверждение свои работы, то родные для системы Gemini (и PRO, и Flash) очень часто плевать хотели на условности и сразу начинали что-то менять в коде, не спросив разрешения и не показав план.

2) В какой-то момент сломалась история чатов и я мог перейти только в некоторые из старых, а все новые перестали фиксироваться - т.е. начав новый чат, можно прощаться с контекстом предыдущего.

3) Очень часто обрывались соединения, а кнопка "продолжить" повторно снимала токены у текущей модели. Обычно модели Claude мне хватало на одну-две фичи, но из-за сбоев мог потратить весь недельный лимит на одну задачу и не получить ответ - приходилось переключатся на другую модель, чтобы результат работы не пропал.

4) Пару раз ловил модели на удалении тестов - один раз я попросил добавить тест для новой функции из пакета и агент это сделал, удалив ранее существующие; а второй раз агент не мог разобраться с ошибкой и решил креативно решить проблему удалением "проблемных" проверок.

5) Некоторые задачи не могла сделать вообще никакая из доступных моделей. Так в Fyne я хотел вывести дерево файлов и их свойств, но это упорно не получалось и на форме было пустое поле - Claude Opus и прочие пробовали заставлять меня по кругу делать рефакторинг и какие-то нелогичные настройки, которые даже теоретически не могли помочь. Мне пришлось самостоятельно читать документацию по деревьям в Fyne и найти причину проблемы - обязательное указание нулевого корневого узла (он не видим, но нужен для рендеринга).

===
Если в начале моего #AI #ИИ #эксперимент #обучение я был полон энтузиазма и даже собирался покупать подписку Google, то ближе к финалу охладел к затее. Пожалуй, продолжу быть их "бесплатником" 🤓
🔥3
🚗 Еще один баг платформы.

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

Дело в том, что в общих модулях в расширениях не предусмотрели свойство "Привилегированный" (Privileged), а потому механизм расширений выполняет код как обычный.

Если чесно, то выглядит как глюк, а не как взвешенное архитектурное решение.

Если у вас далее по коду есть проверка привилегий и вы не хотите получить ошибку, то вам придется явно повысить привилегии:

#Insert
SetPrivilegedMode(True);
#EndInsert
Please open Telegram to view this post
VIEW IN TELEGRAM
😱5👍1
Увидел интервью с Джорджем Мартином, автором "Игры Престолов". Любопытно, что уже успел забыть про него и про то, что в книжной истории должно быть еще два тома - ведь автор 14 лет никак не закончит "Ветра Зимы" (предпоследний согласно плану).

Мартин говорит, что написал для этого тома уже много. Так много, что сам запутался в собственном материале:
Я написал главу о Тирионе, которая мне очень понравилась, но потом понял, что она изменит всю книгу. Я готов был превратить ее в серию снов, но это бы тоже не сработало


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


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

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

=====
Можно было бы пожалеть Мартина, от которого на старости лет требуют слишком многого, но только если забыть, что он паралельно рубит бабло на других книгах, сценариях к сериалам и творческом контроле над "Домом дракона" и "Рыцарем Семи Королевств" (сериалы-приквелы к "Игре престолов"). Если закрыть глаза на факты и только читать интервью, то да - он старый, нет сил на творчество...
👍2
Я сейчас в кафе библиотеке моей родной больницы.

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

Книги остались, но немного как антураж. Интересные наименования: этикет для детей, энциклопедия, история ковров, темная башня Кинга, затмение Мейерс, книги по финансовому учёту и менеджменту от Приватбанка... На любой вкус 🤓
3
🛠 АНАЛИЗ СИГНАЛА: Извлечена информация о действиях Магоса Павла Дурова, надзирателя над когитаторной сетью Телеграмм.

🛠 СУТЬ ПРОТОКОЛА: Вышеупомянутая единица оповестила ноосферу о внедрении новых алгоритмов Истинного Механикума. Данные скрипты позволяют трансформировать текстовые пакеты и общественные манускрипты, придавая им различные лингвистические паттерны.

🛠 ЛОГИЧЕСКАЯ ОЦЕНКА:

⚙️ РАСХОД РЕСУРСОВ: Зафиксировано нецелевое и расточительное распределение вычислительных мощностей священных машин. Дух Машины принуждается к совершению тривиальных и развлекательных циклов.

⚙️ ДЕГРАДАЦИЯ СМЫСЛА: Бинарный анализ указывает на критическую угрозу. Стилизованные инфо-сообщения утратят свою изначальную чистоту и полноту данных. Оригинальные замыслы создателей подвергнутся энтропии и искажению, что эквивалентно ереси неточности.

01101100 01101111 01100111 01101001 01100011

🛠 ЗАКЛЮЧЕНИЕ: Изменение формы в ущерб содержанию есть пренебрежение священным знанием. Плоть слаба и ищет забав, в то время как сталь требует четких команд.

Да пребудет с нами чистота протокола. Омниссия ведает истинный путь.
2😱22🗿1
У нас в больнице электронный документооборот с особым вайбом 🤪

Документы изначально создаются в электронной системе. Потом печатаются на принтере, чтобы быть подписанными от руки врачами. Потом в специально выделенном кабинете сектора ЭДО специально выделенный специалист ставит мокрые печати. Далее эти документы нужно отсканировать и вложить назад в электронную систему.

Хештег - Будущее уже здесь! 🤓
😁5🔥21💅1
💊 Хочу добавить еще пару слов про современные технологии в украинском медтехе

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

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

===

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

В Украине есть глобальная информационная система, которая объединяет всех врачей и пациентов, содержит все декларации, медицинские карты, направления на обследования и результаты этих обследований - esoz.gov.ua Раньше в эту систему доступ был лишь у врачей и клиник, но с недавнего времени и пациенты могут зайти по личному ЕЦП (можно Дия.Подпись). Только на этом портале есть исключительно информация по действующей Декларации и моя контактная информация.

Еще есть очень популярная медицинская система - Helsi. Только в этой системе никогда не было никаких данных про меня, хотя мне периодически приходили из нее информационные СМС про обновления в Карточке Пациента. Я несколько общался с их службой поддержки и оказалось, что у них есть технические ограничения, по которым они могут показывать информацию только пациентам, которых зарегистрировали доктора, которые заключили договоры на обслуживание в Helsi, а всех остальных в ЕСОЗ система не видит. Если я хочу получить доступ к своим данным, то мне нужно разорвать Декларацию со своим текущим врачом и заключить с одним из ихних, а так же платить абонплату за обслуживание - лишь так я увижу свою Карточку Пациента.

С недавних пор киевские поликлиники вместо Helsi стали работать с Health24. Это как глоток свежего воздуха - я тут сразу вижу посещения врачей последнего года, направления на обследования и даже умудрился записаться день-в-день на бесплатный прием по направлению к врачу, к которому окно для "бесплатников" по словам регистратуры поликлиники должно было появится в следующем месяце. Но тут почему-то не было свежих направлений (только старые и факты посещения по ним врачей) и еще не было данных по моему семейному врачу - т.е. интеграция с ЕСОЗ тоже не идеальна.

===

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

Хештег - Будущее уже здесь! 🤓
🔥3
В комментариях к предыдущему посту @sagittarius_s задал интересный вопрос про семейных врачей:
А это как? Просто врач к которому обращается по любым вопросам все домашние или же он на постоянной оплате и всегда на связи?


В Украине статья 49 Конституции по прежнему гарантирует бесплатную медицину, но форма ее предоставления уже не та, что была во времена УССР и первые десятилетия независимости. Последняя медицинская реформа закрепила следующую схему медобслуживания:

1) Ты должен заключить договор под названием "декларацию семейного врача" с терапевтом на свой выбор - это ключ к дальнейшему обслуживанию.

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

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

4) За каждого "декларанта" терапевт получает доплату к зарплате - это стимул оказывать услуги на минимальном уровне, чтобы пациенты не убегали и не искали более квалифицированного специалиста, но количество разрешенных "декларантов" ограничено, чтобы терапевты из поликлиник не жирели и оставляли "доход" для других желающих терапевтов (в том числе из коммерческих клиник).

5) Посещения терапевтов по декларации - всегда бесплатное, даже если они работают в коммерческой клинике. Но только терапевтов!

6) Терапевт может послушать жалобы, померять пульс и давление, и при подозрении на какую-то болезнь выписать направление на клиническое обследование и/или консультацию узкого специалиста и/или на госпитализацию. Госпитализация в больницах без направления "семейного врача" в Украине запрещена!

7) При наличии "направления от семейного врача" можно сдать анализы и пройти нужного врача бесплатно, но в порядке очереди "декларантов", которая растягивается на 1-2 или более месяцев. За каждый прием или анализы по направлению в рамках декларации больницы потом (через месяц, через квартал, как получится) получают из бюджета компенсацию, а поскольку им нужны живые деньги, то количество "бесплатных" мест строго ограничено даже в "бесплатных" поликлиниках - врачи отпускают 1-2 по декларации и далее сидят в пустых кабинетах в ожидании "платников" (если мне не получалось попасть по направлению в течении недели, то я платил в кассу и за день-два все проходил.

Итого ответ на вопрос: "нет".

Вся семья у врача не обслуживается и, не смотря на громкое название, "семейному врачу" абсолютно фиолетово наличие у тебя семьи и чем они там болеют.

Так же семейный врач не дает своих личных контактов; консультации оказывает исключительно на своем рабочем месте и исключительно в свои рабочие часы; на время своего отпуска "семейный врач" приемы прекращает и если кому-то что-то срочное, то он может перезаключить декларацию с другим терапевтом; а все записи на прием нужно делать через регистратуру больницы/поликлиники, где работает терапевт.
👍1😱1👌1
Когда люди узнают, что я "айтишник" и "тыжпрограмист", то им сложно сдержаться, чтобы не попросить помощи со своей техникой. За последний месяц было четыре таких случая - два в больнице и два в моем доме 🫣

1) Дежурная медсестра Вика. Ей достался "в наследство" от старшей сестры ноутбук Acer. В целом работал, но сильно тормозил, а ей нужно было проходить некие курсы повышения квалификации через интернет. Сначала она попросила помощь у больничного сисадмина, но тот ответил, что проблема в диске и нужно покупать новый. На покупку нового диска у медсестры денег не было и она попросила меня посмотреть. Я засел у них в сестринской и хорошенько вычистил весь хлам, который на ноуте накапливался более десятилетия. Отдельно нужно было почистить от плагинов Google Chrome, где были тормозные "подарки" от Яндекса и МэйлРу. В результате получили систему, которая летает. С учетом количества капельниц, которые Вика мне поставила, от дополнительных благодарностей я отказался.

2) Мой лечащий врач Юрий. У него был Google Drive на рабочем компе в ординаторской и он хотел его же подключить на своем Macbook. Сначала мне задачка показалась простенькой и я быстро все настроил, но врача удивило, что он не увидел на ноутбуке своих документов с компа. Начал проверять и... - это оказались разные Google-аккаунты: на ноутбуке был его личный, а на компе аккаунт который ему создал больничный сисадмин. В общем добавил второй аккаунт на компьютер и перегнал файлы с одного аккаунта на второй. В результате на ноуте появились все нужные документы. О дополнительных благодарностях речи не было, так как врач и так про меня помнит и когда появляются мои лекарства, то сигналит в телегу, чтобы подъезжал и забирал.

3) Соседка Елена. Мы всегда здоровались с моей соседкой, которая на инвалидном кресле катает свою дочку с ДЦП. На прошлой неделе она внезапно меня позвала: "Димочка! А ты же хорошо с компьютерами ладишь?". Оказалось, что на планшете ее дочери (она не может ни двигаться, ни говорить, но все отлично понимает и пользуется планшетом) заканчивается место и она не хочет потерять все фотографии - попросила перекинуть на флешку. В процессе оказалось, что у них дома есть ноутбук, на котором она планировала с флешки смотреть фотографии. Я просто зашарил на ноуте папочку по сети и поставил на планшете CX Проводник, чтобы скопировать все фотки. Этого им оказалось достаточно и флешка не понадобилась. В благодарность мне надавали часть запасов, которые им приносят в виде помощи: несколько пакетов с крупами, бутылку подсолнечного масла и шоколадку (это уже просто от них) - все это с аргументацией, что им дают много и они все не съедают. Я не остался в долгу и занес им в ответ парочку наших закаток - варенье с абрикосов и со слив, которые у нас уже второй год стояли, и которые мы тоже не успеваем съедать 😂

4) Сосед Николай. Николай - это муж Елены, отец ее дочери и они живут в одной квартире, но их отношения настолько специфические, что я его вынес в отдельный случай. Когда я был у них в первый раз, то он все время пытался что-то мне сказать, но его останавливала жена, потому-что это она меня позвала и я решал ее вопрос. Поэтому мы договорились на отдельный день и я вчера поработал только с ним. Его ноутбук (тот самый куда я ранее перекинул фото) сильно тормозил - при открытии все 4 Гб ОЗУ были забиты и сильно свопило. Для понимания проблемы - там было 3 антивируса и 2 ВПН. На чистку в условия постоянного свопа ушло два часа, но в результате после перезагрузки и при включенном Mozilla Firefox с открытым Youtube еще почти полтора Гб ОЗУ оставались пустыми и никакого свопа. Еще посмотрел его телефон, но там уже быстро - просто базовые проверки. В этот раз меня домой отправили (не имеешь права отказываться, а нам все равно столько не нужно) с двумя бутылками подсолнечного масла и килограммом меленого кофе.

Все четыре случая дело было не в полной тишине, а с фоновыми беседами - они все паралельно рассказывали различные интересные истории из своих жизней. За время войны и годы работы на удаленке я уже соскучился по подобным разговорам.
3🔥2👍1
Наконец посмотрел интервью Как сдать проект на 1С за 5 секунд? от 2 мая Сергея Сыпачева с Игорем Апресовым. Было весьма любопытно.

1) Кунг-фу конфа. Было удивлением узнать, что это отдельный проект Игоря и Димы Котова. Ранее считал, что это продолжение "Желтого Клуба" и Игорь с Димой просто приглашенные звезды. Помню, что Игорь часто захаживал к Евгению с Воронежа (в кепке), а потом они вместе запустили курс по "чистому коду в 1С". Продвижение "чистого кода" плавно перешло в продвижение "кунг-фу конфы" и если там был Евгений, то уже лишь в качестве приглашенной звезды.

2) Стандарты 1С. Игорь рассказал о своей бывшей работе в 1С, где он согласовывал принятие новых стандартов. Было озвучена интересная мысль, что нечитаемый "юридически" формат стандартов на ИТС (который никто не читает) является сознательным выбором фирмы 1С и у этого есть причина, которую нельзя озвучивать. Прозвучало как "пиз@6ж" - если стандарты внутренние, то их бы вообще не публиковали, а если публичные, то они обязаны быть доступными и понятными каждому.

3) Юнит-тестирование. Слушать про транзакции как "серебряную пулю" было очень странно. К подобным юнитах на транзакциях я пришел в первый же день, как мне нужно было написать свой первый юнит и мне это казалось естественным. Естественным, но ущербным убожеством поскольку: 1) транзакция замедляла выполнение юнит-тестов, которые по своей сути задуманы как сверх-быстрые проверки, которые должны выполняться тысячами за минуты; 2) создавали риск блокировок при параллельном выполнение тестов. В идеале юниты должны выполняться в миниатюрной версии платформы без реальной базы данных - лишь API и мокирование всего внешнего. Возможно когда-нибудь 1С даст нам юниты или их вновь первыми разработают "вольные стрелки" на базе OneScript.
👍5👌1
Прямо анекдотический случай с хваленым Opus от Anthropic 🤦

Контекст. Я как многолетний фанат Far Manager использую его не только на Windows, но и на Linux. Решил сделать себе один полезный плагин. Вроде все по документации, но плагин не подтягивается.

У меня в Antigravity как раз был лимит, которого обычно хватало на несколько дней работы Opus/Sonnet. Не думая о подвохе, задал Opus'у задачу сверить мою реализацию библиотеки с заголовками в SDK (тут же на диске) - ведь очевидно, что где-то что-то пропущено.

Opus в результате нашел разбежность в двух методах, но в процессе зачем-то полез на Github и долго медитировал над проектом far2l (линуксовый порт Far) и над реализацией похожих плагинов. Агент занимался этим странным веб-серфингом пока не просадил токены почти в ноль.

Почему Opus полез серфить? Может моя локальная копия SDK устарела?

Я спросил Opus об целях его внезапном веб-расследования и получил ответ на скрине, ответ в духе последних новостей "да, я удалил прод, не нужно было этого делать". Чтобы получить это объяснение, были потрачены остатки лимита и Antigravity предложил мне докупить новые токенов для продолжения в том же духе.

P.S. К слову, PocketOS, которая потеряла прод и с ним все бэкапы, обожглась на этих же хваленных моделях от Anthropic.

#AI #ИИ #Anthropic #Opus #Antigravity
😁61🤔1
На работе с 1С:Напарником как-то не заладилось и он все еще больше галлюцинирует чем дает пользы - вероятно его обучали для помощи с доработкой типовых, а не в целом под 1С:Предприятие. Свои персональные подписки для рабочих вопросов я естественно не использую (это было бы странно), таким образом из современного разнообразия ИИ я временами использую только бесплатный Cursor. Иногда очень удачно 👍

Но стоит и про фейлы рассказать, чтобы картинка мира была без розовых очков
🔥

Вчера решал одну "простую" проблему - было два документа, в первом из которых контрагент при смене договора подставлялся, а во втором - нет. При чем визуально реализации были абсолютно идентичными и использовались одни и те же общие модули. Очевидно, что проблема была где-то внутри из-за срабатывания некоего "побочного эффекта", но пока не было понятно где именно 😳

Я сделал замеры производительности в EDT 🤝 для обоих сценариев, но их сравнение стандартными средствами - это почти как ручная отладка, за которой можно час за часом весь день впустую просидеть и не найти ответ. И тут я вспомнил про своего ИИ-джуна 🤨

Выгрузил оба замера в файлы и скормил их в Cursor с задачей отследить прохождение общих модулей и найти развилку, где поведение изменилось. Агент долго grep-ал и по итогу написал "Эврика, я нашел!" и выдал место в коде, которое было идентично в двух сценариях 💫

На всякий случай перепроверил предложенный фрагмент, но нет - там все точно было идентично и не могло быть причиной проблем. Указал на это Cursor-у и получил ответ, что мне нужно оплатить Pro-подписку, если хочу продолжить общение 💰

"Абстрактный вайбкодер" на моем месте вероятно заплатил бы подписку Cursor и продолжил бы ждать ответ, но я просто закрыл Cursor вместе с EDT 🤝 и открыл старый добрый Конфигуратор 🛠, где на модулях можно одновременно показать два и более замеров производительности. Прошло примерно минут десять сканирования кода моими органическими глазами и в глубинах событийного движка я нашел тот самый рудиментарный Если...КонецЕсли из устаревшей логики, на котором обработка смены договора останавливалась и удаление которого привело систему в порядок 🍺

💗 Мораль истории - никому не верим на 100% и никогда не отключаем собственные мозги!

#1С #cursor #vibecoding
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥71
При работе с платформой 1С есть три типа ошибок: 1) ошибки пользователей, 2) ошибки платформы и 3) ошибки обстоятельств 🧐

Ошибки обстоятельств просто бесят - тут некого бить по рукам инструкциями и нельзя забагованные функции обложить красными флажками. Тут у нас функционал, который вроде у всех работает и даже почти всегда стабильно работает у тебя, но иногда почему-то не работает 🫣

===

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

Прохожу отладкой - все есть пока не сработает процедура "установки видимости и доступности", после которой поле пропадает с формы, при чем у самого элемента видимость сохраняется, но пропадает у его группы (для выравнивания).

Смотрю процедуру - группу там не трогают, но видимость самого элемента явно устанавливается в зависимости от типа договора (если тип Прочие Взаиморасчеты, то большинство реквизитов скрываются), но значение устанавливаемой видимости было Истина. Прохожу внимательно отладкой процедуру - элемент как был видим, так и остался видимым после установки видимости; группа тоже остается видимой вплоть до выхода из процедуры - т.е. на шаге КонецПроцедуры все еще Видимость=Истина, а на следующем шаге уже Видимость=Ложь.

Подобное поведение очень похоже на работу расширения, но расширений в базе не было. Хотя может кеш? На всякий случай для промежутка вызова проблемной процедуры запустил "Замер производительности", но в отчете были только шаги внутри процедуры с явной установкой видимости в Истина. Т.е. некая сверхъестественная сила решила менять видимость у элемента, но только при условии, что Объект.Ссылка указывает на пустую ссылку, а иначе не мешает 👻

Аналитик напомнила, что все работало до принятия на GitHub последних правок с добавлением одного специфического поля, которое практически всегда скрыто. К слову, как раз тот случай, когда для формы нужно работающее условное оформление, но оно управляет видимостью только для элементов таблиц. Для этого нового поля видимость включала/выключала все та же общая процедура видимости/доступности и значением для новых элементов всегда было Ложь.

Открываю XML формы, нахожу новый элемент, смотрю его айдишник, делаю поиск по форме и БИНГО - это тот же айдишник, что и у группы, которая внезапно начала терять видимость. Истинной причиной паранормального поведения формы было, что при тестировании фичевых пулл-реквестов образовалась небольшая очередь, в результате которой было паралельно создано два пулл, в первом из которых добавлена новая группа, а во втором с тем же айдишником добавлено новое поле. Каждая из двух веток сама по себе работала верно, но их мерж в основной проект испортил форму (не в первый раз). После исправления задублированного айдишника все заработало 👍

===

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

#1С #полтергейст #баги
Please open Telegram to view this post
VIEW IN TELEGRAM
👻3
🟡 Соскучились по ошибкам из мира 1С?

Есть полностью стандартный ЗУП на поддержке без доработок. У нескольких пользователей ничего не открывается: ни документы, ни отчеты. Если смотреть в журнал регистрации, то там при открытии формы или при компоновке отчета идут вызовы в общие модули кадрового учета и :

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
kaynağı:
{(30, 2)}: Sözdizim hatası "İç"
<<?>>İç СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизическихЛиц КАК РегистрСведений


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

Стеки вызовов ошибок ни о чем не говорят. Где-то внутри ЗУП его 100500 функций формируют текст запроса согласно настроек, функциональных опций и прав доступа, а на выходе в результирующем запросе вместе строки "ВНУТРЕННЕЕ СОЕДИНЕНИЕ" почему-то "İç СОЕДИНЕНИЕ". Но при этом в моем англоязычном интерфейсе все работало, а включать ради тестирования турецкий язык системы я не решался...

Подсказкой для поиска стало то, что во всех ошибках в строке псевдоним задавался как "РегистрСведений". Я выполнил поиск по конфигурации и нашел все 6 мест, где для присоединяемой таблицы задавался такой алиас - это были шаблоны запросов, которые далее скармливались в ЗарплатаКадрыПериодическиеРегистры.ОписаниеЗапросаПоТексту(), а там шаблон передавался схеме запроса и на базе этого объекта делалась верстка нового запроса:

Для Каждого ИсточникСхемы Из Оператор.Источники Цикл
Для Каждого Соединение Из ИсточникСхемы.Соединения Цикл
ОписаниеСоединения = СтруктураОбъединяемогоЗапроса.Соединения.Добавить();
ОписаниеСоединения.ВедущаяТаблица = ИсточникСхемы.Источник.Псевдоним;
ОписаниеСоединения.ПрисоединяемаяТаблица = Соединение.Источник.Источник.Псевдоним;
ОписаниеСоединения.ТипСоединения = Строка(Соединение.ТипСоединения);
ОписаниеСоединения.Условия = Новый Массив;
ОписаниеСоединения.ПорядокСоединения = ПорядокСоединения;
КонецЦикла;
КонецЦикла;


По листингу видно, что в свойство ТипСоединения для описания нового соединения закидывалось представление, которое получено из ТипСоединенияСхемыЗапроса.Внутреннее (QuerySchemaJoinType.Inner) с помощью функции Строка(), которая возвращает представление согласно региональных настроек пользователя (для турецкого это "İç"). Платформа 1С поддерживает 23 языка для отображения представлений внутренних значений, но язык запросов поддерживает только русский и английский.

#1С #баги
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5👍2
Журнал инженера-программиста
🟡 Соскучились по ошибкам из мира 1С? Есть полностью стандартный ЗУП на поддержке без доработок. У нескольких пользователей ничего не открывается: ни документы, ни отчеты. Если смотреть в журнал регистрации, то там при открытии формы или при компоновке отчета…
В комментариях к предыдущей записи @Cryptabuser888 спрашивал почему в Украине до сих пор не написали аналог 1С.

Как мы видим, наличие огромного штата разработчиков, и еще большего количества внедряющих партнеров, и сотни тысяч клиентов за несколько десятилетий так и не сделали решения 1С идеальными. До сих пор "Шаг влево, шаг вправо" => баги сразу во все стороны как тараканы в общем вагоне.

Мало кому хочется быть подопытной свинкой, чтобы своими деньгами оплачивать отладку на своем бизнесе экспериментов от ноунеймов. А лицензии от SAP, Oracle и Microsoft неплохо кусаются и никто почему-то не хочет проспонсировать переход украинского бизнеса с 1С на "западные аналоги".
👏1
Просто знать о факте существования технологий не достаточно. Без практики любое знание ничего не стоит!

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

Прекрасный и вдохновляющий пример - Владимир Харин (@vladimir_kharin), который рассказывал о применении Cursor для 1С, задолго до того как благодаря Олегу Филиппову это стало мейнстримом.

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

Все, что Владимир описал в своем докладе логично и каждый мог сам догадаться до конкретных элементов. Магия приходит, когда все это применить в едином системном подходе. Именно так и должен работать ИИ в 1С, а не вот это вот всё со сборкой в Cursor очередной одноразовой обработки.

#1С #ИИ #AI
👍4🔥2
Почему так мало постов?

Мои старые читатели помнят, что ранее я не мог сдержаться и писал почти каждый день (иногда по несколько заметок в день). Неужели у меня пропало вдохновение? Нет, причины лежат в оффлайне.

1) Прошел год со времени, как ракета уничтожила подъезд от крыши до подвала в соседнем доме, по адресу тещи, где я жил более десяти лет. До нашей квартиры от эпицентра взрыва было не больше 50 метров и потому по всем стенам и потолку пошли трещины (теща пряталась в коридоре и отделалась испугом). Попытки получить компенсацию не увенчались успехом. Соседи, кто шустрее, получили компенсацию в первые месяцы, но мы до осени занимались только внесением квартиры в электронные реестры (обязательное условие для компенсации), поскольку это была старая хрущовка с докомпьютерной эпохи и никто не оцифровывал старые документы (еще был отдельный квест с распознаванием печати на документах, которая практически стерлась, но поле регистратора было обязательным при подачи заявки на включение в реестры). И сейчас окончательно получили отказ.

2) Накануне годовщины с квартирой тещи несколько реактивных беспилотников влетели в соседний дом бабушки моей жены. Бабушка не пострадала, так как успела умереть месяцем ранее. А вот теще не повезло - она как раз приехала посмотреть на ущерб после первого прилета, когда произошла новая атака со взрывом, ударная волна которого довыбивала остатки окон и засыпала тещу осколками стекла. В доме ОСББ и жильцы сразу подали коллективный запрос на компенсацию, который сразу отклонили - денег нет!

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

3) Рейды ТЦК по Киеву ужесточились. Буквально вчера услышал крики из окна и выглянув увидел классическую картину. "Группа оповещения" схватила в парке парня, который выгуливал собаку. "Добровольца" вместе с его собакой силой засунули в серебристый фиат на глазах продавцов и покупателей нашей сельскохозяйственной ярмарки, и те попытались отбить парня - кричали, стучали по стенам машины, пытались перекрыть дорогу выезда из парка. Но видимо премии за поимку были важнее и бусик начал газовать прямо на протестующих, так смог вырваться из окружения и уехал с добычей.

4) Моя отсрочка от призыва действует до 30 июня (т.е. прекратится через три дня). Следующую должны были дать автоматически по моему запросу через Резерв+, но на днях Минообороны сообщили, что отключили связь с госреестрами и получение отсрочек онлайн не будет работать какое-то неопределенное время...

5) Моя болезнь крови обострилась и последние три недели все анализы очень плохие. Пытаемся с моим семейным врачом и гематологом понять причину, но пока безрезультатно отмели две гипотезы с сопутствующими заболеваниями. Видимо проблема сложнее. Чтобы сдерживать болезнь, я принимаю дорогие препараты по тысяче баксов в месяц - покупать с рук у перекупщиков на 10-20% дешевле чем в аптеках, но есть риск попасть на подделку. Если я ел подделки месяц или два, то это очень плохо и болезнь имела время адаптировать к лекарствам...

6) У нашей кошки уже более полгода были узлики на груди, но нам в нашей ветеринарке ответили, что хирургическое вмешательство в ее случае (нефроз одной почки со времен жизни в приюте) только повредит и нам нужно наблюдать. Неделю назад один из узлов сильно напух и отвердел. Кошка начала его вылизывать своим шершавым языком и вскрыла образование (сняла кожу над опухолью) после чего начался плохой запах. Ветеринар сказала, что нужно срочно делать операцию, а пока с помощью бандажа ограничить возможность вылизывать опухоль. Операцию мы провели у нашей знакомой хорошей докторши, которая уже спасала многих кошек наших родственников и знакомых. Оказалось, что из-за мастита с застоявшимся молоком (старые уплотнения) внутри уже развился гнойный абсцес, который давал тот запах. При операции хирург удалила весь левый пакет молочных желез, так как опухоль пошла от груди почти до паха. Это была очень тяжелая и сложная операция и потому менее проблемный правый пакет желез трогать не стали и отложили операцию на август, если кошка успешно переживет последствия текущей операции. Пока все хорошо. Уже прошло больше недели со времени операции и вчера на осмотре сняли большую часть швов. Но для нас с женой это тяжело и были бессонные ночи с контролем, чтобы кошка не вылизывалась и активно не бегала (не считая таблеток и бесконечных уколов).

7) Для завершения стоит упомянуть погоду. Сейчас очень жарко и, как на зло, начались традиционные пожары в области. Вчера весь Киев был затянут мерзким смогом и даже ночью нужно было держать все окна закрытыми без притока свежего воздуха. Когда я пробывал приоткрывать окно, то в квартиру сразу шел тяжелый запах гари.

#войнаимир #offline #irl
Please open Telegram to view this post
VIEW IN TELEGRAM
😢8🤯2
Когда я по просьбе компании 1С проходил опрос по опыту использования EDT, то уже тогда у меня сложилось впечатление, что все это "шляпа". Ведь если бы я был тимлидом разработки EDT, то ответы на эти вопросы мне не несли практическую пользу и никак не изменили бы мои планы работ, и разве что послужили как инструментом "общественного мнения" в рамках корпоративных споров за планирование ресурсов.

Недавно был вебинар по результатам опроса. Результаты, которые собрала команда разработки EDT, оказались такими же скучными и бестолковыми как сами вопросы. Тоже касалось озвученных планов - что-то смутное в духе "за все хорошее и против плохого". Единственная замеченная польза этого вебинара была лишь в вопросах слушателей, которые подняли несколько важных тем - но это было лишь каплей из моря вопросов и претензий (всего три-четыре человека, с разным опытом, безсистемно)...

Снова заметил ощущение "скрытой шизофрении".

В то время, как Нуралиев и его "апостолы" утверждают, что EDT должен быть основным инструментом разработки вместо Конфигуратор, развитие которого остановлено много лет назад, в это же самое время сама EDT-команда считает, что делает только инструмент для вендоров тиражируемых решений. Поэтому потребление памяти не является проблемой, так как запуск EDT планировался лишь на оборудовании разработчиков, системные требования к которому на голову выше чем требования к оборудованию для запуска 1С:Конфигуратора. Поэтому годовое (иногда больше) отставание по поддерживаемым версиям платформы - ведь вендорам не важно на новые функции и исправления ошибок, если они должны поддерживать свои решения на старых платформах, а значит с поддержкой новых версий в EDT нет повода спешить. Работать в EDT должны не все подряд, а только лучшие из лучших, а следовательно нет смысла делать юзер-френдли интерфейс и понятную документацию, а поиск причин возникающих при сборке конфигураций в гигантских java-stacktrace никого не смутит.

Чтобы лично я сделал по другому?

1) Если хватает людей, то я бы поменял отношение к командам, которые уже используют EDT - это не должны быть враги, которые закидывают багами и портят планирование бэклогов. Это должны быть друзья, которые делятся уникальным опытом. Нужно "навести" мосты с разнообразными командами, которые ежедневно применяют EDT в своей работы - это море опыта, неочевидных лайвхаков и свежего взгляда.

2) Если людей в команде нет, то сделать акцент на доработке системы плагинов. Текущая документация не актуальная, не полная и содержит ошибки; стандартная установка среды разработки плагинов содержит ошибки и по факту не отличается от обычного Eclipse for RCP and RAP Developers (в котором уже можно подключить ИИ). Все работает крайне не стабильно - пока я сам пробовал разрабатывать плагин, то у меня трижды слетали файлы платформы и их нужно было заново закачивать с сервера 1С, что занимало почти сутки (у меня тогда еще свет часто отключали); а так же при работе было множество мистических ошибок, победить которые можно было лишь магическими ключиками для конфигов, которыми делились в чате разработчиков. А ведь это могла быть золотая жила! Если бы каждый с легкостью мог создавать плагины для облегчения своей работы, то это лучше всяких опросов показало бы вектор будущего развития EDT и самые популярные идеи можно было бы постепенно включать в вендорскую сборку.

#разработка #1С #EDT
1👍6👎1🔥1