Cross Join - канал о разработке – Telegram
Cross Join - канал о разработке
3.7K subscribers
91 photos
8 videos
3 files
286 links
Канал о разработке Антона Околелова. Тимлид Go, живу в Чехии. Мысли, новости, вопросы.

По вопросам рекламы @antonokolelov
Download Telegram
https://metr.org/Early_2025_AI_Experienced_OS_Devs_Study.pdf

"...Несмотря на широкое распространение, влияние инструментов ИИ на разработку программного обеспечения в реальных условиях остается недостаточно изученным. Мы проводим рандомизированное контролируемое исследование (РКИ),
чтобы понять, как инструменты ИИ на рубеже февраля-июня 2025 года влияют на производительность опытных разработчиков ПО с открытым исходным кодом. 16 разработчиков со средним опытом работы с ИИ
выполняют 246 задач в зрелых проектах, в которых их средний опыт работы составляет 5 лет. Каждой задаче случайным образом назначается разрешение или запрет на использование инструментов ИИ начала 2025 года. Когда инструменты ИИ разрешены, разработчики
в основном используют Cursor Pro, популярный редактор кода, и Claude 3.5/3.7 Sonnet. Перед началом выполнения задач разработчики прогнозируют, что разрешение использования ИИ сократит время выполнения на 24%. После завершения исследования разработчики оценивают, что разрешение использования ИИ
сократило время выполнения на 20%. Удивительно, но мы обнаружили, что использование ИИ фактически
увеличивает время выполнения на 19% — инструменты ИИ замедляли разработчиков. Это
замедление также противоречит прогнозам экспертов в области экономики (на 39% короче)
и машинного обучения (на 38% короче). Чтобы понять этот результат, мы собираем и оцениваем данные по 20 свойствам нашей среды, которые априори могут способствовать наблюдаемому
эффекту замедления, например, размеру и стандартам качества проектов или предыдущему
опыту разработчиков с инструментами ИИ. Хотя влияние экспериментальных артефактов нельзя полностью исключить, устойчивость эффекта замедления в наших
анализах позволяет предположить, что он вряд ли в первую очередь является функцией нашего
экспериментального
дизайна...."
👍15🤯31
Давайте поговорим про вред кофе, потому что айтишники его хлещут только так, чтобы подстегнуть соображалку

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

И как-то случайно так получилось, что я несколько дней совсем не пил кофе - и, о чудо, всё внезапно прошло.

В голове появилась невероятная свежесть, как в детстве, много новых идей и так далее.

Потом я стал экспериментировать более осознанно, и пришел к выводу, что если пью больше одной чашки кофе в день на протяжении нескольких недель, то "пыльный мешок" в голове возвращается. Особенно четко это наблюдалось после рабочего дня: я мог только сидеть и тупить в сериал, энергии ни на что не оставалось, ни на какие пет проекты. А после перерыва в дней 5-7 - я свеж и бодр, готов херачить чуть ли не 24/7.

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

1) ген CYP1A2 отвечает за метаболизм кофеина
2) ген ADORA2A за то, насколько сильно херачит по нервной системе (тревожность, некачественный сон и т.д)

Я, конечно, тот еще генетик, но подозреваю, что у меня 2 в одном: кофе выводится медленно, а бьёт по голове сильно. Скорее всего из-за этого просто сон становится некачественным, и со временем это влияет на самочувствие.

Дополнительная ловушка состоит в том, что если ты сегодня плохо соображаешь, то хочется выпить кофе ещё - чтобы начать уже соображать. И всё идёт по кругу.

Так что экспериментально я выяснил, что мне лучше кофе вообще не пить, а если и пить, то одну чашку утром. Тогда типа норм.

Ну или, допустим, перед важными делами: собеседование/экзамен/и т.д (кстати, надо пить за 50-60 минут до события для максимальной концентрации).

В общем, тем, кто страдает такой вот отупелостью, советую попробовать сделать недельный перерыв в кофе (поддерживая качественный сон при этом) или же вообще нафиг сделать генетический тест.

🫥 Cross Join - канал о разработке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍45🔥43🥴3
Forwarded from Эксплойт
Восстановление «Аэрофлота» может занять до ПОЛУГОДАсообщают эксперты.

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

На картинке сравнение зарплат инфобезопасника в Аэрофлоте и кладовщика в супермаркете. Выводы делайте сами.

@exploitex
🔥16💩107😁4😢1🕊1
Forwarded from do...while...ai (Gregory is typing...)
Почему важно разбираться в деталях

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

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

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

На последнем проекте мы с ребятами ездили к клиенту, сидели несколько часов с юристами, и втыкали в миллиард разных договоров, чтобы понять, откуда и куда переползают данные, какие есть типы шаблонов, где "узкое горлышко" в процессах. Всё это не про творчество и вайбкодинг, очень скучно и рутинно, но только так можно разобраться, где клиенту будет реальная ценность от нашей автоматизации, а где — это просто наши влажные фантазии.
29👍9💯1
Послушал тут выпуск подкаста Кирилла Мокевнина про IQ. Лень сейчас искать, потом найду ссылку.

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

И типа это сохраняется с возрастом: если ты условно в школе был самым умным, то и дальше будешь на высоком счету. И есть некая корреляция между IQ и карьерными достижениями.

Хз, правда это или нет, мне почему-то всё равно кажется, что интеллект можно в какой-то степени развить (неужели я до конца жизни останусь тупым??). Но, допустим, поверим ученым.

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

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

Но тут есть и проблемы.

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

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

Думаю, кстати, поэтому задачи от гугла "почему люки круглые" сошли на нет: они просто не стандартизованы, не откалиброваны. Отсебятина.

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

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

🫥 Cross Join - канал о разработке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🤨42🔥2🕊1
Вышел go 1.25

1. GOMAXPROCS стал «умнее» в контейнерах

Теперь GOMAXPROCS (количество потоков, используемых рантаймом) автоматически учитывает ограничения CPU в cgroup.
Например, если контейнер в Kubernetes получил лимит в 2 CPU, Go сам подстроится, даже если на узле 64 ядра.
Плюс, если лимиты или доступные ядра изменятся на лету, Go сможет обновить GOMAXPROCS без перезапуска.

2. Новый экспериментальный сборщик мусора

Добавили greenteagc — переработанный GC, который лучше работает с мелкими объектами и масштабируется на многоядерных системах.
В реальных проектах можно ожидать -10–40% накладных расходов на сборку мусора. Включается через:

GOEXPERIMENT=greenteagc

3. «Чёрный ящик» для редких багов

Появился Flight Recorder для трассировки исполнения. (можно записать в файл последние пару секунд runtime execution trace)

4. Новая JSON-библиотека (эксперимент)

Появился encoding/json/v2, в котором:

Декодирование стало заметно быстрее.

Есть новые опции настройки маршалинга/анмаршалинга.

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

Включается так:

GOEXPERIMENT=jsonv2 (тогда encoding/json будет работать по-новому)


5. Инструменты разработки стали удобнее

go build -asan теперь по умолчанию ищет утечки памяти, выделенной через C.

Новый флаг go doc -http поднимет локальный сервер документации и откроет его в браузере.

Появилась директива ignore в go.mod для исключения каталогов из сборки.

go vet научился ловить ошибки в sync.WaitGroup и неправильно собранные адреса для IPv6.

6. Улучшения в тестировании конкурентного кода

Пакет testing/synctest теперь доступен без экспериментов — можно писать тесты для многопоточного кода с виртуальным временем, без ожидания в реальном времени.

А sync.WaitGroup получил метод .Go, который упрощает запуск горутин с подсчётом.

И многое другое

🫥 Cross Join - канал о разработке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥131
Что меня бесит в курсоре, что он как бы это сказать, устаёт. Ты ему говоришь: напиши к этому тесты, он пишет. Один тест не проходит. Он 10 раз пытается исправить, а потом пишет, что в принципе и 16 из 17 рабочих тестов - это норм.

Или: а давай я просто этот тест удалю, хер его знает, что там не работает.
🤣46😁9👍4🤝1
Самый прикол в том, что только сегодня с пацанами обсуждали, что хотя тест Тьюринга современные модели проходят, но все равно можно отличить человека от машины: просто задавать вопросы 24/7. Человек в какой-то момент просто устанет, захочет есть, в туалет и т.д. А машина будет отвечать и отвечать.

А тут вон оно чё. И тут они уже как люди
😁31👍41
Пока я жду, когда ии заменит программистов, похоже появляются новые профессии....

(взято с хабра)
😁61
Помните, было исследование, когда на реальном проекте случайным образом давали решать задачи с ИИ и без ИИ, и с ИИ в среднем получилось дольше?

Я много думал об этом, потому что это не бьётся с моей реальностью.

Короч. Мне кажется, я понял. Эксперимент так себе, потому что на практике я никогда так не делаю, чтобы или 100% с ИИ, или 100% без.

Со временем развивается чуйка, что это вот пусть пишет машина, а это быстрее самому написать.

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

Микс, короче.

Иногда нейросеть входит в такой клинч, что там можно и весь день убить, но ничего не добиться. Если есть странное ограничение "сделать только с ИИ".

И наоборот, если есть тривиальная функция, а-ля getByID, то непонятно как условный копайлот, который тратит на нее секунду, может замедлить разработку.

🫥 Cross Join - канал о разработке
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25💯71
Слушал подкаст Подлодка, там было про представление чисел в памяти. Решил загуглить bigfloat...
😁33🦄1
Forwarded from do...while...ai (Gregory is typing...)
Не успел к пятнице, исправляюсь в понедельник.
🔥16😁6🥱32👍2
Я так считаю: если программист не знает английский, то в наши дни - это что-то вроде инвалидности.

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

Я уж не говорю про поездки/переезд заграницу. Ты или знаешь язык, или ты тупо слепоглухонемой. Тупослепоглухонемой 🙂

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

Они и сейчас в каком-то виде есть, но всё это неудобно:
- нужно таскать с собой устройство
- поймёт ли эта штука контекст, подтекст, интонацию
- ты будешь говорить одновременно с синхро-переводчиком, и слушатель будет офигевать от этого хора (или же ему придется тоже вставлять в уши какие-то штуки)
- представьте себе это на пляже, где ни у кого ничего нет

В общем, не вариант.
🤡50👍13🤮5💯3🖕21
Наткнулся на статью, где написано, что с помощью квантовых компьютеров решили математическую задачу, котрой 100 лет.

https://interestingengineering.com/science/century-old-math-problem-quantum-solution

Это всё здорово, но меня убила фраза, цитирую:

"Сейчас задача квантовых вычислений очевидна, — подытожил Ларокка. — Мы хотим понять, в чём заключаются преимущества квантовых компьютеров".

Блин, т.е. квантовые компьютеры решили делать еще до того, как поняли, нафига они нужны, что ли?
😁28
Что бесит в курсоре (да и вообще в любых llm) - он не задаёт уточняющие вопросы. Т.е. ты или продумал все-все детали заранее, или офигел от дикого результата, и всё по новой. Почему-то эти железные ребята никогда в себе не сомневаются. Делают любую хрень с уверенным видом. Выбирают технологии и подходы без малейших сомнений.

Когда llm-ки научатся задавать осмысленные уточняющие вопросы, тогда будет сильный прогресс. Х.з., может, я не в курсе, и что-то есть такое?
💯25🔥1
Ну кстати если говорить про chatgpt то такая eagerness у него зашита прям в системный промпт.

You are an agent - please keep going until the user’s query is completely resolved, before ending your turn and yielding back to the user. Only terminate your turn when you are sure that the problem is solved.
- Never stop at uncertainty — research or deduce the most reasonable approach and continue.
- Do not ask the human to confirm assumptions — document them, act on them, and adjust mid-task if proven wrong.


gpt-5 prompting guide

Он проинструктирован не спрашивать уточнений и сначала ответить хоть что-то если задача сложная или время затратная.
1👍6🤡32👀1
Опасные места в YAML

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

Шестидесятеричные числа

port_mapping:
- 22:22
- 80:80
- 443:443


Что вы ожидаете увидеть? Скорее всего, список строк для настройки портов. Но YAML 1.1 интерпретирует 22:22 как шестидесятеричное число и превращает его в 1342. В YAML 1.2 эту "фичу" убрали, но многие парсеры до сих пор используют старую версию.

Проблема Норвегии

countries:
- dk
- fi
- is
- no
- se


Код страны Норвегии no будет интерпретирован как булево значение false. То же самое произойдет с off, n, yes, on, y в различных вариантах написания. Классическая ловушка, получившая название "Norway Problem".

Случайные числа

versions:
- 9.5.25 # строка
- 9.6.24 # строка
- 10.23 # Число!
- 12.13 # Тоже число!


Строки без кавычек могут неожиданно стать числами. 10.23 превратится в float, а 9.5.25 останется строкой, потому что имеет "слишком много" точек.

Ключи не только строки

settings:
on: [push, deploy]
priority: high


Здесь on интерпретируется как булево true, поэтому ключом становится не строка "on", а логическое значение. В JSON это может превратиться в "True" или вызвать ошибку.

Теги и небезопасность

user_data: !python/object/apply:subprocess.check_output [['rm', '-rf', '/']]


Теги, говорят, иногда полезны, но при определенных условиях позволяют выполнять произвольный код при загрузке. Всегда используйте safe_load вместо load в Python и аналогичные безопасные методы в других языках.
👍34🔥31
JSON - тоже не мёд

1) Дублирующиеся ключи

В тексте JSON одно и то же имя поля может встретиться несколько раз — стандарт жёстко не запрещает это, но поведение парсеров разное.

{"id": 1, "id": 2}


Какие-то парсеры падают с ошибкой. В JavaScript / в большинстве реализаций и в Python результат будет {"id": 2} (последнее значение побеждает). Это приводит к молчаливой потере данных и багам безопасности, если важный флаг перезаписывается.

2) Мало типов данных

JSON не задаёт битовую длину чисел, но в том же JavaScript Number — 64-битный float, и целые > 2^53−1 втихаря теряют точность.

{"id": 9007199254740993}


В JS при JSON.parse получится 9007199254740992.

Нет типов для дат, для decimal, для бинарных данных. Всё такое приходится передавать как строки и где-то в другом месте описывать как их интерпретировать.

3) Javanoscript-овые NaN, Infinity запрещены стандартом, но де факто парсеры обрабатывают по-разному

4) Кодировка и стандарты

JSON обычно в UTF-8, но сторонние сервисы иногда присылают UTF-16 или вообще, прости господи, Windows-1251 - парсеры на этом падают или показывают кракозябры. Наличие в документе BOM также может что-нибудь уронить.

Надо еще отметить, что стандартов json несколько штук, в них разные приколы: в старых стандартах корневым элементом должен быть обязательно объект, а в новых - может быть просто строка или число. Числа начинающиеся на 0 в новых стандартах запрещены, в старых могут интерпретироваться как восьмеричное число.

5) Prototype pollution и unsafe merge

если вы берёте JSON от пользователя и напрямую сливаете его в существующий объект (lodash merge, старые extend), поля вроде __proto или constructor.prototype могут изменить прототипы и вызвать уязвимость.
👍22
Вышла новая версия спецификации OpenAPI 3.2.0 — это важное обновление стандарта описания HTTP-API, которое делает его более точным и гибким, но при этом не ломает существующие спецификации. Всё, что было валидным в OpenAPI 3.1, продолжает работать, так что переход может быть постепенным и безопасным.

Основные изменения в OpenAPI 3.2.0

1. Чёткие правила для путей
Теперь синтаксис шаблонов в URL описан формально. Раньше разные инструменты могли по-разному интерпретировать параметры в {}, что иногда вызывало конфликты. В 3.2 этот момент стандартизирован, что делает спецификации более предсказуемыми и уменьшает количество ошибок при генерации кода и валидации.

2. Поддержка потоковых данных
Появилась возможность явно описывать API, которые возвращают данные в виде потока — например, text/event-stream (SSE) или application/jsonl. Для этого введено новое поле itemSchema, с помощью которого можно указать, как выглядят отдельные элементы в потоке. Это особенно актуально для сервисов, работающих в режиме реального времени.

3. Нестандартные HTTP-методы
До сих пор OpenAPI поддерживал только классические методы (GET, POST, PUT и т.д.). Теперь можно официально описывать и редкие методы вроде LINK или UNLINK, без необходимости использовать хаки и расширения.

4. Улучшенная работа с тегами
Теги стали более гибкими. Теперь можно строить иерархии и добавлять дополнительные атрибуты вроде summary или parent. Это помогает лучше организовывать документацию и делает её более удобной для навигации.

и многое другое.

Ссылки:

Release Notes
Спецификация

Плагин к IDE для редактирования 3.0/3.1
👍18🔥41🤔1
Сегодня я узнал, что есть расширение для посгреса pg_cron. Прикольно, только, мне кажется, всё равно удобнее такие вещи делать через приложение: удобно смотреть логи, дебажить скорость и т.д


-- удалять старые данные по субботам 3:30
SELECT cron.schedule('30 3 * * 6', $$DELETE FROM events WHERE event_time < now() - interval '1 week'$$);
schedule
----------
42

-- Vacuum каждый день в 10:00
SELECT cron.schedule('nightly-vacuum', '0 10 * * *', 'VACUUM');
schedule
----------
43

-- Поменять время вакуума на 3:00
SELECT cron.schedule('nightly-vacuum', '0 3 * * *', 'VACUUM');
schedule
----------
43

-- Убрать
SELECT cron.unschedule('nightly-vacuum' );
unschedule
------------
t

-- убрать по id
SELECT cron.unschedule(42);
unschedule
------------
t

-- Запустить кронджобу на другой базе
SELECT cron.schedule_in_database('weekly-vacuum', '0 4 * * 0', 'VACUUM', 'some_other_database');
schedule
----------
44

-- Запускать процедуру каждые 5 сек
SELECT cron.schedule('process-updates', '5 seconds', 'CALL process_updates()');


🫥 Cross Join - канал о разработке
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥10🤔6👍3🥱1