Минутка просвещения

Читать в телеге. Когда-то там были посты не только от меня.

LLM-описания проектов

Я вот как раз в пятницу глянул парочку описаний проектов, сгенеренных LLM: DeepWiki и CodeWiki. Идея неплохая: быстро погрузить нового разработчика в контекст, чтобы информация всегда была актуальна. Казалось бы, задача, для которой LLM отлично подходят: обработай кучу данных, сделай выжимку, презентуй красиво, разжуй.

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

Но если цель — произвести вау-эффект для несведующих или сделать документацию по проекту за 1 день — то да, прокатит :/

Я еще попробовал спросить у встроенного чата пару вопросов по участкам кода, которые недавно трогал и, ожидаемо, получил “правдоподобные” ответы, которые не давали нужной информации, а частично были вообще неправильные.

У коллег остались схожие впечатления.

СсылкаКомментировать

Как ls и grep понимают, что их вывод перенаправлен?

Если вы пользуетесь консолью, то могли заменить, что обычный вывод стандартных утилит обычно цветной, но если его перенаправить через конвейер |, то цвет “теряется”. Работает это очень просто: через библиотечный вызов isatty определяется, является ли stdout терминалом или нет. Еще дополнительно проверяется через переменные среды, что терминал не совсем урезанный и поддерживает цвет.

А как работает isatty? Делает системный вызов ioctl с такими параметрами, которые сработают только в терминале, т.е. если вызов вернул ошибку, то устройство — не терминал. Эдакий try-catch :)

СсылкаКомментировать

Учись, делая

Это один из подходов к обучению и развитию навыков. Идея довольно проста: теория не заменит практику, некоторые вещи из книжек не узнаешь, лучше один раз увидеть (и пощупать), чем сто раз услышать, обратная связь и т.п. Разумеется, не стоит возводить это в абсолют — теорию и фундаментальные принципы тоже важно знать и понимать, практика этому как раз способствует.

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

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

СсылкаКомментировать

Где встретиться?

Неплохой сервис для просмотра, каким паспортам куда какая виза нужна. Мне понравилась функция с выбором нескольких паспортов, которая показывает, где можно встретиться с наименьшим напрягом по визам (полезно для встречи мультинациональной команды). Увы, там нет сортировки по близости/удобству перелетов. Думал даже навайбкодить что-нибудь, но, как всегда, проблема с данными: код-то написать легко, а хорошего API с нужными данными нет.

P.S. Разумеется, надо перепроверять информацию в официальных источниках.

СсылкаКомментировать

Буквы дисков винды

Занимательная статья про то, как работают буквы дисков в винде.

Если неинтересны детали, то при подключении 25 диска просто ничего не произойдет — нужно будет монтировать его вручную в папку.

Надеюсь, этот ужас (работа на винде) никому не понадобится на практике:)

СсылкаКомментировать

Сложность простоты

Классный доклад про то, какая бывает сложность (понимания) систем. Вертится вокруг двух осей: сами системы бывают сконструированные и инкрементально «выросшие», и получится они могут простыми и понятными или нетривиальными, где без пухлого талмуда документации и не разберешься. Чем-то напоминает классификацию из фантастики, о котором я писал ранее.

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

С бардаком, который может возникнуть от череды мелких улучшений без четкого определенной стратегии, в целом, все очевидно — эджайл, техдолг и все такое. Одно из качеств, которое важно при конструировании систем — умение говорить «нет».

Докладчик описывает характеристики систем из каждого квадранта, рассказывает о присущих им проблемам и рискам, приводит примеры. Один из грустных выводов — большая часть полезных систем приходят из категории “сложные”/“выросшие”, и изменить это довольно тяжело, т.к. многое на них завязано.

СсылкаКомментировать

Java Script

На java можно писать скрипты. Во-первых, аж с 11 версии можно было тупо исполнить код из *.java файла. Во-вторых, если убрать расширение и использовать последнюю версию (25), то можно даже сделать так:

#!/usr/bin/env -S java --source 25

void main() {
   IO.println("Hello, world!");
}

Без класса и public static void всяких! *brain_expodes.gif*.

А еще с помощью jbang можно и зависимости в скрипт запихать… *троллебус.jpeg*.

Еще одно доказательство, что JVM — это интерпретатор :)

СсылкаКомментировать

Уже 50% новых статей в интернете сгенерированы нейронкой

Исследование. Кроме очевидных последствий вроде замусоривания сети и приближения теории мертвого интернета к реальности, еще и неявные. Во-первых, на чем обучаются нейронки? На корпусах текстов, преимущественно из интернета. Вот только если они тоже сгенерированы нейронками, то получается «кровосмешение» со всеми вытекающими. Во-вторых, уже сейчас тяжело что-то найти — давайте использовать нейропоиск, да? А будет ли он фильтровать нейрослоп? И если наклепать миллион сайтов с «правильной» информацией — что будет показано пользователю?

Если смотреть на проблему шире, то проблема не супер новая: популярность контента очень слабо коррелирует с его качеством. В тех же соцсетях будет больше показов у кликбейтов, спорных тем, и прочего топлива для флейма. Ок, тиктоки теперь снимает и озвучивает нейронка — сильно ли это повлияет на их среднюю полезность? Опять же, SEO не вчера изобрели.

Че делать с этим — неясно. Какой-нибудь “доверенный интернет”? Видел такие попытки, выглядят… странно. Википедия? У нее тоже проблемы. Библиотеки? Arxiv больше не принимает обзоры без ревью — слишком много говна. Опять же, мусорные научные журналы существовали и до нейронок. Каталоги сайтов? Они уже были в 2000-х, не выжили. Какая-нибудь маркировка сгенерированного контента? Удачи с регулированием интернета :/ Внезапно рекламщики пытаются бороться, не давая деньги полудохлым сайтам с нейрослопом, но даже если это приживется, то какие-нибудь соцсети и прочий вебдваноль это не спасет. А инженеры? Вот в топе HN на этой неделе клон HN, генерирующий правдоподобные комментарии, даже сам автор один раз перепутал с настоящим.

Видимо, надо накрываться простыней и ползти…

СсылкаКомментировать

Самобытные эмодзи для Slack

Каждый Slack — немного снежинка, потому что кроме стандартных унылых эмодзей и пары корпоративных лого там есть немного своих картиночек. Возможно, на основе нафорсенных мемов. Я уже в пару пространств добавил Гарольда, это мой духовный кумир на работе :harold: Еще у меня в заготовках Слоупок, подорожник (чтобы к больным прикладывать) и пара недовольных котов.

Откуда брать эмодзи? Самый популярный склад — Slackmojis. Можно добавить эффектов, например, тут. Еще есть специализированный генератор old man yells at, но других подобных сервисов я не нашел :( (если знаете — пришлите, пожалуйста). Наконец, можно сделать самому, но надо не забыть обрезать фон и проверить, что в уменьшенном варианте смотрится нормально.

Когда писал эту заметку, попалось еще несколько эАй-сервисов текст → эмодзи, но ни один из них не справился с “harold yells at java” :/

СсылкаКомментировать

Закрепы в IntelliJ

В IntelliJ можно “закрепить” довольно много чего: файл с кодом, запуск приложения, результаты тестов, результаты поиска. Основная идея в том, что закрепленная вкладка просто так не закроется — например, повторный запуск тестов не перезатрет результаты предыдущего запуска, а закрепленная вкладка с кодом не будет закрыта при превышении лимита открытых вкладок.

На прошлой неделе я еще узнал, что для тестов можно тупо посмотреть историю, но там даже на демонстрационном скриншоте 6 одинаковых конфигураций подряд, как запомнить “тот самый” запуск — неясно. Проще закрепить.

СсылкаКомментировать