Вообще, считаю, что линтеры должны работать в режиме подсказок, не блокировать ci. Ну, можно блокировать только самые злые security проблемы. Остальное - пустая трата времени.
Ну реально, код, допустим, готов к проду, но тут всплывает, что надо прям до усрачки что-то там отсортировать в докер файле. Или скобочку поставить чуть-чуть не так. А это значит, что надо исправлять, билдить, тестить и т.д. Занимает реальное время.
А что это даёт? увеличение читабельности кода на 0.000001%. И то, надо наткнуться еще на такую проблему, когда ретроградный меркурий не в той фазе луны, и программист пришел пьяный на работу и запутался в трёх пакетах команды apk add. Т.е., никогда.
Если уж нужен блокирующий линтер по каким-то религиозным соображениям, то оттуда надо выкидывать всё, что де факто никогда не создавало проблем. Т.е. не "порядок нужон", а "решаем конкретные реальные проблемы".
Вообще, сонар говнище ещё то. Особенно доставляют правила "дублирование кода не более x". Чисто механическое, без понимания специфики.
Т.е. если два куска кода похожи - значит костьми ляг, но объедини их в какую-то абстракцию. Даже если они выполняют совершенно разные логические задачи и потом обязательно неизбежно со временем разъедутся.
Ну реально, код, допустим, готов к проду, но тут всплывает, что надо прям до усрачки что-то там отсортировать в докер файле. Или скобочку поставить чуть-чуть не так. А это значит, что надо исправлять, билдить, тестить и т.д. Занимает реальное время.
А что это даёт? увеличение читабельности кода на 0.000001%. И то, надо наткнуться еще на такую проблему, когда ретроградный меркурий не в той фазе луны, и программист пришел пьяный на работу и запутался в трёх пакетах команды apk add. Т.е., никогда.
Если уж нужен блокирующий линтер по каким-то религиозным соображениям, то оттуда надо выкидывать всё, что де факто никогда не создавало проблем. Т.е. не "порядок нужон", а "решаем конкретные реальные проблемы".
Вообще, сонар говнище ещё то. Особенно доставляют правила "дублирование кода не более x". Чисто механическое, без понимания специфики.
Т.е. если два куска кода похожи - значит костьми ляг, но объедини их в какую-то абстракцию. Даже если они выполняют совершенно разные логические задачи и потом обязательно неизбежно со временем разъедутся.
1👍49🤡16❤9
Forwarded from Дима из pmclub
ChatGPT прошёл Тест Тьюринга и убил все(!) профессии, а вы и не заметили.
Я прочитал его последний ответ и восхитился.
Если раньше малыш просто делал фигню и обещал переделать, то теперь он вышел на принципиально новый уровень — обещал вернуться и ничего делать не стал.
Я чуть не прослезился, когда вспомнил, сколько раз такое слышал в жизни.
Не хватает только отмазок про отключение электричества, срочный проект или поликлинику.
Я прочитал его последний ответ и восхитился.
Если раньше малыш просто делал фигню и обещал переделать, то теперь он вышел на принципиально новый уровень — обещал вернуться и ничего делать не стал.
Я чуть не прослезился, когда вспомнил, сколько раз такое слышал в жизни.
Не хватает только отмазок про отключение электричества, срочный проект или поликлинику.
😁57🥰3👍2🤡1
Вопрос к гоферам. Вы вендорите зависимости?
Если раньше я ощущал это как 100% отличное решение, билд быстрый, надежный и не развалится даже через 10 лет (бесит правда, что vendor видно в MR/PR), но всё больше замечаю, что с годами зависимости Go становятся всё жирнее и жирнее.
А когда добавляешь инструменты (всякие линтеры и генераторы) как go get -tool, то вообще капец.
Понятно, что до npm и пакетов типа leftpad еще далеко, но в целом Go постепенно идёт примерно в эту сторону.
Если раньше я ощущал это как 100% отличное решение, билд быстрый, надежный и не развалится даже через 10 лет (бесит правда, что vendor видно в MR/PR), но всё больше замечаю, что с годами зависимости Go становятся всё жирнее и жирнее.
А когда добавляешь инструменты (всякие линтеры и генераторы) как go get -tool, то вообще капец.
Понятно, что до npm и пакетов типа leftpad еще далеко, но в целом Go постепенно идёт примерно в эту сторону.
💯3
Многие знают, что было довольно много попыток оценивать эффективность работы программиста. Пытались считать строки кода, жопочасы, количество выполненных задач и т.д.
Ничего, естественно, не работает.
Однако с появлением ИИ это может заиграть новыми красками. Допустим (чисто теоретически!) скидываешь в ИИху весь код, который наваял чел за месяц, все описания задач, все расшифровки митов и т.д. А ИИ потом выдаёт оценку, типа value, которое принёс разраб от 1 до 100.
Это была бы бомба.
Не секрет, что результат, который производят люди, может отличаться в разы, а то и на порядки. А зарплаты так не отличаются обычно. Решение о повышении зп принимаются обычно исходя из интуиции технически некомпетентного человека.
Если же будет "сколько value принёс, столько и заработал", то по настоящему эффективные ребята бы разбогатели, а те, кто научился только отмазываться и на митах делать умное лицо, ели бы доширак. А некоторые бы вообще в минус ушли.
Понятно, что сейчас это невозможно, но помечтать-то можно. Сейчас даже оценка одного PR на кодревью через claude code мягко говоря вызывает множество вопросов. А что будет, если контекст будет по-настоящему огромный? Ничего хорошего.
Однако, учитывая как сейчас СЕО больших и маленьких компаний насильно навязывают ИИ, я уверен, что многие будут принимать и такие тупорылые решения, как оценка эффективности людей существующими на сегодня средствами. И это будет максмально херово.
🫥 Cross Join - канал о разработке
⠀
Ничего, естественно, не работает.
Однако с появлением ИИ это может заиграть новыми красками. Допустим (чисто теоретически!) скидываешь в ИИху весь код, который наваял чел за месяц, все описания задач, все расшифровки митов и т.д. А ИИ потом выдаёт оценку, типа value, которое принёс разраб от 1 до 100.
Это была бы бомба.
Не секрет, что результат, который производят люди, может отличаться в разы, а то и на порядки. А зарплаты так не отличаются обычно. Решение о повышении зп принимаются обычно исходя из интуиции технически некомпетентного человека.
Если же будет "сколько value принёс, столько и заработал", то по настоящему эффективные ребята бы разбогатели, а те, кто научился только отмазываться и на митах делать умное лицо, ели бы доширак. А некоторые бы вообще в минус ушли.
Понятно, что сейчас это невозможно, но помечтать-то можно. Сейчас даже оценка одного PR на кодревью через claude code мягко говоря вызывает множество вопросов. А что будет, если контекст будет по-настоящему огромный? Ничего хорошего.
Однако, учитывая как сейчас СЕО больших и маленьких компаний насильно навязывают ИИ, я уверен, что многие будут принимать и такие тупорылые решения, как оценка эффективности людей существующими на сегодня средствами. И это будет максмально херово.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👎29🤡21🤔5💊4🔥3❤2👍1
Forwarded from Женя Жданов
Поворот не туда
Если вы посмотрите доклады на конференциях и обучающие материалы, то заметите болезненную фиксацию на инструментах, подходах, методах и способах что-то сделать.
Очевидно, авторам кажется, что от решения проблем слушателей отделяет ящик с инструментами.
Не будь у Шишкина кисти, откуда взяться «Утру в сосновом лесу»? Холст, масло и инструкция к ним.
Разговоры об инструментах — это поворот не туда. Форма не воспроизводит содержание. Иначе каждый, кто обладает необходимыми инструментами, кто взял фреймворк или изучил методологию, тут же достигал феноменальных результатов. Так не происходит.
Содержание порождает форму. Инструментов завались. Все они рождены обстоятельствами, нуждой и определённым пониманием проблемы.
Идеи, понятия и ментальные модели — вот чему необходимо уделять внимание. Если вам не дать инструмент — вы его изобретёте самостоятельно с опорой на идею, необходимость и стремление к решению проблемы.
Но инструмент не даст вам ничего, если вы не вполне понимаете, что происходит и к чему вы стремитесь.
Инструменты важны, но вторичны. Хорошо, что у Шишкина была кисть. Но важнее то, что у кисти был Шишкин.
Если вы посмотрите доклады на конференциях и обучающие материалы, то заметите болезненную фиксацию на инструментах, подходах, методах и способах что-то сделать.
Очевидно, авторам кажется, что от решения проблем слушателей отделяет ящик с инструментами.
Не будь у Шишкина кисти, откуда взяться «Утру в сосновом лесу»? Холст, масло и инструкция к ним.
Разговоры об инструментах — это поворот не туда. Форма не воспроизводит содержание. Иначе каждый, кто обладает необходимыми инструментами, кто взял фреймворк или изучил методологию, тут же достигал феноменальных результатов. Так не происходит.
Содержание порождает форму. Инструментов завались. Все они рождены обстоятельствами, нуждой и определённым пониманием проблемы.
Идеи, понятия и ментальные модели — вот чему необходимо уделять внимание. Если вам не дать инструмент — вы его изобретёте самостоятельно с опорой на идею, необходимость и стремление к решению проблемы.
Но инструмент не даст вам ничего, если вы не вполне понимаете, что происходит и к чему вы стремитесь.
Инструменты важны, но вторичны. Хорошо, что у Шишкина была кисть. Но важнее то, что у кисти был Шишкин.
👍55❤11💯8💊6🔥4🗿2
Bloom filter
Если нужно быстро и с малым количеством памяти проверить, есть ли элемент в каком-то списке (например, емейл в блеклисте), можно использовать Bloom filter. Этот алгоритм умеет выдавать два ответа: "этого элемента точно нет" и "этот элемент возможно есть".
Как он работает:
Выделяется массив бит длиной m (чем больше m, тем меньше ложноположительных срабатываний).
Далее, по каждому элементу списка пробегаемся и вычисляем несколько хеш функций (разных, и желательно быстро работающих). Результат хеш-функции - это некое число. Если взять остаток от деления на m, то получим позицию бита.
Короче, для каждой хеш функции выставляем в итоге бит в 1.
И так каждый элемент списка: выставит свои биты в 1, некоторые будут совпадать с другими элементами.
Проверка на вхождение элемента в список
точно также, вычисляем теми же хеш фунциями позиции битов и смотрим, что там, в этих позициях.
Если хотя бы один бит равен 0, то этот элемент точно отсутствует в списке. Если все 1, то возможно присутствует.
Элементарно и эффективно.
Хеш-функций нужно несколько, чтобы уменьшить вероятность ложноположительных ситуаций.
Количество требуемой памяти и оптимальное количество хеш-функций вычисляется по простым формулам (можно найти в Википедии), исходя из требуемой вероятности ложно-положительного срабатывания и количества элементов в списке.
Особенности фильтра:
Вы сами задаёте количество памяти исходя из требуемого качества.
Работает за константное время O(1)
Из него невозможно удалить значения. Лишь пересобрать полностью заново.
Можно разные фильтры объединять в один простым побитовым ИЛИ
🫥 Cross Join - канал о разработке
Если нужно быстро и с малым количеством памяти проверить, есть ли элемент в каком-то списке (например, емейл в блеклисте), можно использовать Bloom filter. Этот алгоритм умеет выдавать два ответа: "этого элемента точно нет" и "этот элемент возможно есть".
Как он работает:
Выделяется массив бит длиной m (чем больше m, тем меньше ложноположительных срабатываний).
Далее, по каждому элементу списка пробегаемся и вычисляем несколько хеш функций (разных, и желательно быстро работающих). Результат хеш-функции - это некое число. Если взять остаток от деления на m, то получим позицию бита.
Короче, для каждой хеш функции выставляем в итоге бит в 1.
И так каждый элемент списка: выставит свои биты в 1, некоторые будут совпадать с другими элементами.
Проверка на вхождение элемента в список
точно также, вычисляем теми же хеш фунциями позиции битов и смотрим, что там, в этих позициях.
Если хотя бы один бит равен 0, то этот элемент точно отсутствует в списке. Если все 1, то возможно присутствует.
Элементарно и эффективно.
Хеш-функций нужно несколько, чтобы уменьшить вероятность ложноположительных ситуаций.
Количество требуемой памяти и оптимальное количество хеш-функций вычисляется по простым формулам (можно найти в Википедии), исходя из требуемой вероятности ложно-положительного срабатывания и количества элементов в списке.
Особенности фильтра:
Вы сами задаёте количество памяти исходя из требуемого качества.
Работает за константное время O(1)
Из него невозможно удалить значения. Лишь пересобрать полностью заново.
Можно разные фильтры объединять в один простым побитовым ИЛИ
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍14❤8🔥6❤🔥1
Мне кажется, что развитие LLM как-то замедлилось немного. Ну, т.е. да, появляются новые инструменты, новые версии, но прям такого вау как при переходе с GPT 3.5 на 4 уже (субъективно) не наблюдаю. Да, всё это полезно, но иногда бесполезно. И год назад также было, в общем-то.
Как год назад нельзя было доверить сложный рефакторинг, так и сейчас нельзя. Заколебёшься объяснять и следить, проще самому сделать.
Курсор стал гораздо удобнее, но не прям, чтобы в 100 раз повысил продуктивность (при работе со сложным софтом) по сравнению с прошлым годом.
Чё думаете? Или это у меня только так?
Как год назад нельзя было доверить сложный рефакторинг, так и сейчас нельзя. Заколебёшься объяснять и следить, проще самому сделать.
Курсор стал гораздо удобнее, но не прям, чтобы в 100 раз повысил продуктивность (при работе со сложным софтом) по сравнению с прошлым годом.
Чё думаете? Или это у меня только так?
💯30👍5👎4🤡3
Услышал тут несколько советов, как эффективнее кодить с помощью агента.
1. Разбивать код на модули. В идеале микросервисы. Чтобы при рефакторинге нужно было меньше контекста, меньше вероятность повреждения чего-то лишнего. Лапша-код в гигантском монолите роботам понятен намного хуже.
2. Код должен быть как можно стандартнее, без трюков и вывертов. Нейросети грубо говоря обучены на чём-то среднем, поэтому и писать надо как все, тогда агентам будет легче. В идеале, чтобы весь код с самого начала в основном был написан ими же. В идеале, на самом распространенном языке / фреймворке и т.д.
3. Модули должны быть задокументированы. README модулей, ADR, примеры кода - это всё поможет.
4. Код должен быть покрыт тестами - чтобы агент мог отдебажить свой высер и поправить.
5. Явные интерфейсы и контракты. Утрируя, js-код без явных типов рефакторится хуже, чем typenoscript. Если тебе в функцию прилетел объект context, то ни человек, ни робот ничего не поймут, если у контекста не задан нормально тип (придется долго рыться в коде)
ВНЕЗАПНО, для людского кодинга действуют точно такие же правила - легче рефачить, если ты понимаешь весь контекст, и есть тесты и доки.
🫥 Cross Join - канал о разработке
⠀
1. Разбивать код на модули. В идеале микросервисы. Чтобы при рефакторинге нужно было меньше контекста, меньше вероятность повреждения чего-то лишнего. Лапша-код в гигантском монолите роботам понятен намного хуже.
2. Код должен быть как можно стандартнее, без трюков и вывертов. Нейросети грубо говоря обучены на чём-то среднем, поэтому и писать надо как все, тогда агентам будет легче. В идеале, чтобы весь код с самого начала в основном был написан ими же. В идеале, на самом распространенном языке / фреймворке и т.д.
3. Модули должны быть задокументированы. README модулей, ADR, примеры кода - это всё поможет.
4. Код должен быть покрыт тестами - чтобы агент мог отдебажить свой высер и поправить.
5. Явные интерфейсы и контракты. Утрируя, js-код без явных типов рефакторится хуже, чем typenoscript. Если тебе в функцию прилетел объект context, то ни человек, ни робот ничего не поймут, если у контекста не задан нормально тип (придется долго рыться в коде)
ВНЕЗАПНО, для людского кодинга действуют точно такие же правила - легче рефачить, если ты понимаешь весь контекст, и есть тесты и доки.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍31😁17❤5👎2🤪1
В go 1.26 расширяют оператор new, теперь туда можно будет передать число, и получить ссылку. Как по мне, очень странное решение.
Для начала, для чего вообще это нужно?
Это нужно,чтобы передать конкретное значение в поле, которое принимает ссылочный тип. Например, необязательное поле в json-структуре в Go обычно делают как ссылку на значение, которая может быть nil.
А надо передать в него 42. И вот сделали для этого new(42).
Но зачем, блин, для этого использовать new?
Оператор new и в предыдущих версиях максимально странный. Всё что он может - это делать ссылку на zero value типа, который в него передали. Если написать
это всё равно, что
Для структур тоже самое. Но довольно редко кому то нужна ссылка на 0. А на пустую структуру все обычно делают ссылку явно &User{} (для единообразия), а не new(User). Есть некоторые очень редкие кейсы с дженериками, где нужен именно new, но это прям надо постараться.
И вот они взяли и разрешили делать new(42), чтобы получить ссылку на 42.
Как по мне они к почти бесполезной хрени, которая и так вызывает вопросы у новичков, добавили костыль. Костыль - потому что теперь в аргумент внезапно передается не тип, а некое значение.
Лучше бы просто в стандартной библиотеке сделали какую-нибудь функцию ptr(). Она пишется за минуту, и есть в каждом, наверно, проекте:
А еще лучше бы не занимались такими мелочами, а улучшили бы синтаксис обработки ошибок 🙂
🫥 Cross Join - канал о разработке
⠀
age := new(42)
Для начала, для чего вообще это нужно?
Это нужно,чтобы передать конкретное значение в поле, которое принимает ссылочный тип. Например, необязательное поле в json-структуре в Go обычно делают как ссылку на значение, которая может быть nil.
type User struct {
name string
age *int
}
А надо передать в него 42. И вот сделали для этого new(42).
user := User{
name: "vasya",
age: new(42),
}
Но зачем, блин, для этого использовать new?
Оператор new и в предыдущих версиях максимально странный. Всё что он может - это делать ссылку на zero value типа, который в него передали. Если написать
go
a := new(int)
это всё равно, что
var x int = 0
a = &x
Для структур тоже самое. Но довольно редко кому то нужна ссылка на 0. А на пустую структуру все обычно делают ссылку явно &User{} (для единообразия), а не new(User). Есть некоторые очень редкие кейсы с дженериками, где нужен именно new, но это прям надо постараться.
И вот они взяли и разрешили делать new(42), чтобы получить ссылку на 42.
Как по мне они к почти бесполезной хрени, которая и так вызывает вопросы у новичков, добавили костыль. Костыль - потому что теперь в аргумент внезапно передается не тип, а некое значение.
Лучше бы просто в стандартной библиотеке сделали какую-нибудь функцию ptr(). Она пишется за минуту, и есть в каждом, наверно, проекте:
func Ptr[T any](v T) *T {
return &v
}
А еще лучше бы не занимались такими мелочами, а улучшили бы синтаксис обработки ошибок 🙂
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🥴10👎4❤2💯2
Cross Join - канал о разработке
Многие знают, что было довольно много попыток оценивать эффективность работы программиста. Пытались считать строки кода, жопочасы, количество выполненных задач и т.д. Ничего, естественно, не работает. Однако с появлением ИИ это может заиграть новыми красками.…
"....Глава «Сбера» Герман Греф заявил, что до 1 января банк уволит до 20% сотрудников, которых признал неэффективными искусственный интеллект. ИИ также поможет банку закрыть неэффективные проекты, рассказал он на конференции AI Journey...."
жесть
жесть
🌚17🤡14🫡12🤣6🔥3👍2
В новой версии git дефолтной веткой станет main (вместо master). Вообще, если отбросить политические аспекты, main ведь гораздо логичнее. Что еще нафиг за master (хозяин)? Хозяин веток? Лесовик что ли
Но еще круче было бы вернуть старый добрый trunk, как деды называли. Раз у нас есть ветки, то должен быть и ствол. Суперлогично, как мне кажется.
Тем более, что второе значение trunk - это сундук. Сундук, короче, со всяким ненужным хламом. Вообще было бы супер в тему
🫥 Cross Join - канал о разработке
⠀
Но еще круче было бы вернуть старый добрый trunk, как деды называли. Раз у нас есть ветки, то должен быть и ствол. Суперлогично, как мне кажется.
Тем более, что второе значение trunk - это сундук. Сундук, короче, со всяким ненужным хламом. Вообще было бы супер в тему
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
👍30🤮20😁10❤2🔥2
Говорят, на собеседованиях стали просить закрывать глаза при ответах на сложные вопросы, чтобы исключить подсказки chatGPT.
Сразу вспоминается случай в шахматном мире, когда один чел явно читил на живом турнире, обыгрывая чемпионов, но его никак не могли уличить. Тогда возникло предположение, что использовался анальный вибратор на радиоуправлении, который давал подсказки во время партии.
Думаю, что на алгоритмической секции прогерского собеса тоже можно так читить. Так что надо еще просить показать ж, чего уж мелочиться.
Вообще, если серьёзно, то собесы превращаются в какой-то цирк. Имхо если чел быстро и правильно отвечает, то какая разница, что он там использует фоном, хоть ии, хоть вибратор.
Такой хитрожопый (во всех смыслах) чел уж как-нибудь кнопку покрасит и json в базу пихнёт
🫥 Cross Join - канал о разработке
⠀
Сразу вспоминается случай в шахматном мире, когда один чел явно читил на живом турнире, обыгрывая чемпионов, но его никак не могли уличить. Тогда возникло предположение, что использовался анальный вибратор на радиоуправлении, который давал подсказки во время партии.
Думаю, что на алгоритмической секции прогерского собеса тоже можно так читить. Так что надо еще просить показать ж, чего уж мелочиться.
Вообще, если серьёзно, то собесы превращаются в какой-то цирк. Имхо если чел быстро и правильно отвечает, то какая разница, что он там использует фоном, хоть ии, хоть вибратор.
Такой хитрожопый (во всех смыслах) чел уж как-нибудь кнопку покрасит и json в базу пихнёт
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣75👍17🤡3👏1😁1💯1
https://about.gitlab.com/blog/gitlab-discovers-widespread-npm-supply-chain-attack/
🚨 Масштабная атака на npm-экосистему
GitLab обнаружил крупную атаку на цепочки поставок через npm-пакеты. Вредоносная программа распространяется как червь, автоматически заражая новые пакеты через украденные токены разработчиков. Малварь крадёт credentials от GitHub, npm, AWS, GCP и Azure, а затем использует их для дальнейшего распространения через легитимные пакеты.
Самое опасное — встроенный механизм «мёртвой руки». Если малварь теряет доступ к своей инфраструктуре (например, при массовом удалении заражённых репозиториев), она начинает уничтожать данные пользователя. На Windows удаляет файлы и перезаписывает сектора диска, на Unix использует shred для безвозвратного уничтожения.
Что делать:
Проверьте node_modules на наличие файла bun_environment.js, папки ~/.truffler-cache/ и др (см статью)
Также в статье указаны подозрительные процессы, которые стоит поискать.
Просканируйте package.json на подозрительные preinstall скрипты
Ротируйте все токены GitHub, npm и облачных сервисов
Расследование продолжается, список заражённых пакетов уточняется.
🫥 Cross Join - канал о разработке
⠀
GitLab обнаружил крупную атаку на цепочки поставок через npm-пакеты. Вредоносная программа распространяется как червь, автоматически заражая новые пакеты через украденные токены разработчиков. Малварь крадёт credentials от GitHub, npm, AWS, GCP и Azure, а затем использует их для дальнейшего распространения через легитимные пакеты.
Самое опасное — встроенный механизм «мёртвой руки». Если малварь теряет доступ к своей инфраструктуре (например, при массовом удалении заражённых репозиториев), она начинает уничтожать данные пользователя. На Windows удаляет файлы и перезаписывает сектора диска, на Unix использует shred для безвозвратного уничтожения.
Что делать:
Проверьте node_modules на наличие файла bun_environment.js, папки ~/.truffler-cache/ и др (см статью)
Также в статье указаны подозрительные процессы, которые стоит поискать.
Просканируйте package.json на подозрительные preinstall скрипты
Ротируйте все токены GitHub, npm и облачных сервисов
Расследование продолжается, список заражённых пакетов уточняется.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
about.gitlab.com
GitLab discovers widespread npm supply chain attack
Malware driving attack includes "dead man's switch" that can harm user data.
😱25❤2👍2🔥1💩1
В Go 1.26 появится еще немного сахара
Как известно, тип error - это просто интерфейс, под которым может скрываться любой тип, который этот интерфейс реализует.
И для проверки и распаковки ошибки в переменную нужного типа применяется errors.As, но этот метод неудобен: надо сначала создавать переменную, а потом туда загонять значение
Особенно это напрягает если есть цепочка if, else if ..., перед этой цепочкой надо создать все переменные.
Ну так вот, приняли proposal, который позволяет это сделать попроще. "type-safe, faster, and easier"
Наличие дженериков в Go снова помогло улучшить стандартную библиотеку.
🫥 Cross Join - канал о разработке
⠀
Как известно, тип error - это просто интерфейс, под которым может скрываться любой тип, который этот интерфейс реализует.
И для проверки и распаковки ошибки в переменную нужного типа применяется errors.As, но этот метод неудобен: надо сначала создавать переменную, а потом туда загонять значение
var appErr AppError
if errors.As(err, &appErr) {
fmt.Println("Got an AppError:", appErr)
}
Особенно это напрягает если есть цепочка if, else if ..., перед этой цепочкой надо создать все переменные.
Ну так вот, приняли proposal, который позволяет это сделать попроще. "type-safe, faster, and easier"
if appErr, ok := errors.AsType[AppError](err); ok {
fmt.Println("Got an AppError:", appErr)
}
Наличие дженериков в Go снова помогло улучшить стандартную библиотеку.
⠀
Please open Telegram to view this post
VIEW IN TELEGRAM
antonz.org
Go proposal: Type-safe error checking
errors.AsType is a modern alternative to errors.As.
👍21😭6❤1👎1
Сколько примерно процентов кода пишете с ии-агентами (cursor, claude code и т.д.)? Т.е. не копированием из чата chatGPT, а именно агент сам правит код по вашей просьбе.
Давайте замерим ситуацию на данный момент, через полгода проведу опрос снова.
Давайте замерим ситуацию на данный момент, через полгода проведу опрос снова.
Anonymous Poll
6%
> 90%
6%
70%
6%
50%
11%
30%
45%
< 10%
27%
мне посмотреть
Forwarded from Голландский Rust-ист
Сегодня в Twitter заметил тред, где Jarred Sumner (автор Bun), подсвечивает проблему что в VSCode медленно работает copy/paste в терминал со скриншотом кода.
Логика там простая, весь контент вставки бьется на строчки по 50 символов и вставляет их последовательно с паузой в 5 ms. Естественно, это выглядит как нереальный говнокод.
Какая еще пауза при вставке? Набежала куча людей, естественно шуточки, приколы, все как мы любим. Но почему так сделано? Почему сразу не пишут все за раз?
Ответ крайне простой, такой код был написан, чтобы исправить проблему которая звучит как:
> The only pattern I can see is that the text gets cropped after 1018 characters
Переписали плохо, но чтобы работало. Но почему так?
Я не хочу грузить сложностями в пятницу вечером, а просто приведу мой подробный комментарий как я считаю почему вызывался такой баг.
Баг крайне сложный, вызванный из-за того что Node.js использует везде NON Blocking IO для STDOUT/STDERR/TTY.
Я тут хочу сказать об другом. На человека вывалился хейт, популярная персона подала это погано и на показ и люди начали критиковать это еще больше. Я уверен, что 99% людей кто написали плохие вещи, даже не догадываются в чем там проблема.
Иногда так бывает, что крайне сложно разобраться в проблеме, особенно на стыке когда это уже системное программирование, в котором не каждый человек селен.
Помните, код который вы пишите, не определяет вас, а определяет вас реакция. Человек пошел и начал чинить. 1-2 дня и проблему исправят.
Хороших выходных!
Голландский Rust-ист - канал о веб разработке
Логика там простая, весь контент вставки бьется на строчки по 50 символов и вставляет их последовательно с паузой в 5 ms. Естественно, это выглядит как нереальный говнокод.
Какая еще пауза при вставке? Набежала куча людей, естественно шуточки, приколы, все как мы любим. Но почему так сделано? Почему сразу не пишут все за раз?
Ответ крайне простой, такой код был написан, чтобы исправить проблему которая звучит как:
> The only pattern I can see is that the text gets cropped after 1018 characters
Переписали плохо, но чтобы работало. Но почему так?
Я не хочу грузить сложностями в пятницу вечером, а просто приведу мой подробный комментарий как я считаю почему вызывался такой баг.
Баг крайне сложный, вызванный из-за того что Node.js использует везде NON Blocking IO для STDOUT/STDERR/TTY.
Я тут хочу сказать об другом. На человека вывалился хейт, популярная персона подала это погано и на показ и люди начали критиковать это еще больше. Я уверен, что 99% людей кто написали плохие вещи, даже не догадываются в чем там проблема.
Иногда так бывает, что крайне сложно разобраться в проблеме, особенно на стыке когда это уже системное программирование, в котором не каждый человек селен.
Помните, код который вы пишите, не определяет вас, а определяет вас реакция. Человек пошел и начал чинить. 1-2 дня и проблему исправят.
Хороших выходных!
Голландский Rust-ист - канал о веб разработке
💯10👍1🥴1
Этот канал, кстати, ведёт Дима Пацура, вы можете его помнить по подкасту Underjs, да и в "Цинковом проде" он был миллион раз.
Природа настолько очистилась, что Дима возвращается!
👍12