⚠️ Набрасываю на SQL
Я как-то раз писал про то, почему я не люблю SQL (именно язык как концепцию и философию, а не конкретные реализации), зато люблю про это говорить — уже третий пост, где я это упоминаю. Тем не менее я сейчас пишу код для следующего ролика, и я сознательно решил там использовать PostgreSQL. Причина простая — это видос про написание проекта. Такие видосы по моей гипотезе полезны прежде всего джунам, чтобы те могли приложить к резюме свой гитхаб, где лежит реализованный проект. И в данном случае джун, умеющий хоть как-то в PostgreSQL будет иметь преимущество, потому что постгря сейчас практически везде.
Так вот, я вчера мозг сломал в трёх местах, пока пытался написать запрос с элементарной фильтрацией по колонкам с таймстемпами. Не то что бы это что-то сложное, но способов выразить время и фильтры по времени в PostgreSQL миллион (как и положено в SQL). А к ним добавляется ещё неясность относительно того, как эти даты и интервалы правильно передавать конкретному драйверу — авторы того драйвера, что у меня решили, что не будут делать авто маппинг time.Duration в интервалы. Почему? Потому что не будут.
Вообще я думал про то, что в СУБД нужно выкинуть/сделать SQL опциональным и предоставлять бинарный протокол. Почему SQL нужен аналитикам — понятно. Зачем промежуточный язык для продакшен-кода — мне непонятно. Если бы у СУБД существовал бинарный протокол, то язык запросов мог бы быть выражен инструментами языка, на котором ведётся разработка. Да, я знаю про ORM и ActiveRecord. Но они всё равно превращают код на одном языке в код на SQL. Тут уж я скорее солидарен с го-коммьюнити — если и писать SQL-запросы, то на самом SQL.
Есть тула, на которую я недавно наткнулся — sqlc. Она отчасти, но решает эту проблему: вы описываете схему БД, как обычно вы это делаете в миграциях на создание таблиц, а дальше sqlc генерит код. Сгенерированный код реализует только CRUD, но при этом никто не мешает в отдельном файле рядом дописать к структурам методы, которых вам не хватает. В sqlc нравится, что это не ORM, а именно кодогенерация — при необходимости с sqlc можно будет постепенно без проблем съехать или, например, подменить части сгенерированного кода (засчёт эмбеддинга и прочих танцев, но всё равно). Выкинуть ORM просто так уже не получится.
Я как-то раз писал про то, почему я не люблю SQL (именно язык как концепцию и философию, а не конкретные реализации), зато люблю про это говорить — уже третий пост, где я это упоминаю. Тем не менее я сейчас пишу код для следующего ролика, и я сознательно решил там использовать PostgreSQL. Причина простая — это видос про написание проекта. Такие видосы по моей гипотезе полезны прежде всего джунам, чтобы те могли приложить к резюме свой гитхаб, где лежит реализованный проект. И в данном случае джун, умеющий хоть как-то в PostgreSQL будет иметь преимущество, потому что постгря сейчас практически везде.
Так вот, я вчера мозг сломал в трёх местах, пока пытался написать запрос с элементарной фильтрацией по колонкам с таймстемпами. Не то что бы это что-то сложное, но способов выразить время и фильтры по времени в PostgreSQL миллион (как и положено в SQL). А к ним добавляется ещё неясность относительно того, как эти даты и интервалы правильно передавать конкретному драйверу — авторы того драйвера, что у меня решили, что не будут делать авто маппинг time.Duration в интервалы. Почему? Потому что не будут.
Вообще я думал про то, что в СУБД нужно выкинуть/сделать SQL опциональным и предоставлять бинарный протокол. Почему SQL нужен аналитикам — понятно. Зачем промежуточный язык для продакшен-кода — мне непонятно. Если бы у СУБД существовал бинарный протокол, то язык запросов мог бы быть выражен инструментами языка, на котором ведётся разработка. Да, я знаю про ORM и ActiveRecord. Но они всё равно превращают код на одном языке в код на SQL. Тут уж я скорее солидарен с го-коммьюнити — если и писать SQL-запросы, то на самом SQL.
Есть тула, на которую я недавно наткнулся — sqlc. Она отчасти, но решает эту проблему: вы описываете схему БД, как обычно вы это делаете в миграциях на создание таблиц, а дальше sqlc генерит код. Сгенерированный код реализует только CRUD, но при этом никто не мешает в отдельном файле рядом дописать к структурам методы, которых вам не хватает. В sqlc нравится, что это не ORM, а именно кодогенерация — при необходимости с sqlc можно будет постепенно без проблем съехать или, например, подменить части сгенерированного кода (засчёт эмбеддинга и прочих танцев, но всё равно). Выкинуть ORM просто так уже не получится.
Telegram
defer panic
Сижу и мечтаю о том, как все перестанут использовать SQL в частности и реляционный подход в целом везде, где только можно, и натыкаюсь на нечто под названием TablaM — реляционный язык программирования.
Вообще реляционные СУБД всегда казались мне странным…
Вообще реляционные СУБД всегда казались мне странным…
👍7
Иногда мне нужно проверить какой-нибудь маленький сниппет кода, и обычно для этого я открываю Go Playground. А тут мне попалась штука под названием gore. Это по сути REPL для Go! Т.е. можно построчно и интерактивно вводить части кода и тут же выполнять их. Конечно, до лисповых реплов ему как до Луны (да и до питонячего, я подозреваю, тоже), но для описанного мной юзкейса в самый раз.
👍9🔥5
Делюсь с вами моим докладом с Podlokda Go Crew про принципы построения CLI-приложений.
Возможно, вам покажется, что говорить в 2023м о консольных приложениях странно, но в докладе мы покажем, почему CLI-приложения еще актуальны. Разберемся, какие инструменты помогут нам баланс и сделать такие приложения максимально удобными и понятными пользователю. На закуску предложим шаблон с конфигами, который можно унести к себе в команду.
Спасибо Подлодке за то, что позвали выступить.
📹 https://youtu.be/kbciYciNO4Y
Возможно, вам покажется, что говорить в 2023м о консольных приложениях странно, но в докладе мы покажем, почему CLI-приложения еще актуальны. Разберемся, какие инструменты помогут нам баланс и сделать такие приложения максимально удобными и понятными пользователю. На закуску предложим шаблон с конфигами, который можно унести к себе в команду.
Спасибо Подлодке за то, что позвали выступить.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍1👏1
В следующем релизе Go, кажется, завезут структурированный логгер прямо в стандартную библиотеку
https://go.googlesource.com/proposal/+/master/design/56345-structured-logging.md
https://go.googlesource.com/proposal/+/master/design/56345-structured-logging.md
🔥14
Не пишите комменты
В какой-то момент я перестал практически полностью писать комменты к коду и отключил везде линтер, который проверяет их наличие. Потому что 99,(9)% времени комменты либо описывают что-то очевидное (
• Код запутан из-за оптимизации или специфики алгоритма
• В языке нет вменяемой системы типов (привет, Clojure)
• Выразительность языка на уровне write only (привет, Haskell)
Вторые два случая нас не интересуют — мы же тут про Go говорим. Да и с первым всё понятно — если алгоритм или предметная область сложные сами по себе, тут уже ничего не поделаешь. В остальных случаях, когда я вижу комменты к коду, которые добавлены «для ясности», то я понимаю, что на самом деле человек потратил лишнее время, для того чтобы написать ясный комментарий (если повезло) вместо того, чтобы написать ясный код.
Я вдруг вспомнил столь холиварную тему, т.к. за завтраком наткнулся на ролик с офигенного канала Code Aesthetic: https://youtu.be/Bf7vDBBOBUA
Но вообще интересно почитать, что думаете вы. Поэтому если не согласны (и согласны тоже), то напишите в комментах, почему — к этому посту, не в коде😀
В какой-то момент я перестал практически полностью писать комменты к коду и отключил везде линтер, который проверяет их наличие. Потому что 99,(9)% времени комменты либо описывают что-то очевидное (
GetUser returns user или ID is ID of user), либо описывают что-то очевидное и врут, потому что забыли обновить коммент или неточно выразили свои мысли (GetUser is goroutine-safe). Я понимаю, что кто-то может возразить, что бывают случаи, когда комменты нужны. Я вижу для себя три возможные причины:• Код запутан из-за оптимизации или специфики алгоритма
• В языке нет вменяемой системы типов (привет, Clojure)
• Выразительность языка на уровне write only (привет, Haskell)
Вторые два случая нас не интересуют — мы же тут про Go говорим. Да и с первым всё понятно — если алгоритм или предметная область сложные сами по себе, тут уже ничего не поделаешь. В остальных случаях, когда я вижу комменты к коду, которые добавлены «для ясности», то я понимаю, что на самом деле человек потратил лишнее время, для того чтобы написать ясный комментарий (если повезло) вместо того, чтобы написать ясный код.
Я вдруг вспомнил столь холиварную тему, т.к. за завтраком наткнулся на ролик с офигенного канала Code Aesthetic: https://youtu.be/Bf7vDBBOBUA
Но вообще интересно почитать, что думаете вы. Поэтому если не согласны (и согласны тоже), то напишите в комментах, почему — к этому посту, не в коде
Please open Telegram to view this post
VIEW IN TELEGRAM
YouTube
Don't Write Comments
Why you shouldn't write comments in your code (write documentation)
Access to code examples, discord, song names and more at https://www.patreon.com/codeaesthetic
References:
https://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/?
Access to code examples, discord, song names and more at https://www.patreon.com/codeaesthetic
References:
https://www.commitstrip.com/en/2016/08/25/a-very-comprehensive-and-precise-spec/?
👍5🔥2👎1🤔1
GitHub Copilot получил вполне логичное развитие, и теперь по сути в него встроен ChatGPT. Давно пора! Теперь не нужно будет копировать код, вставлять в ChatGPT и просить что-то с ним сделать, всё стало чуть удобнее.
Тут, правда, нужно оговориться, что это скорее анонс, чем уже рабочий продукт.
https://github.com/features/preview/copilot-x
Тут, правда, нужно оговориться, что это скорее анонс, чем уже рабочий продукт.
https://github.com/features/preview/copilot-x
❤2👍1
Как вы относитесь к «классическим» паттернам из ООП в Go? (Visitor, Observer и так далее)
Anonymous Poll
29%
А как без них?
19%
Иногда применяю, но по привычке после Жавы/Питона/younameit
41%
Воняет Жавой, не нужны
11%
Свой вариант в комментарии
🎙️Новая камера, мощь Apple Silicon, ChatGPT, Breaking Bad / defer panic podcast
У меня давно была мысль попробовать делать подкаст. И вот наконец-то я решил начать! Для простоты первый выпуск в режиме соло без гостей, и скорее всего так и останется какое-то время.
Формат подкаста такой: я рассказываю, как у меня дела в первую очередь относительно канала, а также рассуждаю вслух на какие-то темы. Первый (нулевой, если быть точнее) выпуск, он же пилот — это эксперимент, поэтому я очень жду фидбек сначала от платных подписчиков, а потом и от вас.
Подкаст сейчас доступен подписчикам платного канала, а так же бустерам и патронам.
💳 dfrp.cc/A6wciz
💳 dfrp.cc/Fs8Xr
Темы выпуска
- О чем подкаст
- Зачем я его начал вести
- Вернулся микрофон
- Новая монтажная машина
- Новая камера
- Агрегатор статей на базе ChatGPT
- Заменит ли ChatGPT всех?
- Я посмотрел Breaking Bad
У меня давно была мысль попробовать делать подкаст. И вот наконец-то я решил начать! Для простоты первый выпуск в режиме соло без гостей, и скорее всего так и останется какое-то время.
Формат подкаста такой: я рассказываю, как у меня дела в первую очередь относительно канала, а также рассуждаю вслух на какие-то темы. Первый (нулевой, если быть точнее) выпуск, он же пилот — это эксперимент, поэтому я очень жду фидбек сначала от платных подписчиков, а потом и от вас.
Подкаст сейчас доступен подписчикам платного канала, а так же бустерам и патронам.
Темы выпуска
- О чем подкаст
- Зачем я его начал вести
- Вернулся микрофон
- Новая монтажная машина
- Новая камера
- Агрегатор статей на базе ChatGPT
- Заменит ли ChatGPT всех?
- Я посмотрел Breaking Bad
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍3
defer panic
🎙️Новая камера, мощь Apple Silicon, ChatGPT, Breaking Bad / defer panic podcast У меня давно была мысль попробовать делать подкаст. И вот наконец-то я решил начать! Для простоты первый выпуск в режиме соло без гостей, и скорее всего так и останется какое…
FYI: если вы ставили Телеграм из App Store, оплатить доступ в платный канал не получится — требование Apple 😒
Поэтому нужно это делать с десктопа или веба. Пишу, т.к. вижу висящие запросы на вступление, а некоторые подписчики писали, что у них на девайсах заблокирована оплата, поэтому они в висящих запросах и остались.
Поэтому нужно это делать с десктопа или веба. Пишу, т.к. вижу висящие запросы на вступление, а некоторые подписчики писали, что у них на девайсах заблокирована оплата, поэтому они в висящих запросах и остались.
Please open Telegram to view this post
VIEW IN TELEGRAM
Пилотный эпизод подкаста вышел на основных платформах:
📹 YouTube
🍎 Apple Podcasts
🎵 Spotify
🎵 Яндекс.Музыка
🎧 SoundStream
Позже подтянутся Google Подкасты и Overcast.
Позже подтянутся Google Подкасты и Overcast.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4
Чтобы сгенерировать видеоряд для подкаста на ютуб, я взял Game of Life и начал играться с параметрами. Несмотря на то, что использовалась в итоге только одна конфигурация, всяких красивых залипательных штук получилось много. Вот такая красота вышла.
🔥1
Я состою в сообществе IT Youtubers, и хочу с вами поделиться новым телеграм-каналом, в котором публикуются дайджесты постов от авторов из сообщества. Времени читать посты всех подряд у меня, например, нет, а вот пробежаться по сводке и перейти к заинтересовавшим постам — в самый раз.
На сайте, кстати, много каналов и проверенных курсов от членов сообщества — хорошее место подыскать себе ресурсы для (само)обучения.
На сайте, кстати, много каналов и проверенных курсов от членов сообщества — хорошее место подыскать себе ресурсы для (само)обучения.
Telegram
ityoutubers.com
Точка входа в IT контент https://ityoutubers.com / Лента публикуется автоматически / Вступить в сообщество: https://boosty.to/ityoutubers / Вопросы: @soexpired
👍7
Ещё один подгон от @ityoutubers_com — папка с каналами про айти.
Как вы, возможно, знаете, в последнем обновлении Телеграма стало возможным шарить папки с чатами. Это как раз такая папка.
Вообще, конечно, мне нравится подход команды мессенджера. В условном фейсбуке вряд ли бы стали такое делать, потому что «продуктово» (на самом деле просто с точки зрения гринда KPI) это «не резонно» (т.е. непонятно, как повысит ретеншен и насколько больше или меньше продукт станет зарабатывать). В Телеграме же многие фичи появляются, просто потому что прикольно или удобно.
А вот от меня самого давненько нового ничего не было — не переживайте, просто на работе и не только навалилось дел. Занимаюсь новым роликом урывками, когда есть немного времени.
Как вы, возможно, знаете, в последнем обновлении Телеграма стало возможным шарить папки с чатами. Это как раз такая папка.
Вообще, конечно, мне нравится подход команды мессенджера. В условном фейсбуке вряд ли бы стали такое делать, потому что «продуктово» (на самом деле просто с точки зрения гринда KPI) это «не резонно» (т.е. непонятно, как повысит ретеншен и насколько больше или меньше продукт станет зарабатывать). В Телеграме же многие фичи появляются, просто потому что прикольно или удобно.
А вот от меня самого давненько нового ничего не было — не переживайте, просто на работе и не только навалилось дел. Занимаюсь новым роликом урывками, когда есть немного времени.
Telegram
IT YouTubers
You’ve been invited to add the folder “IT YouTubers”, which includes 48 chats.
👍5❤🔥2🔥1
Хороший роадмап для развития бэкенд-разработчика на русском языке с размеченными грейдами для каждого навыка. Понятно, что грейды отличаются от компании к компании, да и я сам для себя так и не определился с критериями для каждого уровня, но примерно по индустрии совпадения есть.
В любом случае, я думаю, каждый для себя найдет пункты, которые можно прокачать (если вы, конечно,не сеньор/принципал — роадмап расчитан на диапазон от джуниора до сеньора).
https://github.com/bzick/oh-my-backend
В любом случае, я думаю, каждый для себя найдет пункты, которые можно прокачать (если вы, конечно,не сеньор/принципал — роадмап расчитан на диапазон от джуниора до сеньора).
https://github.com/bzick/oh-my-backend
GitHub
GitHub - bzick/oh-my-backend: Что нужно знать бэкенд-разработчику web-приложений. Backend Roadmap (from Junior to Senior).
Что нужно знать бэкенд-разработчику web-приложений. Backend Roadmap (from Junior to Senior). - bzick/oh-my-backend
👍27🔥5👎1