Pull to refresh
@svr_91read⁠-⁠only

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

Send message

ZeroMQ: сокеты по-новому

Reading time7 min
Views80K
В любом среднем или крупном приложении, будь оно desktop или web, для бизнеса или для личного пользования, программисту необходимо решить важную архитектурную задачу — как будут общаться между собой потоки, процессы, модули, ноды, кластера, и прочие части эко-системы его приложения.

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

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

ZeroMQ предлагает разработчику некий высокий уровень абстракции при работе с «сокетами». Библиотека берет на себя часть забот по буферизации данных, обслуживанию очередей, установлению и восстановлению соединений, и прочие вещи. Вместо того, чтобы заниматься такими глупостями, вы можете сосредоточиться на главном — архитектуре и логике приложения.

Однако, в этом мире бесплатный сыр только в мышеловке. Поэтому я постарался по мере сил и опыта выяснить, чем придется поплатиться за удобство, какие я нашел плюсы и минусы при применении данной библиотеки.
Читать дальше →
Total votes 15: ↑13 and ↓2+11
Comments17

Корреляционный анализ или Почему существуют странные корреляции

Reading time3 min
Views22K
На данный опус меня навела публикация «Деньги, товар и немного статистики. Часть вторая», в которой автор исследовал зависимости между ценами на различные товары. Несколько смутило то, что несмотря на мастерское обращение с MatLab'ом, автор ни разу не упомянул об уровне значимости полученных корреляций. Ведь, связь между двумя величинами может и существовать, но если она статистически не значима, говорить о ней мы можем лишь в контексте рассуждений и домыслов.

Пощупать данные «руками» долго не получалось, но вот выдался свободный час, и я, вооружившись R, двинулся в путь.
Читать дальше →
Total votes 21: ↑19 and ↓2+17
Comments16

Интервью Скотта Мейерса в Яндексе. О настоящем и будущем C++

Reading time18 min
Views60K
Скотт Мейерс — один из самых известных и признанных экспертов по C++, автор серии книг «Эффективное использование C++», которые читал почти каждый профессиональный разработчик на C++ и которые оказали заметное влияние на всю экосистему и качество использование языка.

Лично я стал почти его фанатом ещё студентом, когда в начале 2000-х читал статьи Скотта, лежащие в основе его книг (сами книги на тот момент в России ещё не были переведены, а на английские с Амазона у меня, как бедного студента, денег не было).

Поэтому, когда он некоторое время назад приехал в Яндекс, чтобы провести тренинг для наших разработчиков, я не мог не воспользоваться этим шансом, чтобы поговорить с ним. Разговор получился о том, каким он видит будущее C++ и программирования вообще, как отличаются разработчики в разных странах и в разных индустриях, и о нём самом.



Полные тексты оригинала и перевода интервью
Total votes 99: ↑94 and ↓5+89
Comments43

Вирусы. Вирусы? Вирусы! Часть 2

Reading time30 min
Views87K


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

Возможно, где-то есть супер-программист, который действительно написал такой код, и именно поэтому мы про него ничего не знаем. Мне не очень в это верится, и даже кажется, что математики, занимающиеся математическим обоснованием работы вычислительных систем, могли бы доказать, что не существует такого определенного алгоритма полиморфизма, результат работы которого нельзя было бы стопроцентно детектировать при помощи другого определенного алгоритма. Но мы — люди простые, нам просто интересна идея кода, который сам себя изменяет, а в свете «алгоритм против алгоритма», рассмотрение противостояния методов сокрытия исполняемого кода методам детектирования для программиста должно быть весьма интересным.
Читать дальше →
Total votes 77: ↑71 and ↓6+65
Comments41

Часть 2. Сколько мегабит/с можно пропустить через зрительный нерв и какое разрешение у сетчатки? Немного теории

Reading time13 min
Views395K


Другие публикации из этой серии


Часть 1. Unboxing VisuMax — фемто-лазера для коррекции зрения
Часть 3. Знакомьтесь — лазер по имени Amaris. Переезды и первое пробуждение VisuMax
Часть 4.1 Возвращаем зрение. От очков до эксимерного лазера
Часть 4.2 Возвращаем зрение. От очков до эксимерного лазера

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

Я постараюсь рассмотреть человеческое зрение через призму IT. Если кому-то не слишком интересно читать часть, посвященную биологическим аспектам зрения — ничего страшного. Просто пропустите разделы, начиная с оптической системы глаза, и сразу переходите к традиционному конкурсу от наших девушек. Однако, я все же рекомендовал бы ознакомиться с этим материалом, чтобы лучше понять следующую статью, в которой мы будем рассматривать LASIK, Femto-LASIK, ReLEx SMILE и другие методы лазерной офтальмохирургии.

Есть настроение разобраться, что именно говорят эти непонятные люди в белых халатах, задумчиво глядя на результаты вашего обследования? Вы хотите узнать немного нового об уникальном природном даре — зрении? Тогда добро пожаловать под habracut. Как обычно — много иллюстраций и трафика (≈5 MB).
Читать дальше →
Total votes 267: ↑260 and ↓7+253
Comments426

Световые секунды, годы и столетия: как измеряют огромные расстояния

Reading time3 min
Views15K


Глядя на небо, мы видим плоскую двухмерную картинку. Как же тогда астрономы измеряют расстояния от Земли до звёзд и галактик? Юань-Сен Тинг объясняет, как тригонометрический параллакс, стандартные свечи и многое другое помогают нам определить расстояние до объектов, расположенных в нескольких миллиардах световых лет от нас.
Читать дальше →
Total votes 52: ↑46 and ↓6+40
Comments17

Закон Бенфорда и распределения под него попадающие

Reading time6 min
Views52K

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


Здесь N – основание системы счисления, должно быть больше 2, далее будем рассматривать 10.
Для строгих математиков это правило формулируется так: существуют такие случайные величины, для которых распределение вероятностей дробной части логарифма по любому основанию большему 1 сходится к равномерному на отрезке [0; 1] распределению. Далее я постараюсь писать как можно популярнее и подробнее, укажу примеры, ограничения, применение и случайные величины, для которых закон применим.
Подробности
Total votes 63: ↑58 and ↓5+53
Comments34

Итоги Russian AI Cup 2014

Reading time3 min
Views15K


Под звуки фанфар мы торжественно объявляем о завершении ежегодного чемпионата Russian AI Cup за 2014 год. Последние полтора месяца были очень трудными и напряжёнными как для участников, так и для организаторов мероприятия. Однако мы всё же надеемся, что вы не только получили массу удовольствия и хороших впечатлений, но и улучшили свои навыки программирования, научились чему-то новому.
Читать дальше →
Total votes 35: ↑32 and ↓3+29
Comments17

Печатаем OSM (Часть 1)

Reading time9 min
Views32K
Представьте себе ситуацию: неподалеку от вас случилось землетрясение, наводнение, извержение вулкана. Вы — участник OpenStreetMap, естественно, написали об этом на форуме. Следующие полдня и ночь вы вместе с другими осмерами провели за рисованием домиков, простановкой адресов, разметкой зоны разрушений и в итоге утром у вас есть подробная электронная карта района. Через полчаса за вами заедет друг и вы вместе собираетесь отвезти теплые вещи и воду пострадавшим. Как за эти полчаса — час распечатать карту, и зачем вообще пострадавшим могут понадобиться карты,

читаем под катом.
Total votes 48: ↑47 and ↓1+46
Comments22

Еще раз про IP-адреса, маски подсетей и вообще

Reading time7 min
Views1.5M
Чуточку ликбеза. Навеяно предшествующими копипастами разной чепухи на данную тему. Уж простите, носинг персонал.

IP-адрес (v4) состоит из 32-бит. Любой уважающий себя админ, да и вообще айтишник (про сетевых инженеров молчу) должен уметь, будучи разбуженным среди ночи или находясь в состоянии сильного алкогольного опьянения, правильно отвечать на вопрос «из скольки бит состоит IP-адрес». Желательно вообще-то и про IPv6 тоже: 128 бит.

Обстоятельство первое. Всего теоретически IPv4-адресов может быть:
232 = 210*210*210*22 = 1024*1024*1024*4 ≈ 1000*1000*1000*4 = 4 млрд.
Ниже мы увидим, что довольно много из них «съедается» под всякую фигню.


Записывают IPv4-адрес, думаю, все знают, как. Четыре октета (то же, что байта, но если вы хотите блеснуть, то говорите «октет» — сразу сойдете за своего) в десятичном представлении без начальных нулей, разделенные точками: «192.168.11.10».

В заголовке IP-пакета есть поля source IP и destination IP: адреса источника (кто посылает) и назначения (кому). Как на почтовом конверте. Внутри пакетов у IP-адресов нет никаких масок. Разделителей между октетами тоже нет. Просто 32-бита на адрес назначения и еще 32 на адрес источника.
Читать дальше →
Total votes 286: ↑261 and ↓25+236
Comments204

Закон Шнайера

Reading time4 min
Views48K
image

В 1998 году известный американский криптограф Брюс Шнайер написал:
Любой, начиная с самого бестолкового любителя и заканчивая лучшим криптографом, может создать алгоритм, который он сам не в состоянии взломать.

Переформулировка этой цитаты, предложенная журналистом Кори Доктороу в 2004 году, стала известна как Закон Шнайера:
Каждый человек может изобрести систему безопасности, которую он был бы не в силах взломать.

Очень хорошей иллюстрацией к закону Шнайера, на мой взгляд, являются попытки усилить алгоритм шифрования DES.
Читать дальше →
Total votes 75: ↑70 and ↓5+65
Comments12

Анализируем странные корреляции

Reading time2 min
Views77K


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

Заинтересованных прошу под кат.
Читать дальше →
Total votes 74: ↑66 and ↓8+58
Comments32

Суммирование расходящихся рядов методами Абеля, Бореля, Чезаро и Дирихле

Reading time7 min
Views51K

Перевод поста Давендра Кападия (Devendra Kapadia) "The ABCD of Divergent Series."
Выражаю благодарность за помощь в переводе Андрею Дудину.


Какова сумма всех натуральных чисел? Интуиция подсказывает, что ответ — бесконечность. В математическом анализе сумма натуральных чисел является простым примером расходящегося ряда. Тем не менее, математики и физики сочли полезным придать дробные, отрицательные и даже нулевые значения суммам таких рядов. Цель моей статьи — желание отодвинуть завесу тайны, окружающую результаты суммирования расходящихся рядов. В частности, я буду использовать функцию Sum (функция поиска частичных сумм, рядов и т. п. в Mathematica), а так же другие функции в Wolfram Language для того, чтобы объяснить в каком смысле стоит рассматривать следующие утверждения:

Summirovanie-rashodjashhihsja-rjadov_1.gif


Важность обозначений формул буквами A, B, C, и D вскоре станет вам понятна.
Читать дальше →
Total votes 60: ↑56 and ↓4+52
Comments30

Две красивые задачи по алгоритмам

Reading time4 min
Views68K
На этой неделе я начал читать бакалаврам Академического университета базовый курс по алгоритмам. Начинал я совсем с основ, и чтобы тем, кто с базовыми алгоритмами уже знаком, было чем заняться, я в начале пары сформулировал две, наверное, самые свои любимые задачки по алгоритмам. Давайте и с вами ими поделюсь. Решение одной из них даже под катом подробно расскажу. Но не отказывайте себе в удовольствии и не заглядывайте сразу под кат, а попытайтесь решить задачи самостоятельно. Обещаю, что у обеих задач есть достаточно простые решения, не подразумевающие никаких специальных знаний по алгоритмам. Это, конечно, не означает, что эти решения просто найти, но после пары один из студентов подошёл и рассказал правильное решение первой задачи. =) Если же вам интересно посмотреть на начало курса или порешать больше разных задач — приходите к нам на (бесплатный) онлайн-курс, который начнётся 15 сентября.

Задача 1. Дан массив A длины (n+1), содержащий натуральные числа от 1 до n. Найти любой повторяющийся элемент за время O(n), не изменяя массив и не используя дополнительной памяти.


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

Задача 2. Дана матрица nxn, содержащая попарно различные натуральные числа. Требуется найти в ней локальный минимум за время O(n).


Локальным минимумом матрицы называется элемент, который меньше всех своих четырёх соседей (или трёх, если этот элемент лежит на границе; или двух, если это угловой элемент). Обратите внимание, что от нас требуется линейное по n время, хотя в матрице квадратичное по n число элементов. Поэтому мы предполагаем, что матрица уже считана в память. И нам нужно найти в ней локальный минимум, обратившись лишь к линейному количеству её ячеек.

Под катом — решение первой задачи. Ещё раз призываю вас заглядывать под кат только после того, как порешаете задачу. По второй задаче могу какую-нибудь подсказку сказать.
Читать дальше →
Total votes 54: ↑52 and ↓2+50
Comments82

Начался третий ежегодный чемпионат Russian AI Cup

Reading time3 min
Views13K


Доброго дня и приятного понедельника всем! Сегодня начало не только рабочей недели, но и чемпионата по программированию искусственного интеллекта Russian AI Cup, организатором которого является Mail.Ru Group. Он проходит ежегодно, начиная с 2012 года. В этот раз перед участниками поставлена задача по написанию алгоритма для команды хоккеистов. Принять участие могут все желающие, любых возрастов и квалификаций. Главное — иметь базовые навыки программирования. Список возможных языков программирования ограничен, вы можете выбрать один из следующих вариантов: C++, Java, C#, Python, Ruby или Pascal. Кстати, в прошлом году предпочтения участников распределились таким образом: 36% выбрали C++, 25% — Java, 21% — C#.
Читать дальше →
Total votes 45: ↑38 and ↓7+31
Comments30

Релиз Android-x86 4.4: ставим Android на ПК без проблем

Reading time1 min
Views305K
android-x86_02

Сейчас Android OS — одна из наиболее популярных операционных систем для мобильных устройств, самой разной конфигурации. Тем не менее, некоторые разработчики достаточно давно работают и над тем, чтобы Android без проблем можно было установить на ПК, ноутбук либо планшет с процессором Intel/AMD.

Есть несколько способов проделать подобную операцию, и один из наиболее беспроблемных — работа с новым релизом Android-x86. Это модицифированная версия Android Open Source Project (AOSP), установке Android на ноутбуках/десктопных ПК с чипами AMD и Intel.

Читать дальше →
Total votes 80: ↑66 and ↓14+52
Comments65

Математика, ШТА?!!1

Reading time7 min
Views57K
В начале 2012 года по интернету гуляла видеозапись доклада Гарри Бернхардта на CodeMash под названием «WAT». На хабре были даже две хабрастатьи об этом докладе: раз, два. В этом выступлении рассказывалось про некоторые тонкости Ruby и JavaScript, которые кажутся нелогичными и вызывают реакцию: «WAT?».

В этой же хабрастатье я собрал десять примеров математических рассуждений, которые наоборот, на первый взгляд кажутся логичными, но видя полученный результат, также хочется задастся вопросом «ШТА?!!».

Итак, сможете определить где подвох?



Читать дальше →
Total votes 149: ↑121 and ↓28+93
Comments48

Дюжина логических задач с собеседований

Reading time2 min
Views319K
image

Не знаю, как у вас, но у меня любимая часть интервью — логические задачи.
Довелось пройти немало собеседований на вакансию разработчика, поэтому набралась небольшая коллекция.
Спешу поделиться с вами!

Некоторые задачи проще и широкоизвестные, другие заставляют хорошенько задуматься.
Ответы пока что публиковать не буду, надеюсь, вы сами сможете всё решить.
Предлагаю размять свой мозг…
Читать дальше →
Total votes 71: ↑55 and ↓16+39
Comments244

Вирусы. Вирусы? Вирусы! Часть 1

Reading time15 min
Views128K


Поговорим о компьютерных вирусах? Нет, не о том, что вчера поймал ваш антивирус. Не о том, что вы скачали под видом инсталлятора очередного Photoshop. Не о rootkit-e, который стоит на вашем сервере, маскируясь под системный процесс. Не о поисковых барах, downloader-ах и другой малвари. Не о коде, который делает плохие вещи от вашего имени и хочет ваши деньги. Нет, всё это коммерция, никакой романтики…

Мы поговорим о компьютерных вирусах, как о коде, который способен порождать собственные копии, изменяясь от поколения к поколению. Которому, как и его биологическим собратьям, необходим файл-носитель, работоспособный, и остающийся работоспособным, чтобы давать жизнь новым поколениям вируса. Которому для размножения необходима благодатная среда, много вкусных исполняемых файлов, а также, много глупых и активных пользователей, чтобы они их запускали. Так что название «вирус» не просто красивый ярлычок для описания вредоносной программы, компьютерный вирус, в его классическом понимании, является сущностью весьма близкой к его биологическому аналогу. Человечество, как это не раз доказывалось, способно создавать весьма изощренные решения, особенно когда дело касается создания чего-нибудь наносящего вред другим людям.
Читать дальше →
Total votes 121: ↑97 and ↓24+73
Comments53

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

Reading time10 min
Views39K


Итак, вводная: обычные викторины скучны.

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

Давайте сделаем свою викторину, которая использует потребности основных типов игроков:
  • «Киллеров» — тех, кто охотится за сложными вопросами и получает от этого удовольствие.
  • «Манчкинов» — этот подтип игроков нуждается в признании крутости социальными путями. Очки важнее вопросов.
  • «Ачиверов» — этим парням важно перебрать все квесты игры. В викторине они хотят перебрать все вопросы и узнать на них ответы из любопытства. Для них — специальная категория вопросов.
  • «Приключенцев» — тех, кто ищет социальных взаимодействий, и, скорее всего, не умеет отвечать на вопросы. Для них мы приготовим блеф.


Давайте поиграем


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

Если масса человека на Земле равна 100 кг, какова будет его масса на Юпитере?
100 кг. Если вы не понимаете, почему, стоит повторить школьный курс физики.

На какое наибольшее количество частей поделят круг 4 прямые линии?
На 11 фрагментов

Какова вероятность того, что в группе из 60 человек у двух из них совпадут число и месяц рождения (в процентах)?
~99% (замечательный пример того, как неинтуитивно воспринимается теория вероятности)

В каком году появился первый компьютерный вирус?
Рабочие примеры программ-вирусов появились в 1961 году, через 10 лет после теории о принципах их работы. Первые вирусы не были зловредами, а просто доказывали свою возможность размножаться внутри системы — McIlroy et al. Darwin, a Game of Survival of the Fittest among Programs. Первые же ПК-совместимые вирусы появились 1981 для платформы Apple II
Читать дальше →
Total votes 85: ↑67 and ↓18+49
Comments75

Information

Rating
Does not participate
Registered
Activity