Pull to refresh
7
0
Хлякин Денис @aka-demik

Программист

Send message

История реверс-инжиниринга одного пушистого зверька

Reading time6 min
Views147K


Тихим утром третьего января, когда Москва уже дремала после новогодних праздников, в нашей квартире раздался звонок в дверь. Почта наконец-то доставила посылку с новогодними подарками, заказанными на Амазоне. Среди прочего в ней находился и подарок для сына — электронный питомец Furby. Покупка его была, в общем-то импульсной. Игрушка значилась в бестселлерах новогоднего сезона и стоила относительно недорого. В сортах Furby я не разбирался, но когда-то давно что-то позитивное об игрушке слышал.

Сынишку, в силу его годовалого возраста, подарок не сильно впечатлил, а позволять бросать сложное электронное устройство на пол и отрывать этому устройству уши мне было жалко, и все шло к тому, чтобы убрать подарок на полку до лучших времен, однако мой взгляд пал на одну надпись на красочной упаковке…
Читать дальше →
Total votes 321: ↑315 and ↓6+309
Comments82

Интеграция React и DataTables — не так тяжело, как рекламируют

Reading time5 min
Views16K

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


Проведя довольно обширные исследования, я узнал две вещи. Во-первых, это то, что не рекомендуется использовать DataTables вместе с React, потому что обе библиотеки управляют DOM. Во-вторых, не было библиотеки, которая обеспечивала гибкость, необходимую для нашего веб-приложения (с момента моего исследования). Крайний срок для сдачи проекта приближался, и мне нужно было что-то выбрать. Я решил пойти по непопулярному пути и интегрировать DataTables в свой проект. Результат получился намного лучше, чем я ожидал, и весь процесс интеграции на самом деле был довольно плавным. В следующих разделах я опишу схему проекта, в котором работает интеграция React и DataTables.

Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments16

Какие у вас есть вопросы?

Reading time6 min
Views30K
«Какие у вас есть вопросы?» – вопрос, который гарантирован на любом собеседовании на работу.
«И если у кандидата нет вопросов, то вопрос возникает по поводу кандидата» – как-то сказала мне знакомая HR из Кремниевой долины в разговоре о поиске работы в США.

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

На эту тему недавно нашла занимательный сайтик-генератор вопросов для интервью KeyValues.com. Для тех, кто не владеет английским в достаточной мере, я и решила сделать перевод.
Читать дальше →
Total votes 35: ↑34 and ↓1+33
Comments23

Использование DPDK для обеспечения высокой производительности прикладных решений (часть 0)

Reading time14 min
Views18K

Kernel is the root of all evil ⊙.☉


Сейчас вряд ли кого-то удивить использованием epoll()/kqueue() в поллерах событий. Для решения проблемы C10K cуществует довольно много разнообразных решений (libevent/libev/libuv), с разной производительностью и довольно высокими накладными расходами. В статье рассматривается использование DPDK для решения задачи обработки 10 миллионов соединений (С10M), и достижение максимального прироста производительности при обработке сетевых запросов в распространённых прикладных решениях. Главной особенностью подобной задачи является делегирование ответственности обработки трафика с ядра ОС в пользовательское пространство (userspace), точный контроль обработки прерываний и каналов DMA, использование VFIO, и много других не очень понятных слов. В качестве целевого прикладного окружения было выбрано Java Netty с использованием Disruptor паттерна и offheap кэширования.



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

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

Welcome to the dark side!
Rating0
Comments31

Комиксы Даниэля Стори

Reading time1 min
Views27K
Привет, Хабр! Мы подумали, что если среда — это маленькая пятница, значит можно немножко расслабиться и развлечься. Мы подготовили подборку юмористических IT-комиксов от Даниэля Стори (Daniel Stori). Желаем приятного просмотра.

Arduino-проект


Хайп Detected

«Скоро все будут использовать Docker»
Читать дальше →
Total votes 68: ↑64 and ↓4+60
Comments33

Hadoop: что, где и зачем

Reading time14 min
Views459K


Развеиваем страхи, ликвидируем безграмотность и уничтожаем мифы про железнорождённого слона. Под катом обзор экосистемы Hadoop-а, тенденции развития и немного личного мнения.
Читать дальше →
Total votes 61: ↑58 and ↓3+55
Comments26

Забудьте САР теорему как более не актуальную

Reading time12 min
Views65K
или «Прекратите характеризовать хранилища данных как CP или AP»

capДжеф Ходжес в своем прекрасном посте «Заметки о распределенных системах для новичков» рекомендует использовать САР теорему для критики найденных решений. Многие, похоже, восприняли этот совет слишком близко к сердцу, описывая свои системы как «СР» (согласованность данных, но без постоянной доступности при сетевой распределенности), «АР» (доступность без согласованного состояния при сетевой распределенности), или иногда «СА» (означает «Я всё ещё не читал статью Коды (Coda Hale) почти 5-летней давности»).

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

(Да, я понимаю всю иронию написания целой статьи по теме того, о чём призываю не писать других вообще. Но, как минимум, у меня будет ссылка, которую я смогу давать интересующимся, когда меня будут спрашивать, почему я не одобряю обсуждение САР теоремы. Также, я хочу извиниться, если статья вам покажется слишком напыщенной, но эта напыщенность опирается на множество ссылок.)

САР использует слишком узкое определение


Если вы хотите ссылаться на САР как на теорему (а не на расплывчатый концепт в маркетинговых материалах к вашей базе данных), вы должны быть точны. Математика требует точности. Доказательство сохраняется только если вы вкладывается в слова, то же самое значение, что было использовано при доказательстве. И оно опирается на очень точные определения:
Еще 3000 слов увлекательного чтива
Total votes 70: ↑66 and ↓4+62
Comments23

Секреты JDK

Reading time4 min
Views25K

Про Unsafe в Java не слышал только ленивый, однако это не единственный магический класс в Sun/Oracle JDK, стирающий границы Java платформы и открывающий тропинки, не нанесенные на карту публичного API. Я расскажу про некоторые из них, принесшие пользу в реальных проектах. Но помните: недокументированные возможности лишают ваше приложение переносимости на другие Java платформы и, кроме того, являются потенциальным источником нетривиальных ошибок. Я даже зря написал слово «приложение». Лучше сказать, что описанные ниже классы вовсе не годятся для приложений! Скорее, они представляют интерес лишь для системного ПО и для любознательных программистов, т.е. для вас :)
Читать дальше →
Total votes 129: ↑127 and ↓2+125
Comments30

Rust: От &str к Cow

Reading time6 min
Views12K

Одной из первых вещей, которые я написал на Rust'е была структура с &str полем. Как вы понимаете, анализатор заимствований не позволял мне сделать множество вещей с ней и сильно ограничивал выразительность моих API. Эта статья нацелена на демонстрацию проблем, возникающих при хранении сырых &str ссылок в полях структур и путей их решения. В процессе я собираюсь показать некоторое промежуточное API, которое увеличивает удобство пользования такими структурами, но при этом снижает эффективность генерируемого кода. В конце я хочу предоставить реализацию, которая будет одновременно и выразительной и высокоэффективной.

Читать дальше →
Total votes 34: ↑34 and ↓0+34
Comments3

Передача намерений

Reading time5 min
Views8K

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


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

Читать дальше →
Total votes 25: ↑24 and ↓1+23
Comments33

На сказочном Бали выпал снег или как же легко обмануть GPS

Reading time6 min
Views36K

image


Добрый день, судя по фотографии, на Бали выпал снег! Как же так получилось?


Плач


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


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


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


В общем, нелегка доля разработчика.


Удача


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

Читать дальше →
Total votes 52: ↑51 and ↓1+50
Comments71

Не верьте навигатору: уязвимости GPS и ГЛОНАСС

Reading time4 min
Views32K


Изображение: 2Tales, Flickr

Сейчас приемник GPS/ГЛОНАСС есть не только в каждом смартфоне, но даже в тех устройствах, которые не особенно перемещаются — в промышленных установках, в датчиках телеметрии, в банкоматах. Кроме того, такие приемники обеспечивают навигацию в автоматически управляемых системах, от городского транспорта до военных дронов. Системы глобального позиционирования настолько глубоко проникли во все сферы нашей жизни, что большинство людей пользуются ими, не задумываясь о том, насколько им можно доверять.

Между тем уже есть множество примеров, подтверждающих, что подобные системы уязвимы к разнообразным атакам, включая spoofing, то есть подмену сигнала. Более 5 лет назад иранские военные смогли посадить американский беспилотник, используя данную технику. А в конце 2016 года темой многих СМИ стали искажения GPS и ГЛОНАСС в центре Москвы, около Кремля: навигаторы вдруг показывали своим пользователям, что они находятся в аэропорту Внуково. Мы решили выяснить, действительно ли нужно обладать возможностями спецслужб, чтобы спровоцировать подобные сбои.
Читать дальше →
Total votes 44: ↑43 and ↓1+42
Comments27

Пишем Telegram-бота на Rust, который будет запускать код на… Rust?

Reading time7 min
Views40K

Доброй ночи! Сегодня хотелось бы кратко рассказать о том, как написать Telegram-бота на Rust, который будет запускать код на Rust. У статьи нет цели произвести полное погружение в API telegram_bot, Serde, Telegram или в нюансы разработки на Rust. Она скорее носит ознакомительный характер. Числа Пеано с помощью системы типов складывать не будем.
Превью к статье


Хотел складывать числа Пеано, но ладно, давай своего бота...
Total votes 52: ↑47 and ↓5+42
Comments12

Антифрод. Быстро, дешево… отлично (часть 1)

Reading time6 min
Views48K
Эта статья представляет собой описание эксперимента по созданию системы обнаружения мошеннических платежей по банковским картам.

В первой части статьи я расскажу почему вопрос мошеннических платежей (fraud) стоит так остро для всех участников рынка электронных платежей – от интернет-магазинов до банков – и в чем основные сложности, из-за которых стоимость разработки таких систем подчас является слишком высокой для многих участников ecommerce-рынка.

Во второй части будут описаны требования технического и нетехнического характера, которые предъявляются к таким системам, и то, как я собираюсь снизить стоимость разработки и владения antifraud-системы на порядок(и).

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

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

Get Started!


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

Не менее интенсивно растет количество мошеннических операций и разнообразие видов мошенничества. Россия, наряду с Англией, Францией, Германией, Испанией, входит в топ-5 европейский стран по годовому объему мошеннических операций с банковским картами. Общий объем потерь от мошенничества по картам в 2013 году в Европе превысило 1 млрд. евро. На Россию приходится 110 млн. евро, из них 2,4 млн. евро мошенничество при оплате через интернет.

Полная цепочка участников проведения online-платежа при покупке товара/услуги через интернет в общем случае выглядит приблизительно так:

Online Payment Flow

Читать дальше →
Total votes 19: ↑13 and ↓6+7
Comments41

Что не так со светодиодными лентами?

Reading time3 min
Views48K
Друзья, всем привет! Если со светодиодными лампами всё более-менее понятно и производители пишут основные характеристики. То со светодиодными лентами ситуация довольно смутная. К примеру на имеющихся у меня лентах не указаны такие важные характеристики, как индекс цветопередачи — CRI, цветовая температура (бывают отличия) и я уж не говорю про световой поток.

Почему бы нам не начать тестирование лент?
Читать дальше →
Total votes 63: ↑62 and ↓1+61
Comments142

Непрерывная кросс компиляция для Raspberry PI

Reading time4 min
Views14K

Мне хотелось развернуть систему непрерывной интеграции, кросс компилирующую CMake проект написанный на c++ с OpenGL на Raspberry PI. Заодно я хотел посмотреть, не появились ли удобные серверы автоматической сборки, не содержащие в себе питона и не потребляющие сотни мегабайт ram в простое. Одна из целей написания статьи — узнать, не прошёл ли я мимо более хорошего или простого решения :)


TLDR: drone классный, позволяет добавить простенький файл в корень репозитория на github/bitbucket — и получить автоматические билды/тесты/деплой. Прямо как в Travis, но self-hosted.


Читать дальше →
Total votes 23: ↑21 and ↓2+19
Comments7

Лучезарный китайский станок и окрасочная машина им. Франкенштейна

Reading time8 min
Views36K
Вы реквестировали пост с деталями про бурные эротические приключения с китайской линией оклейки коробок. Вот он.

Оцените, какие мы редкостные бакланы. Для начала посмотрите вот на эту фотографию:



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

За время восстановления (пока подадут питание, чтобы был свет, пока снимем реле, пока его почистим) клей в машине успевает застыть. А там в станке десятки тонких трубочек, которые забиваются намертво.
Читать дальше →
Total votes 93: ↑92 and ↓1+91
Comments63

Знай сложности алгоритмов

Reading time2 min
Views988K
Эта статья рассказывает о времени выполнения и о расходе памяти большинства алгоритмов используемых в информатике. В прошлом, когда я готовился к прохождению собеседования я потратил много времени исследуя интернет для поиска информации о лучшем, среднем и худшем случае работы алгоритмов поиска и сортировки, чтобы заданный вопрос на собеседовании не поставил меня в тупик. За последние несколько лет я проходил интервью в нескольких стартапах из Силиконовой долины, а также в некоторых крупных компаниях таких как Yahoo, eBay, LinkedIn и Google и каждый раз, когда я готовился к интервью, я подумал: «Почему никто не создал хорошую шпаргалку по асимптотической сложности алгоритмов? ». Чтобы сохранить ваше время я создал такую шпаргалку. Наслаждайтесь!
Читать дальше →
Total votes 312: ↑296 and ↓16+280
Comments99

Выпуск Rust 1.13

Reading time8 min
Views6.4K

Команда Rust рада представить выпуск Rust 1.13.0. Rust — это системный язык программирования, нацеленный на безопасность, скорость и параллельное выполнение кода.


Как обычно, вы можете установить Rust 1.13.0 с соответствующей страницы официального сайта, а также ознакомиться с подробным списком изменений в 1.13.0 на GitHub. В этот выпуск вошло 1448 патчей.


Это была по-настоящему горячая пора в Rust. Мы участвовали в трёх конференциях подряд — RustConf, RustFest и Rust Belt Rust. Было классно увидеть так много любителей Rust; со многими мы встретились впервые! Мы много думали о будущем, разрабатывали план на 2017 и создавали инструменты, нужные нашим пользователям.


И несмотря на всё это, мы собрали новый выпуск с кучей новых крутых фишек.


Что вошло в стабильную версию 1.13


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

Читать дальше →
Total votes 35: ↑33 and ↓2+31
Comments6

Information

Rating
Does not participate
Location
Краснодар, Краснодарский край, Россия
Date of birth
Registered
Activity