Обновить

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

Coroutines в C++20

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

В С++ 20 появились coroutines (далее буду называть их корутинами, по‑русски). Если кратко — они позволяют писать асинхронный код также как мы пишем синхронный. При этом асинхронный код это не обязательно должен работать с несколькими потоками. Асинхронным может быть код исполняемый в одном потоке.

Под капотом компилятора корутины — это просто синтактический сахар (syntax sugar). Т.е. корутины не создадут дополнительных потоков. Компилятор заменит корутины вызовом нескольких функций и не более того. Но давайте посмотрим как корутины выглядят в коде.

В этой статье я буду делать простейший таймер на основе корутин. При этом напишу классы, для Awaitable и Promise, которые необходимы для работы корутин.

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

Архитектура Laravel: 7 ловушек и практичные решения

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

Laravel завоевал авторитет у бизнеса и программистов за эффективность решения задач. Автор не раз встречал суждение среди коллег, что опыт разработки на Symfony и Laravel равнозначны. Это миф. Ниже — 7 ловушек Laravel и практичных решений без отказа от фреймворка.

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

«Excel-ку покажи»: гайд по построению финансовой модели с нуля (+шаблон). Часть 1

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

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

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

Я сделал её максимально практичной — так, чтобы у вас был реальный инструмент, с которым можно дойти до результата: построить модель, разобраться в экономике проекта и подготовиться к разговору с инвестором.

Этот материал создан прежде всего для тех, кто делает это впервые, но будет полезен и тем, кто уже проходил этот путь.

Надеюсь, что эта серия статей и приложенный шаблон помогут вам разобраться в логике модели и упростят работу над своим проектом. Если такой формат окажется полезным и откликнется читателям, я продолжу выпускать новые материалы.

Поехали.

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

Фронтенд обгоняет бек или как мы написали 200_000 строк кода на моках

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

Я работаю старшим фронтенд-разработчиком в it-отделе одного из крупнейших федеральных застройщиков. Специфика разработки в такой непрофильной компании — сроки спускаемые сверху и вообще не имеющие корреляции с реальными ресурсами и возможностями команды. Именно поэтому мы работаем очень быстро, постоянно пытаясь получить (максимум результата)*3 за (минимум времени)/4.

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

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

DAT: новый способ гибридного поиска в RAG с динамической настройкой альфа-параметра

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

Привет, Хабр! Недавно у меня появилась задача - собрать RAG-систему для интернет-энциклопедии. В поисках решения я вышел на новый подход к гибридному RAG - “DAT: Dynamic Alpha Tuning for Hybrid Retrieval in Retrieval-Augmented Generation” (Динамическая настройка Альфа-параметра для гибридного поиска в RAG). 

Поиск по Хабру и Рунету показал, про подход DAT на русском языке еще не рассказывали, поэтому спешу поделиться находкой с вами и обсудить преимущества и недостатки этого метода. Эта статья - упрощённый пересказ научной работы. Материал будет интересен как продвинутым, так и начинающим разработчикам RAG-систем.

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

Если данные — продукт, то какова цена плохого UX? Предлагаю систему оценок

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

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

А что на счет самих данных, если мы их рассматриваем как продукт? Как будем оценивать их ценность, как будем планировать их развитие?

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

К метрикам
Рейтинг0
Комментарии0

Project Cognition Layer: Почему AI-агенту нужна не только векторная БД, а Git. Архитектура долговременной памяти проекта

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

За полгода активного использования Cursor IDE я была поражена тем, насколько этот инструмент изменил мой подход к работе. Разработка превратилась в удовольствие: поэтапное планирование, реализация, умные подсказки – агент выполняет задачи активно, быстро и, что самое главное, практически именно так, как я хочу.

Конечно, всегда есть к чему придраться, но существенных минусов становилось все меньше. Cursor-подобные IDE и LLM постоянно развиваются: с переходом на последние модели и увеличением контекстного окна, мощь инструмента достигла такого уровня, что повседневные задачи решаются за минуты, и я уже практически не задумываюсь о технической рутине.

Казалось бы, недостатков почти нет. Однако, всякий раз, приступая к новой задаче, я начинала новый чат. Мне не хотелось перечитывать свои диалоги недельной давности, искать там контекст. Но настоящая проблема возникает, когда задача переходит ко мне от другого разработчика. У меня нет доступа к его диалогу с чатом. Я не знаю, почему он принял те или иные решения, какие варианты он и AI отбросили. Мне приходится заново вводить Cursor в суть задачи, тратя время на объяснение того, что AI-агент моего коллеги уже знал.

Еще одной проблемой всегда остается отсутствие наглядного понимания хода проекта. Глядя на код, я вижу результат, но не процесс. Я не вижу, как менялась логика принятия решений и куда движется архитектура. Git Log дает мне сухие факты ("изменен файл X"), но не дает ментальной модели.

Получается парадокс: наши локальные AI-агенты умнеют с каждым днем, но как команда мы страдаем от "коллективной амнезии" и отсутствия единой картины мира. Именно это натолкнуло меня на идею Когнитивного слоя проекта (Project Cognition Layer). Если у нас уже есть инструмент, который идеально хранит историю всех изменений (Git), почему бы не "накинуть" на него когнитивный слой, понятный и человеку, и AI?

Читать далее
Всего голосов 14: ↑12 и ↓2+11
Комментарии14

Как оптимизировать и поднять эффективность AI-Кодинга от 2 до 8 раз используя стек MCP серверов

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

От красивых демок к законченным проектам: что я понял за полтора года работы с Claude Code

Я не программист. Я гуманитарий, который научился использовать ИИ для создания рабочих приложений. Но если эта статья поможет и вам господа разработчики, то моя гуманитарная тушонка будет вопить от счастья.

В общем с чем я столкнулся. С тем, что с виду все в ИИ кодинге красиво, но по факту большой проект, например свою LMS ты не соберешь, ИИ сдохнет.

Проблема была не в промптах и не в архитектуре. Просто процесс разработки с ИИ постоянно буксовал: Claude выдавал код с API прошлого года, поиск нужной функции занимал по 15 минут, после третьего рефакторинга я терял нить и бросал проект, начинал терять что было сделано, сколько не суй ему to-do листы.

Потом я нашёл свой стек из MCP-серверов, которые действительно повысили эффективность в разных случаях от 2 до 8 раз, позволили экономить до 80% токенов, не терять контекст и совершать на 8 из 10 ошибок меньше.

Читать далее
Всего голосов 22: ↑5 и ↓17-11
Комментарии14

Как я свой гибридный протокол шифрования за выходные написал

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

В статье автор делится опытом создания собственного гибридного протокола шифрования ObscuraProto с нулявсего за два выходных дня. Проект, начавшийся как вызов самому себе для простого мессенджера, превратился в полноценную библиотеку на C++ с использованием libsodium.

Автор подробно разбирает архитектуру протокола, который сочетает асимметричную и симметричную криптографию. Описывается трехэтапный процесс «рукопожатия» (handshake) с использованием эллиптических кривых (X25519) для безопасного обмена ключами и обеспечения Perfect Forward Secrecy (PFS). Также объясняется выбор симметричного шифра ChaCha20-Poly1305 для быстрой и безопасной передачи данных и его преимущества перед AES‑GCM на устройствах без аппаратной поддержки.

Статья раскрывает детали реализации, включая структуру зашифрованных пакетов, защиту от replay‑атак с помощью счетчика сообщений и использование KDF для генерации сессионных ключей. Теоретические концепции подкрепляются наглядными примерами кода на C++. Эта статья будет интересна для тех, кто интересуется криптографией и любит создавать «велосипеды» в образовательных целях.

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

3 когнитивных ловушки IT-фаундера перед инвестором. Или почему технология «зависает» без «софт»-стратегии

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

Вы — гений. Ваш продукт безупречен с точки зрения архитектуры, а метрики в Excel выглядят прекрасно. Вы создали технологию, которая стоит $10 миллионов. Но почему при встрече с инвестором или партнёром вы постоянно слышите «нет» или «мы подумаем»?

Проблема не в вашем коде и не в рынке. Проблема в том, что IT-фаундеры, которые сами выросли из CTO или разработчиков, часто попадают в когнитивные ловушки, где hard skills продукта разбиваются о soft skills продаж.

Давайте разберём три ловушки, которые мешают вашему технологическому прорыву стать финансовым.

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

Чип, который умеет говорить (SI4703)

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

В этом тексте я хотел бы рассказать про свой опыт работы с однокристальным радио приёмникои SI4703 от компании Silicon Laboratories.

SI4703 - это миниатюрный настраиваемый FM радио приемник c DSP обработкой, управляемый по I2C, с возможностью принимать бинарные данные от радиостанций по протоколу RDS .

Чип производит демодуляцию частотно модулированного сигнала, пропускает его через цифровой гетеродин и выдает на наушники аналоговый сигнал. Тут есть два смесителя: первый аналоговый, второй цифровой. Аналоговый смеситель снимает FM сигнал с несущей. Цифровой смеситель подстраивает цифровой гетеродин на конкретную радиостанцию. Это классический гетеродинный приемник.

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

BPMN для аналитиков и тимлидов (часть 1)

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

Привет, Хабр! Давайте знакомиться! Меня зовут Дима. Я много лет работаю системным аналитиком.

За моими плечами – десятки проектов по разработке и внедрению программного обеспечения, где я не только проектировал, но и проводил ревью процессов других аналитиков и специалистов заказчика. Кроме того, регулярно проводил обучение по нотации BPMN (Business Process Model and Notation).

В процессе работы я активно изучал статьи, книги, стандарты и проходил курсы по проектированию процессов. Для маленьких учебных задач с несколькими операция и условиями эти материалы были очень полезны. Но когда дело доходило до реальных бизнес-процессов – они не помогали.

Именно поэтому в нескольких статьях я решил поделиться своим практическим опытом и размышлениями по проектированию схем бизнес-процессов в нотации BPMN. Надеюсь, что они помогут аналитикам и тимлидам быстрее изучить нотацию BPMN и начать правильно её использовать.

Проанализировав много статей по BPMN на хабре, сайтах онлайн школ и редакторов моделей процессов я увидел, что большинство начинается однотипно с того, какой это классный стандарт, как он необходим каждой компании. Чтобы внести небольшое разнообразие и не повторяться я, начну рассматривать BPMN с его недостатков. Я уверен, что аналитикам и тимлидам, которые хотят внедрять новый инструмент, хочется в первую очередь понять его ограничения и недостатки.

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

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

Дроун-эмбиент-нойз синтезатор на Javascript: когда нестабильность работы это фича, а не баг

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

Речь пойдёт о нюансах использования Web Audio API и Web MIDI API для синтеза звука в браузере, методах датабендинга и сонификации, UX при использовании клавиатуры и мыши в музыкальных целях, а также почему браузер ungoogled-chromium лучше Google Chrome

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

Хватит кормить облака: переезд пет-проектов на старый ThinkPad с разбитым экраном

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

Два года я исправно заносил деньги хостерам. Сначала это были копейки за пару vps, потом захотелось управляемую базу данных, потом s3 для бекапов, и вот я уже смотрю на счет в 40 долларов ежемесячно за проекты, которыми пользуюсь я и полтора моих друга.

В какой-то момент жаба победила. Я посмотрел на полку, где пылился списанный корпоративный ноутбук с мертвой батареей, и решил: пора.

Если вы думаете, что это история про успешный успех и экономию - вы ошибаетесь. Это история про боль, перегрев и Docker на bare metal, но я ни о чем не жалею.

Вводные данные были так себе.

Ноутбук 2015 года. Core i5, 8 ГБ памяти, ssd на 256. Экран разбит, клавиатура залита кофе еще прошлым владельцем.

Главный плюс ноутбука в качестве домашнего сервера - встроенный ups. Батарея держала минут 15, но этого хватало, чтобы пережить мигание света в подъезде и корректно погасить базу, если электричество отрубили надолго.

Я накатил туда ubuntu server, кинул ноутбук под шкаф в прихожей и подключил витую пару. Сразу совет: не используйте wifi для сервера, даже если роутер стоит в метре. Пакеты будут теряться, а вы будете терять нервы при дебаге, почему ssh отваливается каждые полчаса.

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

Скрываем данные от стандартного режима exiftool прямо в чанках PNG

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

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

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

DCN-R: как объединить Deep & Cross-модель и ResNet-подход для улучшения рекомендаций

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

Как мы построили DCN-R: новую гибридную модель рекомендаций на Cross Network и ResNet-блоках

Современные рекомендательные системы сталкиваются с парадоксом: модели умеют либо отлично «запоминать» закономерности, либо хорошо «обобщать» новые случаи — но почти никогда не делают это одновременно. В этой статье я показываю, как гибридная архитектура DCN-R, сочетающая Cross Network и Residual Blocks, смогла обойти это ограничение и превзойти классические подходы.

Мы провели серия экспериментов, автоматический подбор гиперпараметров, абляции и построили продакшн-готовый сервис, чтобы проверить, действительно ли DCN-R работает лучше, или это просто красивая идея.

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

SVG, Canvas, WebGL, WebGPU — кто здесь вообще главный? Большой тест 2D-графики в браузере

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

В последние годы спрос на 2D/3D-инструменты в веб-сервисах растет довольно стремительно, технологии развиваются, появляются новые подходы и библиотеки — а вместе с ними растёт и путаница: что где использовать, где грань между похожими решениями и почему у разработчиков часто возникают противоположные мнения?

Так что я решила устроить небольшой тест 2D-решений: посмотреть, на что они реально способны, понять, почему результаты местами вызывают большое удивление, и ответить себе (и вам) на вопрос: а WebGPU вообще зачем?

Спойлер: всё далеко не так очевидно, как кажется.

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

Третий путь для удаленщиков. Лондон с визой Global Talent, Азия с DTV и идея сервиса на стыке работы и релокации

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

Я живу в Лондоне по визе Global Talent.

У меня аккуратный штамп в паспорте, понятные правила, предсказуемый горизонт. Я примерно представляю, что со мной будет через год и через три года. Это спокойное и немного непривычное чувство нормальности.

Параллельно мой брат живет в Таиланде.

У него Паттайя, море, созвоны с Европой и США, свои проекты. По качеству жизни и по деньгам все выглядит не хуже Лондона. По юридической стороне все намного менее определенно.

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

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

Самый маленький микроконтроллер в мире

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

Недавно я получил письмо с embedded.com о новом микроконтроллере MSPM0C1104. Что в нем такого кроме размеров? Разбираемся.

Читать далее
Всего голосов 37: ↑36 и ↓1+50
Комментарии65

ActiveRecord: опасная магия

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

В Ruby‑разработке ActiveRecord давно стал стандартом: он интуитивно понятен, встроен в Rails и позволяет быстро проводить CRUD‑операции. По мере роста проекта его «удобство» нередко начинает оборачиваться скрытыми проблемами.

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