Применение чистой архитектуры в Go
Одна из проблем, с которыми мне часто доводится сталкиваться в различных софтверных проектов — это сильная связанность кода, при которой в него так сложно вносить даже простые изменения, не провоцируя нежелательных побочных эффектов. Дело в том, что программисты склонны сосредотачиваться на разработке конкретных фич, не задумываясь о том, как база кода станет развиваться в будущем. Также не все учитывают, что применяемые сегодня библиотеки и фреймворки могут постепенно сойти со сцены спустя несколько месяцев или лет.
На старте проекта приходится принимать множество решений. Большинство инженеров при этом рассматривают область применения проекта и решают, при помощи каких инструментов он будет реализовываться. Речь, в частности, о языках программирования, фреймворках, базах данных, внешних API, вариантах развёртывания. Принимая такие решения на самых ранних этапах, они замыкаются на этих инструментах, пронизывают ими всю базу кода, в результате чего её становится сложно менять и поддерживать.
https://habr.com/ru/companies/timeweb/articles/810857/
original https://blog.geisonbiazus.com/posts/applying-clean-architecture-in-go
#golang@bookflow
👉 @Bookflow
Одна из проблем, с которыми мне часто доводится сталкиваться в различных софтверных проектов — это сильная связанность кода, при которой в него так сложно вносить даже простые изменения, не провоцируя нежелательных побочных эффектов. Дело в том, что программисты склонны сосредотачиваться на разработке конкретных фич, не задумываясь о том, как база кода станет развиваться в будущем. Также не все учитывают, что применяемые сегодня библиотеки и фреймворки могут постепенно сойти со сцены спустя несколько месяцев или лет.
На старте проекта приходится принимать множество решений. Большинство инженеров при этом рассматривают область применения проекта и решают, при помощи каких инструментов он будет реализовываться. Речь, в частности, о языках программирования, фреймворках, базах данных, внешних API, вариантах развёртывания. Принимая такие решения на самых ранних этапах, они замыкаются на этих инструментах, пронизывают ими всю базу кода, в результате чего её становится сложно менять и поддерживать.
https://habr.com/ru/companies/timeweb/articles/810857/
original https://blog.geisonbiazus.com/posts/applying-clean-architecture-in-go
#golang@bookflow
👉 @Bookflow
👍2
Terraform AWS Provider - Все, что нужно знать о многоаккаунтной аутентификации и настройке
Существует множество вариантов настройки аутентификации между Terraform и AWS. Но две точки входа - это пользователи IAM и пользователи IAM Identity Center (SSO). Аутентификация настраивается в Terraform AWS Provider, выбор опции зависит, в частности, от того, выполняете ли вы Terraform с локальной машины, или из CI/CD, и т.д.
https://hector-reyesaleman.medium.com/terraform-aws-provider-everything-you-need-to-know-about-multi-account-authentication-and-f2343a4afd4b
#devops@bookflow
👉 @Bookflow
Существует множество вариантов настройки аутентификации между Terraform и AWS. Но две точки входа - это пользователи IAM и пользователи IAM Identity Center (SSO). Аутентификация настраивается в Terraform AWS Provider, выбор опции зависит, в частности, от того, выполняете ли вы Terraform с локальной машины, или из CI/CD, и т.д.
https://hector-reyesaleman.medium.com/terraform-aws-provider-everything-you-need-to-know-about-multi-account-authentication-and-f2343a4afd4b
#devops@bookflow
👉 @Bookflow
👍2
Фича-флаги времени компиляции в Rust: зачем, как и когда используются
Возможность указывать фичи (функционал) для компиляции в Rust может повысить быстродействие кода, его обслуживаемость, безопасность и портируемость.
Ниже я аргументирую, почему вам следует активно использовать эти флаги функционала при потреблении зависимостей и предлагать их другим пользователям библиотеки.
https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3
#rust@bookflow
👉 @Bookflow
Возможность указывать фичи (функционал) для компиляции в Rust может повысить быстродействие кода, его обслуживаемость, безопасность и портируемость.
Ниже я аргументирую, почему вам следует активно использовать эти флаги функционала при потреблении зависимостей и предлагать их другим пользователям библиотеки.
https://betterprogramming.pub/compile-time-feature-flags-in-rust-why-how-when-129aada7d1b3
#rust@bookflow
👉 @Bookflow
👍2
Совет по HTML 💡
Легко создайте красивый индикатор выполнения, используя элемент
#frontend@bookflow
👉 @Bookflow
Легко создайте красивый индикатор выполнения, используя элемент
<progress> 🤩#frontend@bookflow
👉 @Bookflow
👍3🤡1
Похоже, я придумал свой алгоритм поиска кратчайшего пути
Я реализовал, похоже, собственный алгоритм поиска кратчайшего пути с отрицательными ребрами графа.
Почему собственный? Я искал подобное решение, но не нашел, возможно, оно уже было реализовано, просто плохо поискал. Жду Нобелевскую премию =)
Додумался я до него путем модификации классического Дейкстры. Прошу адекватно отнестись к содержимому, ибо это моя первая статья, и, возможно, я ничего не придумывал и, вообще, этот алгоритм не работает вовсе (но по многочисленным тестам он работает правильно).
Повторюсь, алгоритм работает с отрицательными ребрами графа (но не с циклическими отрицательными). Чем этот алгоритм отличается от известного Беллмана-Форда?
Эвристической сложностью! У известного алгоритма сложность составляет O(En), где n - количество узлов, Е - количество ребер. У "моего" алгоритма такая же ассимптотическая сложность. Но по моим расчетам худшая сложность в большинстве случаев не достигается. А у Беллмана-Форда худших случаев намного больше (об этом далее). Более того, в среднем алгоритм не превышает оригинальной сложности алгоритма Дейкстры, а именно O(n2+E). Об этом тоже напишу далее. Реализация на языке Python:
P.S.
В статье исправлены многие моменты, спасибо сообществу за тест-кейсы и подсказки. Некоторые комментарии не будут актуальными (в том числе саркастически-оскорбительные), т.к. я считаю, что доказал работоспособность алгоритма.
https://habr.com/ru/articles/811051/
#python@bookflow
👉 @Bookflow
Я реализовал, похоже, собственный алгоритм поиска кратчайшего пути с отрицательными ребрами графа.
Почему собственный? Я искал подобное решение, но не нашел, возможно, оно уже было реализовано, просто плохо поискал. Жду Нобелевскую премию =)
Додумался я до него путем модификации классического Дейкстры. Прошу адекватно отнестись к содержимому, ибо это моя первая статья, и, возможно, я ничего не придумывал и, вообще, этот алгоритм не работает вовсе (но по многочисленным тестам он работает правильно).
Повторюсь, алгоритм работает с отрицательными ребрами графа (но не с циклическими отрицательными). Чем этот алгоритм отличается от известного Беллмана-Форда?
Эвристической сложностью! У известного алгоритма сложность составляет O(En), где n - количество узлов, Е - количество ребер. У "моего" алгоритма такая же ассимптотическая сложность. Но по моим расчетам худшая сложность в большинстве случаев не достигается. А у Беллмана-Форда худших случаев намного больше (об этом далее). Более того, в среднем алгоритм не превышает оригинальной сложности алгоритма Дейкстры, а именно O(n2+E). Об этом тоже напишу далее. Реализация на языке Python:
P.S.
В статье исправлены многие моменты, спасибо сообществу за тест-кейсы и подсказки. Некоторые комментарии не будут актуальными (в том числе саркастически-оскорбительные), т.к. я считаю, что доказал работоспособность алгоритма.
https://habr.com/ru/articles/811051/
#python@bookflow
👉 @Bookflow
👍5
Headless Component: паттерн для создания пользовательских интерфейсов React
По мере того как элементы управления React UI становятся все более сложными, сложная логика может переплетаться с визуальным представлением. Это затрудняет рассуждения о поведении компонента, затрудняет его тестирование и приводит к необходимости создавать похожие компоненты, которым нужен другой внешний вид. Headless Component извлекает всю невизуальную логику и управление состоянием, отделяя мозг компонента от его внешнего вида.
https://martinfowler.com/articles/headless-component.html
#react@bookflow
👉 @Bookflow
По мере того как элементы управления React UI становятся все более сложными, сложная логика может переплетаться с визуальным представлением. Это затрудняет рассуждения о поведении компонента, затрудняет его тестирование и приводит к необходимости создавать похожие компоненты, которым нужен другой внешний вид. Headless Component извлекает всю невизуальную логику и управление состоянием, отделяя мозг компонента от его внешнего вида.
https://martinfowler.com/articles/headless-component.html
#react@bookflow
👉 @Bookflow
👍4
Шпаргалка по C++
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp@bookflow
👉 @Bookflow
Шпаргалка фокусируется на языке, а не стандартной библиотеке, и учитывает особенности C++11/C++14
#cpp@bookflow
👉 @Bookflow
👍6❤1
Как распарсить строку в sql
Для того чтобы распарсить строку в SQL, можно использовать различные функции и операторы, в зависимости от конкретных требований и формата строки.
Например, если строка содержит разделители, такие как запятые или пробелы, то можно использовать функцию
Результатом запроса будет строка Привет.
Если же требуется извлечь определенный набор символов из строки, то можно использовать функцию SUBSTRING(). Например, следующий запрос извлекает первые три символа из строки Привет:
Результатом запроса будет строка При.
Также можно использовать функцию
Результатом запроса будет строка Привет.
#db@bookflow
👉 @Bookflow
Для того чтобы распарсить строку в SQL, можно использовать различные функции и операторы, в зависимости от конкретных требований и формата строки.
Например, если строка содержит разделители, такие как запятые или пробелы, то можно использовать функцию
SUBSTRING_INDEX() для извлечения определенного фрагмента строки. Например, следующий запрос извлекает первое слово из строки Привет, мир:SELECT SUBSTRING_INDEX('Привет, мир', ' ', 1);Результатом запроса будет строка Привет.
Если же требуется извлечь определенный набор символов из строки, то можно использовать функцию SUBSTRING(). Например, следующий запрос извлекает первые три символа из строки Привет:
SELECT SUBSTRING('Привет', 1, 3);Результатом запроса будет строка При.
Также можно использовать функцию
REGEXP_SUBSTR() для извлечения определенного фрагмента строки, используя регулярные выражения. Например, следующий запрос извлекает первое слово из строки Привет, мир:SELECT REGEXP_SUBSTR('Привет, мир', '^[^ ]+');Результатом запроса будет строка Привет.
#db@bookflow
👉 @Bookflow
🥰6❤2👍2
5 трюков с командами Linux, которые изменят вашу жизнь как программиста
Интерфейс командной строки — это основа работы для большинства технических специалистов, особенно разработчиков и системных администраторов. Будь то написание скриптов, настройка серверов или автоматизация задач, знание Linux-команд может сэкономить вам часы работы.
Для многих Linux может показаться пугающим на первый взгляд, но, освоив потенциал его интерфейса командной строки (CLI), вы поймёте, что это лучший друг программиста. От навигации по директориям до работы с файлами и даже отладки — освоение этих простых, но мощных команд Linux может значительно улучшить ваш рабочий процесс.
В этой статье мы рассмотрим пять трюков работы с командной строкой, которые облегчат жизнь разработчикам. Это не просто «приятные бонусы» — это настоящие «игровые изменения», которые помогут вам сэкономить время и сделают взаимодействие с терминалом гораздо более эффективным.
#статья@bookflow
👉 @Bookflow
Интерфейс командной строки — это основа работы для большинства технических специалистов, особенно разработчиков и системных администраторов. Будь то написание скриптов, настройка серверов или автоматизация задач, знание Linux-команд может сэкономить вам часы работы.
Для многих Linux может показаться пугающим на первый взгляд, но, освоив потенциал его интерфейса командной строки (CLI), вы поймёте, что это лучший друг программиста. От навигации по директориям до работы с файлами и даже отладки — освоение этих простых, но мощных команд Linux может значительно улучшить ваш рабочий процесс.
В этой статье мы рассмотрим пять трюков работы с командной строкой, которые облегчат жизнь разработчикам. Это не просто «приятные бонусы» — это настоящие «игровые изменения», которые помогут вам сэкономить время и сделают взаимодействие с терминалом гораздо более эффективным.
#статья@bookflow
👉 @Bookflow
👍2
Ciphey
Полностью автоматизированный инструмент для дешифровки/декодирования/взлома, основанный на обработке естественного языка и искусственном интеллекте, и немного на здравом смысле.
Цель Ciphey - стать инструментом для автоматизации множества расшифровок и дешифровок, таких как шифрование на нескольких базах, классические шифры, хэши и более сложные криптографии.
Если вы не знаете достаточно много о криптографии или хотите быстро проверить зашифрованный текст, прежде чем работать над ним самостоятельно, Ciphey - для вас.
Техническая часть. Ciphey использует специально созданный модуль искусственного интеллекта (AuSearch) с интерфейсом обнаружения шифров, чтобы приблизительно определить, чем что-то зашифровано. Затем используется собственный настраиваемый интерфейс обработки естественного языка, который может определить, когда полученный зашифрованный текст становится обычным.
Здесь нет нейронных сетей или раздутого ИИ. Мы используем только то, что быстро и минимально.
https://github.com/Ciphey/Ciphey/blob/master/translations/ru/README.md
#github@bookflow
👉 @Bookflow
Полностью автоматизированный инструмент для дешифровки/декодирования/взлома, основанный на обработке естественного языка и искусственном интеллекте, и немного на здравом смысле.
Цель Ciphey - стать инструментом для автоматизации множества расшифровок и дешифровок, таких как шифрование на нескольких базах, классические шифры, хэши и более сложные криптографии.
Если вы не знаете достаточно много о криптографии или хотите быстро проверить зашифрованный текст, прежде чем работать над ним самостоятельно, Ciphey - для вас.
Техническая часть. Ciphey использует специально созданный модуль искусственного интеллекта (AuSearch) с интерфейсом обнаружения шифров, чтобы приблизительно определить, чем что-то зашифровано. Затем используется собственный настраиваемый интерфейс обработки естественного языка, который может определить, когда полученный зашифрованный текст становится обычным.
Здесь нет нейронных сетей или раздутого ИИ. Мы используем только то, что быстро и минимально.
https://github.com/Ciphey/Ciphey/blob/master/translations/ru/README.md
#github@bookflow
👉 @Bookflow
GitHub
Ciphey/translations/ru/README.md at master · bee-san/Ciphey
⚡ Automatically decrypt encryptions without knowing the key or cipher, decode encodings, and crack hashes ⚡ - bee-san/Ciphey
👍2
Средние highload паттерны на Go
Меня зовут Агаджанян Давид и ранее я опубликовал статью «простые highload паттерны на Go», в которой были рассмотрены простые подходы увеличения пропускной способности отдельно взятого экземпляра приложения без хардкора. Мне импонируют простые подходы, так как over engineering подходы требуются в исключительных проектах, и то чаще всего только в отдельно взятых подсистемах, в остальном можно воспользоваться давно известными лучшими практиками. Статья ориентирована на начинающих разработчиков и может служить отправной точкой для дальнейшего изучения. В этой статье подходы ориентированы на масштабирование приложения при верхнеуровневом рассмотрении. Подходы универсальны, приписка языка Go только потому, что сама реализация приложения на нем. Для наглядности, примеры будут упрощены, а чтобы было интереснее наблюдать, проведем замеры производительности. Ну и конечно же делитесь своим опытом масштабирования, буду рад взять на заметку.
https://habr.com/ru/articles/684904/
#golang@bookflow
👉 @Bookflow
Меня зовут Агаджанян Давид и ранее я опубликовал статью «простые highload паттерны на Go», в которой были рассмотрены простые подходы увеличения пропускной способности отдельно взятого экземпляра приложения без хардкора. Мне импонируют простые подходы, так как over engineering подходы требуются в исключительных проектах, и то чаще всего только в отдельно взятых подсистемах, в остальном можно воспользоваться давно известными лучшими практиками. Статья ориентирована на начинающих разработчиков и может служить отправной точкой для дальнейшего изучения. В этой статье подходы ориентированы на масштабирование приложения при верхнеуровневом рассмотрении. Подходы универсальны, приписка языка Go только потому, что сама реализация приложения на нем. Для наглядности, примеры будут упрощены, а чтобы было интереснее наблюдать, проведем замеры производительности. Ну и конечно же делитесь своим опытом масштабирования, буду рад взять на заметку.
https://habr.com/ru/articles/684904/
#golang@bookflow
👉 @Bookflow
👍2👎1