Pull to refresh
4
0

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

Send message

Заблуждения Clean Architecture

Reading time15 min
Views409K
Превращаем круги в блоки

­­ 


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

Читать дальше →
Total votes 58: ↑56 and ↓2+54
Comments203

Погружаемся в логово ржавчины. Как работает компилятор rust

Reading time16 min
Views15K

В моей предыдущей статье о rust я попытался рассказать об истории языка, и показать откуда он пришёл. В статье было сделано множество упрощений. Просто нереальное множество. Народу не понравилось. Но в опросе, в конце статьи вы сказали, что надо бы показать кишки компилятора.

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

Ну, Fe2+mH2O + 2OH- = mH2O + Fe(OH)2↓
Total votes 25: ↑24 and ↓1+23
Comments12

Генерируем Rust обёртку для FMOD

Reading time27 min
Views3.3K

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

Это руководство содержит общий обзор и конкретные приемы написания сложной Rust обёртки для звукового движка FMOD с помощью парсера pest и квази-цитирования.

Читать далее
Total votes 15: ↑14 and ↓1+13
Comments12

Подборка материалов для погружения в Angular: выбор сотрудников Selectel

Reading time3 min
Views9.6K

При построении веб-сервисов наши фронтенд-разработчики используют Angular — один из топ-фреймворков с высокой скоростью разработки и низким порогом вхождения. Но несмотря на последнее, во время изучения могут возникнуть трудности с потоками, отписками и другими абстракциями. Поэтому мы попросили коллег порекомендовать полезные ресурсы, которые помогут в освоении этих тем. Подробности под катом.
Читать дальше →
Total votes 44: ↑44 and ↓0+44
Comments8

На пальцах: ассоциированные типы в Rust и в чём их отличие от аргументов типов

Reading time5 min
Views9.4K

Для чего в Rust есть ассоциированные типы (associated types), и в чём их отличие от аргументов типов (type arguments aka generics), ведь они так похожи? Разве недостаточно только последних, как во всех нормальных языках? У тех, кто только начинает изучать Rust, а особенно у людей, пришедших из других языков ("Это же дженерики!" — скажет умудрённый годами джавист), такой вопрос возникает регулярно. Давайте разбираться.


TL;DR Первые контролирует вызываемый код, вторые — вызывающий.

Научите меня плохому!
Total votes 51: ↑50 and ↓1+49
Comments10

Распространённые заблуждения о временах жизни в Rust

Reading time27 min
Views20K

(прим. переводчика: времена жизни (lifetimes) — это одна из самых запутанных вещей в Rust, которая часто вызывает затруднение у новичков, даже несмотря на официальную документацию. Разъяснения по отдельным аспектам времён жизни есть, но они все разбросаны по разным источникам и ответам на Stack Overflow. Автор статьи собрал в одном месте и разъяснил множество связанных с временами жизни вопросов, что и делает эту статью столь ценной (я и сам почерпнул новое для себя отсюда). Я решил перевести её, чтобы дать возможность прочитать её тем, кто не владеет английским в достаточной степени, чтобы свободно читать оригинал, а также для того, чтобы повысить известность этой статьи среди русскоязычного Rust-сообщества)


19 мая 2020 г. · 37 минут · #rust · # lifetimes

Читать дальше →
Total votes 53: ↑51 and ↓2+49
Comments5

«Если заинтересованы большие деньги, то возможно всё»: Максим Горшенин об «Эльбрусах» и российской микроэлектронике

Reading time9 min
Views24K

Россия производит свои собственные процессоры «Эльбрус», которые достойны не мемов, а полноценной конкуренции с гигантами вроде «Intel». Наследие некогда великой советской микроэлектроники нашло свое место и продолжило развиваться. Почему собственные процессоры — залог суверенитета? Как балльная система может уничтожить российские разработки и есть ли у них будущее? Мы поговорили об этом с Максимом Горшнениным, независимым экспертом в сфере микроэлектроники, работавшим в МЦСТ 7 лет.

Читать интервью
Total votes 157: ↑73 and ↓84-11
Comments231

Программируем Arduino Uno на Rust: настраиваем среду и моргаем светодиодом

Reading time8 min
Views14K

Кто-то из вас наверняка задавался вопросом: а нельзя ли программировать Arduino на чём-то более современном и удобном? Вот и я задавался. И нашёл Rust (не то, чтобы я о нём не знал). И на нём можно программировать микроконтроллеры AVR и платы Arduino, построенные на них. И здесь я расскажу о том, как настроить среду разработчика на Rust в Linux, GNU Emacs и Visual Studio Code и как запрограммировать Arduino Uno на моргание светодиодом.


#![no_std]
#![no_main]

use ruduino::Pin;
use ruduino::cores::current::{port};

#[no_mangle]
pub extern fn main() {
    port::B5::set_output();

    loop {
        port::B5::set_high();
        ruduino::delay::delay_ms(1000);
        port::B5::set_low();
        ruduino::delay::delay_ms(1000);
    }
}
Читать дальше →
Total votes 14: ↑14 and ↓0+14
Comments24

Для подписи приложений iOS/macOS не нужен компьютер Apple

Reading time4 min
Views9.9K


В экосистеме Apple сейчас так устроено, что для выпуска приложений iOS/macOS требуется получение сертификата, затем подпись кода и нотаризация подписи. Согласно документации, подпись кода гарантирует пользователям, что приложение получено из известного источника и не изменялось. Для получения и использования сертификатов требуется участие в программе Apple Developer Program.

Такая система удобна с точки зрения безопасности закрытой экосистемы Apple, но создаёт некоторые трудности для разработчиков.

Однако любые трудности на то и существуют, чтобы их преодолевать.
Читать дальше →
Total votes 24: ↑24 and ↓0+24
Comments6

Знакомимся с дата-ориентированным проектированием на примере Rust

Reading time13 min
Views10K
image

James McMurray


В этом посте мы исследуем основные концепции «Data-Oriented Design» (далее «дата-ориентированное проектирование» на языке Rust.
Весь исходный код для этого поста выложен на Github.
Читать дальше →
Total votes 28: ↑26 and ↓2+24
Comments2

Монады как паттерн переиспользования кода

Reading time24 min
Views68K


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


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


Но ведь в интернете буквально сотни статей про ФП и монады, зачем писать еще одну?


Дело в том, что все их (по крайней мере те что я читал) можно поделить условно на две категории: с одной стороны это статьи где вам объяснят что монада это моноид в категории эндофункторов, и что если монада T над неким топосом имеет правый сопряжённый, то категория T-алгебр над этой монадой — топос. На другой стороне располагаются статьи, где вам рассказывают, что монады — это коробки, в которых живут собачки, кошечки, и вот они из одних коробок перепрыгивают в другие, размножаются, исчезают… В итоге за горой аналогий понять что-то содержательное решительно невозможно.


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


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

Читать дальше →
Total votes 108: ↑104 and ↓4+100
Comments256

Ускоряем неускоряемое или знакомимся с SIMD

Reading time9 min
Views60K
Есть класс задач, которые нельзя ускорить за счёт оптимизации алгоритмов, а ускорить надо. В этой практически тупиковой ситуации к нам на помощь приходят разработчики процессоров, которые сделали команды, позволяющие выполнять операции на большим количеством данных за одну операцию. В случае x86 процессоров это инструкции сделанные в расширениях MMX, SSE, SSE2, SSE3, SSE4, SSE4.1, SSE4.2, AVX, AVX2, AVX512.

В качестве «подопытного кролика» я взял следующую задачу:
Есть неупорядоченный массив arr с числами типа uint16_t. Необходимо найти количество вхождений числа v в массив arr.
Классическое решение, работающее за линейное время выглядит так:

int64_t cnt = 0;
for (int i = 0; i < ARR_SIZE; ++i)
    if (arr[i] == v)
        ++cnt;

В таком виде бенчмарк показывает следующие результаты:

------------------------------------------------------------
Benchmark                     Time           CPU Iterations
------------------------------------------------------------
BM_Count                   2084 ns       2084 ns     333079

Под катом я покажу как его ускорить в 5+ раз.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments95

Пишем с комфортом на Rust в Visual Studio Code

Reading time3 min
Views30K

Хочешь писать на Rust, но не знаешь в чём?

Нет денег на CLion или Intellij Ultimate, но тебе нужно отлаживать код?

Очень нравится Visual Studio Code, но при виде кучи плагинов разбегаются глаза?

Если на любой из вопросов выше ты ответил "да" - залетай.

Залететь
Total votes 16: ↑11 and ↓5+6
Comments42

Неожиданная находка, которая освобождает 20 GB неиспользованного индексного пространства

Reading time14 min
Views31K

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

Начнем с конца: в итоге нам удалось освободить более чем 70 GB не оптимизированного и неиспользуемого пространства без удаления индексов и данных. 

Читать далее
Total votes 60: ↑57 and ↓3+54
Comments9

Эффективная генерация сортируемых GUID для первичных ключей БД на клиенте

Reading time12 min
Views18K

Использовать Guid.NewGuid() в качестве первичного ключа в базе данных — плохая с точки зрения производительности идея. Это связано с тем, что в SQL Server, MySQL и некоторых других БД для первичных ключей создаются кластерные индексы, которые определяют, как строки будут храниться на диске. GUID — это по сути случайное значение, поэтому новая строка может попасть в начало, середину или конец таблицы. Серверу БД в этом случае придётся перемещать другие строки, что приведёт к фрагментации данных, а их извлечение может занять больше времени, если вам нужно извлечь несколько добавленных последовательно записей (например, когда вы добавляете набор связанных сущностей, которые потом будут извлекаться вместе — БД понадобится прочитать данные из разрозненных страниц вместо последовательного чтения набора данных).

Поэтому, чаще всего, лучше пользоваться сгенерированными БД первичными ключами. В SQL Server, например, есть функция NEWSEQUENTIALID(), которая генерирует последовательные GUIDы. Зачем может понадобиться генерировать ключи именно на клиенте и как это правильно сделать?

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

Правила Хорошей Структурной Схемы для Электронных Плат

Level of difficultyEasy
Reading time7 min
Views12K

В этом тексте я написал о забытом понятии: блок-схемы для разработки электроники. В ГОСТ(е) их называли Э1 (Схема структурная). Блок-схем это хороший уровень абстракции при анализе электронного устройства или PCB. Представил несколько атрибутов, которые сформировались при создании блок-схем. Привел примеры образцовых блок-схем. 

Читать далее
Total votes 23: ↑19 and ↓4+15
Comments82

Почему я ушла из команды Google WebAssembly

Reading time6 min
Views14K

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

На момент присоединения к команде V8 я уже несколько лет занималась поддержкой транспилятора, преобразующего приложения .NET в эффективный JavaScript. Проект начался в одно время с Emscripten — приложением, превратившимся в стандарт и ставшим источником вдохновения для создания WebAssembly. В то время мне удалось поработать с создателем asm.js Алоном Закаем и я многому у него научилась. Благодаря этому опыту я стала подходящим кандидатом для команды WebAssembly.
Читать дальше →
Total votes 27: ↑24 and ↓3+21
Comments10

Сборка мусора в Unreal Engine

Reading time15 min
Views19K

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

Если вам не интересна теория или то как оно работает в UE4, то можете промотать вниз до практических советов, там описываются вещи из практики по работе с GC. Но лучше знать и теорию.

Эта статья более релеватна к Unreal Engine 4.27 однако много всего работает так же и на версии UE 5.0 и на более низких версиях. Однако, стоит отметить, что, с версии 4.0 до 4.27 сборка мусора претерпела весьма значительные изменения и стала сильно лучше.

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

KiCad: скругление дорожек и создание каплевидных падов

Reading time11 min
Views13K

KiCad с годами стал намного лучше, но при этом ему по-прежнему недостаёт возможности рисовать плавные, закруглённые дорожки с каплевидными падами (teardrops). И хоть многие находят этот функционал не особо нужным, в его пользу существует ряд аргументов, которые и привели к реализации данного проекта, а именно двух плагинов — для скругления дорожек и формирования каплевидных подводов.
Читать дальше →
Total votes 80: ↑79 and ↓1+78
Comments32

Как оплачивать зарубежные сервисы?

Reading time5 min
Views199K

Как известно, 10 марта Visa и Mastercard официально прекратили транзакции в РФ. Наши соотечественники, срочно выехавшие или уже проживающие в других странах попали в ситуацию, когда российские карты перестали работать (с них нельзя снять наличные, ими нельзя расплатиться). Внутри России, будут работать до конца срока действия, благодаря Национальной системе платежных карт, но платить с использованием Apple Pay и Google Pay нельзя. Банки предлагают альтернативу: кобейджинговые карты МИР / UnionPay, но с ними все так просто и оформление таких карт - еще тот бег с препятствиями. Как итог, проблема с оплатой зарубежных сервисов стоит остро, мы уже привыкли к удобным и доступным сервисам и теперь очень не хочется отвыкать...

Как же теперь оплачивать зарубежные сервисы?

Читать далее
Total votes 74: ↑62 and ↓12+50
Comments215
1

Information

Rating
Does not participate
Location
Химки, Москва и Московская обл., Россия
Date of birth
Registered
Activity