3. Неявное внедрение зависимостей (Dependency Injection)Этот шаблон позволяет легко управлять зависимостями между компонентами, повышая модульность и упрощая тестирование.Пример:type Database interface { Query(query string) string}type Deps atruct { Database // other interfaces...}type Service struct { Deps}func NewService(deps Deps) *Service { return &Service{Deps: deps}}func (s *Service) GetData() string { return s.Database.Query("SELECT * FROM data")}type MySQL struct{}func (db MySQL) Query(query string) string { return "MySQL query result"}func main() { service := NewService(Deps{ Database: MySQL{} }) fmt.Println(service.GetData())}За счет гибкого расширения структуры зависимостей, не приходится менять API конструктора NewService, следовательно сохраняется обратная совместимость и не требуется редактировать старые тесты.Эти шаблоны помогают мне писать гибкий, легко поддерживаемый код, который можно адаптировать под различные нужды проекта. А какие шаблоны используете вы? Делитесь своими любимыми в комментариях! ⬇️⬇️⬇️#golang #шаблоны
Всё о разработке | Леонид Ченский
@leoscode · 698 подписчиков
Посты канала Всё о разработке | Леонид Ченский в SillyFeed: единая лента публичных Telegram-каналов со ссылками на оригиналы.
Рассказываю об актуальных проблемах, с которыми сталкивался в своей работе. Делюсь полезными материалами, курсами, статьями и просто своими мыслями.GitHub:https://github.com/moguchevLinkedin:www.linkedin.com/in/leoscode
Посты канала
Отличная дискуссия получилась — и да, большинство гуру Postgres ответило верно! Давайте спокойно разберёмся, почему.«Совсем плохой» способ — просто сделать колонку NOT NULL:ALTER TABLE some_big_table ALTER COLUMN foo_field SET NOT NULL;Почему так делать очень плохо на большой таблице?Чтобы убедиться, что в столбце нет NULL, Postgres сканирует всю таблицу. Такие изменения вокруг ADD CONSTRAINT/SET NOT NULL обычно требуют ACCESS EXCLUSIVE — самый сильный DDL-лок, конфликтующий со всеми операциями, включая чтения. Это легко превращается в stop the world на таблице, если операция длится долго.Правильный подход: через NOT VALID → VALIDATEИдея — разделить «включить проверку для новых записей» и «проверить историю» на два шага.1. Добавляем ограничение без проверки истории (не блокирует обновления надолго):ALTER TABLE some_big_table ADD CONSTRAINT some_big_table_foo_field_not_null CHECK (foo_field IS NOT NULL) NOT VALID;С флагом NOT VALID добавление не сканирует таблицу и может быстро зафиксироваться. Новые/изменённые строки уже обязаны удовлетворять условию.2. Отдельно валидируем историю:ALTER TABLE some_big_table VALIDATE CONSTRAINT some_big_table_foo_field_not_null;VALIDATE CONSTRAINT сканирует только существующие строки и берёт уже SHARE UPDATE EXCLUSIVE (гораздо мягче), так что записи не блокируются так сурово, как при прямом SET NOT NULL.Что именно могло заблокировать таблицу в нашем кейсе?Наша SQL миграция выглядит так (все в одной транзакции):BEGIN;ALTER TABLE ... ADD CONSTRAINT ... CHECK (...) NOT VALID;ALTER TABLE ... VALIDATE CONSTRAINT ...;COMMIT;В примере я специально указал, что оба действия выполнятся в рамках одной транзакции (многие это заметили).Однако, когда мы используем сторонние решения для миграций (напрмер goose), мы получаем неявное повдение — миграции в одном файле будут также исполняться в рамках одной транзакции (если не укажем обратное). В таком случае:- Мы берем блокировку ACCESS EXCLUSIVE для добавления CONSTRAINT- Далее эта блокировка будет удерживаться до конца работы транзакции- Валидация нагрузки происходит долго, что приводит к тому, что транзакция превращается в долгоживующую => таблица заблокирована надолго.Практический вывод: Делайте ADD CONSTRAINT ... NOT VALID и фиксируйте сразу (быстрый COMMIT). А VALIDATE CONSTRAINT запускайте отдельной миграции и, желательно, в спокойный период.А чтобы не переживать насчет ваших миграций, вы можете настроить линтер: squawkhq
⚡️ЗНАНИЕ И ПОНИМАНИЕ ЭТИХ ТЕРМИНОВ И ТЕОРЕМ ПОВЫСИТ ВАШ ГРЕЙД НА СОБЕСЕДОВАНИИ. ЧАСТЬ 1⚡️ Мы сейчас живем в эру микросервисов, а это значит, что так или иначе разработчику приходится сталкиваться с распределенными системами. Понимание теории и принципов построения…
Ещё по теме «Технологии»
ТехнологииНовые версии продукта - типа, новые ощущения !?Расскажите это админам новомодного S/4HANA.Тут вот на значительном ряде современных ядер от 753 по 919 включительно в утилите tp обнаружили баг, которому наверное "отчень много лет". Ну или мне так показалось..🤓История такая:1) Запрос транспортный успешно отрелизили в разработке.2) Далее мы импортируем его в систему качества для "QA Approval/Rejection"3) Открываем очередь STMS_QA , а там йок(‼), нету нужного запроса.Решение стандартное: качаем свежую версию tp и обновляем в системах.Далее список из версий tp в которых безобразие это - вылечено:KERNEL919: tp 381.733.04KERNEL918: tp 381.715.04KERNEL917: tp 381.709.04KERNEL916: tp 381.700.04KERNEL793: tp 381.588.04KERNEL789: tp 381.577.04KERNEL754: tp 381.40.04KERNEL753: tp 381.30.04(imho) про ядро 777, как обычно успешно забыли...!?#STMS_QA_BUG#TP#KERNEL919#KERNEL753
В НИИ прикладной химии разработали патрон, который способен противостоять дронам. Он может поражать БПЛА на дальности до 100 метров.По словам авторов разработки, соотношение массы тяжелой дроби к массе всего патрона дает возможность получить нужную энергию отдельных дробин, позволяющую разрушать элементы конструкции беспилотников на расстоянии от 70 до 100 метров. В более ранних разработках попадание связанной дроби не всегда заканчивалось сбитием дронов на дальностях более 80 метров.Особенность устройства патрона позволяет раскрыться осыпи дроби на оптимальном расстоянии «для эффективного поражения БПЛА».
Слева новый первый день. А справа мой первый Macbook Pro 13" Late 2013 который взял в феврале 2014 года. Прошло 12 лет, 3 замены батарейки и он всё ещё работает, правда уже на Linux :) Самое удивтельное у него всё ещё отличный на сегодня экран, клавиатура, тачпад. Пережил падения, удары и всё равно не выглядит уставшим, а яблочко всё ещё светится сздади) А когда я на нём на парах, записывая лекцию, в Parallels играл в винде в ArcheAge притом писал скрипты по посадке урожая xDИстория однако
Плотная линия - изменение импорта в США связанных с ИИ отраслей, прерывистая - импорта не связанных с ИИ отраслей.Когда вся твоя экономика сделала ставку на продвинутую форму автокорректа.
OpenAI Codex vs Claude Code vs Amp Code vs OpenCode + DS4 ProЯ сегодня закончил сложный рефактор проекта ядра BitGN. И состояние кода теперь просит генеральной уборки.Из интереса я задал один и тот же вопрос разным агентам:Scan through the repository on a high level (ignore code under /modules). I want you to suggest ways, how we can make it more simple and straightforward, refactor away traces of growing pains. Focus on small changes that allow to drop code, or reduce cognitive complexity with a small LOC change cost.OpenAI Codex с GPT-5.5 High потратил 3 минуты и 132k tokens из подписки и предложил:(1) удалить папку /dbg с начинкой - давно пора(2) переименовать пакет stor в store - можно(3) упростить ULID генератор - да, можно(4) убрать AddVMCreateds - можно(5) зарефакторить run finalization/push - надо посмотреть(6) удалить public-release backfill - да, это прямо точно можно(7) почистить Makefile - мелочь, но можно(8) почистить раутинг до виртуальных машин- да, теперь можно(9) утащить виртуальную FS в PAC1 - имеет смыслAmp Code в deep thinking потратил 4 минуты и 90 центов, выдал список первоочередных изменений, которые пересекаются с кодексом:(1) Удалить папку /dbg с начинкой - ok(2) упростить раутинг до виртуальных машин - да, можно(3) зарефакторить run finalization/push - надо посмотреть(4) убрать public-release backfill - ok(5) убрать fx.VM интерфейс и поправить доки - да, действительноClaude Code + Opus 4.7 XHigh потратил 8 минут (говорит, что 2$ из подписки) и предложил прежде всего:(1) убрать fx.VM интерфейс - ок(2) убрать helper err(), который код сильно упрощает - нет(3) оптимизировать ненужные конструкторы storage - надо смотреть(4) переместить файлы с интерфейсами айдишников в файл с интерфейсами IO, ибо “используются вместе и сэкономят одну строчку кода” - нет, спасибо(5) удалить пустую папку /cmd - она даже не в git, но ок(6) удалить proto_api/bitgn/vm/ecom.proto - и оставить вас без интерфейса к соревнованию. Нет, спасибо.OpenCode + DeepSeek V4 Pro потратил 1.15$ + 6 минут и предложил:(1) слить файлы с конфигами - и так нормально(2) переместить файлы с интерфейсами айдишников в файл с интерфейсами IO - как и Claude. Нет, спасибо.(3) удалить папку dbg с начинкой - ok(4) удалить пустую папку с /cmd - ну ок(5) заменить lib/set.go на inline map[string]struct{} - ни в коем случае, это код упрощает(6) удалить systemd socket activation logic, ибо “the most complex code”, что сразу уронило бы все сервера.OpenCode +DS4 Pro пока совсем сыроват. Ответы Claude Opus немного лучше. Codex идет в работу. Amp тоже нашел толковое без шума, но меньше Кодекса.Ваш, @llm_under_hood 🤗
Плох тот AI, который не мечтает уничтожить Человечество создать нечто, до чего не догадалась Жизнь...две новейшие научные работы под это утверждение 🧐➡️ Вот тут, с помощью AI собирают ферменты, осуществляющие одну из самых распространенных реакций в природе - разрыв фосфатных связей (таковые наполняют ДНК, РНК, сигнальные и прочие молекулы). Без белков-ферментов некоторые из этих связей будут "ждать" распада годами. Главное, что показали авторы - такой фермент, AI может спроектировать очень НЕ похожим на природные аналоги. Их белок как бы “эволюционировал” внутри AI-алгоритма, который шаг за шагом отбирал варианты, и результат крайне отличается от "натуральных" ферментов.➡️ А здесь, тоже в AI-пайплайне, конструируют "под заказ" белки, способные специфически связать определённые участки ДНК. Опять-таки, важно что AI не варьировал природные байндеры ДНК (цинковые пальцы, TALE или CRISPR) - а сгенерировал "с нуля" небольшие белки, которые распознают заданные последовательности ДНК. Обе статьи - препринты. И, кстати, второй проект - детище Дэвида Бейкера великого и ужасного пожалуй главного эксперта по собиранию белковых молекул из шариков и палок под любую биохимическую задачу... ах, да - он ещё и лауреат сами-понимаете-какой Премии ⬅️. Уверен, что оба обсуждаемых инструмента вскоре опубликуются в ведущих научных журналах - и обретут интереснейшие прикладные применения.#ии #люди
Мне нравится как боты теперь не предлагают скачать уникальные записи лекций по трейдингу или пройти курсы по психологии, а просто наваливают реакции клоунов в комментариях.
"Диана и Актеон" 1886Художник: Генрих Ипполитович Семирадский@ROMeNIKA
Я прошла интенсив по ИИ boost у Вани ЗамесинаПри всей моей любви к оптимизации, я думала что вайбкодинг продуктов не для меня. Ну потому что даже несмотря на то, что всё сейчас можно сделать быстрее, это все равно трата времени. Проще же отдать кому-то и самой этим не заниматься.Второе — я не до конца понимала, какие процессы мне надо оптимизировать. Потому что в основном я сейчас работаю в одного, и в купе с ребенком, у меня не так-то много «процессов» с компом. Такая была моя точка А.Пока я это переваривала и осознавала, попала на boost к Ване Замесину. Это очень интенсивная неделя, по выходным по 2 воркшопа в день. Я сначала испугалась, а потом очень оценила. Еще скажу, что интенсив подойдет тем, кто с нуля и хочет очень быстро вкатиться в тему, потому что за тобой буквально закреплен куратор, который ведет за руку и даже помогает купить аккаунт клода)))В первый же день воркшопа мы сделали лендос продукта, я делала наброски для онлайн-клуба для Марса. Не просто придумывали сами, Ваня собрал на основе своих методик документы для клода, чтобы очень быстро валидировать идею, получить сегменты аудиторий и под них сделать лендинг. Типа ты вчера еще не умел пользоваться Клодом, а сегодня у тебя готовый лендинг, выложенный на сервер, который может продавать. Это реально был aha moment. Еще из очень классных бонусов было немного токенов в специальный продукт для продактов aura и доступ в чат сообщества. Это как бы нифига себе. Теперь я пользуюсь этими промптами, чтобы поразгонять новые идеи, в том числе образовательные. Честно, я просто даже не ожидала, что с интенсива по ии я выйду с куда большим, чем «а как еще юзать Клод». Фактически я вышла с Ваниной методикой + кучей обвесов-примеров от экспертов. То есть теперь вышло так, что я ни одну задачу не решаю без нейронки: свожу таблицы, ищу ошибки, прошу инструкции, собрала себе трекер баланса кбжу и моей активности, сейчас вот делаю бота для трекера задач… это просто к тому, что процессов на самом деле оказалось в итоге много. Просто все они не в компе, а между кучей разных приложений и моей головой. Кажется, такими темпами, я откажусь от всех сторонних приложений. Например, так отпала уже надобность заходить в тик-тик для ведения задач, ставить самой задачи в календарь. Все встречи я записываю, а потом разгоняю с Клодом, как это использовать.Мне с одной стороны немножко страшно от такой скорости. С другой, опять же, я снова и снова понимаю, почему нейронки зашли в первую очередь предпринимателям. Потому что мы обычно безрукие. Креативщики, способные видеть далеко, ощущать «как надо», а как сделать — хз. С нейронкой этот барьер совсем исчез.
✔️ Ехал в этот раз на поезде в отпуск. Это чуть больше суток в дороге. И стало прям больно. Опять. Мы так боремся за передовые позиции в технологическом секторе и я вижу сколько усилий и государства и бизнеса на это направлены. Тут очевидно, что без этого вообще глобально просто не что претендовать. Но мы не можем ничего сделать с доступом интернет в поездках на поездах. Причем это касается абсолютно всех маршрутов. Как и в этот раз покрытие интернетом было не более 7% от всей протяженности. Друзья, ну реально, это как так?) Сейчас не возможно представить современного успешного человека, который работает и то что ему не нужно решать вопросы или отвечать оперативно коллегам, доделывать проекты даже пока он едет в поезда или отпуск. Такого не бывает. И вот 24 часа без доступа в интернет. Можно посчитать сколько это человек-часов потерь. В вагоне 34 места, 21 вагон, 12 часов рабочего времени и 10 таких поездов в день (прям минимум) = 85 680 часов в день. Только в день. Это в то время когда для нашей страны важны каждые 0,1% ВВП. Я не понимаю, извините. Отдайте концессию предпринимателям и они найдут решение как обеспечить безопасный доступ в интернет, а еще и денег на этом в бюджет заработать. Уверен. Как думаете, есть решения?)