Pull to refresh
2
0
Антон Давыдов @Fikys

User

Send message

Путешествие по Стеку. Часть 1

Reading time7 min
Views98K


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

Cuckoo – собственная автоматизированная лаборатория анализа вредоносных файлов

Reading time21 min
Views64K
image
Месяц назад портал на моей новой работе был взломан. Руководство задалось вопросом «Как?». В ходе недолгих поисков и анализу подключений к серверам, был найден ПК сотрудника, с которого устанавливалось подключение примерно в то самое время. Сотрудник ничего о взломе не знал, но в ходе беседы вспомнил один случай, ему незадолго до взлома пришёл документ от «сотрудника фирмы», который не открылся. Файл был в формате exe, с этого и началась вся история.
Читать дальше →

Линейный криптоанализ для чайников

Reading time7 min
Views80K
image

Привет, %username%!
Многим известно, что стандартом по умолчанию в области симметричного шифрования долгое время считался алгоритм DES. Первая успешная атака на этот неубиваемый алгоритм была опубликована в 1993 году, спустя 16 лет после принятия его в качестве стандарта. Метод, который автор назвал линейным криптоанализом, при наличии 247 пар открытых/зашифрованных текстов, позволяет вскрыть секретный ключ шифра DES за 243 операций.
Под катом я попытаюсь кратко изложить основные моменты этой атаки.
Читать дальше →

λ-исчисление. Часть первая: история и теория

Reading time6 min
Views164K
Идею, короткий план и ссылки на основные источники для этой статьи мне подал хабраюзер z6Dabrata, за что ему огромнейшее спасибо.

UPD: в текст внесены некоторые изменения с целью сделать его более понятным. Смысловая составляющая осталась прежней.

Вступление


Возможно, у этой системы найдутся приложения не только
в роли логического исчисления. (Алонзо Чёрч, 1932)


Вообще говоря, лямбда-исчисление не относится к предметам, которые «должен знать каждый уважающий себя программист». Это такая теоретическая штука, изучение которой необходимо, когда вы собираетесь заняться исследованием систем типов или хотите создать свой функциональный язык программирования. Тем не менее, если у вас есть желание разобраться в том, что лежит в основе Haskell, ML и им подобных, «сдвинуть точку сборки» на написание кода или просто расширить свой кругозор, то прошу под кат.
Читать дальше →

Книги о кибербезопасности: 5+ рекомендаций наших экспертов

Reading time5 min
Views100K
Недавно у меня состоялся показательный разговор с Алексеем Малановым, сотрудником «Лаборатории» и опытным исследователем вредоносных программ, о том, может ли, например, сотрудник отдела по связям с общественностью (=не технарь) стать вирусным аналитиком? Ответ был простой и сложный одновременно: основы программирования, архитектура процессоров, особенности операционных систем, сетевые протоколы… В общем, «купи книжку по Ассемблеру и приходи лет через пять».

А что, если подняться на уровень выше? От анализа конкретных экземпляров вредоносных программ (что само по себе непросто) перейти к комплексному исследованию компьютерных инцидентов? Этим у нас занимается подразделение Global Research and Analysis Team (GReaT). К ним я недавно обратился с похожим вопросом: какие книги они могут порекомендовать другим специалистам по компьютерной безопасности (имея в виду, что азы программирования и прочие базовые вещи уже освоены)? В результате получился список из пяти книг — а на самом деле из десяти :-), — с которым можно ознакомиться под катом.
Читать дальше →

Функторы, аппликативные функторы и монады в картинках

Reading time5 min
Views195K
Вот некое простое значение:


И мы знаем, как к нему можно применить функцию:


Элементарно. Так что теперь усложним задание — пусть наше значение имеет контекст. Пока что вы можете думать о контексте просто как о ящике, куда можно положить значение:


Теперь, когда вы примените функцию к этому значению, результаты вы будете получать разные — в зависимости от контекста. Это основная идея, на которой базируются функторы, аппликативные функторы, монады, стрелки и т.п. Тип данных Maybe определяет два связанных контекста:


data Maybe a = Nothing | Just a

Позже мы увидим разницу в поведении функции для Just a против Nothing. Но сначала поговорим о функторах!
Читать дальше →

Раскрываем возможности map в nginx

Reading time6 min
Views142K
map — мощная директива, которая может сделать ваши конфиги простыми и понятными.
Возможно, это самая недооцененная директива, из за того, что не все знают всех её возможностей.
Она в компактной форме помогает обрабатывать переменные, GET параметры, заголовки, куки и наборы бекендов (upstream).
Попробую раскрыть её возможности хабрапользователям.
Раскрыть возможности map

LinkMeUp. Выпуск №17. Недостатки TCP и новые протоколы транспортного уровня

Reading time2 min
Views11K
17-й выпуск подкаста Linkmeup посвящён глубокотехнической теме.
В гостях у нас Дмитрий Качан — аспирант СибГУТИ. Дмитрий в данный момент занимается разработкой транспортных протоколов, работающих на уровне приложений.
Поэтому сегодня мы говорим о недостатках TCP, почему сейчас он уже не может выполнять свою роль протокола с гарантированной доставкой в некоторых случаях.
Вы узнаете какие сейчас есть подходы к решению этой проблемы.

Новости выпуска

  1. Правительство хочет, чтобы данные россиян хранились в нашей стране (link).
  2. HP сделал свой сетевой симулятор доступным широкой общественности (link).
  3. В MIT разработали технологию управления трафиком датацентра, которая многократно уменьшает задержки и очереди (link).
  4. Плавный переход к теме гостя. Big Data на службе футбола (link).


Скачать файл подкаста.





Под катом вы можете найти список некоторых коммерческих решений и протоколов для эффективной передачи информации с гарантированной доставкой, а также сами исследования Дмитрия.
Читать дальше →

18 неожиданностей при чтении исходного кода jQuery

Reading time4 min
Views56K
Перевод статьи «18 Surprises From Reading jQuery's Source Code», David Aragon.

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

Быстрое веб-приложение — трепанация сети

Reading time10 min
Views33K
Психология — интересная и иногда полезная наука. Многочисленные исследования показывают, что задержка в отображении веб-страницы дольше 300 мс заставляет пользователя отвлечься от веб-ресурса и задуматься: «что за хрень?». Поэтому УСКОРИВ веб-проект до психологически невоспринимаемых значений, можно ПРОСТО удерживать пользователей дольше. И именно поэтому бизнес готов тратиться на скорость: $80М — чтобы уменьшить latenсy всего на 1 мс.



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

Автоматическая индексация файлов проекта

Reading time9 min
Views13K
Несмотря на то, что статей по теме «использование Vim в качестве IDE» достаточно много, результат меня не удовлетворял. Мне очень не хватало автоматической, прозрачной для пользователя (то есть меня) генерации тегов для всех файлов в проекте, причем файлы проекта совсем необязательно должны лежать в одной директории и ее поддиректориях, а формировать список файлов должно быть легко и приятно.

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

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

Rails 4 Engines. Разработка gem'а через mountable engine — читаем логи сервера

Reading time6 min
Views10K

Так уж случилось, что возникло непреодолимое желание написать свой Rails gem. Во-первых, академический интерес — такого еще не делал, во-вторых, назрела проблема, решение которой важно лично для меня и которое хотелось бы использовать в нескольких своих проектах.

На Хабре уже были статьи про создание gem'ов (раз два три)

Но на их основе создать полноценный gem нельзя — они сильно устарели и, как правило, представляют собой перевод скупой официальной документации. А главное, они в большей части описывают создание Readme и License файлов, а собственно функционал gem'a сводится к Hello World.

Проблема


Не знаю, как у кого, а вот у меня регулярно бывает ситуация — прикрутил новую фичу локально, проверил, вроде работает. Запускаешь cap deploy, смотришь на сервер, а там
«Sorry, but something went wrong.
If you are the application owner check the logs for more information.»

Ну а дальше — ssh к серверу, cd к папке приложения и раскопка логов. Что бы ни говорили поклонники vim и emacs, но пытаться найти что-то в логе с их помощью — то еще занятие. Проще уж запустить tailf и пытаться найти руками. Есть еще rmate, но у меня он как-то не прижился.

Идея


Написать gem, который будет выводить результаты команды tail в браузер по заданному пути. Желательно, чтобы была возможность смотреть все .log файлы в папке log/
Читать дальше →

Когда гаснет звезда: интервью с Джимом Вейрихом

Reading time10 min
Views13K
От переводчика: Джим Вейрих — легендарная личность в Ruby-сообществе. К сожалению, он, как и все мы, смертен. Не так давно он покинул нас. Этот перевод — дань уважения к этому человеку, который немного изменил мир.

Я наслышан о Джиме достаточно давно: ведь он — автор утилиты rake, ставшей фактически стандартом де-факто среди рубистов. К моей большой удаче, я был в числе слушателей его выступления на GoRuCo 2012, на котором было рассказано о продвинутых возможностях rake. Помню, как меня поразила та ловкость и легкость, с которой Джим говорил на сложные темы. Позже, в том же году на конференции RubyConf я наблюдал еще одно его замечательное выступление, в котором объяснялись некоторые базовые принципы Лямбда-исчисления. Джим не только доступно объяснил эту не самую простую тему, но также не потерял своих слушателей по дороге.

Думаю, теперь вы понимаете, почему я был так рад взять у Джима это интервью, ведь это уникальная возможность узнать о нем чуточку больше и чему-то научиться. Нам также удалось побеседовать о начале его пути в мире разработке, о его первых шагах в Руби, о функциональном программировании, модели потоков в Руби и даже о его фреймворке для тестов: RSpec-Given). Так что открывайте это интервью, не поленитесь узнать об одном из самых передовых и харизматичных разработчиков!


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

Облегчаем себе жизнь

Reading time4 min
Views7.2K
При разработке проектов используем БД PostgreSQL, благодаря ее открытости, бесплатности и довольно большого функционала. По принятой архитектуре, для таблиц создаем вьюшки (представления) и приложения работают уже с ними. Во многих случаях вьюшки один в один копируют таблицы, но каждую из них надо создавать и писать правила для обновления, удаления и вставки записи, что занимает время.
И вот в один из прекрасных дней, мне это надоело и я решил автоматизировать этот процесс. Вот так появилась следующая функция:
Читать дальше →

Простой мониторинг нагрузки на сервер в реальном времени с веб-интерфейсом

Reading time2 min
Views81K
Сегодня существует довольно много профессиональных инструментов для мониторинга состояния серверов с обилием настроек, плагинов, поддержкой сразу множества машин и т.д., это известные Nagios, Zabbix, Munin, Cacti и многие другие.


Но в этом посте речь пойдет об очень маленьком и простом, но от этого не менее полезном инструменте: инструменте для мониторинга Scout Realtime. Этот написанный на Ruby open source проект позиционируется разработчиками как современная замена консольной утилите top с выводом статистики использования диска, памяти, сети, CPU и запущенных процессов. Все это отображается в реальном времени с плавными графиками. Во время диагностики работы сервера, иногда полезно пару минут понаблюдать за показателями, и проследить их изменение во времени (в отличие от гирлянды мерцающих чисел в терминале, отображающих данные исключительно на текущий момент).
Читать дальше →

Дизайн и архитектура в ФП. Введение и Часть 1

Reading time11 min
Views28K

Введение


В мире функционального программирования есть один большой пробел, а именно почти не освещена тема высокоуровневого дизайна больших приложений. Я решил для себя изучить этот вопрос. Есть ли существенные отличия дизайна приложений в ФП-мире от оного в мире императивном? Что такое «каноничный ФП-код»? Какие существуют идиомы разработки, есть ли смысл вообще говорить о паттернах проектирования в применении к ФП? Эти и другие важные вопросы часто вспыхивают то там, то здесь, но покамест мне не известно ни одной книги, аналогичной книге Банды Четырех. Вероятно, мои изыскания уже кто-то повторил, однако тем лучше: схожие результаты подтвердят правильность, иные — укажут на место в теории, которое необходимо доработать.
Читать дальше →

7 трюков при работе с массивами в Ruby

Reading time2 min
Views30K
ruby arrays

В данной статье описаны некоторые интересные трюки как можно эффективно использовать и работать с массивами в Ruby. Конечно же, есть РубиДок и множество других ресурсов, где подробно описаны все доступные методы, но здесь я хочу поделиться именно способами использования.
Читать дальше →

Шпаргалка по шаблонам проектирования

Reading time2 min
Views1.5M

Перевод pdf файла с сайта http://www.mcdonaldland.info/ с описанием 23-х шаблонов проектирования GOF. Каждый пункт содержит [очень] короткое описание паттерна и UML-диаграмму. Сама шпаргалка доступна в pdf, в виде двух png файлов (как в оригинале), и в виде 23-х отдельных частей изображений. Для самых нетерпеливых — все файлы в конце статьи.

Под катом — много картинок.

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

Сетевое программирование для разработчиков игр. Часть 2: прием и передача пакетов данных

Reading time9 min
Views108K
От переводчика: Это перевод второй статьи из цикла «Networking for game programmers». Мне очень нравится весь цикл статей, плюс всегда хотелось попробовать себя в качестве переводчика. Возможно, опытным разработчикам статья покажется слишком очевидной, но, как мне кажется, польза от нее в любом случае будет.
Первая статья — http://habrahabr.ru/post/209144/



Прием и передача пакетов данных


Введение

Привет, меня зовут Гленн Фидлер и я приветствую вас в своей второй статье из цикла “Сетевое программирование для разработчиков игр”.


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

А сейчас я собираюсь рассказать вам, как на практике использовать UDP для отправки и приема пакетов.

BSD сокеты

В большинстве современных ОС имеется какая-нибудь реализация сокетов, основанная на BSD сокетах (сокетах Беркли).

Сокеты BSD оперируют простыми функциями, такими, как “socket”, “bind”, “sendto” и “recvfrom”. Конечно, вы можете обращаться к этим функциями напрямую, но в таком случае ваш код будет зависим от платформы, так как их реализации в разных ОС могут немного отличаться.

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

Erlang для самых маленьких. Глава 1: Типы данных, переменные, списки и кортежи

Reading time8 min
Views67K

Добрый день, дорогие хабражители.

Это первая статья из цикла. Многим она может показаться до ужаса банальной т.к. здесь рассматриваются самые основы. Но для новичков она будет полезной, поэтому без нее обойтись нельзя. Так же здесь обращается внимание на пару интересных и неочевидных моментов.


Если интересно - давайте начнем...

Information

Rating
Does not participate
Location
Железнодорожный (Московск.), Москва и Московская обл., Россия
Date of birth
Registered
Activity