☕️ Мерлин заваривает τσάι 🐌
1.11K subscribers
3.52K photos
63 videos
94 files
2.42K links
💊
Download Telegram
Неприятная уязвимость в go:"encoding/xml" пакете: сформированный особым образом XML документ может переписать собственный AST во время парсинга. Это опасно в первую очередь для SAML пакетов — уязвимость позволяет подменить подписанное сообщение на произвольные данные.

https://mattermost.com/blog/coordinated-disclosure-go-xml-vulnerabilities/
Вышла беточка go1.16 с поддержкой виртуальной файловой системы и встраивания произвольных файлов.

Теперь можно на этапе компиляции вшить виртуальную файловую систему прямо в бинарник.

И ещё приехала поддержка метрик рантайма в стандартную библиотеку — цепляемся к райнтайму через любые сторонние сборщики метрик через тонкий адаптер.

Из мелочей — есть множественные ключи в тегах: вместо json:"field" bson:"field" можно писать json bson: "field"

Люблю этот релиз, дорохо-бохато

https://tip.golang.org/doc/go1.16
Я правильно понимаю, что этот ваш киберпанк надо будет брать через год по скидке, чтобы не разочароваться?
В zig завезли завезли race детектор.

Как ни странно, zig последнее время мне нравится больше чем rust. Если ржавчина – замена плюсов, то zig целится в Си – поэтому мне кажется ближе по духу к Go

https://twitter.com/andy_kelley/status/1341611395482173443
Go: ну короче у тебя есть оператор, который запускает задачу с переданной функцией — дальше всё сделает рантайм;

rust: у нас есть библиотека с тредпулом и пачка макросов;

zig: держи ссылку на список стек фреймов, удачи )))
Forwarded from Bortlog
Тут ребята реверс-инженирят код BioNTech/Pfizer SARS-CoV-2 вакцины. Оказывается это ~1KB довольно интересного кода напечатаного на ДНК принтере, который проникая в человеческую клетку обманывает ее и заставляет в ускореном режиме производить «иголочки» идентичные таким как у короновируса, потом наша имунная система обнаруживает такое проникновенте и учится эти иголочки детектить чтобы обезвреживать в будущем. Там куча всего интересного разбирается код с хедерами, метаданными, модифицироваными нуклеотидами чтобы обмануть чащитный механизм клетки и прикинутся «местным» кодом и тд.

https://berthub.eu/articles/posts/reverse-engineering-source-code-of-the-biontech-pfizer-vaccine/
Почему-то никто не написал, а тем временем в комьюнити Go не всё спокойно. Генератором драмы выступил автор популярного HTTP роутера chi. Решив, что настало время для нового релиза, @pkieltyka вместо версиис v5.*.* выпустил версию v1.5.0, в то время как последняя версия была v4.1.2+incompatible.

К сожалению, go mod не рассчитан на такой слом семантического версионирования и снизил версии других пакетов.

Например, если у вас были зависимости от chi

git.example.com/commons/pkg/rest v1.3.2
github.com/go-chi/chi v4.1.2+incompatible

то после апгрейда их версия упадёт до совместимой с v1:

git.example.com/commons/pkg/rest v1.1.0
github.com/go-chi/chi v1.5.1

Основным мотивом слома версионирования, по словам автора, стало эстетическое неприятие использование номера версий в путях импорта (как пример, github.com/go-chi/chi/v5).

Вокруг этого решения до сих пор бурлят споры, и понятно из-за чего: chi — один из самых приятных в использовании роутеров, к тому же совместимый со стандартной библиотекой. Вокруг него выросла небольшая экосистема пакетов, например, миддлварей, так что большое количество пользователей chi застряли на версии v4.1.2+incompatible.

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

https://github.com/go-chi/chi/issues/561
Любопытный, но довольно бесполезный пример полиморфизма в Go

В гошечке есть несколько способов писать полиморфные функции:

1. интерфейсы;
2. тайп свитчи и тайп кастинг интерфейсов;
3. рефлексия;

Недавно я понял, что есть чётвёртый подход, который стал возможен с появлением type alias — назовём его апкастингом типов. Работает оно так:

func main() {
printName(Cat{"Whiskey"})
printName(Dog{"Chappie"})
}

type Cat struct { Name string }

type Dog struct { Name string }

type named = struct { Name string }

func printName(n named) {
fmt.Println(n.Name)
}

В спеке Go указано, что присваивание x типа V к переменной типа T валидно в случае, если V и T основаны на одинаковых типах и T — не именованный тип ("x's type V and T have identical underlying types and at least one of V or T is not a defined type."). Псевдонимы типов не считются именованными типами, так что мы можем принимать в аргумент n любую кастуемую структуру.

К сожалению, это не слишком полезно — наверное только если вы не хотите делать пачку геттеров и у вас есть пачка одинаковых структур разных типов.
Forwarded from Anton Trunov
“Волшебные сказки программистов мира”:
- Иван-Царевич и Языки-на-которых-нельзя-писать-плохо
- Красивый код и Чудовищный
- Синяя АйтиБорода
- Всё, что остается от вашего стартапа (Золушка)
- Код в сапогах
- Whitespace и Семь Языков (за Семь Недель)
- Красная Шапочка Enterprise Linux
- Гадкая Утиная Типизация
- Джек и Стебель Дяди Боба
- Чип Полины (Эльбрус-2020)
- Сестрица Алёна-С++ и Рыжий Иванушка
- Принцесса на Горутинах
- Волк и семь БД за семь недель
- Категорошек и попытки писать без него на ФП языках
- Ко-лобок
- Coq — Золотой гребешок
- Курочка Agda
- Гит-репка
- Жил-был PS5
Большая подборка фотографий советский компьютеров. Нужно больше этой эстетики! Спасибо @oleg_log https://rusue.com/cemetery-of-soviet-computers/