Pull to refresh
-4
0.1
Артём @3263927

Инженер-программист

Send message

Насколько быстр Javascript? Симулируем 20 миллионов частиц

Level of difficultyEasy
Reading time23 min
Views14K

Я бросил себе вызов: симулировать 1000000 (миллион) частиц на чистом Javascript на телефоне, используя только CPU и добившись 60 FPS.

Поехали.

Задача не особо сложна, если выполнять всю работу на GPU, но правило гласит, что нужно пользоваться только CPU, при этом работая на JS, так что никакого WASM.

Читать далее
Total votes 90: ↑89 and ↓1+111
Comments24

.NET Digest #1

Reading time4 min
Views6.8K

Добро пожаловать на первый выпуск нашего дайджеста, посвященного новостям и событиям в мире .NET! Команда C# разработчиков из PVS-Studio собрала для вас самые интересные и полезные материалы, чтобы держать вас в курсе последних тенденций и разработок. Поехали!

Читать далее
Total votes 30: ↑30 and ↓0+34
Comments11

История о том, как Graphviz и бор взломали шифр от Sony

Level of difficultyMedium
Reading time9 min
Views13K

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

Как это было
Total votes 115: ↑115 and ↓0+151
Comments15

KC868-M16v2: мечта ардуинщика (16 токовых каналов, 3 канала напряжения, SD, LAN, POE, дисплей, RTC и SH3x)

Level of difficultyEasy
Reading time6 min
Views12K


Помнится, во времена моей пионерской юности я провёл много времени проектируя многоканальные измерители тока и напряжения и отлаживая математику обсчёта данных со всех этих каналов (да, были времена...). И тут, разбираясь что же в очередной раз изобрела компания Kincony в лице KC868-M16v2, я вдруг обнаружил, что это ни что иное, как воплощение моей мечты по железу для подобного измерителя.

То есть теперь все желающие могут попрактиковаться в многоканальном измерении токов потребления различных устройств и открыть для себя много нового и интересного (смайл). Кроме этого, компания Kincony снабдила своё очередное детище кучей фишек типа поддержки microSD карт памяти, сетевого подключения с POE, дисплея, часов реального времени и в качестве вишенки на торте — разъёма для подключения датчиков SH3x.

Да, иногда мечты сбываются…
Читать дальше →
Total votes 16: ↑14 and ↓2+19
Comments85

Создаём сетевую карту на дискретной логике

Reading time6 min
Views9K
Этот пост — продолжение моего проекта по созданию завершённой компьютерной системы на компонентах дискретной логики. У меня уже есть компьютер, способный выполнять сетевые приложения, например, HTTP-сервер или игру по LAN.

В прошлом году я изготовил адаптер физического уровня, преобразующий сигнал Ethernet 10BASE-T в SPI и обратно. Тогда для тестирования его работы я использовал микроконтроллер STM32, а теперь реализую модуль слоя MAC, чтобы подключить его к своему самодельному компьютеру.

Оба адаптера полнодуплексные и имеют отдельные передатчик и приёмник.


Компьютер целиком. Новый модуль находится справа внизу
Читать дальше →
Total votes 53: ↑53 and ↓0+69
Comments5

Как мы создавали AmneziaFree, и боролись с интернет-цензурой в разных странах

Reading time3 min
Views16K

Всем привет! На связи команда Amnezia. И если вы давно за нами следите, вы помните как мы были очень маленьким стартапом, который делал первые шаги по созданию более менее современного приложения с open source кодом, чтобы создавать VPN на собственном сервере. Мы понимали что подобное решение нужно, но еще не понимали на сколько нужно и что именно мы будем делать дальше.

AmneziaFree.  Начало

Наверное, мы бы и дальше  оставались просто разработчиками self-hosted клиента, если бы не массовая блокировка общественно значимых сайтов весной 2022 в России. Особенно болезненно ощущалась блокировка невероятно популярного Instagram* 

Тогда при поддержке активистов и различных медиа мы взяли самые очевидные инструменты - арендовали у партнеров серверные мощности, взяли за основу open source приложение WireGuard и создали телеграм-бота раздающего конфигурации для каждого пользователя - и уже буквально через месяц, у нас был готов бесплатный сервис для доступа к заблокированным сайтам AmneziaFree. Он стал неожиданно популярным,  практически 250 000 пользователей за короткий промежуток времени получили конфиги с помощью этого бота.  

Читать далее
Total votes 86: ↑84 and ↓2+104
Comments36

Разработка самой маленькой в мире книги на e-ink дисплее

Level of difficultyMedium
Reading time9 min
Views13K
Приветствую, Хабр!



Хоть название и громкое, но тут почти нет преувеличения. Моя разработка не предполагает ежедневного использования и сделана больше просто ради забавы, но тем не менее она довольно интересная. Владимир Анискин из Новосибирска, например, создал книгу на лавсановой пленке размерами 70х90 мкм, а почему бы и нет? На занесение в книгу рекордов Гиннеса я не претендую, но, если Вы остались заинтересованы, заходите под кат. Не хотел делить статью на части, так что наберитесь терпения.
Читать дальше →
Total votes 85: ↑84 and ↓1+112
Comments86

Разбираем осьминога

Reading time17 min
Views59K
Осьминоги странные.

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

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

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

Никакого наследия вы не оставите.



Если вам этого мало, ещё стоит знать, что в этой роли вы нюхаете ногами, видите кожей (но до мозга всё равно это не доходит), позволяете щупальцам самим решать некоторые вопросы, развили лучшую в галактике маскировку, научились светиться и оставлять объёмный след тела, можете редактировать свой собственный РНК-код (до 60%). Вместо цветного зрения — поляризованное (дико полезное на глубине), поэтому квадрат раскрывается в своём величии только при наклоне. Ну и ещё осьминоги едят задницей, какают головой (транзитом через мозг), у них синяя кровь и вообще немного нетрадиционная архитектура.

Сейчас объясню, почему осьминоги прекрасны.
Читать дальше →
Total votes 467: ↑462 and ↓5+541
Comments157

Байт-кодовые VM в неожиданных местах

Level of difficultyMedium
Reading time4 min
Views10K

Отвечая на вопрос в Twitter, Ричард Хипп написал, почему SQLite использует байт-кодовую VM для исполнения операторов SQL.

Вероятно, большинство людей ассоциирует байт-кодовые VM с языками программирования общего назначения, например, с JavaScript или Python. Но иногда их можно встретить в неожиданных местах! В статье я расскажу о тех, которые знаю.
Читать дальше →
Total votes 52: ↑50 and ↓2+70
Comments16

Записываем музыку при помощи CSS Grid

Level of difficultyMedium
Reading time8 min
Views6.8K
Слишком часто я наблюдал за тем, как импровизирующий музыкант трясущимися руками пытается увеличить pdf размером A4 на крошечном экране телефона в самом разгаре исполнения. Мы обязаны создать плавный и отзывчивый рендеринг музыки для веба!

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

Прототип Scribe


SVG, отрендеренный Scribe 0.2

Несколько лет назад я создал прототип рендерера музыки, который назвал Scribe. Он выполняет преобразование JSON в SVG. Изначально я стремился к созданию адаптивного рендерера музыки. Это было хорошее демо, но для дальнейшего развития пришлось бы писать сложный многопроходный движок генерации макетов, а у меня тогда возникли другие дела.

Вскоре после этого я занялся адаптированием Grid под проекты компании, и тут мне почудилось нечто знакомое: я задался вопросом, а не станет ли он решением некоторых проблем, с которыми я столкнулся при разработке Scribe?
Читать дальше →
Total votes 55: ↑55 and ↓0+63
Comments17

Многопоточность в .NET: когда не хватает производительности

Reading time26 min
Views45K


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

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

Под катом — видео и расшифровка моего доклада с конференции DotNext, где я разбираю несколько примеров, когда использование средств из стандартной библиотеки .NET (Task.Delay, SemaphoreSlim, ConcurrentDictionary) привело к просадкам производительности, и предлагаю решения, заточенные под конкретные задачи и лишённые этих недостатков.
Total votes 49: ↑48 and ↓1+47
Comments87

Что нужно знать, чтобы успешно пройти System Design Interview

Reading time16 min
Views38K

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

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

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

Читать далее
Total votes 49: ↑47 and ↓2+56
Comments26

Психология убеждения. Как убеждать других и уметь распознавать манипуляции

Reading time14 min
Views135K

Эта статья — некраткий конспект книги Роберта Чалдини «Психология убеждения». Будет полезна всем, кто имеет дело с людьми, продажами и бизнесом. Книга настолько полезна, что должна оказаться на полке каждого. Помимо того, что мы хотим влиять на окружающих, очень полезно знать, когда окружающие пытаются повлиять на нас. Внутри вы найдёте множество способов убеждения и, сразу после прочтения, будете с лёгкостью замечать, когда вами пытаются манипулировать.
Читать дальше →
Total votes 90: ↑67 and ↓23+44
Comments50

Самое понятное объяснение парадокса близнецов

Level of difficultyMedium
Reading time5 min
Views47K

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

Кратко напомню суть парадокса

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

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

Попросим бегущего кота четыре секунды (по его часам) бежать вправо со скоростью 75% скорости света, потом развернуться и прибежать с той же скоростью назад.
Вот визуализация на диаграмме.

Читать далее
Total votes 85: ↑81 and ↓4+98
Comments407

Сложнейшая проблема компьютерных наук: центрирование

Level of difficultyMedium
Reading time7 min
Views33K

Заявляю: «Мы, как цивилизация, разучились использовать центрирование». Ну то есть мы, конечно, знаем, как это делать — очень просто:

display: flex;
justify-content: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

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

Ещё можно использовать сетку:

display: grid;
justify-items: center; /* Горизонтальное центрирование */
align-items: center; /* Вертикальное центрирование */

Также не спрашивайте, почему выражение justify-content стало justify-items.
Читать дальше →
Total votes 194: ↑189 and ↓5+227
Comments56

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

Level of difficultyMedium
Reading time30 min
Views25K

Всем привет! Я Сергей, работаю в B2B-команде Яндекс Маркета последние 3,5 года. Как уже понятно из заголовка, сейчас я вам расскажу про yet-another-миграцию с базы на базу, которая началась в середине 2021 года и заняла почти год. Получается, мемуары.

Вас ждёт рассказ о том, как мы:

- несколько месяцев чинили тесты и делали трансформер;

- десятки раз переливали данные;

- чинили баги незаметно для пользователей;

- заставили сервис работать на PostgreSQL быстрее, чем он работал на Oracle.

Читать далее
Total votes 90: ↑90 and ↓0+92
Comments15

Zigbee шлюз для счетчиков Меркурий

Reading time1 min
Views13K

Давно удивлялся, почему не смотря на распространенность счетчиков Меркурий и возможность съема с них показаний через RS-485, на рынке DIY устройств не было Zigbee шлюза для них. Этот пробел я решил восполнить самостоятельно.

Читать далее
Total votes 41: ↑39 and ↓2+52
Comments25

Использование diagnostic observers для изоляции кода логгирования

Level of difficultyMedium
Reading time16 min
Views1.4K

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

Класс DiagnosticListener определен в пакете System.Diagnostics, и особенности его использования описаны в разных статьях, включая одну-две на Хабре.

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

Читать далее
Total votes 2: ↑2 and ↓0+2
Comments1

Вы за это заплатите! Цена Чистой Архитектуры. Часть 1

Level of difficultyMedium
Reading time11 min
Views26K

Всем привет, меня зовут Артемий, я работаю старшим Android-разработчиком в команде пользовательского профиля в RuStore. Мой опыт в индустрии уже 8 лет. За это время я успел поработать в разных проектах и компаниях. У меня был опыт работы в проекте, в котором было свыше 300 модулей и больше 60 Android-разработчиков. Такие условия заставляют задуматься о масштабируемости на принципиально ином уровне.

Сегодня я расскажу о способах обеспечения масштабируемости проекта и как этому может навредить неправильное восприятие Чистой Архитектуры (далее — ЧА). Предупреждаю сразу, это лонгрид в двух частях!

Читать далее
Total votes 58: ↑55 and ↓3+58
Comments65

Большой код. Учимся генерировать F#-исходники с помощью Fantomas. Часть 3. Модули и типы

Level of difficultyHard
Reading time20 min
Views1.2K

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

Мы возьмём сугубо игровую задачу с понятным результатом и на её примере узнаем:

• на какие ноды AST стоит обратить внимание в первую очередь;
• где Fantomas-у нельзя доверять;
• где можно хакать;
• где лучше придерживаться пуризма;
• и как на F# можно строить Fluent API.

В этой части мы сосредоточимся на общей организации генератора, входных данных и основных элементах AST. В следующей сделаем то же самое, но на более сложном уровне, сместив повествование в сторону устройства Fluent API.

Читать далее
Total votes 10: ↑10 and ↓0+10
Comments2
1
23 ...

Information

Rating
2,703-rd
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity