Как стать автором
Обновить
44
0
Arseniy Seroka @JagaJaga

Chief executive officer @ Serokell

Отправить сообщение

«Задачка-то сошлась с ответом!»

Время на прочтение4 мин
Количество просмотров34K


Я очень часто по работе слышу вопрос, задаваемый из, большей частью, академической среды, ввиду огромного количества выполняемых вычислений именно там: «Почему наши результаты разные от запуска к запуску одного и того же приложения? Мы же ничего не меняем в нем». Стоит отметить, разговор про это уже был, но лишь частично отвечающий на вопрос. Попробую рассказать про эту проблему ещё чуть-чуть.
Читать дальше →
Всего голосов 56: ↑52 и ↓4+48
Комментарии43

Object oriented C

Время на прочтение4 мин
Количество просмотров30K
Вам дали задание написать программу на С, а вы уже забыли как может работать программа, в тексте которой нет ни одного слова class или virtual? Или может быть вы влюблены в простоту и строгость ANSI C, но иногда вам не хватает объектно-ориентированных свойств языков более высокого уровня? Или просто интересно взглянуть на старый добрый С с немного другой стороны? В любом случае в данной статье я покажу несколько простых приемов, с помощью которых на C вполне можно думать и писать объекто-ориентированно.
Читать дальше →
Всего голосов 59: ↑51 и ↓8+43
Комментарии35

Быстрая, экономная, устойчивая…

Время на прочтение10 мин
Количество просмотров60K

Если вам понадобится алгоритм сортировки массива, который:
  • Работал бы гарантированно за O(N*log(N)) операций (обменов и сравнений);
  • Требовал бы O(1) дополнительной памяти;
  • Был бы устойчивым (то есть, не менял порядок элементов с одинаковыми ключами)

то вам, скорее всего, предложат ограничиться любыми двумя из этих трёх пунктов. И, в зависимости от вашего выбора, вы получите, например, либо сортировку слиянием (требует O(N) дополнительной памяти), либо пирамидальную сортировку (неустойчив), либо сортировку пузырьком (работает за O(N2)). Если вы ослабите требование на память до O(log(N)) («на рекурсию»), то для вас найдётся алгоритм со сложностью O(N*(log(N)2) — довольно малоизвестный, хотя именно его версия используется в реализации метода std::stable_sort().

На вопрос, можно ли добиться выполнения одновременно всех трёх условий, большинство скажет «вряд ли». Википедия о таких алгоритмах не знает. Среди программистов ходят слухи, что вроде бы, что-то такое существует. Некоторые говорят, что есть «устойчивая быстрая сортировка» — но у той реализации, которую я видел, сложность была всё те же O(N*(log(N)2) (по таймеру). И только в одном обсуждении на StackOverflow дали ссылку на статью B-C. Huang и M. A. Langston, Fast Stable Merging and Sorting in Constant Extra Space (1989-1992), в которой описан алгоритм со всеми тремя свойствами.

Так что же это за алгоритм?
Всего голосов 155: ↑150 и ↓5+145
Комментарии29

Математический фокус для MP3, JPEG и Гомера Симпсона

Время на прочтение6 мин
Количество просмотров109K
Девять лет назад я посещал курс физики в колледже, и мой профессор рассказал одну вещь, которая поразила меня. Я думаю, не будет преувеличением сказать, что это одно из наиболее широко используемых математических открытий — от оптики до квантовой физики, радиоастрономии, сжатия MP3 и JPEG, рентгеновской кристаллографии, распознавания голоса и МРТ. Этот математический инструмент называется преобразование Фурье, в честь французского физика и математика 18-го века Жозефа Фурье. Им пользовались даже Джеймс Уотсон и Фрэнсис Крик, чтобы декодировать структуру двойной спирали ДНК из рентгенограмм, произведенных Розалиндой Франклин. (Крик был экспертом по преобразованиям Фурье, он в шутку назвал свою книгу «Преобразования Фурье для орнитологов», чтобы объяснить суть Уотсону, заядлому любителю птиц).
Читать дальше →
Всего голосов 159: ↑145 и ↓14+131
Комментарии35

Программируем под Pebble. Урок первый: Глупые часы

Время на прочтение7 мин
Количество просмотров54K
Когда мне привезли часы Pebble, я думал это просто умные часы. Ну, там смс на экранчике показать, время в двух поясах, поставить вместо цифровых — хипстерские аналоговые. И так далее.



Но оказывается, у часов есть довольно большое комьюнити, открытое API для создания своих приложений, среда онлайн-разработки — в общем, идеальная игрушка для скучающего разработчика.
Давайте напишем свои часы, с блекджеком и ... Ну ладно, пока просто часы
Всего голосов 47: ↑41 и ↓6+35
Комментарии42

Внутреннее устройство llst, часть 2 или Little Smalltalk + LLVM = ♥

Время на прочтение29 мин
Количество просмотров9.5K
Всем привет! Совместно с humbug, мы предлагаем вашему вниманию третью статью из цикла о Low Level Smalltalk (LLST). Надемся, что статья будет интересна не только любителям велосипедов необычных языков программирования, но и тем, кто интересуется такой замечательной вещью, как LLVM.

Напомню, что целью нашего проекта является создание собственной виртуальной машины, совместимой с Little Smalltalk на уровне байт-кодов. Ключевым отличием является гетерогенная архитектура, которая позволяет исполнять байт-коды как программно, так и компилировать их в низкоуровневые инструкции процессора посредством трансляции в IR код LLVM. Разумеется, второй способ позволяет достичь более высокой производительности и задействовать имеющиеся в нашем распоряжении вычислительные ресурсы оптимальным образом.

Однако, обо всем по порядку…
Читать дальше →
Всего голосов 36: ↑36 и ↓0+36
Комментарии12

Программируем императивно в Хаскеле, используя линзы

Время на прочтение9 мин
Количество просмотров22K
Хаскель получает много нелестных отзывов, потому что в нём нет встроенного инструментария для работы с изменениями и состояниями. Поэтому, если мы хотим испечь полный состояний яблочный пирог, нам необходимо для начала создать целую вселенную операторов для работы с состояниями. Однако за это уже заплачено с лихвой и это уже пройденный этап, и сейчас программисты на Хаскеле наслаждаются более элегантным, лаконичным и мощным императивным кодом, чем даже то, что вы можете найти в само-описывающих императивных языках. Впрочем, вы и сами сможете в этом убедится.

Линзы



Ваш билет к элегантному коду — это библиотека линз (lens).
Читать дальше →
Всего голосов 49: ↑47 и ↓2+45
Комментарии18

Асинхронность: назад в будущее

Время на прочтение22 мин
Количество просмотров113K

Асинхронность… Услышав это слово, у программистов начинают блестеть глаза, дыхание становится поверхностным, руки начинают трястись, голос — заикаться, мозг начинает рисовать многочисленные уровни абстракции… У менеджеров округляются глаза, звуки становятся нечленораздельными, руки сжимаются в кулаки, а голос переходит на обертона… Единственное, что их объединяет — это учащенный пульс. Только причины этого различны: программисты рвутся в бой, а менеджеры пытаются заглянуть в хрустальный шар и осознать риски, начинают судорожно придумывать причины увеличения сроков в разы… И уже потом, когда большая часть кода написана, программисты начинают осознавать и познавать всю горечь асинхронности, проводя бесконечные ночи в дебаггере, отчаянно пытаясь понять, что же все-таки происходит…

Именно такую картину рисует мое воспаленное воображение при слове “асинхронность”. Конечно, все это слишком эмоционально и не всегда правда. Ведь так?.. Возможны варианты. Некоторые скажут, что “при правильном подходе все будет работать хорошо”. Однако это можно сказать всегда и везде при всяком удобном и не удобном случае. Но лучше от этого не становится, баги не исправляются, а бессонница не проходит.

Так что же такое асинхронность? Почему она так привлекательна? А главное: что с ней не так?
Назад в будущее...
Всего голосов 130: ↑124 и ↓6+118
Комментарии42

Нескучные интегралы

Время на прочтение6 мин
Количество просмотров175K
Некоторые из вас, вероятно, видали на просторах сети эту задачку: какое число продолжает следующий ряд?

Предлагался такой очевидный правильный ответ:

Для тех, кому неочевидно, как он получен, предлагалось объяснение. Пусть (ну и 1 при x = 0, хотя неважно). Тогда каждый член ряда — это значение следующего интеграла в цепочке:

Пока всё идёт хорошо, но тут внезапно:

В принципе, этого достаточно, чтобы повеселить друзей-математиков, но мне захотелось узнать, как вообще считаются такие интегралы и почему получается такой смешной результат. Если кому-то ещё охота тряхнуть стариной и вспомнить матан с функаном, прошу читать дальше.
Читать дальше →
Всего голосов 263: ↑253 и ↓10+243
Комментарии62

QtCreator: Qt кросс-компиляция из linux 64 в linux 32, win32, win64 и Mac OS X; upx, usb, dmg, etc

Время на прочтение14 мин
Количество просмотров81K


Библиотека Qt позволяет делать действительно кроссплатформенные приложения. Единожды написанный код можно откомпилировать под многие операционные системы. Но проблема именно в слове «компилировать», т.к. подразумевается, что необходимо перезагрузиться под целевую систему, иметь в ней настроенную среду разработки, установленный и настроенный зоопарк библиотек. Спасает кросс-компиляция — компиляция, производящая исполняемый код для платформы, отличной от той, на которой исполняется.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+55
Комментарии24

Строим свой Gmail с куртизанками и преферансом

Время на прочтение7 мин
Количество просмотров204K

Вместо предисловия


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

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

Читать дальше →
Всего голосов 155: ↑135 и ↓20+115
Комментарии139

Простыми словами о преобразовании Фурье

Уровень сложностиСредний
Время на прочтение14 мин
Количество просмотров1.1M
Я полагаю что все в общих чертах знают о существовании такого замечательного математического инструмента как преобразование Фурье. Однако в ВУЗах его почему-то преподают настолько плохо, что понимают как это преобразование работает и как им правильно следует пользоваться сравнительно немного людей. Между тем математика данного преобразования на удивление красива, проста и изящна. Я предлагаю всем желающим узнать немного больше о преобразовании Фурье и близкой ему теме того как аналоговые сигналы удается эффективно превращать для вычислительной обработки в цифровые.

image (с) xkcd

Без использования сложных формул и матлаба я постараюсь ответить на следующие вопросы:
  • FT, DTF, DTFT — в чем отличия и как совершенно разные казалось бы формулы дают столь концептуально похожие результаты?
  • Как правильно интерпретировать результаты быстрого преобразования Фурье (FFT)
  • Что делать если дан сигнал из 179 сэмплов а БПФ требует на вход последовательность по длине равную степени двойки
  • Почему при попытке получить с помощью Фурье спектр синусоиды вместо ожидаемой одиночной “палки” на графике вылезает странная загогулина и что с этим можно сделать
  • Зачем перед АЦП и после ЦАП ставят аналоговые фильтры
  • Можно ли оцифровать АЦП сигнал с частотой выше половины частоты дискретизации (школьный ответ неверен, правильный ответ — можно)
  • Как по цифровой последовательности восстанавливают исходный сигнал


Я буду исходить из предположения что читатель понимает что такое интеграл, комплексное число (а так же его модуль и аргумент), свертка функций, плюс хотя бы “на пальцах” представляет себе что такое дельта-функция Дирака. Не знаете — не беда, прочитайте вышеприведенные ссылки. Под “произведением функций” в данном тексте я везде буду понимать “поточечное умножение”

Итак, приступим?
Всего голосов 203: ↑192 и ↓11+181
Комментарии188

Эпопея о WD My Book Live, или «девайс-конфетка» с «печеньками»

Время на прочтение18 мин
Количество просмотров236K
image

Привет %username%! В начале этого года мне наконец-то исполнился четвертак. Поняв, что я стал взрослым ребёнком и нуждаюсь во взрослых игрушках, купил себе WD My Book Live на 3Tb ёмкости, который в нашем счастливом семействе убил сразу N зайцев. Счастью моему не было предела. Девайс подкупил своей ценой, железом и наличием полноценного Linux на борту. Однако, как оказалось позже, Linux Debian оказался не очень уж и полноценным, достаточно кастрированным и, судя по отзывам рядовых владельцев, любителем окирпичиться. Однако, благодаря инженерам из WD, девайс достаточно легко поднимается из состояния кирпича до состояния работоспособного устройства (пруф1 и пруф2). Но согласитесь, времена хард ресета с пассатижами из хозмага за углом давно миновали. Всё-таки эпоха нано-полимеров и инноваций. А значит и девайс хочется более не убиваемым.

Я никак не являюсь линуксоидом и для меня Linux, по своей сути, тёмный лес! Поэтому, для начала, долго изучая интернеты, я запилил себе только mc и transmission, чего для первого раза мне хватило за глаза. А ещё я был поражён, как мне – человеку, впервые запустившему SSH — легко это удалось! Прошло полгода, я почитал форумы, посвящённые девайсу. Настал день “Д” и я, засучив рукава, принялся делать из своего девайса “конфетку”. И не простую, а “конфетку” с “печеньками”
Подробнее под катом...
Всего голосов 84: ↑74 и ↓10+64
Комментарии50

Robozzle

Время на прочтение2 мин
Количество просмотров21K
Хочу рассказать про игрушку для любителей «ненормального программирования», на которую я наткнулся случайно две недели назад. Я подсадил на неё весь наш офис и сам скрасил немало поездок в электричке.

Читать дальше →
Всего голосов 66: ↑58 и ↓8+50
Комментарии18

Шифрования сообщений вконтакте методом AES для браузеров Chrome и Firefox

Время на прочтение2 мин
Количество просмотров73K
image

После скандала с PRISM вопрос безопасности данных стал еще актуальней чем был, и даже если вы не секретный агент, то ваша личная переписка, должна соответствовать своему названию, и по умолчанию должна быть закрыта от доступа третьих лиц. Взяв это за аксиому это принцип, я занялся разработкой дополнений для браузеров для работы с популярной в странах СНГ социальной сетью вконтакте методом AES.
Читать дальше →
Всего голосов 80: ↑69 и ↓11+58
Комментарии132

Я построю свой почтовый сервер с Postfix и Dovecot

Время на прочтение20 мин
Количество просмотров308K
image

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

Мануал пошаговый, основывается на внутренней документации компании и затрагивает совершенно очевидные вопросы. Гуру могут не тратить время, ноу-хау здесь нет – руководство является сборной солянкой и публикуется только потому, что все найденные руководства по развёртыванию почтовика напоминали картинку о том, как рисовать сову.
Очень много текста
Всего голосов 78: ↑74 и ↓4+70
Комментарии65

Разбор регулярных выражений

Время на прочтение1 мин
Количество просмотров100K


Хочу просто поделиться недавно найденным сервисом для работы с регулярными выражениями. Да, это еще один сервис. Но у него есть особенность — он позволяет не только составлять регулярные выражения, но и помогает разбирать уже написанные — эдакий regexp-декомпилятор.
Сервис называется Regex101.

Читать дальше →
Всего голосов 99: ↑94 и ↓5+89
Комментарии53

PowerLoader 64-bit обновлен новыми LPE-эксплойтами

Время на прочтение5 мин
Количество просмотров7.1K
Несколько месяцев назад мы писали о PowerLoader. Этот вредоносный код использует интересный метод повышения привилегий в контексте explorer.exe. Исходные тексты PowerLoader, которые оказались доступными для общественности, используются и в других семействах вредоносных программ. Например, дропперы буткита Win32/Gapz основаны на этом коде PowerLoader. В августе мы обнаружили новую модификацию PowerLoader для 64-битных ОС (обнаруживается ESET как Win64/Vabushky.A). Эта модификация использует три эксплойта для поднятия своих привилегий в системе (Local Privelege Escalation): MS13-053 (CVE-2013-3660), MS12-041 (CVE-2012-1864), и MS12-042 (CVE-2012-0217). Использование таких эксплойтов ранее не наблюдалось в семплах PowerLoader или родственных ему семействах. Александр Матросов выполнил анализ этого вредоносного ПО.

Вредоносный код Win64/Vabushky является хорошим примером того, как быстро злоумышленники обновляют свои проекты с использованием исходных текстов Carberp. Два 64-битных эксплойта (CVE-2012-1864 и CVE-2012-0217) из нового PowerLoader основаны на исходных текстах Carberp. Стоит так же отметить, что код PowerLoader, который стал доступен для общественности в апреле 2013, спровоцировал новую волну распространения дропперов, основанных на нем.

Читать дальше →
Всего голосов 25: ↑24 и ↓1+23
Комментарии4

Вымогатель Win32/Nymaim – хроники обфускации

Время на прочтение5 мин
Количество просмотров17K
В прошлом месяце мы писали о кампании по распространению вредоносного ПО «Home Campaign». Злоумышленники на протяжении длительного времени компрометировали веб-серверы, работающие под управлением Apache Linux, используя при этом вредоносный модуль Apache известный как Darkeech (обнаруживается ESET как Linux/Chapro). Этот код использовался для перенаправления пользователей веб-сайтов на набор эксплойтов Blackhole Exploit Kit. В процессе анализа атаки выяснилось, что ее полезной нагрузкой было семейство вымогателей (ransomware) Win32/Nymaim. Данный анализ посвящен техническим особенностям этой вредоносной программы и способам ее установки на компьютеры пользователей.



Читать дальше →
Всего голосов 48: ↑47 и ↓1+46
Комментарии8

Отказываемся от шаблонных шаблонных параметров

Время на прочтение2 мин
Количество просмотров16K
Использовать шаблонные шаблонные параметры С++ довольно сложно. Хочу продемонстрировать силу boost::mpl и показать трюк, позволяющий описывать шаблоны, полностью отказавшись от шаблонных шаблонных параметров.
Продемонстрирую проблему. Есть класс, принимающий тип объекта и тип контейнера для этого объекта.
template <typename T, typename Container>
struct A
{
  typedef Container<T> type;
};

Так писать нельзя, вы должны использовать шаблонные шаблонные параметры, чтобы указать, что Container сам по себе является шаблоном.
Читать дальше →
Всего голосов 43: ↑40 и ↓3+37
Комментарии14

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность