Первая встреча MoscowPython 2016-го года состоится в гостях у компании Rambler&Co 9-го февраля.
Рубрика «algorithms» - 8
Moscow Python Meetup №32
2016-02-04 в 12:19, admin, рубрики: aiohttp, algorithms, Conference, data, ipython, jupyter, meetup, moscow, pythonПараллельные алгоритмы для обработки BigData: подводные камни и непростые решения
2016-01-20 в 7:00, admin, рубрики: algorithms, big data, natural language processing, spark, Алгоритмы, Блог компании 1С-БитриксЭта публикация написана по материалам выступления Александра Сербула на осенней конференции BigData Conference.
Большие данные — тема модная и востребованная. Но многих по-прежнему отпугивает избыток теоретических рассуждений и некоторый недостаток практических рекомендаций. В этом посте я хочу отчасти заполнить этот пробел и рассказать об использовании параллельных алгоритмов для обработки больших данных на примере кластеризации товарного каталога из 10 млн позиций.
Читать полностью »
Проблемы при использовании Math.random()
2015-12-29 в 9:53, admin, рубрики: algorithms, internals, javascript, V8, Алгоритмы, Блог компании Mail.Ru Group, криптография, разработка 
В английском есть такая аббревиатура — TIFU. Привести здесь её точное значение мы не можем, но вы без труда найдёте его в Сети. А после «литературной обработки» TIFU можно перевести как «сегодня я всё испортил». В контексте этого поста данная фраза относится к использованию функции Math.random() в JavaScript-движке V8. Хотя случилось это не сегодня, а пару лет назад. Да и дров я наломал не по своей вине, корень зла таится в самой этой функции.
«Многие генераторы случайных чисел, используемые сегодня, работают не слишком хорошо. Разработчики обычно стараются не вникать, как устроены такие подпрограммы. И часто бывает так, что какой-то старый, неудовлетворительно работающий метод раз за разом слепо перенимается многими программистами, которые зачастую просто не знают о присущих ему недостатках.»
Дональд Кнут, «Искусство программирования», том 2.
Надеюсь, что к концу этого поста вы согласитесь с двумя утверждениями:
- Мы были идиотами, поскольку использовали генератор псевдослучайных чисел в V8, не понимая его ограничений. И если очень лень, то безопаснее использовать криптографически стойкие генераторы псевдослучайных чисел.
- В V8 необходима новая реализация Math.random(). Работу текущего алгоритма, кочующего от одного программиста к другому, нельзя считать удовлетворительной из-за слабой, неочевидной деградации, часто встречающейся в реальных проектах.
Хочу подчеркнуть, что сам движок V8 — замечательный продукт и его создатели очень талантливы. Я ни в коей мере не обвиняю их. Просто эта ситуация иллюстрирует, насколько сильно влияют на процесс разработки даже небольшие нюансы.
Читать полностью »
Чисто функциональные структуры данных
2014-01-13 в 16:24, admin, рубрики: algorithms, data structures, functional programming, scala, Алгоритмы, функциональное программирование, метки: algorithms, data structures, functional programming, scala 
Признаюсь. Я не очень любил курс структур данных и алгоритмов в университете. Все эти стеки, очереди, кучи, деревья, графы (будь они не ладны) и прочие “остроумные” названия непонятных и сложных структур данных ни как не хотели закрепляться в моей голове. Как истинный “прагматик”, я уже на втором — третьем курсе свято верил в стандартную библиотеку классов и молился на дарованные нам (простым смертным) коллекции и контейнеры, бережно реализованные отцами и благородными донами CS. Казалось, все что можно было придумать — уже давно придумано и реализовано.
Все изменилось примерно год назад, когда я узнал, что есть другой мир. Мир отличный от нашего с вами. Более чистый и предсказуемый мир. Мир без побочных эффектов, мутаций, массивов и деструктивных апдейтов (переприсваиваний в переменную). Мир, где всем правит мудрейшая королева персистетность и ее прекрасные сестры — функция и рекурсия. Я говорю о чисто функциональном мире, где гармонично существуют, или даже живут, проекции почти всех известных нам структур данных.
И сейчас, я хочу показать вам небольшую частицу этого мира. Через замочную скважину, мы на секунду заглянем в этот удивительный мир, чтобы рассмотреть одного из наиболее ярких его обитателей — функциональное красно-черное дерево (КЧД).
Читать полностью »
Улучшение степени сжатия применяемого в UPX
2014-01-08 в 10:14, admin, рубрики: algorithms, reverse engineering, Алгоритмы, алгоритмы сжатия, Программирование, системное программирование От переводчика:
Основная цель перевода это попытка помочь тем программистам кто пишет статические распаковщики исполняемых файлов. Другими словами эта информация нацелена на практикующих reverse-engineer-ов. Под статичеческим распаковщиком понимаю программу которая поданный на вход упакованный или запротекченный исполняемый файл анализирует и создает на выходе файл, как будто бы тот создан каким-либо компилятором. Особенностью такого типа распаковщиков в том что он работает исключительно на знании структуры защиты или упаковки файла, т.е. без применения «сброса дампа», «востановления импорта» и др. типов «читерства».
При изучении упакованных файлов к примеру с помощью UPX, RlPack и др. часто встречаешься с кодом где делаются некоторые магические действиями с маш. инструкциями переходов байты 0xE8, 0xE9 и др. Этой магией является «фильтрация» и она направлена на улучшение степени сжатия исполняемого файла.
Достаточно часто иметь точный код фильтрации совсем необязательно. Достаточно понаблюдать на то как меняются данные. А иногда и вовсе невозможно за разумный срок получить этот кусок кода с фильтрацией, либо очень трудоемко, к примеру при работе с полиморфиками или с файлами где применяется виртуализация кода.
Ниже следует первод небольшого но крайне полезного текстового файла "%UPX_SOURCE%docfilter.txt". В этом пути под UPX_SOURCE подразумевается файловый путь до исходных кодов к UPX версии 3.91. Все что описано про UPX также применимо и к другим упаковщикам.
Алгоритм распределения данных в кластере серверов в dCache
2013-10-14 в 21:02, admin, рубрики: algorithms, big data, java, Алгоритмы, метки: algorithms, big data, javaВ продолжение статьи о dCache расскажу о некоторых деталях внутренней реализации.
Одна из важных задач распределённых систем — как распределить нагрузку по имеющимся узлам. Для распределённого хранилища эта задача особо важна, так как решение принятое на стадии записи влияет на то, как данные будут прочитаны.
Задачка из реальной жизни: Как восстановить дерево процессов в Linux
2013-09-26 в 9:57, admin, рубрики: algorithms, CRIU, linux, system programming, Алгоритмы, олимпиадное программирование, олимпиадные задачи, системное программирование, Спортивное программирование, метки: algorithms, CRIU, linux, system programming, олимпиадное программирование, олимпиадные задачиМы разрабатываем проект CRIU (Checkpoint/Restore in Userspace) и у нас возникла достаточно интересная задача о том, как восстановить оригинальное дерево процессов. Я предлагаю вам попытаться решить ее.
Задача
CRIU — это утилита, которая позволяет сохранить состояние процессов на диск и постановить их позднее на этой или на любой другой машине. Одной из подзадач восстановления является нахождение последовательности действий для того, чтобы восстановить дерево процессов. Входные данные содержат набор параметров для каждого процесса: уникальный идентификатор (PID), ссылку на родителя (PPID), идентификатор сессии (SID).
EPAM IT Share #3: Поиск схожих изображений. Define Cloud Computing
2012-12-10 в 16:44, admin, рубрики: algorithms, cloud computing, EPAM, Блог компании EPAM Systems Ukraine, поиск изображений, метки: algorithms, cloud computing, epam, поиск изображений Привет подписчикам корпоративного хабраблога EPAM Systems Ukraine! 
В четверг, 6 декабря, прошел третий EPAM IT Share в Харькове, во время которого Вячеслав Колбасин, Алексей Трегубов lemieux66, Егор Сопов и Андрей Кожокару korjik поделились знаниями об алгортимах поиска схожих изображений и рассказили о ключевых определениях облачных вычислений.
В этом небольшом отчете вы найдете видеоматериалы встречи и файлы презентации.
Читать полностью »








