Pull to refresh
0
0
Кирилл Семин @dmx102

CEO + CTO

Send message

Пишем свой мессенджер P2P

Reading time7 min
Views83K

На фоне обсуждения будущего интернет мессенджеров и прочтения статьи «Почему ваш любимый мессенджер должен умереть», решил поделиться своим опытом создания P2P приложения для общения независимо от сторонних серверов. Точнее — это просто заготовка, передающая одно сообщение от клиента серверу, дальнейшее расширение функционала зависит только от Вашей фантазии.
Читать дальше →
Total votes 20: ↑16 and ↓4+12
Comments46

Яндекс открывает ClickHouse

Reading time14 min
Views168K
Сегодня внутренняя разработка компании Яндекс — аналитическая СУБД ClickHouse, стала доступна каждому. Исходники опубликованы на GitHub под лицензией Apache 2.0.



ClickHouse позволяет выполнять аналитические запросы в интерактивном режиме по данным, обновляемым в реальном времени. Система способна масштабироваться до десятков триллионов записей и петабайт хранимых данных. Использование ClickHouse открывает возможности, которые раньше было даже трудно представить: вы можете сохранять весь поток данных без предварительной агрегации и быстро получать отчёты в любых разрезах. ClickHouse разработан в Яндексе для задач Яндекс.Метрики — второй по величине системы веб-аналитики в мире.

В этой статье мы расскажем, как и для чего ClickHouse появился в Яндексе и что он умеет; сравним его с другими системами и покажем, как его поднять у себя с минимальными усилиями.
Читать дальше →
Total votes 176: ↑172 and ↓4+168
Comments204

[iOS 10] Встраиваем поддержку Siri в свое iOS приложение

Reading time5 min
Views20K
image

Apple показала на WWDC 2016 новые iOS 10 и macOS Sierra, и я не упустил возможность сразу же обновить свои устройста.

Одно из ключевых обновлений — появление SiriKit для разработчиков, теперь у нас с вами есть возможность использовать Siri в собственных приложениях. И мы сегодня сделаем наше первое приложение с поддержкой Siri (исходники проекта в конце статьи)
Читать дальше →
Total votes 20: ↑16 and ↓4+12
Comments19

Профилирование и оптимизация программ на Go

Reading time25 min
Views92K

Введение


В этой статье я расскажу, как профилировать и оптимизировать приложения на языке Go с использованием встроенных и общих инструментов, доступных в ОС Linux.

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

Я привел такое определение, чтобы сразу отсечь вопросы некорректной работы приложения. В этой статье мы не будем говорить о проблемах мультитредового программирования, о дата-рейсах (англ. data race), о поиске ошибок (англ. debugging). Для всего этого в Go есть свои утилиты и подходы, но оставим эту тему на будущее.



Читать дальше →
Total votes 47: ↑45 and ↓2+43
Comments18

О выработке неперебираемых ключей на основе перебираемых паролей

Reading time13 min
Views27K
Криптографические протоколы — фундамент безопасного сетевого соединения и конфиденциального обмена информацией. На сегодняшний день существует большое количество самых разных протоколов для самых разных целей. Многие из этих протоколов (например, TLS, Kerberos) на слуху даже у людей, тесно не связанных с криптографией. Они распространены повсеместно и зачастую уже давно являются частью популярных информационных систем.

Однако существует тип протоколов, который последнее время набирает все большую популярность, но все еще не является широко известным — протоколы выработки общего ключа с аутентификацией на основе пароля. К таким протоколам относится российский протокол SESPAKE (Security Evaluated Standardized Password Authenticated Key Exchange), с появлением которого в России и возникла необходимость в рассмотрении особенностей протоколов подобного типа. Целью данной статьи является скорее не дать очередное формальное описание нового протокола, а помочь читателю уловить его основную идею и особенности и понять, почему в нём присутствуют те или иные шаги, почему они важны и чем подобный класс протоколов отличается от всего, что было известно ранее.
Читать дальше →
Total votes 20: ↑20 and ↓0+20
Comments11

P2P в браузере

Reading time10 min
Views22K

Автор: Александр Трищенко


Я расскажу о своем хобби — организации видеотрансляций в браузере по технологии WebRTC (Web Real-Time Communication — веб-коммуникация в режиме реального времени). Этот проект с открытым исходным кодом Google активно развивает с 2012 г., а первый стабильный релиз появился в 2013 г. Сейчас WebRTC уже хорошо поддерживается самыми распространенными современными браузерами, за исключением Safari.

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

Если мы используем WebRTC, мы решаем следующие проблемы:

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

Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments25

Обнаружение DGA-доменов

Reading time4 min
Views18K
В этой статье мы расскажем о методе выявления доменных имен, сгенерированных с использованием Domain Generation Algorithm. Например, moqbwfijgtxi.info, nraepfprcpnu.com, ocfhoajbsyek.net, pmpgppocssgv.biz, qwujokiljcwl.ru, bucjbprkflrlgr.org, cqmkugwwgccuit.info, pohyqxdedbrqiu.com, dfhpoiahthsjgv.net, qdcekagoqgifpq.biz. Подобные доменные имена часто даются сайтам, связанным с незаконной деятельностью.

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

Злоумышленники используют DGA для вычисления последовательности доменных имен, к которым будут пытаться подключиться зараженные машины. Это делается, чтобы предотвратить потерю контроля над взломанной инфраструктурой в тех случаях, когда домены или IP-адреса злоумышленника, прописанные прямо в коде, блокируются системами безопасности.
Читать дальше →
Total votes 9: ↑9 and ↓0+9
Comments3

Рождение Chargeback’а

Reading time4 min
Views27K


Данная статья явилась результатом небольшого исследования отличий развития карточной отрасли в США и России. Хотя целью исследования было выявления факторов, давших толчок развития электронным валютам у нас в объёмах, значительно опережающих запад, при том, что сама идеология построения Visa/MasterCard сильно превосходит централизованные виртуальные кошельки.

В данном повествовании мы затронем только один фактор – недоверие Россиян к картам. И первая деталь, которая сразу бросается в глаза – это Visa Zero Liability на сайте американской Visa, которая гласит, что “Вы не будете нести ответственность за неавторизованное использование вашей карты. Вы защищены, если ваша карта потеряна, украдена или используется мошеннически”. А внизу маленькими буквами подписано “Покрывает только карты, эмитированные в США”. Но дорогой читатель конечно знает, что это правило является одним из основных правил МПС (международных платежных систем) и работает так же хорошо и в России. Только вы когда-нибудь слышали, чтобы хоть в одном банке вам объясняли – “в случае чего мы вернём ваши деньги”? Я – нет.

Читать дальше →
Total votes 19: ↑17 and ↓2+15
Comments66

Разработка библиотеки для iOS/Android на Golang

Reading time5 min
Views36K


Кроссплатформенная разработка мобильных приложений была очень популярна в свое время. Данный подход использовали большинство компаний во время становления мобильной отрасли. Основные причины задействовать кроссплатформенную разработку были просты — отсутствие профессиональных кадров на рынке, скорость и стоимость разработки. К сожалению, в большинстве случаев, данный подход не оправдал себя.

Но почему бы не дать ему второй шанс? Технологии шагнули вперед и теоретически мы можем получить очень качественный продукт. В данной статье мы рассмотрим на практике как разработать библиотеку для IOS/Android на языке Golang и посмотрим с какими ограничениями и проблемами мы столкнулись в процессе разработки.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments0

Метод Санделиуса для получения случайных перестановок

Reading time4 min
Views15K
Статьи о получении (псевдо)случайных чисел, о проверке качества полученных последовательностей неизменно вызывают интерес у населения Хабра.

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

Метод описанный ниже предложен Санделиусом (М. Sandelius) еще в 1962 г. в работе [1].

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

IBM открывает разработчикам доступ к ряду своих сервисов, способствуя борьбе с киберпреступностью

Reading time5 min
Views6.2K


Корпорация IBM на днях приняла решение открыть доступ к своей аналитической платформе безопасности — IBM Security Radar. Этот шаг, по мнению представителей компании, поможет заказчикам, партнерам компании и обычным разработчикам создавать пользовательские приложения с использованием возможностей платформы и соответствующего архива данных о безопасности. Также запущена онлайн-площадка для специалистов по информационной безопасности IBM Security Exchange. Здесь разработчики смогут создавать и обмениваться приложениями на основе технологий IBM.

Таким образом, корпорация предпринимает активные действия для стимулирования сотрудничества индустрии и продвижения инноваций для борьбы с киберпреступлениями. Ранее в 2015 году IBM опубликовала более 700 ТБ данных об угрозах на своей платформе IBM X-Force Exchange. Только в апреле к платформе присоединилось более 2000 организаций. Благодаря открытому доступу к аналитической платформе безопасности и архиву данных об угрозах, компании смогут обмениваться важной информацией, что позволит эффективнее противостоять киберпреступлениям.
Читать дальше →
Total votes 10: ↑9 and ↓1+8
Comments0

Битовая магия: получение следующего лексикографического сочетания

Reading time4 min
Views15K

Введение


Допустим у нас есть некоторое множество, которое состоит из N элементов. Будем считать, что элементы пронумерованы от нуля до N-1. Набор k-элементных подмножеств данного множества (сочетаний) можно представить либо в виде массива индексов длины k. Либо в виде последовательности из N бит, в которой установлено ровно k из них. У Дональда Кнута в его TAoCP приводится алгоритм генерации сочетаний в лексикографическом порядке, когда сочетания заданы в виде массива индексов. Мы попробуем перенести этот алгоритм на случай битовых масок.
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments2

Под капотом Redis: Строки

Reading time9 min
Views32K
Если вы знаете, почему простая строка `strings` в Redis займёт в оперативной памяти 56 байт — вам, думаю, статья не будет интересна. Всем остальным я попробую рассказать, что такое строки в Redis и почему использующему эту базу данных разработчику важно понимать, как они устроены и работают. Это знание особенно важно, если вы пытаетесь рассчитать фактическое потребление памяти вашим приложением или планируете строить высоко нагруженные системы статистики или учёта данных. Или, как часто бывает, пытаетесь срочно понять, почему вдруг ваш экземпляр redis стал потреблять неожиданно много памяти.
Читать дальше →
Total votes 55: ↑54 and ↓1+53
Comments3

Под капотом Redis: Хеш таблица (часть 1)

Reading time9 min
Views40K
Если вы знаете, почему после выполнения `hset mySey foo bar` мы потратим не менее 296 байт оперативной памяти, почему инженеры instagram не используют строковые ключи, зачем всегда стоит менять hash-max-ziplist-entries/hash-max-ziplist-val и почему тип данных, лежащий в основе hash это и часть list, sorted set, set — не читайте. Для остальных я попробую об этом рассказать. Понимание устройства и работы хеш таблиц в Redis критически важно при написания систем, где важна экономия памяти.

О чём эта статья — какие расходы несёт Redis на хранения самого ключа, что такое ziplist и dict, когда и для чего они используются, сколько занимают в памяти. Когда hash хранится в ziplist, когда в dicth и что нам это даёт. Какие советы из модных статей об оптимизации Redis не стоит воспринимать всерьёз и почему.
Читать дальше →
Total votes 38: ↑37 and ↓1+36
Comments2

Танцы с мьютексами в Go

Reading time9 min
Views70K
Перевод обучающей статьи разработчика из SendGrid о том, когда и зачем можно и нужно использовать «традиционные» методы синхронизации данных в Go.

Уровень чтения: средний (intermediate) — эта статья подразумевает, что вы знакомы с основами Go и моделью concurrency, и, как минимум, знакомы с подходами к синхронизации данных методами блокировок и каналов.

Заметка читателю: На этот пост меня вдохновил хороший друг. Когда я помог ему разобраться с некоторыми гонками в его коде и постарался научить его искусству синхронизации данных так хорошо, насколько только был способен, я понял, что эти советы могут быть полезны и другим. Так что, будь это унаследованная кодовая база, в которой определенные решения по дизайну уже были приняты до вас, или вы просто хотите лучше понимать традиционные примитивы синхронизации в Go — эта статья может быть для вас.
Читать дальше →
Total votes 32: ↑28 and ↓4+24
Comments22

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

Reading time4 min
Views46K


Привет, Хабр!

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

Мнение автора может не отражать позицию компании и других коллег.

Знакомьтесь — Александр Ефимов, Configuration manager/DevOps

Есть у меня знакомый, который, будучи первоклассным сисадмином, мечтает стать программистом. По его словам, хочет творить, а не использовать уже существующий… не очень хороший софт. В чем-то я его понимаю: «чистое» творчество — безусловно, круто. Но давайте разберемся, что и как происходит на самом деле.
Читать дальше →
Total votes 61: ↑45 and ↓16+29
Comments57

Планировщик Go

Reading time6 min
Views22K
Преамбула от переводчика: Это достаточно вольный перевод пусть и не самой свежей (июнь 2013 года), но доходчивой публикации о новом планировщике параллельных ветвей исполнения в Go. Достоинством этой заметки есть то, что в ней совершенно просто, «на пальцах» описывается новый механизм планирования для ознакомления. Тем же, кого не устраивает объяснение «на пальцах» и кто хотел бы обстоятельного изложения, рекомендую Scheduling Multithreaded Computations by Work Stealing — 29 страниц изложения со строгим и сложным математическим аппаратом для анализа производительности, 48 позиций библиографии.

Введение


Одной из наибольших новинок в Go 1.1 стал новый диспетчер, спроектированный Дмитрием Вьюковым (Dmitry Vyukov). Новый планировщик дал настолько разительное увеличение производительности для параллельных программ без изменений кода, что я решил написать что-нибудь об этом.
Читать дальше →
Total votes 26: ↑20 and ↓6+14
Comments11

Изучаем net/context в Go

Reading time11 min
Views62K
Не секрет, что основная ниша использования Go это сетевые сервисы: всевозможные серверы, бекенды, микросервисы, распределенные базы данных и файловые хранилища. Такой класс программ очень активно использует сетевые запросы, весь необходимый функционал для которых есть в стандартной библиотеке, но один аспект разработки сетевых архитектур остается для многих темным пятном — контексты запросов. В этой статье я хочу рассмотреть этот аспект повнимательней и показать, какой это мощный и важный инструмент.


Читать дальше →
Total votes 26: ↑23 and ↓3+20
Comments8

Балансировка 70 тысяч запросов в секунду на HighLoad++

Reading time5 min
Views39K

Библиотека докладов


Это не просто статья — это целая библиотека докладов про внутреннее устройство тех или иных крупных и высоконагруженных проектов. Все эти доклады звучали на конференциях HighLoad++ и РИТ++ за последние несколько лет.


Читать дальше →
Total votes 43: ↑38 and ↓5+33
Comments11

Попытка реализации универсального парсера интернет магазинов с помощью SlimerJS

Reading time5 min
Views20K
Хочу представить пример шаблонного парсера интернет-магазина. Пример ни как не претендует на звание универсального инструмента для получения структурированных данных с интернет магазина, но возможно подойдет для некоторых шаблонных интернет магазинов коих в интернете очень много.
парсинг интернет магазина
В качестве инструмента для парсинга сайта я использую SlimerJS.
Читать дальше →
Total votes 10: ↑8 and ↓2+6
Comments38

Information

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