Набор полезных «фреймворков» мышления для решения задач, системного мышления и принятия решений:
https://untools.co
https://untools.co
С первого взгляда показалось, что это что-то проклятое, но я посмотрел примеры, и захотелось попробовать.
Утилита позволяет делать поиск по истории гит-репозитория в SQL-стиле.
https://github.com/filhodanuvem/gitql
Утилита позволяет делать поиск по истории гит-репозитория в SQL-стиле.
https://github.com/filhodanuvem/gitql
GitHub
GitHub - filhodanuvem/gitql: 💊 A git query language
💊 A git query language. Contribute to filhodanuvem/gitql development by creating an account on GitHub.
Сходил вчера на собеседование, и на нём мне напомнили про сюрпризы, которые могут поджидать разработчика при работе с интерфейсами. Один из таких сюрпризов может проявиться, если к переменной с типом-интерфейсом не синхронизирован конкурентный доступ.
TLDR: когда вы не обеспечиваете синхронный доступ к переменной с интерфейсным типом, не удивляйтесь, если обнаружите, что тип данных внутри указан один, а значение совсем другого типа. Это связано с тем, что Go обеспечивает атомарное обновление только переменных с типами из одного машинного слова. Интерфейсы к ним не относятся.
https://dave.cheney.net/2014/06/27/ice-cream-makers-and-data-races
TLDR: когда вы не обеспечиваете синхронный доступ к переменной с интерфейсным типом, не удивляйтесь, если обнаружите, что тип данных внутри указан один, а значение совсем другого типа. Это связано с тем, что Go обеспечивает атомарное обновление только переменных с типами из одного машинного слова. Интерфейсы к ним не относятся.
https://dave.cheney.net/2014/06/27/ice-cream-makers-and-data-races
👍1
Go 1.19 в релизе! Из интересного:
Остальное — в релиз ноутах.
• Обновилась модель памяти, и теперь она ближе к моделям памяти C, C++, Java, JavaScript, Rust и Swift.• Появился тип atomic.Pointer[T], позволяющий делать атомики не только из базовых типов.• Добавлена поддержка ссылок, списков и более явных заголовков в комментариях.• Теперь возможно задавать софт-лимиты (рекомендуемые ограничения) по памяти для рантайма.Остальное — в релиз ноутах.
go.dev
Go 1.19 Release Notes - The Go Programming Language
🔥5
Я тут функциональщины принёс. Есть библиотека mo, которая позволяет использовать монады в Go 😳 Наверное, я пока попробую использовать отсюда только
https://github.com/samber/mo
Option и Either, хотя может и остальные пригодятся когда-то...https://github.com/samber/mo
GitHub
GitHub - samber/mo: 🦄 Monads and popular FP abstractions, powered by Go 1.18+ Generics (Option, Result, Either...)
🦄 Monads and popular FP abstractions, powered by Go 1.18+ Generics (Option, Result, Either...) - samber/mo
🔥3❤2
🚕 У Uber есть свой большой гайд о том, как писать на Go. Пока не дочитал до конца, но то что успел прочесть звучит разумно и почти полностью согласуется с тем, как я привык писать на Go.
Крайне рекомендуется к ознакомлению: https://github.com/uber-go/guide
🙂
Крайне рекомендуется к ознакомлению: https://github.com/uber-go/guide
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - uber-go/guide: The Uber Go Style Guide.
The Uber Go Style Guide. Contribute to uber-go/guide development by creating an account on GitHub.
👍5🔥1
Сижу и мечтаю о том, как все перестанут использовать SQL в частности и реляционный подход в целом везде, где только можно, и натыкаюсь на нечто под названием TablaM — реляционный язык программирования.
Вообще реляционные СУБД всегда казались мне странным явлением, по крайней мере, в том виде, в котором они существуют сейчас:
1. Люди не мыслят таблицами и отношениями между ними — иначе в каждом (нормальном) языке программирования кроме структур данных, таких как связный список, мапа и т.д. присутствовали бы реляционные таблицы.
2. Я не знаю ни одного человека, который назвал бы SQL вменяемым языком, но почему-то индустрия продолжает им пользоваться, придумывая поверх него другие языки (ORM) вместо того чтобы решить проблему на корню.
Казалось бы, TablaM и другие подобные проекты (если они вообще существуют — скиньте ссылку, интересно поглядеть) как раз решают две проблемы выше. Но нет — TablaM лечит скорее симптом, чему саму болезнь. Ещё раз: люди не мыслят таблицами. Да, у реляционного подхода есть свои применения, но проблема в том, что SQL используют вообще везде.
Вообще реляционные СУБД всегда казались мне странным явлением, по крайней мере, в том виде, в котором они существуют сейчас:
1. Люди не мыслят таблицами и отношениями между ними — иначе в каждом (нормальном) языке программирования кроме структур данных, таких как связный список, мапа и т.д. присутствовали бы реляционные таблицы.
2. Я не знаю ни одного человека, который назвал бы SQL вменяемым языком, но почему-то индустрия продолжает им пользоваться, придумывая поверх него другие языки (ORM) вместо того чтобы решить проблему на корню.
Казалось бы, TablaM и другие подобные проекты (если они вообще существуют — скиньте ссылку, интересно поглядеть) как раз решают две проблемы выше. Но нет — TablaM лечит скорее симптом, чему саму болезнь. Ещё раз: люди не мыслят таблицами. Да, у реляционного подхода есть свои применения, но проблема в том, что SQL используют вообще везде.
TablaM
The practical relational programing language for data-oriented applications
Видос готов! Он уже доступен для тех, кто подпишется на Бусти или Патреоне 😉
В открытый доступ ролик выйдет через несколько дней.
Кроме раннего доступа, платным подписчикам доступны и другие ништяки.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5⚡2❤1🎉1
prealloc — линтер, который сообщает о том, что слайс можно преаллоцировать. Обычно я такое глазами определяю. Надо будет попробовать подключить и сравнить, кто лучше справляется: превосходная машина или кожаный мешок.
https://github.com/alexkohler/prealloc
https://github.com/alexkohler/prealloc
GitHub
GitHub - alexkohler/prealloc: prealloc is a Go static analysis tool to find slice declarations that could potentially be preallocated.
prealloc is a Go static analysis tool to find slice declarations that could potentially be preallocated. - alexkohler/prealloc
👍4
defer panic
Теперь видос про дженерики доступен для всех!
📹 https://youtu.be/TUSGcQKqCkI
Текстовая версия приложена к посту на Бусти и Патреоне (посты открыты для всех):
💳 https://boosty.to/deferpanic/posts/af7c5ee5-f69a-4340-bf22-439555e1cc26
💳 https://www.patreon.com/posts/dzheneriki-v-go-70702639
Дополнительные материалы к ролику
— Официальный туториал по дженерикам: https://go.dev/doc/tutorial/generics
— Запись в блоге Go, раскрывающая тему подробнее: https://go.dev/blog/why-generics
— Виталий Брагилевский «Монады — не приговор»: https://www.youtube.com/watch?v=IkXg_mjNgG4
Текстовая версия приложена к посту на Бусти и Патреоне (посты открыты для всех):
Дополнительные материалы к ролику
— Официальный туториал по дженерикам: https://go.dev/doc/tutorial/generics
— Запись в блоге Go, раскрывающая тему подробнее: https://go.dev/blog/why-generics
— Виталий Брагилевский «Монады — не приговор»: https://www.youtube.com/watch?v=IkXg_mjNgG4
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Дженерики в #Go. Нужны или нет? // туториал по дженерикам и обобщенному программированию
В этот раз поговорим об одной из самых долгожданных фичах Go — дженериках — инструменте
обобщённого программирования. Дженерики — настолько крупное изменение в языке (относительно других), что пройти мимо невозможно.
❤️ Реквизиты, если у вас есть желание…
обобщённого программирования. Дженерики — настолько крупное изменение в языке (относительно других), что пройти мимо невозможно.
❤️ Реквизиты, если у вас есть желание…
👏8👍2
defer panic pinned «Теперь видос про дженерики доступен для всех! 📹 https://youtu.be/TUSGcQKqCkI Текстовая версия приложена к посту на Бусти и Патреоне (посты открыты для всех): 💳 https://boosty.to/deferpanic/posts/af7c5ee5-f69a-4340-bf22-439555e1cc26 💳 https://www.patreon…»
defer panic
Теперь видос про дженерики доступен для всех! 📹 https://youtu.be/TUSGcQKqCkI Текстовая версия приложена к посту на Бусти и Патреоне (посты открыты для всех): 💳 https://boosty.to/deferpanic/posts/af7c5ee5-f69a-4340-bf22-439555e1cc26 💳 https://www.patreon…
Вдогонку статейка про констрейны https://blog.merovius.de/posts/2022-05-23-operator-constraints/
blog.merovius.de
Operator constraints in Go
I describe four ways to express constraints for operators in generic Go code and the trade-offs involved.
Есть у меня спецификация OpenAPI, описанная, как полагается, в YAML-файле. Из этой спеки генерируется бойлерплейт для сервера на Echo (об этом как-нибудь отдельно могу рассказать). Так вот, запускаю я после очередного обновления спеки кодогенерацию и получаю ошибку. Мол, не могу распарсить в поле
required значение как bool, так как никакого bool здесь быть не должно. Место, на которое ругался кодогенератор выглядит так:points:
type: array
required: [ id, x, y ]
items:
type: object
properties:
id:
type: string
x:
type: number
y:
type: numberПодумайте, где здесь может прятаться булеан? У меня не заняло много времени его обнаружить, но когда это произошло, я резко захотел в отпуск. В YAML 1.1 символ
y интерпретируется как true. Более того, y и n являются каноничными записями для булевых значений (а не true и false, казалось бы). Полный регексп для булеана выглядит так:y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFFУ меня в связи с этим есть вопрос (риторический, конечно же):
Кто решил, что такой синтаксис для булеанов — это отличная идея, и обычных
true с false не будет достаточно? Неужели ни у кого из авторов формата не возникло мысли, что такие ключевые слова языка обязательно пересекутся с названиями полей?В какой-то момент авторы видимо поняли, что
y и n и прочие “human-friendly” варианты для булеанов (иронично вышло) — это слишком гениально, и в YAML 1.2 уже оставили только true и false. Казалось бы, круто, решили проблему, двигаемся дальше. Но в итоге половина библиотек и инструментов поддерживает старый синтаксис, а половина — нет. Поэтому теперь сходу нельзя быть уверенным в том, как будет интерпретироваться y — как строка или как булеан. Для однозначной интерпретации теперь приходится писать "y" (я не шучу).Снова кто-то попытался сделать язык для машин языком для людей и наломал дров. От принятого изначально решения читаемость формата наоборот стала хуже, потому что
y — не всегда просто y.Please open Telegram to view this post
VIEW IN TELEGRAM
🤯8🔥2
Периодически, когда меня достают тормоза Goland и Visual Studio Code, я переключаюсь на Вим. Ощущается это как приятный детокс 🙂 А так, конечно, везде, где можно у меня включена Вим-раскладка.
Если вы никогда не пробовали писать в Виме, или хотя бы использовать его подход к редактированию текстов в других средах, то обязательно попробуйте. Первое время очень тяжело, но потом ещё тяжелее работать с кодом как-то иначе.
А вот тут тред от Кирилла Мокевнина в тему: https://twitter.com/mokevnin/status/1566110250348023814?s=20&t=XMx62DItLJhd8H0OoVWYAw
Если вы никогда не пробовали писать в Виме, или хотя бы использовать его подход к редактированию текстов в других средах, то обязательно попробуйте. Первое время очень тяжело, но потом ещё тяжелее работать с кодом как-то иначе.
А вот тут тред от Кирилла Мокевнина в тему: https://twitter.com/mokevnin/status/1566110250348023814?s=20&t=XMx62DItLJhd8H0OoVWYAw
👍4🔥1