Search
Write a publication
Pull to refresh
-1
0
NULL_byte @NULL_byte

Web

Send message

PHD VI: как у нас угнали дрона

Reading time9 min
Views46K


В этом году на PHDays был представлен новый конкурс, где любой желающий мог перехватить управление квадрокоптером Syma X5C. Производители часто полагают, что если они используют не IP-технологии, а какой-нибудь другой беспроводной стандарт, то можно не думать о защищенности. Как будто хакеры махнут рукой, решив, что разбираться с чем-то, кроме IP, — это слишком долго, сложно и дорого.

Но на самом деле, как мы уже много раз упоминали, SDR (software-defined radio) — отличный инструмент для доступа в мир IoT, где уровень вхождения определяется уровнем добросовестности производителя IoT-решений. Однако даже не имея SDR можно творить чудеса, пусть и в ограниченном пространстве частот и протоколов.

Цель — перехватить управление дроном.

Входные данные:

  • диапазон управления дроном: 2,4 ГГц ISM,
  • управление осуществляется модулем nRF24L01+ (на самом деле — его клоном BK2423).

Средства (выдавались желающим): Arduino Nano, nRF24L01+.

Результат — угонщик получил Syma X8C в подарок.

Так как среди желающих угнать наш дрон оказались уже подготовленные люди, имеющие в арсенале HackRF, BladeRF и другие серьезные игрушки, мы опишем два метода — SDR и непосредственно nRF24L01+.
Читать дальше →

GitPHP в Badoo

Reading time6 min
Views12K
Badoo — это проект с гигантским git-репозиторием, в котором есть тысячи веток и тегов. Мы используем сильно модифицированный GitPHP (http://gitphp.org) версии 0.2.4, над которой сделали множество надстроек (включая интеграцию с нашим workflow в JIRA, организацию процесса ревью и т.д.). В целом нас этот продукт устраивал, пока мы не стали замечать, что наш основной репозиторий открывается более 20 секунд. И сегодня мы расскажем о том, как мы исследовали производительность GitPHP и каких результатов добились, решая эту проблему.

Расстановка таймеров


При разработке badoo.com в девелоперском окружении мы используем весьма простую debug-панель для расстановки таймеров и отладки SQL-запросов. Поэтому первым делом мы переделали ее в GitPHP и стали измерять время выполнения участков кода, не учитывая вложенные таймеры. Вот так выглядит наша debug-панель:



В первой колонке находится имя вызываемого метода (или действия), во второй — дополнительная информация: аргументы для запуска, начало вывода команды и trace. В последнем столбце находится потраченное на вызов время (в секундах).
Читать дальше →

PHP-фреймворк Badoo

Reading time10 min
Views29K
Код нашего сайта повидал уже не одну версию PHP. Он неоднократно дополнялся, переписывался, модифицировался, рефакторился — в общем, жил и развивался своей жизнью. В это время в мире появлялись и исчезали новые best practice, подходы, фреймворки и тому подобные явления, облегчающие жизнь разработчику и готовые решить все основные проблемы, возникающие в процессе создания веб-сайтов.
В этой статье мы расскажем о нашем пути: как был организован код изначально, какие возникали проблемы и как появился текущий фреймворк.

Что было


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

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

Как мы разработали чат-фреймворк для Android приложения — Chateau

Reading time5 min
Views12K
Badoo — это прежде всего социальная сеть с удобным полнофункциональным чатом. Однако сами требования к такому чату постоянно растут. Разработчики популярных приложений для сетевого общения все время добавляют новые функции, чтобы угодить пользователям и выстоять в конкурентной борьбе.



Разумеется, Badoo не остается в стороне от этих тенденций. Мы постоянно совершенствуем свой чат и расширяем его функциональность, но возможности существующей кодовой базы и архитектуры едва успевают за требованиями современности. Некогда упорядоченный и хорошо протестированный код разрастается непредсказуемым образом, накапливая «технический долг». Анализируя пути решения этой проблемы, мы столкнулись с дилеммой, которая знакома любому разработчику: переписать код или сделать рефакторинг?
Читать дальше →

ООП в JavaScript

Reading time5 min
Views53K


В данной статье мы поговорим об основных особенностях объектно-ориентированного программирования в JavaScript:

  • создание объектов,
  • функция-конструктор,
  • инкапсуляция через замыкания,
  • полиморфизм и ключевые слова call/apply,
  • наследование и способы его реализации.

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

Как перенести центр разработки из России в Чехию

Reading time6 min
Views39K
image

I. Почему Чехия?

В начале 2015 года компания, в которой я работала инхаусом, решила перевезти часть своих российских разработчиков в Европу. Преследовалось несколько целей: мотивация российских разработчиков, упрощение найма инженеров из Евросоюза, удобство обслуживания зарубежных контрактов. Выбор пал на Чехию, а именно на Прагу. Почему?
Читать дальше →

Фиеричная система счисления, или почему 1 + 10 = 100

Reading time9 min
Views64K
«10.01 х 10.01 = 1000.1001»
Джордж Оруэлл. «1010001001001000.1001001000100001»


image


Существует ли позиционная система счисления с иррациональным основанием, в которой все натуральные числа записываются конечным числом цифр? В которой число больше единицы, не имеющее цифр после запятой, наверняка не целое и даже не рациональное? В которой 1 + 10 = 100, а 1 + 1 = 10.01?
Я заинтригован и хочу узнать ответ

Облачный дайджест #6: Работа с данными и безопасность

Reading time2 min
Views3.5K
Читать дальше →

PostgreSQL — не Rocket Science. Почем сейчас яйца?

Reading time5 min
Views14K


Постоянно натыкаюсь на высказывания из серии «PostgreSQL слишком сложная база для моего небольшого проекта, поэтому буду продолжать работать с MySQL».
В этой статье я хотел бы показать, что человеку, знающему MySQL, не составит абсолютно никакого труда начать разрабатывать под PostgreSQL
Читать дальше →

Как мы делали систему выделения информации из текста на естественном языке для банка АО «Банк ЦентрКредит» (Казахстан)

Reading time5 min
Views13K
Некоторое время назад к нам обратился представитель банка АО «Банк ЦентрКредит» (Казахстан) с интересной задачей. Необходимо было интегрировать в конвейер обработки данных, представляющих из себя текст на естественном языке, дополнительный инструмент обработки. Всех деталей проекта мы раскрывать не можем, так как он находится в сфере безопасности банка и разрабатывается его службой безопасности. В освещении технологических аспектов задачи и способов их реализации заказчик не был против, что собственно мы и хотим сделать в рамках данной статьи.

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

Email — не воробей, вылетит — не поймаешь или как мы сделали email-маркетинг машиной

Reading time9 min
Views12K
Более 40% выручки Lingualeo приходит из email — канала. В 2015 году мы отправили 300 млн писем. Для нас крайне важно, чтобы этот канал продаж работал эффективно: прогнозируемо, масштабируемо, а ROI рассылки максимизировался.



Сегодня мы в общих чертах расскажем о нашей непростой системе email-маркетинга, о переезде с одной платформы на другую, о системе локализации и о технических нюансах переезда. В этой коллективно подготовленной статье (Роман Домрачев, Backend Team Leader Lingualeo; Иван Зеленин, ex-руководитель отдела email-маркетинга и CRM Lingualeo, ныне операционный директор классного агентства по CRM-маркетингу WIM.Agency; Владимир Витковский, менеджер по монетизации Lingualeo; Константин Шиманаев, ведущий менеджер по маркетингу Lingualeo) есть интересные вещи и для маркетологов, и для технарей!

В 2015 году Lingualeo столкнулся с необходимостью перехода на новую платформу и технологию отправки писем, так как текущий ресурс (агентство, которое работало с платформой ExpertSender) уже не справлялся с нашими объемами и “хотелками”. Это была хорошая качественная платформа. Но Lingualeo уже из нее вырос. Плюс нам было важно контролировать весь процесс e-mailing’a: от дизайна до отправки. Поэтому мы решили перевести работу на другую платформу и начать готовить рассылки in-house. Мы хотели сделать email-marketing машиной.
Читать дальше →

Исчерпывающее руководство по составлению почтовых рассылок

Reading time13 min
Views176K


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

Памятка дизайнеру сайтов

Reading time10 min
Views246K
Вторая версия статьи, расширенная и дополненая.

Большая часть готовилась для моего выступления на «РИТ: Клиентские технологии», куда я, к сожалению, не доехал.

 

Памятка дизайнеру сайтов

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

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

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

Продвижение в социальных сетях. Часть 1 — ВКонтакте и как здесь всё устроено?

Reading time8 min
Views24K
Как правило, упоминания о рекламных возможностях Вконтакте на просторах Хабра связанны с веселыми, и порой очень прибыльными багами (например, здесь можно почитать о том, как ВК разрешал пользователям откручивать бесплатную рекламу с оплатой за клики; этот баг, кстати, до конца так и не пофиксен).

image

Нередко многие программисты появляются в комментариях к публикациям с «разоблачениями» жутких сммщиков, которые берут баснословные деньги за настройку рекламы, не давая при этом никаких гарантий. Например, в этой публикации, которая стала основным посылом к написанию данного цикла, уважаемый Drizzly утверждает, что:
Очень нелогично настройки таргетинга продавать за дополнительную цену. Наоборот нужно мотивировать рекламодателей как можно активнее пользоваться инструментами гео и соцдем таргетинга и как можно точнее нацеливать свои объявления на ЦА. В этом случае выигрывают все три стороны — у рекла выше конверсия, у площадки больше свободных площадей, меньше размазанных по тематикам реклов, выше CTR, пользователь получает рекламу релевантную его интересом. Продавать настройки таргетинга — это безумство.

Будучи человеком, который продает настройки таргетинга и услуги по продвижению как во Вконтакте, Фейсбуке, Инстаграмме, Youtube и немножечко SEO, я с ним полностью согласен. Более того, уверен, что это занятие доступно абсолютно любому человеку, имеющему хоть небольшие аналитические способности. И если у вас они есть (раз уж читаете Хабр, то с большой вероятностью есть), добро пожаловать под кат. Возможно, однажды вам придется самостоятельно разместить рекламу в соц сетях, или, как минимум, оценить адекватность работы того, кто попросит у вас за эту настройку деньги. И я искренне надеюсь, что вам пригодится эта серия публикаций. Итак, поехали!
Читать дальше →

«ВКонтакте» не только не платит пользователям за найденные уязвимости, но и не рассматривает их

Reading time4 min
Views90K
По моему скромному мнению, баги из разряда банальных SQL инъекций в GET параметрах и выполнение команд через пайп уходят в далёкое прошлое. Различные фреймворки разрабатывающиеся десятками и сотнями людей, автоматизированное тестирование и лучшие практики программирования практически не оставляют шансов на то, что в начале двухтысячных являлось обыденностью. На мой взгляд, текущее время это пора гонок условий, логических багов, мисконфигураций и конечно же XSS. Которые приводят к различным серьёзным последствиям.

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

Подробности

FizzBuzz на TensorFlow

Reading time4 min
Views53K

интервьюер: Приветствую, хотите кофе или что-нибудь еще? Нужен перерыв?


я: Нет, кажется я уже выпил достаточно кофе!


интервьюер: Отлично, отлично. Как вы относитесь к написанию кода на доске?


я: Я только так код и пишу!


интервьюер: ...


я: Это была шутка.


интервьюер: OK, итак, вам знакома задача "fizz buzz"?


я: ...


интервьюер: Это было да или нет?


я: Это что-то вроде "Не могу поверить, что вы меня об этом спрашиваете."


интервьюер: OK, значит, нужно напечатать числа от 1 до 100, только если число делится нацело на 3, напечатать слово "fizz", если на 5 — "buzz", а если делится на 15, то — "fizzbuzz".


я: Я знаю эту задачу.


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


я: ...


интервьюер: Вот маркер и губка.


я: [задумался на пару минут]


интервьюер: Вам нужна помощь, чтобы начать?


я: Нет, нет, все в порядке. Итак, начнем с пары стандартных импортов:


import numpy as np
import tensorflow as tf

интервьюер: Эм, вы же правильно поняли проблему в fizzbuzz, верно?


я: Так точно. Давайте обсудим модели. Я думаю тут подойдет простой многослойный перцептрон с одним скрытым слоем.

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

Может ли машина научить английскому языку?

Reading time5 min
Views17K


Биткоин-бот имени Дональда Трампа, победа AlphaGo над одним из сильнейших игроков в го Ли Седолем, изучение английского языка — что объединяет эти три ситуации? Везде в той или иной степени присутствует машинное обучение.

Компьютер может не только генерировать сюжетную канву, как Scheherazade, или отвечать на письма вместо пользователей, как Google Smart Reply, но и создавать идеальные учебники английского языка.
Читать дальше →

12 недельный скетч марафон, сделать или умереть

Reading time4 min
Views18K
image

Наверняка вы видели в моей ленте на Dribbble или Behance за последние 4 месяца много красочных и бессмысленных интерфейсов :) Если нет, то это был 12 недельный sketch марафон в котором я на протяжении 12 недель (включая выходные) делал по 1 shot каждый день. Ниже я расскажу о том что из этого вышло.
Читать дальше →

Шрифт Яндекса — Yandex Sans

Reading time10 min
Views127K
image

23 апреля 2016 на Я.Субботнике для дизайнеров мы анонсировали наш собственный шрифт Yandex Sans. Мы работали над ним два с половиной года и очень счастливы наконец поделиться результатом. В этом посте я расскажу о том, зачем мы всё это задумали, как происходила работа, что получилось в результате и что будет дальше. Пост написан по мотивам нашего рассказа на Субботнике.
Читать дальше →

Сжатие и передача потокового видео по TCP с помощью OpenCV

Reading time3 min
Views16K
По работе я занимаюсь разработкой алгоритмов обработки изображений и в частности алгоритмами автоматического слежения за объектами на видео для специального применения. Недавно понадобилось сделать модель алгоритма, управляемую с удаленного компьютера для отладки логики работы в сложной системе. Раньше такая задача не стояла, т.к. все алгоритмы реализовывались в итоге на FPGA. Давно работаю с OpenCV и, потерев руки, подошел к написанию программы. Но энтузиазм быстро погас, когда столкнулся непосредственно с передачей видео по сети.

Задача заключалась в следующем:

1. Написать программу сервер, которая загружает видео из файла, сжимает в JPEG и передает по протоколу TCP программе клиенту.
2. Написать программу клиент, которая принимает видео по TCP, декодирует и отображает.
Читать дальше →

Information

Rating
Does not participate
Location
Россия
Date of birth
Registered
Activity