Обновить

Разработка

Сначала показывать
Порог рейтинга
Уровень сложности

Monkey patching? В Go? Серьёзно? Или как писать тесты и не сойти сума

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

На днях подходит ко мне коллега с вопросом: «Слушай, а как в Go сделать замену логики функции в тесте?»

Я уточняю, что он имеет в виду. А он такой: «Ну, хочу monkey patching, чтобы подменять функции из коробки. Типа time.Now возвращала фиксированное время, uuid.New конкретный ID. Чтобы удобно тестироваться».

И тут я, конечно, немного завис :D

Да, технически в Go есть способы делать monkey patching (еще и есть библиотека) через unsafe, через подмену указателей на функции в рантайме. Но это настолько хрупкое и непредсказуемое решение, что я бы не советовал тащить его в продакшен-код. Особенно когда есть нормальный, идиоматичный способ решить эту задачу.

Читать далее

Повышение точности ГЛОНАСС не запуском дополнительных спутников, а кодированием

Время на прочтение4 мин
Охват и читатели7.8K

Одной из основных характеристик глобальной навигационной спутниковой системы ГЛОНАСС является точность оценки координат и высоты, полученных в навигационной аппаратуре потребителей (НАП) только по спутниковым сигналам без привлечения дополнительной информации. Большое влияние на точность позиционирования оказывают характеристики НАП. Стандартные образцы НАП не обеспечивают необходимый уровень помехоустойчивости при существующем уровне мощности принимаемых сигналов ГЛОНАСС порядка минус 166…156 дБВт.

Точность  измерения координат определяется количеством спутников, одновременно видимых навигационным оборудованием. Ошибки ГЛОНАСС составляют  3-6 м при использовании 7-8 спутников. На большей части поверхности земли над горизонтом находятся одновременно до 11 спутников ГЛОНАСС, однако отношение сигнал/шум в канале связи, необходимое для безошибочного приема информации,  часто обеспечивается только для 2-4 спутников. На рисунке 1 показан пример видимости спутников разных систем навигации в условиях городской застройки.

Читать далее

Единая теория информации: от стохастической метрики к непрерывному пространству и эффективной гравитации

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

Почему закон обратных квадратов так точен? Почему постоянная Планка имеет такое значение? Почему пространство выглядит гладким, хотя под ним скрывается квантовый хаос?

В этой работе показывается, что ответы на эти вопросы можно получить из единого принципа — Принципа Наименьшего Информационного Действия, а также что: пространство возникает как статистическое среднее стохастической метрики, 1/r² — эмерджентный закон (результат закона больших чисел), квантовая неопределённость — следствие минимальной стоимости корреляции, время — результат самосогласованных информационных структур, постоянная Планка ℏ — цена одной корреляции, голографический принцип — следствие оптимальности информационного действия.

Читать далее

Элементарный дебаггинг с binding.irb

Уровень сложностиПростой
Время на прочтение2 мин
Охват и читатели6.9K

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

В чем же дело?

Многопоточность для самых маленьких. Виртуальные потоки. Часть 2

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели8.8K

Всем привет!

Многопоточность в Java развивается очень быстро, а многие всё ещё ограничиваются обычными потоками и ключевым словом synchronized. Сегодня я хочу рассказать именно о виртуальных потоках: как с ними работать, почему они меняют подход к многопоточности и какие задачи решают лучше традиционных механизмов. Буду объяснять просто и понятно, чтобы материал был полезен как новичкам, которые только знакомятся с виртуальными потоками, так и опытным разработчикам, которые хотят понять современные практики и возможности Project Loom.

Читать далее

Продление срока службы бортовой электроники космических аппаратов

Время на прочтение7 мин
Охват и читатели6.1K

Для электронной аппаратуры космических систем, и в первую очередь устройств памяти, актуальна задача защиты от воздействия ионизирующего космического излучения и других внешних факторов, искажающих хранимую и обрабатываемую информацию. Радиационные эффекты и космические частицы создают большое число накапливающихся в устройствах памяти ошибок. Использование известных методов помехоустойчивого кодирования информации дает эффект в течение ограниченного времени, пока число ошибок не становится слишком большим. В ответственных системах используется ECC-память – (error-correcting code memory, память с коррекцией ошибок) – тип компьютерной памяти, которая автоматически распознаёт и исправляет спонтанно возникшие изменения (ошибки) битов памяти – одну ошибку в одном машинном слове. При длине машинного слова 64 бита количество исправляемых ошибок < 1,5%.

Для повышения надежности хранения информации представляет интерес форма записи данных, обеспечивающая восстановление блока информации по его фрагменту – голографический метод записи, использующий свойство делимости голограммы (возможность восстановления полного изображения объекта по фрагменту голограммы).

Читать далее

Как мы помирили маркетинг и сэкономили несколько часов в неделю на ведение отчётности в Excel

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

Топ-менеджеры юрфирмы по банкроству физлиц тратили несколько часов в день на подготовку к еженедельной планёрке. Например, руководитель колл-центра делал кучу выгрузок в amoCRM, открывал каждую сделку вручную, копировал и вставлял её в Excel.

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

Маркетинг утверждал: «Мы привели лиды, а вы просто не умеете продавать». Продажи отвечали: «Ваши лиды — говно».

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

Читать далее

Разработка цифровой аппаратуры нетрадиционным методом: Контроллер USB 1.0 на SpinalHDL

Уровень сложностиСредний
Время на прочтение127 мин
Охват и читатели2.6K

Продолжая развивать свою синтезируемую систему-на-кристалле для ПЛИС, о которой я уже написал несколько статей, столкнулся с необходимостью подключать устройства ввода типа клавиатура, манипулятор мышь или джойстик. Если обратиться к тому, чем занимаются ретро-фаны, то проблем особых нет — старый добрый интерфейс PS/2 очень прост в реализации, он позволяет легко взаимодействовать с клавиатурой и мышью с минимальными ресурсами. Фактически PS/2 это последовательный синхронный порт работающий на низких скоростях, реализовать его можно программно. С ретро-джойстиками тоже проблем нет - положение джойстика это всего лишь замыкание контактов, что легко обрабатывается программно. Проблема в том, что всё это «ретро» постепенно уходит из нашей жизни, клавиатуры и мыши с интерфейсом PS/2 всё еще можно приобрести на маркетплейсах, но всё же редкость. И от джойстика хочется чего-то большего чем просто замыкания пяти контактов, а именно — градации положения стика. Такая фича доступна либо на очень старых аналоговых джойстиках, либо на современных геймпадах с USB интерфейсом. В конце концов я разрабатывают хоть и минималистичную, но современную систему с современной архитектурой (RISC-V) предназначенную для современного промышленного применения, а не для ретро-гейминга. ;-) В общем, встал вопрос как подключать простые HID устройства ввода через USB к своей синтезируемой ЭВМ.

Интерфейс шины USB на столько широко вошел в обиход, что мы даже не задумываемся что там внутри: сколько сигнальных проводов в USB кабеле, как они подключены, как передаются по ним данные, на каких скоростях и какие могут быть ограничения. Всё что мы знаем это то, что USB бывает разных версий: 2.0 — медленный и 3.0 — очень быстрый; и что USB устройства бывают с разными видами разъемов: USB type A и, с недавних пор, USB type C. Для большинства пользователей и программистов USB это такая штука, которую «вставил и работает». А если нет, то нужно вынуть, перевернуть устройство два раза вокруг его оси и вставить в компьютер еще раз. Если и так не заработало, то искушенный пользователь возможно вспомнит команду lsusb чтобы выяснить какие сейчас устройства присутствуют в системе или даже заглянет в dmesg чтобы выяснить наличие ошибок при детектировании устройства. Но что означают эти сообщения ? Еще меньшее число пользователей понимает результат вывода команды lsusb -v. Не многим лучше обстоят дела с пониманием USB у разработчиков электроники. Обычно на их уровне USB это четыре провода: GND, VBUS, D+ и D-, при этом каждый электронщик знает что D+ и D- это дифференциальная пара которую требуется трассировать на печатной плате соответствующим образом. Но так ли это на самом деле ?

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

Читать далее

Как получить скрытые метрики памяти в VMware vCenter

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели6.3K

Всем привет! Я Игорь Голиков, ведущий разработчик ГК “Юзтех”.  В данной статье хочу рассказать о метриках памяти в VMware vCenter, в том числе как получить скрытые метрики. 

Статья может быть полезна SRE/DevOps и администраторам VMware vCenter, заинтересованным в получении «гостевых метрик» виртуальных машин, тем, кто хочет обосновать снижение выделенной виртуальным машинам памяти и сократить расходы без риска для производительности.

На одном из наших проектов возникла необходимость отслеживать использование памяти в гостевой ОС на виртуальных машинах под управлением VMware vCetner и формировать рекомендации по увеличению/уменьшению памяти выделенной виртуальной машине (rightsizing). Стандартные метрики памяти, доступные через vSphere Web Services API, не позволяют оценить объём памяти, используемой гостевой ОС.

Метрика (производительности) — это количественный показатель, который отражает состояние или поведение системы во времени (CPU, память, диск, сеть и т.д.).

Задача: найти метрику, показывающую объем памяти, потребляемой гостевой ОС и процессами в Linux системах с установленными Guest Tools.

Требования к метрике:

Читать далее

PostgreSQL Antipatterns? Анализ эффективности замены агрегатной функции MAX на ARRAY

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели6.9K

Статья на Хабре "PostgreSQL Antipatterns: отказ от агрегатных функций = кратное ускорение" послужила отправной точкой для данного исследования. После ее изучения возникла гипотеза о возможности значительного повышения производительности PostgreSQL через замену агрегатных функций на конструкции ARRAY.

Читать далее

90% программистов совершают эти ошибки. Как писать на Angular грамотно

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

Давайте начистоту. Большинство Angular-приложений пишутся по инерции. Мы используем паттерны, которые выучили на заре второй версии, и продолжаем тащить их за собой, игнорируя всё, что фреймворк предложил за последние годы. 

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

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

Читать далее

Как сократить количество Draw Calls (вызовов отрисовки) в UI Unity

Уровень сложностиПростой
Время на прочтение12 мин
Охват и читатели7.1K

В Unity UI часто тормозит не «крутая графика», а расползшееся число draw calls, которое тихо растёт вместе с канвасами, анимациями и материалами. В статье разбираемся, что именно делает каждый лишний вызов отрисовки, как с помощью Stats, Profiler и Frame Debugger найти проблемные места и какими приёмами — от грамотной структуры Canvas до атласов и батчинга — реально снизить нагрузку на мобильных устройствах.

Оптимизировать Unity UI

Kandinsky 5.0: линейка open-source моделей генерации изображений и видео нового поколения

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели9.9K

В сентябре мы открыли доступ к Kandinsky 5.0 Video Lite, лёгкой модели с 2 млрд параметров для создания видео по тексту или на основе изображения. Теперь мы выкладываем в open source и все остальные модели линейки Kandinsky 5.0: Video Pro и Image Lite!

Читать далее

Ближайшие события

«Господин Говорунъ: как я обучил маленькую модель разговаривать на дореформенном русском»

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

Я обучил небольшую языковую модель, которая отвечает на дореформенном русском как человек из XIX века.

Рассказываю, как подготовил данные, собрал синтетический корпус, обучил tiny-LLM и опубликовал её в виде чат-бота.

Читать далѣе

Как прошла международная конференция ISKE 2025 в области AI и ML

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

Всем привет! С вами снова на связи Кирилл, и я только вернулся из своей недельной поездки в Китай на конференцию International Conference on Intelligent Systems and Knowledge Engineering (ISKE 2025), где я выступал с новой разработкой. Я бы хотел поделиться новыми открытиями, достижениями в области ML и ИИ. Немного раскрыть представление об AI и его применении в Китае, да и по миру в целом. Так что усаживайтесь по удобнее, заварите чаек, кофеек – и вперед читать новые инсайты!

Читать далее

Базовая база для успешного собеседования на джуна в QA. Рассказываю, о чем спрашиваю на собесах

Уровень сложностиПростой
Время на прочтение6 мин
Охват и читатели11K

Привет! Меня зовут Юра Байков, я ведущий ведущий QA-инженер и много раз проводил собеседования на позицию тестировщика в свою команду. Да, на Хабре много постов о том, как проходят такие встречи и как к ним подготовиться. Но сегодня хочу поделиться именно своим опытом: подскажу, какие книги прочитать, чтобы укрепить базу, — шок-контент, но их всего две. А еще расскажу, о чем я спрашиваю джунов на собеседовании.

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

Читать далее

Zabbix – миграция с MySQL на PostgreSQL

Уровень сложностиСредний
Время на прочтение17 мин
Охват и читатели7.5K

Всем привет! Мы делаем проекты по Zabbix, накопили большую экспертизу и решили сделать переводы нескольких статей, которые нам показались интересными и полезными. Наверняка, будут полезны и вам. Также своим опытом делимся в телеграм-канале zabbix_ru, где вы можете найти полезные материалы и записи наших вебинаров, опубликованных на нашем ютуб-канале (прим. переводчика).

В этой статье мы покажем вам, как перенести базу данных Zabbix из MySQL в PostgreSQL на Rocky Linux 9. Заодно покажем, как включить TimescaleDB, а также выполним некоторые базовые настройки производительности.

В статье предполагается, что если доступны необязательные патчи (ключи с плавающей точкой и первичные ключи ), то они уже применены к базе данных.
Если вы в этом не уверены, информация об этом статусе также отображается во фронтенде в разделе System information, например, «Database history tables upgraded: No».

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

Читать далее

Джун наоборот или разоблачение главного мифа вайб-кодинга

Уровень сложностиПростой
Время на прочтение15 мин
Охват и читатели33K

Вчера (27 ноября) Хабр устроил «Авторский огонёк».

Было очень интересно, и меня задело одно утверждение докладчика. Оно заключалось в том, что ИИ может помочь писать простые куски кода, но не работает со сложными вещами. Таким образом, большие языковые модели уподобляются программисту-джуну.

Решил с утра накатать об этом статью, опираясь на свои знания и опыт в вычислительной математике (в прошлом занимался моделированием, а последние несколько лет преподаю вычислительную математику в МФТИ), оцените, что получилось.

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

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

Читать далее

Мысли об архитектуре и о том, как можно побороть в ней проблемы

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели7.6K

Меня зовут Максим Седов, я корпоративный архитектор. Хочу рассказать о  проблемах, с которыми мы (а может быть и вы) сталкиваемся в архитектуре, и подумать, как их можно побороть. Для этого я затрону проблемы, с которыми столкнулась архитектура до 2023 года.

Читать далее

Параметризация xNode в префабах

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

Привет, Хабр! 👋

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

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

Читать далее