Pull to refresh
0
@DFoozread⁠-⁠only

User

Send message

Книга: проектирование API

Reading time1 min
Views23K

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

Пока что написал первую часть — о принципах проектирования API «сверху вниз»

PDF-версию можно скачать отсюда

Вопросы, пожелания и предложения принимаются. Книга распространяется бесплатно на условиях CC-BY-NC. You're welcome!

Читать далее

Конфигурационные файлы. Библиотека libconfig

Reading time8 min
Views41K

Введение


Как-то находясь в поиске как мне прикрутить конфигурационные ini файлы или json к моему сервачку перебирал варианты, но почему-то они были неудобны или слишком простые, или велосипеды. И хоть я люблю xml конфигурирование, но порою это чрезмерно огромные файлы и неудобно для небольшого количества настроек писать много текста. Раз задал другу вопрос по этой теме, он то мне и подкинул библиотеку. Напоминает она json в смеси с yaml.



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

Читать дальше →

7 ошибок ETL-разработчика

Reading time11 min
Views61K
Проекты хранилищ данных уже давно являются частью IT-инфраструктуры большинства крупных предприятий. Процессы ETL являются частью этих проектов, однако разработчики иногда совершают одни и те же ошибки при проектировании и сопровождении этих процессов. Некоторые из этих ошибок описаны в этом посте.
Читать дальше →

Делаем модем: передаем цифровые данные по воздуху с помощью OFDM и GNU Radio

Reading time14 min
Views21K
Привет, Хабр.

Данный текст можно считать продолжением статьи "Разбираем звук Dial-up модема", в которой разбирался метод установки связи между модемами. Сегодня мы пойдем дальше, и посмотрим на практике как передаются данные, для чего создадим простую реализацию модема с помощью OFDM и GNU Radio.

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

Для тех, кому интересно как это работает, продолжение под катом.
Читать дальше →

Чем развлечься в самоизоляции, или передаем данные с помощью звуковой карты

Reading time4 min
Views13K
Привет Хабр.

После недавней публикации про передачу OFDM, стало интересно проверить, каким способом эффективнее всего передавать данные по воздуху. Мы попробуем разные виды модуляции, и посмотрим какие из них лучше подойдут для передачи данных из одного конца квартиры или офиса в другой. Для тестов будет достаточно ноутбука, смартфона и программы MultiPSK.



Для тех кому интересно как это работает, продолжение под катом.
Читать дальше →

Принимаем и анализируем радиосигнал платежного терминала с помощью SDR

Reading time4 min
Views29K
Привет, Хабр.

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


Фото (с) Verifone

Для тех кому интересно как это работает, немного подробностей под катом.
Читать дальше →

Как выполнить 70 задач за день: жизнь в таск-трекерах — хорошая жизнь

Reading time6 min
Views44K


Систематически вести задачи я пытался, наверное, раз 20-25. И каждая попытка срывалась, как теперь я понимаю, по двум причинам.

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

Любую работу сложно вести, когда ты не понимаешь, для чего. «Упорядочить жизнь» — не самая адекватная цель, так как «упорядоченная жизнь» — это достаточно размытое явление. А вот «снизить уровень тревоги, снизив уровень неизвестности» — цель гораздо конкретнее и лучше, на которую вполне можно потратить час в день.

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

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

А как я к этому пришёл, можно прочитать здесь.
Читать дальше →

Рендеринг каустики воды в реальном времени

Reading time7 min
Views12K
В этой статье я представлю свою попытку обобщения вычислений каустики в реальном времени с помощью WebGL и ThreeJS. Тот факт, что это попытка, важен, ведь найти решение, работающее во всех случаях и обеспечивающее 60fps — сложная, если не невозможная задача. Но вы увидите, что при помощи моей методики можно достичь достаточно приличных результатов.

Что такое каустика?


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

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


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

Чтобы добиться стабильных 60fps, нам нужно вычислять её на графической карте (GPU), поэтому мы будем вычислять каустику только шейдерами, написанными на GLSL.
Читать дальше →

RabbitMQ против Kafka: применение Kafka в событийно ориентированных приложениях

Reading time12 min
Views34K

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


Читать дальше →

Apache Kafka и RabbitMQ: семантика и гарантия доставки сообщений

Reading time17 min
Views85K


Подготовили перевод следующей части многосерийной статьи, где сравнивается функциональность Apache Kafka и RabbitMQ. В этой публикации речь идёт о семантике и гарантии доставки сообщений. Обращаем ваше внимание, что автор учитывал Кафку до версии 0.10 включительно, а в версии 0.11 появился exactly-once. Тем не менее, статья остаётся актуальной и полна полезных с практической точки зрения моментов.
Предыдущие части: первая, вторая.
Читать дальше →

RabbitMQ против Kafka: два разных подхода к обмену сообщениями

Reading time18 min
Views353K

В прошлых двух статьях мы рассказывали об IIoT — индустриальном интернете вещей — строили архитектуру, чтобы принимать данные от сенсоров, паяли сами сенсоры. Краеугольным камнем архитектур IIoT да и вообще любых архитектур работающих с BigData является потоковая обработка данных. В ее основе лежит концепция передачи сообщений и очередей. Стандартом работы с рассылкой сообщений сейчас стала Apache Kafka. Однако, для того, чтобы разобраться в ее преимуществах (и понять ее недостатки) было бы хорошо разобраться в основах работы систем очередей в целом, механизмах их работы, шаблонах использования и основной функциональности.



Мы нашли отличную серию статей, которая сравнивает функциональность Apache Kafka и другого (незаслуженно игнорируемого) гиганта среди систем очередей — RabbitMQ. Эту серию статей мы перевели, снабдили своими комментариями и дополнили. Хотя серия и написана в декабре 2017 года, мир систем обмена сообщениями (и особенно Apache Kafka) меняется так быстро, что уже к лету 2018-го года некоторые вещи изменились.

Читать дальше →

Как работает криптография на основе эллиптических кривых в TLS 1.3

Reading time23 min
Views34K
image

Пара предупреждений читателю:

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

Данный материал был написан не математиком и даже не инженером — хотя они и помогали проложить дорожку сквозь математические дебри. Огромная благодарность сотрудникам Qrator Labs.

(Elliptic Curve) Diffie-Hellman (Ephemeral)


Наследие Диффи — Хеллмана в XXI веке

Естественным образом, данная тема начинается не с Уитфилда Диффи и не с Мартина Хеллмана. Алан Тьюринг и Клод Шеннон сделали огромный вклад в теорию алгоритмов и теорию информации, равно как и в область криптоанализа. Диффи и Хеллман, в свою очередь, официально признаются авторами идеи криптографии с публичным ключом (также называемой асимметричной) — хотя теперь известно, что в Великобритании были также достигнуты серьезные результаты в этой области. Однако они оставались засекреченными длительное время — что делает двух джентльменов, упомянутых в подзаголовке, первопроходцами.

В чем именно?
Читать дальше →

3D ML. Часть 4: дифференциальный рендеринг

Reading time15 min
Views8.3K


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


Мы поговорим о том, почему традиционный пайплайн рендеринга не дифференцируем, зачем исследователям в области 3D ML потребовалось сделать его дифференцируемым и как это связано с нейронным рендерингом. Какие существуют подходы к конструированию таких систем, и рассмотрим конкретный пример — SoftRasterizer и его реализацию в PyTorch 3D. В конце, с помощью этой технологии, восстановим все пространственные характеристики “Моны Лизы” Леонардо Да Винчи так, если бы картина была не написана рукой мастера, а отрендерена с помощью компьютерной графики.

Читать дальше →

Gonkey — инструмент тестирования микросервисов

Reading time9 min
Views15K

Gonkey тестирует наши микросервисы в Lamoda, и мы подумали, что он может протестировать и ваши, поэтому выложили его в open source. Если функциональность ваших сервисов реализована преимущественно через API, и используется JSON для обмена данными, то почти наверняка Gonkey подойдет и вам.


image


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

Читать дальше →

Номер 8-800, или как разориться за один день

Reading time4 min
Views331K
В последнее время компании стараются использовать современные и удобные средства для завоевания лояльности клиентов. Одним из наиболее распространенных и, по мнению многих, эффективным средством является бесплатный номер «8-800». Мода на покупку таких номеров и установление контакта с потребителями через него начинает набирать обороты. Безусловно, клиент охотнее будет звонить на бесплатный номер, чем платить за время ожидания ответа очередного специалиста или менеджера на линии за свой счет. Но, как говорится, бесплатный сыр бывает известно где.

Сегодня нам хотелось бы поговорить об обратной стороне использования сервиса «8-800», о том, как излишняя открытость может попросту разорить Вашу компанию. В общем виде, давайте рассмотрим такую проблему как телефонная безопасность, или телефонный DDoS.
Читать дальше →

Медуза, паспорта и говнокод — почему номера паспортов всех участников интернет-голосования попали в Интернет

Reading time5 min
Views58K
После завершения интернет-голосования, которое закончилось удивительно хорошо, меня и многих людей долго не покидало чувство того, что в России просто не может что-то пройти так хорошо. Сейчас можно расслабиться — реальность не подкачала и мы увидели двойное безумие: как с точки зрения архитектуры решения, так с точки зрения криптографии.

Кстати, Минкомсвязь до сих пор исключает ЛЮБУЮ возможность утечки паспортных данных избирателей

Между тем распределение серий паспортов выглядит вот так:

image

Давайте воспроизведем события и попробуем понять как всего этого можно было избежать
Читать дальше →

Оптимизация быстродействия динамического выделения памяти в многопоточной библиотеке

Reading time4 min
Views13K
image

Предисловие


Данная статья выросла из проблемы, которую мне относительно недавно пришлось решить: скорость кода, предназначенного для работы одновременно в нескольких потоках, резко упала после очередного расширения функционала, но только на Windows XP/2003. С помощью Process Explorer я выяснил, что в большинство моментов времени исполняется только 1 поток, остальные находятся в ожидании, причём TID активного потока постоянно меняется. На лицо явная конкуренция за ресурс, и этим ресурсом оказалась куча по умолчанию (default heap). Новый код активно использует динамическое выделение/высвобождение памяти (копирование строк, копирование/модификация STL контейнеров большого размера), что собственно и привело к возникновению данной проблемы.

Немного теории


Как известно, аллокатор по умолчанию (default allocator) для STL контейнеров и std::basic_string (std::allocator) выделяет память из кучи по умолчанию, а операции выделения/высвобождения памяти в ней являются блокирующими (косвенное подтверждение). Исходя из этого, при частых вызовах HeapAlloc/HeapFree мы рискуем намертво заблокировать кучу для других потоков. Собственно это и произошло в моём случае.

Читать дальше →

К глобальной куче без пробок. Исследуем менеджеры памяти

Reading time3 min
Views15K
Как-то, анализируя дефект в разрабатываемом продукте, я наткнулся на архитектурную особенность менеджера памяти, который мы использовали. Дефект приводил к увеличению времени создания некоторых объектов. Особенность архитектуры заключалась в использовании паттерна Singleton при работе с менеджером памяти (далее X allocator). Схематично это выглядит так:

image
Рисунок 1 – Структурная схема работы X allocator

Из схемы видно, что доступ к глобальной куче защищен мьютексом. Такая архитектура, при интенсивном создании однотипных объектов из нескольких потоков, может привести к тому, что потоки будут вставать в очередь на этом мьютексе. А ведь одна из главных особенностей продукта – это возможность его масштабирования за счет увеличения количества потоков обработки (потоков выполняющих одинаковые действия). Поэтому такой подход потенциально может стать узким местом.
Читать дальше →

Inside The JeMalloc. Базовые Структуры Данных: Pairing Heap & Bitmap Tree

Reading time7 min
Views7.7K
image

Тема Аллокаторов частенько всплывает на просторах интернета: действительно, аллокатор — эдакий краеугольный камень, сердце любого приложения. В этой серии постов я хочу в подробностях рассказать о одном весьма занимательном и именитом аллокаторе — JeMalloc, поддерживаемый и развиваемый Facebook и используемый, например, в bionic[Android] lib C.

В сети мне не удалось найти каких-либо подробностей, полностью раскрывающих душу данного аллокатора, что по итогу сказалось на невозможности сделать какие-либо выводы о применимости JeMalloc при решении той или иной задачи. Материала вышло очень много и, дабы читать его было не утомительно, начать предлагаю с основ: Базовых Структур Данных используемых в JeMalloc.

Под катом рассказываю о Pairing Heap и Bitmap Tree, формирующих фундамент JeMalloc. На данном этапе я не затрагиваю тему многопоточности и Fine Grained Locking, однако, продолжая серию постов, обязательно расскажу про эти вещи, ради которых, собственно, и создается разного рода Экзотика, в частности и та, что описывается ниже.
Читать дальше →

Про утечку памяти в одном серверном приложении

Reading time14 min
Views18K


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

Information

Rating
Does not participate
Registered
Activity