Как стать автором
Обновить
1
0
Дмитрий Сиротин @dmox1

Пользователь

Отправить сообщение

Высокопроизводительный NIO-сервер на Netty

Время на прочтение9 мин
Количество просмотров128K
Преамбула

Здравствуйте. Я являюсь главным разработчиком крупнейшего в СНГ сервера Minecraft (не буду рекламировать, кому надо, те знают). Уже почти год мы пишем свою реализацию сервера, рассчитанную на больше чем 40 человек (мы хотим видеть цифру в 500 хотя бы). Пока всё было удачно, но последнее время система начала упираться в то, что из-за не самой удачной реализации сети (1 поток на ввод, 1 на вывод + 1 на обработку), при 300 игроках онлайн работает более 980 потоков (+ системные), что в сочетании с производительностью дефолтного io Явы даёт огромное падение производительности, и уже при 100 игроках сервер в основном занимается тем, что пишет/читает в/из сети.

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

Здесь я постараюсь расписать серверную часть работы с сетью через Netty, может быть это кому-то будет полезно.
Читать дальше →
Всего голосов 76: ↑75 и ↓1+74
Комментарии64

Архитектурные шаблоны взаимодействия с базами данных

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

В первой статье мы рассмотрели шаблоны проектирования, применимые в программировании приложений. Однако сейчас сложно представить серьезное бизнес-приложение без базы данных. Большие объемы данных требуют хранения и обработки. И то насколько оптимально построена связь между уровнем прикладного кода и уровнем БД во многом зависит быстродействие системы в целом. Поэтому важно правильно построить взаимодействие с СУБД. В этой статье мы рассмотрим шаблоны взаимодействия с базами данных. Правильно выбранный шаблон взаимодействия позволит избежать многих проблем при разработке и получить качественное приложение.

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

Домофон, который знает, как вас зовут — своими руками

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

В мире современных технологий, где мы можем управлять многими устройствами через мобильный телефон или голосового ассистента, удивляет присутствие примитивных элементов, таких как неприятно пищащие зуммеры. Ведь они были изобретены еще в 1831 году! Я решил привнести некоторые современные функции в систему управления доступом (СКУД), которая является ключевой частью любого домофона. Мой проект направлен на создание более интуитивной и приятной для слуха системы управления доступом.
Читать дальше →
Всего голосов 29: ↑28 и ↓1+34
Комментарии36

Стек протоколов BLE 5 -физический уровень

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

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

Рабочая частота BLE составляет 2,4 ГГц. Он использует частотную модуляцию GFSK и использует механизм скачкообразной смены частоты для решения проблемы перегрузки канала.

Существует три схемы реализации для физического уровня BLE 5, а именно некодированный физический уровень со скоростью 1 Мb/s, некодированный физический уровень со скоростью 2 Мb/с и кодированный физический уровень со скоростью 1 Мb/s. Среди них некодированный физический уровень со скоростью 1 Mb/s совместим с физическим уровнем протокола серии BLE v4, в то время как два других физических уровня увеличивают скорость связи и расстояние связи соответственно.

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

Кейс: как мы корпус контроллера делали

Время на прочтение4 мин
Количество просмотров11K

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

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

[Паттерны API] Списки и организация доступа к ним

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

Это глава 20 моей книги «API». v2 будет содержать три новых раздела: «Паттерны API», «HTTP API и REST», «SDK и UI‑библиотеки». Если эта работа была для вас полезна, пожалуйста, оцените книгу на GitHub, Amazon или GoodReads. English version on Substack.

В предыдущей главе мы пришли вот к такому интерфейсу, позволяющему минимизировать коллизии при создании заказов:

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

[Паттерны API] Двунаправленные потоки данных. Push и poll-модели

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

Это глава 21 моей книги «API». v2 будет содержать три новых раздела: «Паттерны API», «HTTP API и REST», «SDK и UI‑библиотеки». Если эта работа была для вас полезна, пожалуйста, оцените книгу на GitHub, Amazon или GoodReads. English version on Substack.

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

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

Starting Electronics: руководство по веб-серверам на Arduino. Часть 7. Отображение DI и AI входов при помощи AJAX

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


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

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

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

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

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

Привет, Хабр! Мы крупная производственная компания с 50К+ сотрудников, и в 2019 году поняли, что нам нужно мобильное приложение. Срок реализации 5 месяцев. Какой стек вы бы выбрали при такой скорости? Мы выбрали нативные Kotlin и Swift. Поначалу запилили всего 6 сервисов (новости, зарплатный лист, отпуска, блоги, регистрацию опасностей, выдачу СИЗ), и даже при том, что нанесли минимальную пользу, приложение очень зашло, количество пользователей начало расти лавинообразно. И тут мы поняли, что серверная часть на node.js + PostgreSQL создана без всякой мысли о развитии и масштабировании, решала исключительно локальные задачи. Все было на неоптимальной монолитной архитектуре, развивать и поддерживать которую просто нельзя.

Расскажу, как мы решили проблему.

Читать далее
Всего голосов 19: ↑16 и ↓3+15
Комментарии11

Домашний NAS сервер

Время на прочтение6 мин
Количество просмотров53K

Домашний NAS сервер на 10 жестких дисков для личного использования на базе Linux

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

Читать далее
Всего голосов 113: ↑108 и ↓5+129
Комментарии94

YTsaurus: основная система для хранения и обработки данных Яндекса теперь open source

Время на прочтение14 мин
Количество просмотров55K

Привет! Меня зовут Максим Бабенко, я руковожу отделом технологий распределённых вычислений в Яндексе. Сегодня мы выложили в опенсорс платформу YTsaurus — одну из основных инфраструктурных BigData-систем, разработанных в Яндексе.

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

В Github-репозитории находится серверный код YTsaurus, инфраструктура развёртывания с использованием k8s, а также веб-интерфейс системы и клиентский SDK для распространённых языков программирования — C++, Java, Go и Python. Всё это — под лицензией Apache 2.0, что позволяет всем желающим загрузить его на свои серверы, а также дорабатывать его под свои нужды.

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

Как мы выбирали технологию для фронтенда и что из этого вышло

Время на прочтение8 мин
Количество просмотров6.5K

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

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

Курс по изучению Kotlin и Android Studio с нуля до Junior. #1 Введение. Установка Android Studio

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

Всем привет, меня зовут Антон и сегодня я начинаю новый курс по созданию мобильных приложений для операционной системы Android с помощью среды разработки Android Studio и языка программирования Kotlin.

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

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

Настройка VSCode для отладки китайского RISC-V SoC

Время на прочтение8 мин
Количество просмотров7.1K

Я всей душой люблю малоизвестных производителей. Зачастую их продукты имеют фичи, недоступные у их более именитых конкурентов, по очень интересной цене (однажды меня очень выручило наличие встроенной в SoC полуамперной зарядки для аккумулятора и нескольких LDO, способных запитать всю периферию). Кроме того, сроки и условия поставки какого-нибудь Nanjing Qinheng Microelectronics могут приятно удивить разработчиков, привыкших за последние два ковидных года к конскому ценнику и 52+ неделям доставки на ST, TI, Nordic и прочие привычные вещи. Логистика становится особенно приятной, если массовое производство планируется в Китае и на площадке присутствует ваша китайская команда, способная разрулить возникающие проблемы. Да и доставка из Шеньчженя в Шеньчжень проще и предсказуемей, чем со склада глобального дистрибьютора и растаможка в России.

Погрузиться в дивный мир
Всего голосов 17: ↑14 и ↓3+14
Комментарии7

Конструктор для embedded-разработчика

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

В статье я расскажу о своей попытке создать удобный и красивый модульный конструктив для настольного прототипирования микроконтроллерных устройств

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

Программирование на Python и установка Docker для Sipeed Lichee RV RISC-V

Время на прочтение15 мин
Количество просмотров9.2K
Lichee RV

В первой части познакомились с процессором Allwinner D1 на RISC-V архитектуре, рассмотрели возможности, поработали с одноплатным компьютером Sipeed Lichee RV. Старый образ операционной системы содержал многие недоработки, которые не позволяли полностью оценить работу одноплатника. В продолжение рассмотрения Lichee RV, возьмем новый образ Ubuntu, построенный на последнем ядре Linux 5.19, окончательный выпуск которого ожидается в конце июля 2022 года. Поработаем с GPIO из Python`а и установим Docker. Теперь полноценно протестируем новый образ, проверим на что способна плата и начнем уже программировать на Python.
Читать дальше →
Всего голосов 17: ↑16 и ↓1+18
Комментарии6

Искусство шаманства или кастомная прошивка для Olinuxino. Kernel и Ubuntu Часть 3

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

Сборка kernel


Объясню, почему не подходят существующие образы. Основная их проблема в том что они собраны на старом ядре 3.4, а это сразу накладывает ограничение на компилятор максимум версии 4 и ubuntu 12.04 точно, 14.04 не помню. Вот и выходит что если хочешь использовать последний софт и библиотеки то придется пересобирать последнее ядро. Конечно можно в исходниках снять ограничение на компилирование не ниже 5 версии gcc и исправить код чтоб собрался и под 4 версией, но это тот еще геморой. Не говоря уже о том что в нашем случае графическая часть линуха лишняя.

Для начала с kernel.org выкачиваем ядро 4.14.57 на тот момент это была последняя стабильная версия.

В папке с исходником создаем скрипт запускающий конфигурирование:

#!/bin/sh
make  	O=../olimex-kernel-4.14.57 		# папка где будет собрано ядро
	-j2 					# собирать в два потока
	ARCH=arm 				# тип процессора под который собирать
	CROSS_COMPILE=arm-linux-gnueabihf-  	# кросс компилятор
	xconfig				# запуск конфига

Получим что то вроде этого:


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

Присматриваемся к одноплатникам на RISC-V, обзор модуля Sipeed Lichee RV на процессоре Allwinner D1

Время на прочтение20 мин
Количество просмотров24K
Sipeed Lichee RV

Одноплатные компьютеры на RISC-V процессоре сравнительно новое веяние. Поднебесная активно работает над снижением зависимости от западных информационных систем и технологий, именно поэтому новая открытая архитектура RISC-V одна из ключевых ставок Китая. Для продвижения в массы китайский чипмейкер Allwinner на базе ядра Alibaba/T-Head Xuantie C906 RISC-V разработал процессор Allwinner D1 и упрощенную модификацию Allwinner D1s. На сегодня разработано несколько одноплатников на RISC-V процессоре, и в первенство по массовости вырвалась компания Sipeed с модульным компьютером Система-на-Модуле Lichee RV с 512 Мб ОЗУ всего за $16.90, работающим на Linux. Разработчик может спроектировать несущую плату для данного модуля, добавив необходимые периферийные устройства и разъемы. В результате получится решение максимально подготовленное для себя. Данный модуль предназначен для создания интеллектуальных информационных систем, терминалов, роботов, и т.д. В первой части рассмотрим архитектуру процессора, возможности модуля, дистрибутивы, программное обеспечение. Во второй части детально рассмотрим порты и интерфейсы для программирования, напишем программы на Python и C#.
Читать дальше →
Всего голосов 31: ↑27 и ↓4+24
Комментарии37

Стартуем RISCV Sipeed LicheeRV — Nezha CM C906 без официального SDK

Время на прочтение4 мин
Количество просмотров5K

Получив свой экземпляр (заказал еще до того как вышел LicheeRV Dock), я конечно же полез за официальной инструкцией к производителю...

В принципе, я никогда не интересовался продуктами вроде Banana Pi или Orange Pi от Allwinner, взглянув на официальное чудо, я понял почему от этих продуктов все так воротят нос:

— Прошивки для не китайцев "заботливо" лежат на MEGA (хочешь качать - плати деньги...)

— Для прошивки карт используется "замечательный" инструмент под названием PhoenixCard (судя по китайским форумам он не слушается даже китайцев), который работает под Windows (что всегда хорошо!)

— Официальный "SDK" обернут вместе c rootfs и разбит на архивы общей суммой >10 Gb (да-да и лежит на MEGA - то есть все равно заплатишь)

— И изюминка - все образы в комплекте расчитаны на карты ёмкостью больше 16 Gib (у наших друзей написано 16 GB - card_needs_≥16GB.txt)

Квест про реверс (он в конечном счете не понадобился) и печальное ковыряние палкой данного продукта жизнедеятельности (то что я собрал с помощью SDK, так и не заработало...) мы опустим, так как, я наконец наткнулся на гайд для Sipeed Nezha от дяди Samuel'a Holland'a спасибо ему за это огромное...

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

CI, кодстайл и TDD: обзор практик для повышения качества кода

Время на прочтение8 мин
Количество просмотров11K

Blade Runner 2049, Warner Bros. Pictures

Я видел не во сне, а наяву атакующие корабли, пылающие под четырьмя вложенными if-else, и лучи CI с кучей сканирований у ворот Тангейзера, вызывающие лютую боль разработчиков. Меня зовут Максим Морев, и я техлид в Газпромбанке.

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

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

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность