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

Автор: @Dementor_AK
https://www.linkedin.com/in/dv-kinash
Download Telegram
На Инфостарт какие-то новые правила?

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

Хорошо, что на одном из ноутов у меня висела сессия. Там в настройках привязал себе Google-аккаунт - только после этого с помощью Google на компе смог наконец-то зайти в свой аккаунт.
Please open Telegram to view this post
VIEW IN TELEGRAM
😱4💩1
Какие варианты изучения новых языков программирования вы знаете?

==========

1) Пойти в технический ВУЗ на разновидность кафедры автоматики (или лицей, где школьникам уже преподают программирование). Я так на протяжении семестров в формате лекций и лабораторных изучал C, C++, Pascal, Prolog, SQL, ESQL/C и так далее. С одной стороны мы хорошо знали базы изучаемых языков, но с другой стороны почти ничего из этого не пригодилось никому из моих однокурсников (кроме ребят, которых пригласили писать вирусы на C++, но там отдельная история)

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

2.1) Сперва в универе меня заинтересовал ASM, которого не было в моей учебной программе, но который я выучил дома по книге в летние каникулы между первым и вторым курсом (компа у меня не было), а потом зарабатывал написанием лабораторных и курсачей для "безопасников".

2.2) Далее меня заинтересовал PHP (у меня была книга по 3-й версии и я на своем опыте набивал шишки при переходе на 4-ю): а) сделал прототип форума, в котором структурированное содержимое базы с помощью XSLT преобразовывалось в HTML-странички, б) делал прокси-портал для 1С:Архива, в) кастомизировал для OpenCart обмен с 1С

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

2.4) По книге Брюса Эккеля я освоил Java, которая пригодилась мне чуть позже для разработки Android-приложений (когда мобильной платформы 1С еще не было)

2.5) Как-то купил карманный справочник по WEB и углубленные знания HTTP, CSS и JavaScript мне пригождались довольно часто и на разных работах.

3) Пойти на курсы. Вероятно это самый "правильный" путь, но все зависит от качества самих курсов. У меня всего два опыта - позитивный и не совсем. Когда я писал на PHP надстройку над 1С:Архивом для УИТ, то мне предложили присоединится к новой учебной группе и прослушать с ними курс по 1С - "Основные объекты" и это обучение пошло настолько гладко, что еще не завершив курс я отправился на проект внедрения 1С:УПП. Во время войны и очередных запретов 1С в Украине я решил освежить Java с уклоном в Spring Cloud, где на курсах (с гарантированным трудоустройством) снова был одним из первых, но по результату оказалось, что спроса на джавистов особо не было (отслеживал судьбу однокурсников - лишь единицы стали программистами и далеко не сразу).

4) Посмотреть обучающее видео на Youtube. Что-то среднее между обучением по книгам и курсами, но мой опыт крайне ограничен, так как во время моего "становления" на Youtube были ролики из категории "сам себе режисер" (помните? я всегда с собой беру вииидео-камеру!)

5) Учится у наставника (ментора). Это самый продвинутый и эффективный путь индивидуального обучения, к тому же на сегодня вполне доступный. В мое время менторов не было, но сейчас их можно найти среди знакомых, на работе или на специальных менторских платформах.

==========

Все? Еще идеи?
А как же современные технологии 🤓

С начала года я начал любопытный челлендж-эксперимент по изучению нового для меня языка с помощью вайбкодинга. Опыт оказался довольно интересный - ИИ для меня был словно ментором в интерактивном обучающем курсе.

Челлендж завершил ровно вчера и уже готов о нем рассказать. Но предупреждаю, что материала накопилось много 🫣

#AI #computerscience #programming
#ИИ #информатика #программирование
🔥2
===
Челлендж-эксперимент по изучению языка Go
===

Почему Go? У меня периодически возникают идеи, для которых нужен быстрый и стабильно работающий бэкенд. В очередной раз проанализировав современные языки я пришел к выводу, что Go тут просто идеален (лучше только Rust). Единственный минус - я его абсолютно не знаю.

Ранее я уже перечислял варианты, как можно было бы выучить новый язык. Но мне хотелось бы поэкспериментировать не только с использованием новой технологии программирования, но и с новыми технологиями обучения. Попробовать ИИ-обучение!

Еще десять лет назад обучение с помощью ИИ было научной фантастикой. Уже три года назад можно было просить у чат-ботов от OpenAI и Anthropic объяснить какую-то тему - ответ мог оказаться по большей части галлюцинацией, но иногда позволял получить "озарение" и дать верное направление поисков. И, наконец переходя к сегодняшнему дню, мы видим, что в большинстве ИИ-сервисов появились специализированные режимы обучения, а популярные Youtube-блогеры все чаще советуют GPT-ментора вместо посещения курсов.

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

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

Суть испытания в девяти пунктах:
1. Выбираю ОДНУ идею и выполняю ее разработку на Go от создания проекта до публикации на Github

2. Всю разработку и сопровождение делаю исключительно в ОДНОМ инструменте - Google Antigravity

3. В качестве своих рабочих ИИ-моделей использую только те LLM, которые доступны в Google Antigravity (Claude Opus/Sonnet, GPT-OSS, Gemini PRO, Gemini Flash)

4. НЕ покупаю подписку и ВСЕ делаю исключительно в рамках недельных лимитов бесплатного использования

5. Если лимиты уже закончились, а идеи еще остались, то можно в качестве исключения общаться с бесплатным чат-ботом Gemini на сайте Google, но только не с Anthropic или GPT! Если хочется писать код, то без вариантов программировать самостоятельно.

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

7. Никогда не принимать правки кода в "слепую" и перепроверять каждое даже рутинное изменение (в Antigravity очень удобный механизм работы с дифами)

8. Не разрешать безусловное выполнение агентом всех консольных команд - перепроверять в Google все чего я не знаю.

9. Если в сгенерированном коде что-то непонятно, то задаем агенту вопросы пока все не станет очевидно!

#AI #ИИ #эксперимент #обучение
🔥3
(начало)

Почему Antigravity, а не Cursor, Copilot, Claude Code или что-то иное?


Каждый инструмент имеет под собой определенную идеологию использования. Мне для учебных целей консольные инструменты абсолютно противопоказаны - ведь нужно контролировать и структуру проекта и каждую строчку в каждом файле. Так же зачем запуски дебага, линтера, тестов и билдов делать вручную в консоли, если для этого есть удобные кнопочки в IDE?

Среди доступных IDE самые простые, легковесные (и бесплатные) - это VS Code и его клоны. Каждый вариант имеет существенные различия и потому пользуются спросом у различных категорий специалистов. Тот же Cursor, например, имеет собственную ИИ-модель (на базе китайского опенсурса) и поддерживает разработку SDD - все это создает ему популярность, но мне сейчас этот все не нужно.

В общем, я попробовал несколько и именно Antigravity по моим субъективным ощущениям максимально подошел для целей обучения.

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

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

Если подумать, то ограничение запросов к ИИ-моделям тоже является частью учебного процесса. Нельзя бесконечно полагаться на чужое мнение и разводить длительные обсуждения (которые, к слову, токсичны для контекста так как размывают фокус). Идеальный диалог разработки фичи состоит всего из 4 сообщений: 1) сама задача с максимальным контекстом от меня, 2) план выполнения от ИИ с уточняющими вопросам, 3) мое подтверждение плана и ответы на вопросы, 4) результат работы с возможность принять или отклонить. На этом тут уже всё - новая фича будет в новом чате.

А еще ограничение лимитов не позволило подключать MCP типа Context7. Того же Claude Opus мне в "чистом использовании" хватало ровно на одну фичу, после чего он со мною прощался на неделю. Но оказалось, что современные модели уже из коробки превосходно знают документацию и не нуждаются в "костылях". Так же "чистая" работа позволила мне познакомится с характером различных моделей, понять их особенности и как они думают.

#AI #ИИ #эксперимент #обучение
👍1
(начало)

Выбор идеи для пет-проекта на 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