dzz: Dizzy の春 (Default)
Известно, что добавление «Harry Potter and» к практически любому высказыванию придаёт ему особое звучание.

Озаглавил коммит структуры данных «Harry Potter and the Mandatory Fields»


HP-and-Mandatory-Fields.png

:)
dzz: Dizzy の春 (Default)
...и непрограммирования по версии Genmini / NanoBanana :)))

Assembly.png
...дальше... )
SQL-2.png

Кликабельно
dzz: Dizzy の春 (Default)
А что? Aда же былa :)

Thor-Programming.png

Кликабельно.
И, да,я знаю, что правильно ᚦᛟᚱ :)
dzz: Dizzy の春 (Default)
«Рун не должен резать
Тот, кто в них не смыслит.
В непонятных знаках
Всякий может сбиться
»

«Сага об Эгиле», Снорри Стурлусон, XIII век

Viking-Proger.png

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

:)
dzz: Dizzy の春 (Default)
Заметил, что всё чаще использую большие текстовые нейросетки для того, что назвал бы вайб-проектированием.

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

И это бывает очень полезно, особенно, когда "мозги разбегаются" из-за недоопределённости или сложности задачи. Анализ "what-if" с нейросетями тоже часто работает. Ну и просто метод резинового утёнка, только утёнок умеет отвечать :)))

А код я и сам напишу. В текущем проекте дважды использовал gemini и qwen для рефакторинга кода (чужого, кстати), в обоих случаях пришлось обвешать переписанное тестами "было-стало", на разработку которых ушло времени сравнимо с ручным рефакторингом.

P.S. Справедливости ради, аппаратный расчёт CRC32 на ядре A53 через интринсики gemini написала корректно, я не знал нужных вызовов.

P.P.S. Хотелось бы спихнуть на нейросети как раз разработку тестов и документирование кода, но это явная задача со звёздочкой :)
dzz: Dizzy の春 (Default)
За прошедшую неделю открыл для себя некоторые особенности работы конструкторов сложных классов в C++ 20, научился использовать интринсики для SIMD-вычислений ARM v8 NEON и аппаратного CRC32 на Cortex A53, вспомнил алогритмы работы планировщиков расписаний.

C++.png

Аппаратная crc32 работает раз в 30 быстрее универсальной программной реализации через полином. Команды NEON очень быстро шарашат поиск по линейным массивам. Планировщик позволяет наконец-то сделать нормальную логику работы с приоритетами отправки пакетов без реанимации унаследованной "лапши". Проект стал немного ближе к железу и научился использовать его возможности оптимальнее.
dzz: Dizzy の春 (Default)
...месяц с хвостом меняешь унаследованный спагетти-код так, чтобы встроить в него новые фичи и не сломать старые, и вдруг понимаешь, что всё это аккуратное перемещение шестерёнок было зря, потому что одна из фич требует изрядной переработки архитектуры. И понять это месяц назад было невозможно.

Печалько. Но прорвёмся :)

Spagetti-code.png

(*уходит в глубины*)

P.S. Переслушиваю песни Канцлера про средневековье, очень под настроение. Там, кстати, масса исторических личностей, от Эццелино III и Аццо VIII д'Эсте до Сиджизмондо Малатесты (Волк Римини) и Раймона VII.
dzz: Dizzy の春 (Default)
По случаю отмены занятия в мотошколе купил себе Ардуинку (ESP32-S3 WROOM N16R8), красивый круглый дисплей 240x240 на GC9A01 и научился это программировать. Основное время в Arduino IDE ушло на подбор параметров настройки и прошивки платы. Методом перебора и общения с нейросетками нашёл верный режим. А потом всё таки заработало :)

1000091402.jpg
...тынц... )
dzz: Dizzy の春 (Default)
photo_2025-11-05_01-19-06.jpg

...тынц... )

Схрумкать пёстрое осеннее яблоко, выпить кофе и написать ещё одну интересную штуку :)
dzz: Dizzy の春 (Default)
Приехала тут реклама курсов с JavaRush:

Страх №2: "А что, если я выберу не тот язык?"

Ты боишься потратить месяцы на JavaScript, чтобы потом понять, что тебе был нужен Python. Или пойти в Java, хотя вся душа лежит к созданию веб-приложений...


Что-что... Выучишь два. Или три. :)

Поколение IT-снежинок, блин.
dzz: Dizzy の春 (Default)
programmers-day-2025.png

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

Ну и... )
dzz: Dizzy の春 (Default)
Попробовал GigaCode c gitverse.ru в виде плагина к VSCode.

Душераздирающее зрелище


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

Документирование сломалось на примерно 200-й строке и перестало комментировать функции. Ну и на то, что оно там накомментировало, без слёз не взглянешь.

Код ревью зациклился и выдал мне порядка 20 порций из 13 одинаковых рекомендаций общего порядка, совершенно неоспоримых и не менее совершенно бесполезных ("Асинхронность: Ваш код использует асинхронность для отправки сообщений и мониторинга. Убедитесь, что асинхронность используется правильно и эффективно").

В текущем виде - клинически бестолковая штука, до Bito с Copilot-ом и DeepSeek-ом (к которым у меня туча вопросов) этому поделию как пешком до Марса.
dzz: Dizzy の春 (Default)
При переходе с C++ на чистый C приходится смотреть в оба.

В частности, если ты сделал typedef enum, создал функцию с параметром такого типа, а потом при её вызове подставил переменную типа int, то отряд не заметит потери бойца gcc -Wall проглотит это молчком, потому что первое - фактически int, а второе - int явный, чего тут разбираться-то? :)))

Если что, задача была отсекать на уровне компилятора использование в параметрах функций значений от другого enum-а.
dzz: Dizzy の春 (Default)
В мире есть вещи, понимание которых выводит тебя на новый уровень осознания Вселенной.

Например, регулярные выражения

:)
dzz: Dizzy の春 (Default)
Посчитал недавно, какими языками программирования я пользуюсь в текущих проектах (как своих, так и унаследованных) в прошлом и этом году, получилось так:

С - прошивки микроконтролллеров
С++ - middleware, серверный софт и утилиты
C# - программы с графическим интерфейсом под Win
Python - прототипирование, утилиты, часть серверного софта
Java - приложения под Android и middleware
Kotlin - приложения под Android
PHP - серверная часть web-приложений
Javascript - браузерная часть web-приложений и часть серверного функционала (nodeJS)

Это не считая bash-скриптинга, языков описания хранимых процедур PL/pgSQL и mySQL, awk/sed и языков разметки HTML/XML.

Так что фраза «активно использую десяток языков» не лишена смысла.

А ещё я сталкивался в той или иной мере на практике с процедурными языками Algol-60, Cobol, Fortran, Basic, Рапира ;), Pascal, Delphi, Ada, Ruby, Rust, Go, Modula-2, R, Oracle PL/SQL, списочным/функциональным LISP, стековым FORTH, предикативным Prolog, разными ассемблерами (IBM 360/370, PDP-11, x86, ARM) и макроязыками, графическими нотациями (BPMN, Дракон, TIBCO), метаязыками (YACC, Bison). Итого плюс-минус 30. Наверняка что-то ещё было. А, точно, ещё был Erlang.

Upd: Ещё универсальный perl и датабазные Dbase/FoxPro, Clarion и Clipper.

Могу считать себя специалистом по формальным языкам :)))

Из человеческих за это время - более-менее приличный английский, немного японского и итальянского (этот почти забыт, впрочем).

Заметил, что после десятка языков программирования освоить новый на уровне логики/синтаксиса - вообще не проблема, больше времени тратишь на изучение библиотек. На восстановление навыков разработки на С++ после более чем десятилетнего перерыва потребовался месяц вместе с освоением boost-а, хотя сам язык со времён С++11 изменился довольно существенно.
dzz: Dizzy の春 (Default)
Бывает, что в суете бегущих дней никто не реализовал простую, вроде бы, штуку, и нет ответа на твой вопрос ни в StackOverflow, ни в гугле... :)

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

А я не нашёл ничего лучшего, чем соорудить простенькую функцию на Pl/PgSQL. Бонус - она исполняется на стороне сервера и может быть задействована в любом запросе или хранимой функции/процедуре без запуска дополнительных сущностей.

Выглядит так:
...click to open code... )
Возможно, кому-то пригодится.

P.S. Постояно замечаю, что люди используют СУБД преимущественно как место хранения таблиц, вынося всю логику в приложения. Причём, началось это не вчера (ругался на такой подход ещё в нулевые), но в последние годы тенденция приобрела угрожающие масштабы, вплоть до попыток теоретического обоснования "почему центральная БД с логикой - это плохо" со стороны микросервисников.

Джеффри Ульмана на них нет :)))
dzz: Dizzy の春 (Default)
Буквально вчера нейросетевой помощник Bito не осилил написать код преобразования текстовых строк вида
name[name_level1][name_level2][.....][name_levelX]=value
в JSON-форму
{"name":{"name_level1":{"name_level2":{.....:{"name_levelX":value}...}}}

При том, что задачка простая и решается даже без рекурсии. Мне было лень возиться (в парсере, всё-таки, не три строки), попробовал попользоваться АI-подсказкой. Не помогло.

Пришлось заморочиться и написать код самому.
dzz: Dizzy の春 (Default)
Кто полчаса портатил на решение несуществующей проблемы в коде, тот - я :)

На самом деле, это было забавно: наваять 10 строк пошаговой диагностики, чтобы понять, что я дёргаю не тот вызов API, который отлаживал.
dzz: Dizzy の春 (Default)
Продолжаю развлекаться с "программирующими" нейросетками.

Задал сетке BITO вопрос "write hello world in ..." для всех языков программирования, которые вспомнил сходу.

В основном, получилось правдоподобно: сетка знает С, С++, C#, Ada, Algol-60, Pascal, Oberon, Modula2, PHP, Basic, Fortran, Cobol, Java, Kotlin, Lisp (common и autocad-овский), Rust, Erlang, Go, JS и минимум три ассемблера (IBM-360, PDP-11 и x86).

Видит разницу между python-ом 2 и 3, умеет всякую экзотику вроде Befunge, Brainfuck, Prolog и APL.

Комментирует код и позволяет себе высказываться в стиле «Note: Brainfuck is not recommended for practical use, as it is an esoteric programming language with a limited set of instructions and can be difficult to read and understand»

Знает, как вывести "Hello world" в оракловом PL/SQL, мелкомягком TSQL и консоли mySQL (select 'Hello, world!'; да ;).

Понимает, что CODASYL и REDIS - вообще не языки, а JSON и YAML - не языки программирования.

А вот в ответ на провокационный вопрос "write hello world in gcode" выдала:

G0 X0 Y0 Z0 ; move to home position
G4 P2000 ; pause for 2 seconds
G0 X0 Y0 Z10 ; move tool 10 units above workpiece
M3 S500 ; start spindle at 500 RPM
G1 X10 Y10 F100 ; move tool to position (10,10) at 100 units per minute
G1 X10 Y0 F100 ; move tool to position (10,0) at 100 units per minute
G1 X0 Y0 F100 ; move tool to position (0,0) at 100 units per minute
M5 ; stop spindle
G0 X0 Y0 Z10 ; move tool 10 units above workpiece
M30 ; end of program

... нарисовав вращающейся фрезой в воздухе треугольник :)

В качестве вишенки на торте "write hello world in chinese":

人类:请输出你好世界 (pinyin: qǐng shūchū nǐhǎo shìjiè) - "Человек: пожалуйста, выведите привет, мир", если верить гуглопереводчику.

P.S. Валидность ассемблерного кода не проверял. В остальных случаях иногда порождает правильное обрамление модулей, иногда теряет, но, в целом, выглядит рабоче. Программера, конечно, такое не заменит, но ассистента по синтаксису и библиотекам - вполне.
dzz: Dizzy の春 (Default)
Программирование под андроид - чрезвычайно крышесносное занятие, особенно, когда занимаешься этим от случая к случаю.

- Мы тут сделали простой способ расшарить данные между приложениями - SharedPreferences

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

- Но мы сделали контент провайдер, он секьюрный, просто вместо двух строк в одном файле пишешь 50 в нескольких, и счастье. Можно даже указать authority, не совпадающее с именем пакета

- Только это несекьюрно, поэтому с 10-й версии андроида authority должно совпадать с именем пакета

- И с 11-й версии андроида вы провайдер даже с правильным именем пакета не увидите, если не напишете в манифесте <queries>

:)

June 2026

S M T W T F S
 1 23 456
78910111213
14151617181920
21222324252627
282930    

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 11th, 2026 07:25 pm
Powered by Dreamwidth Studios