Обновить

Как стать автором

Построение REST API на Go с использованием Gorilla Mux и MongoDB

Время на прочтение4 мин

Введение

В данной статье будет рассмотрена практическая интеграция MongoDB с веб-приложением на Go, построенным на базе маршрутизатора Gorilla Mux. Цель — получить минимальный, но функциональный REST API с поддержкой CRUD-операций над сущностью Book, при этом соблюдая лучшие практики структурирования кода.

Материал рассчитан на разработчиков, знакомых с Go, HTTP API и основами работы с базами данных.

Выбор стека

Go — компилируемый язык с лаконичным синтаксисом, встроенной поддержкой параллелизма и богатой стандартной библиотекой для работы с сетью. Эти качества делают его удобным выбором для разработки API-сервисов.

Читать далее
Всего голосов 4: ↑2 и ↓20
Комментарии2

Нейросетевой помощник для Catan Universe: как я научил ИИ считать карты соперников

Уровень сложностиСредний
Время на прочтение6 мин

Привет, коллеги-катановцы!

Знакомо чувство, когда в пылу битвы за овец и кирпичи напрочь забываешь, сколько ресурсов только что сбросил соперник? Вот и я вечно путался — пока не загорелся безумной идеей: А что если заставить нейросеть следить за картами вместо меня?

Пару месяцев, несколько килограммов кофе и одна сгоревшая видеокарта спустя — представляю вам Catan Neural Assistant — шпаргалку, которая в реальном времени подсчитывает ресурсы оппонентов!

Но сначала — лирическое отступление для тех, кто вдруг не в теме.

кто вдруг не в теме.
Всего голосов 3: ↑2 и ↓1+2
Комментарии2

Крах найма в IT. Подделанные Паспорта и Трудовые книжки. Волки-менторы как раковая опухоль рынка

Уровень сложностиПростой
Время на прочтение4 мин

IT менторы говорят своим ученикам подделывать документы: Паспорта РФ, выписки об опыте работы с госуслуг СТД-Р, договоры ГПХ и так далее (пруфы и скрины в статье!). Каждый 3-й крутит опыт, чтобы пройти через фильтры HR на hh.ru. Но далеко не каждый подделывает документы, что является УГОЛОВНО наказуемым...

Читать далее
Всего голосов 26: ↑23 и ↓3+27
Комментарии89

Создаём образ RDP-клиента для запуска с USB-флешки (часть 1)

Уровень сложностиСредний
Время на прочтение12 мин

Как создать загрузочный образ RDP-клиента для запуска USB-флешки.
Часть 1. Подготовка загрузочного образа.

Установка и настройка базовых пакетов. Настройка сетевого интерфейса, grub для работы на USB-накопителе.

Читать далее
Всего голосов 13: ↑12 и ↓1+12
Комментарии7

Оптический датчик PAT9125

Уровень сложностиСредний
Время на прочтение7 мин

Современные компьютерные мыши, тачпады, сенсорные панели и мобильная робототехника, обязаны своей точностью и отзывчивостью миниатюрным системам движения. Одним из таких является PAT9125 — это высокоточный двухосевой оптический датчик, способный с невероятной точностью отслеживать перемещение по различным поверхностям.

PAT9125 представляет собой интеллектуальный датчик, в основе которого — микроскопическая камера и инфракрасная подсветка. Он реализует текстуру поверхности под собой, фиксируя мельчайшие смещения и на основе полученных данных изображений рассчитывает вектор движения. Благодаря высокой кадровой частоте, датчик способен точно отслеживать даже быстрое перемещение, сохраняя стабильность и минимальную задержку.

Читать далее
Всего голосов 8: ↑7 и ↓1+7
Комментарии9

RUG — малоизвестный, но фундаментальный принцип Clean Code

Уровень сложностиСредний
Время на прочтение4 мин

Многие разработчики при обсуждении основ Clean Code называют одни и те же принципы — чаще всего упоминаются DRY, KISS и YAGNI. Эти концепции прочно закрепились в профессиональном сообществе и воспринимаются как обязательная часть хорошего кода.

Принцип RUG упоминается значительно реже. Чаще всего о нём узнают с опытом, а многие применяют его интуитивно, даже не подозревая, что для этого подхода существует отдельное название и формулировка.

Сегодня я хочу поговорить о принципе RUG и о том, какие рекомендации он даёт по написанию программного обеспечения.

RUG (Repeat Until Good) — это принцип, который говорит: можно повторять один и тот же код, пока это разумно.

На ранних этапах разработки важнее просто реализовать логику, исходя из текущих требований, чем пытаться сразу создать «идеальную» абстракцию. В этот момент задача — как можно быстрее получить рабочее решение, которое отражает текущие знания о системе. Но со временем, когда одна и та же логика начинает встречаться всё чаще, становится очевидно, что её удобнее и правильнее выделить в отдельную, чётко оформленную абстракцию, чтобы избежать дублирования и упростить дальнейшую поддержку.

Мы используем этот принцип каждый раз, когда пишем код. Ведь практически любую логику можно сделать более абстрактной и масштабируемой — вопрос лишь в том, когда наступает подходящий момент для этого.

Я буду использовать TypeScript, так как этот язык знаком большинству разработчиков. 😁

Читать далее
Всего голосов 8: ↑7 и ↓1+7
Комментарии18

Определение требований к ПО

Уровень сложностиПростой
Время на прочтение5 мин

В статье представлено описание определения требований к ПО по Карлу Вигерсу. В статье законспектированы особенности интерпретации требований, уровни и типы требований, три уровня требований, требования к продукту и требования к проекту.

Читать далее
Всего голосов 2: ↑1 и ↓10
Комментарии1

Детские писатели в борьбе с нейросетями

Уровень сложностиПростой
Время на прочтение7 мин

Однажды мне попалось интересное видео о необычном бизнес‑лайфхаке. Англоязычный автор рассказывал о том, что создаёт детские книжки полностью с помощью нейросетей и продаёт их в цифре на Amazon. Эти детские книжки были совсем незамысловатые: большая, размером в страницу, нейрокартинка и пару предложений поверх. Свёрстанные 10–12 страниц — и книжка готова к продаже. «Ну чем я хуже!» — прозвучал в моей голове голос предприимчивой Фрекен Бок. И вот уже ChatGPT строчит мне первую сказку. А потом вторую, а потом третью, четвёртую, десятую. Нет, не для продажи. Для того, чтобы добиться хотя бы минимального качества текста, который бы мне было не стыдно опубликовать. Довольно быстро я осознал, что все попытки нейросети: шаблонны, поверхностны, скудны, бессмысленны и очень скучны. Уже тогда было понятно, что нейросети, если и заменят когда‑нибудь писателей, случится это ещё очень и очень не скоро. И даже в этом случае над текстами придётся ещё много работать редактору. На данный момент даже элементарные детские истории, написанные нейросетями, не выдерживают никакой критики человека, которому не далека литература.

Читать далее
Всего голосов 12: ↑12 и ↓0+17
Комментарии20

Принцип единой ответственности SOLID в React

Уровень сложностиСредний
Время на прочтение6 мин

Всем привет! Меня зовут Дмитрий, и я руководитель фронтенд-разработки в компании Интелси.

Сегодня хочу рассказать о принципе единственной ответственности (Single Responsibility Principle) — первом из пяти принципов SOLID, сформулированных Робертом Мартином в его книге "Agile Software Development: Principles, Patterns, and Practices". Суть этого принципа звучит так: «Класс должен иметь только одну причину для изменения» (A class should have only one reason to change).

Читать далее
Всего голосов 5: ↑5 и ↓0+5
Комментарии6

Как я раздул из гофера слона или история распределенного сократителя ссылок

Уровень сложностиСредний
Время на прочтение2 мин

Вполне логично предположить, что сократитель ссылок — довольно простой сервис как с точки зрения пользователя, так и под капотом. Но что, если, взяв за основу такую простую задачу, построить целую распределенную систему?

Мой шортенер начинался как простая практика с Go и gRPC после всех ОГЭ:), где должно было быть 3 сервиса: тг бот, API gateway и ядро. Но с каждым днем идей все больше, энтузиазм растёт, я стал делать упор на высокие нагрузки, и постепенно мини‑практика начала становиться боевой event-driven машиной. В этой статье я хотел бы подметить интересную мысль: даже самая простая вещь может быть реализована сложно.

Погрузиться в архитектуру
Всего голосов 10: ↑9 и ↓1+9
Комментарии16

Использование инструментов разработки программного обеспечения для законотворческой деятельности

Время на прочтение5 мин
12 декабря 1993 на всенародном голосовании была принята Конституция России. Одно слово в том, оригинальном тексте Конституции сыграло особую роль в дальнейшей судьбе страны. Это слово было «подряд», в пункте 3 статьи 81 о том, может ли один и тоже человек занимать должность президента Российской Федерации не более двух сроков. Много копий сломано в дискуссиях об этом слове, Конституционный суд разъяснял смысл этого пункта в своем решении. Немногие принимали это во внимание, когда голосовали за или против принятия Конституции.

20 января 2020 президент России Владимир Путин внес в Государственную Думу проект закона с новыми поправками в Конституцию. Большой объем поправок, предложенных в этом проекте закона, не дает возможности обычному человеку разобраться в них. Возникает риск того, что мы повторим историю с словом «подряд», и мы снова будем принимать решение и голосовать за или против принятия Конституции без полной информации о последствиях этих поправок.

В этой статье я рассмотрю, как инструменты, созданные для разработки программного обеспечения, помогают в анализе предложенных изменений.
Читать дальше →
Всего голосов 2: ↑2 и ↓0+2
Комментарии3

Базовый Dart (Часть №1)

Уровень сложностиСредний
Время на прочтение14 мин

Итак, йоу, юзеры!

Я Hilrein, 18-летний разработчик мобильных и веб-приложений. В этой статье я расскажу вам про базовый Dart - язык программирования, лежащий в основе Flutter. Он отлично подходит как для новичков, так и для тех, кто хочет перейти в кроссплатформенную мобильную разработку.

Эта статья рассчитана на начинающих и охватывает всё, что нужно знать до перехода к объектно-ориентированному программированию (ООП).

Читать далее
Всего голосов 6: ↑2 и ↓4-2
Комментарии6

Пайка плат, заказанных на JLCPCB, в домашних условиях

Уровень сложностиПростой
Время на прочтение5 мин

Всем привет!

Это моя первая заметка на Хабре и в интернете вообще. Поэтому сразу хочу извиниться за некоторую косность изложения и незрелость оформления текста.

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

Схемы и платы из EDA редактора я здесь приводить не буду, т.к. проект еще находится в стадии отладки, поиска ошибок и внедрения новых решений. Расскажу лишь вкратце суть и причины разработки, а затем хочу сделать акцент именно на процессе пайки деталей на PCB.

Итак, у одного моего бывшего коллеги и старого приятеля в ремонте появился преобразователь постоянного напряжения от аккумуляторов в переменное 230В. Хочу сразу сказать, что само устройство целиком я никогда вживую не видел. Как мне пояснил мой друг, частой причиной поломки таких преобразователей является выход из строя микроконтроллера управления основной ШИМ преобразователя — SG3525. Микроконтроллер измеряет входное напряжение с батареи, температуру каких‑то силовых элементов, и при превышении, либо просадке входного напряжения, а также превышении температуры выключает SG3525 и включает вентилятор и играет звуковой сигнал тревоги. Здесь все достаточно просто. Единственный минус — ног у микроконтроллера всего 8, из них две — Vdd и Vss(GND).

Микроконтроллер имеет шлифованную верхнюю поверхность без маркировки. Но по распайке некоторых компонентов в нем отчетливо угадывается PIC12F675.
Ещё одна проблема, что из‑за недостатка свободных ног мне недоступен аппаратный дебаг. ICSP пины, как раз задействованы для измерения входного напряжения и температуры. Разве, что можно попробовать использовать один из пинов МК под программный UART‑TX и передавать данные по нему.

В общем достаточно убогий и старый микроконтроллер — он уже больше 20 лет присутствует на рынке. Есть более современные аналоги pin-to-pin. Думаю, поработать с ними позже.

Читать далее
Всего голосов 29: ↑27 и ↓2+33
Комментарии117

Как заставить 400-тонный груз ехать точно по траектории: AMR в металлургии

Уровень сложностиПростой
Время на прочтение5 мин

Можно ли создать робота, который без рельсов перевезет 400 тонн и при этом не промахнется мимо точки разгрузки из-за прогиба шасси на 5 сантиметров? За два года работы над автономными мобильными роботами (AMR) для металлургических и машиностроительных предприятий мы выяснили — можно, но придется переизобрести половину алгоритмов навигации.

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

Читать далее
Всего голосов 6: ↑6 и ↓0+6
Комментарии10

Наибольшая общая возрастающая подпоследовательность

Время на прочтение10 мин

Привет! При решении контестов я нашёл интересную задачу по теме динамического программирования.
Постановка задачи: Необходимо найти наибольшую общую возрастающую подпоследовательность двух массивов.

В этой статье я разобрал несколько способов решения этой задачи с разными асимптотиками по времени.

Читать далее
Всего голосов 10: ↑8 и ↓2+7
Комментарии2

Гибридный SEO 2025: Как AIO, GEO и AEO меняют поисковый ландшафт вместе

Уровень сложностиПростой
Время на прочтение4 мин

В данном документе представлены определения и ключевые понятия, связанные с оптимизацией сайтов и контента в эпоху развития искусственного интеллекта.

Читать далее
Всего голосов 4: ↑0 и ↓4-4
Комментарии1

Место у окна

Уровень сложностиПростой
Время на прочтение4 мин

Жаркие летние лучи солнца, прожигающие окна офисного этажа, попадают прямо на экран с открытым проектом. В силу совершенно "удачных" стечений обстоятельств, я ещё и сижу на первом этаже здания, в итоге на мою спину и монитор может посмотреть любой желающий. И порой это действительно приятно — как, например, в моментах, когда студенты останавливаются и смотрят на мои Java-классы. Интересно, какие у них мысли в этот момент. Мечтают ли они оказаться на моём месте? И если да, то догадываются ли, какой легаси-пластилин мне приходится расковыривать?

Тем не менее, часто во время сборки проекта я, как и многие другие люди, просто втыкаю в монитор и думаю о своём. Кто-то уходит в телефон, кто-то читает статью, кто-то идёт покурить. Ну а я просто раздумываю — что движет людьми в моём опенспейсе? Почему один пришёл в IT за деньгами, а другой — за признанием? А в чём отличие третьего — не ясно даже ему самому.

Разница поколений и разный опыт — всё это влияет на то, как мы думаем, как работаем, как спорим. Порой я ловлю себя на мысли: а что думают они о человеке N? Почему-то снова вспоминаю слова Романа Елизарова:

«Есть категория людей, которые хорошо мотивируются соревновательным моментом… И благодаря ICPC появились многие IT‑специалисты, которые вместо того, чтобы гулять и прожигать жизнь, день и ночь изучали алгоритмы… и получались такие сильные программисты, которых нигде не сыщешь.»

Вначале эта мысль вызывала у меня почти отвращение — ведь это так странно. Мы ведь все занимаемся этим ради высшего блага. Ну... чтобы наши программы решали проблемы других людей, чтобы наши решения приносили людям удовольствие и вот это всё. Это же так странно — соревноваться?

Читать далее
Всего голосов 7: ↑6 и ↓1+6
Комментарии9

Как я сделал универсальный Skeleton‑View с shimmer‑эффектом в SwiftUI

Уровень сложностиСредний
Время на прочтение3 мин

Привет! Я — iOS‑разработчик, и недавно в своём приложении столкнулся с задачей: нужно было красиво показывать placeholder‑загрузку интерфейса. Думал использовать стандартный .redacted — но он неудобен: нет анимации, мало кастомизации. Либо подгружать тяжелую библиотеку вроде SwiftUI‑Shimmer. Решил: сделаю свой легковесный и гибкий подход — и расскажу вам, как это получилось.

Читать далее
Всего голосов 4: ↑4 и ↓0+5
Комментарии7

Python: генераторные функции

Уровень сложностиПростой
Время на прочтение5 мин

По утверждению Роберта Мартина, объектно-ориентированный подход был предложен 1966-м году. Для эмуляции объектов они использовалась возможность языка ALGOL, позволяющая переместить кадр стека вызова функции в динамическую память (кучу).

В этом смысле в 2001 году Гвидо ван Россум переизобрёл объекты, добавив Python 2.2 генераторные функции.

Читать далее
Всего голосов 7: ↑5 и ↓2+3
Комментарии7

Что вам даст Иннополис

Уровень сложностиПростой
Время на прочтение4 мин

Что вам даст Университет Иннополис по мнению выпускника: старт в карьере, фундаментальное образование или только разочарование

Читать далее
Всего голосов 16: ↑7 и ↓90
Комментарии19