Search
Write a publication
Pull to refresh
7
0
Алексей @boov

User

Send message

Хуки — это просто

Reading time7 min
Views140K


Хуки — это технология перехвата вызовов функций в чужих процессах. Хуки, как и любая достаточно мощная технология, могут быть использованы как в благих целях (снифферы, аудио\видеограбберы, расширения функционала закрытого ПО, логирование, багфиксинг) так и со злым умыслом (трояны, кряки, кейлоггеры). О хуках уже не раз писали и на Хабре и не на Хабре. Но вот в чём беда — почему-то каждая статья о хуках буквально со второго абзаца начинает рассказывать о «таблице виртуальных функций», «архитектуре памяти» и предлагает к изучению огромные блоки ассемблерного кода. Известно, что каждая формула в тексте снижает количество читателей вдвое, а уж такие вещи — так и вовсе вчетверо. Поэтому нужна статья, которая расскажет о хуках просто. Под катом нет ассемблера, нет сложных терминов и буквально два десятка строк очень простого кода на С++. Если вы давно хотели изучить хуки, но не знали с чего начать — начните с этой статьи.
Читать дальше →

Бертран Мейер. Объектно-ориентированное конструирование программных систем

Reading time5 min
Views67K

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

Основная сложность при изучении объектно-ориентированного программирования (или любой другой парадигмы программирования) заключается в том, что весьма сложно подобрать формальные критерии, которые бы сказали: «ок, теперь я знаю ООП и стану писать более клевые (читай модульные, реюзабельные и легкие в сопровождении) программы». Например, при изучении языков программирования мы относительно быстро замечаем, опа, level-up, я, кажись, перешел на новый уровень понимания идиом и конструкций языка программирования и могу использовать его более интересным образом, да еще и другим рассказывать, где они не правы.

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

Написание компилятора LALR(1)-парсеров. Описание LR-генераторов

Reading time10 min
Views15K

Предисловие


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

В комментариях к прошлой статье несколько человек интересовались моими мотивами в написании своего компилятора компиляторов. К сожалению, они в этой статье не найдут ответов на этот вопрос. Не скрою, изначально я планировал написать статью без особой теории, но с оправданием задач и целей, ради которых я начал писать генератор, да и хотел поделиться нюансами и особенностями реализации. То есть по объему это довольно прилично: несколько экранов. Но затем я решил всё же описать базовую теорию популистским языком, поэтому статья разрослась до трех частей. Таким образом, дабы не ломать логику изложения, я сначала расскажу про LR/SLR/LALR-анализаторы, а завтра опубликую заключительную, и, думаю, самую интересную часть.
Читать дальше →

Интеграция Python и C++

Reading time3 min
Views57K
Всем доброго времени суток!

Недавно при прототипировании одной из частей разрабатываемого нами продукта возникла одна интересная задача: нужно было проверить склейку Python и C++. Связано это было с тем, что основной код был написан на плюсах, и необходимо было подключить внешнюю библиотеку Websockets, написанную на Python (на тот момент не было соответствующей библиотеки на C++). Схема взаимодействия при такой задаче достаточно простая. Из C++ вызывается функция подключения к серверу (на python), в качестве параметра передается его адрес. Соответственно, при получении сообщния Python передавает его обратно в метод C++.
Читать дальше →

Извлекаем мета-информацию из Си/C++ кода при помощи (py)gccxml

Reading time5 min
Views5.6K
До появления gccxml, был только один способ извлечь мета-информацию из Си/С++ кода. Для начала, необходимо было написать парсер, способный справиться с грамматикой языка С++. Это не та задача, которую вы обычно решаете дома за выходные.

Теперь, писать парсер больше не нужно. Модифицированный компилятор gcc анализирует ваш код и выдает описание всех пространств имен, типов, классов и функций, встреченных в программе. Данные выдаются в формате XML и в принципе готовы для дальнейшего автоматического анализа и обработки.

Для разбора XML данных, полученных от gccxml, пригодится библиотека pygccxml. Это не просто ридер формата gccxml — библиотека предоставляет интерфейсы для изучения собранных метаданных; в частности есть готовые функции, отвечающие на вопросы вроде «совместимы ли типы T1 и T2?» или «наследует ли класс C1 от C2?». Библиотека написана на языке Python.

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

Разработка русскоговорящего «аналога» Siri за 7 дней

Reading time6 min
Views18K
После выхода iPhone 4S с Siri «на борту», владельцы остальных гаджетов Apple, чувствовали себя немного обделенными. Даже в свой новый iPad Apple не включила Siri. Разработчиками по всему миру были предприняты попытки портировать Siri на другие устройства или написать похожие аналоги. И только русскоязычный App Store хранил молчание. Наверно все разработчики очень заняты, подумал я, и решил исправить это досадное недоразумение…
Читать дальше →

КартонБот v1.0 — утилизируем картон с пользой для мозга

Reading time6 min
Views30K
Количество попыток собрать робота у меня – не счесть. Но, то материалов не хватало, то навыков их обработки, то каких-то узлов, то знаний, как все эти штуки связать вместе. Если знакома такая ситуация – я постараюсь рассказать свой опыт сборки робота из подручных материалов и каких-то узлов купленных на eBay.
image
Робот обошелся мне в 35$ и два дня отпуска, но восторг, испытанный от его первых движений, стоил намного больше. Если заинтересованы – прошу под кат (много картинок).
Читать дальше →

«Та самая цель» в разработке на заказ

Reading time8 min
Views10K
Недавно я дочитал роман Эли Голдрата «Та самая цель». В силу привычки извлекать из всего пользу, мне захотелось применить знания его Теории Ограничений в условиях нашей компании, занимающейся разработкой программного обеспечения на заказ. В этой статье я попытаюсь кратко изложить основные идеи из книги, а затем сделать выводы в условиях своей предметной области. Буду рад если кто-то заинтересуется романом, ибо он того стоит. Указания на ошибки в моих объективных и логически безупречных рассуждениях тоже приветствуются.

Определение цели



Первая мысль, с которой и начинается сюжетная линия, — это определение целей компании. Как утверждает Эли Голдрат, «та самая цель» только одна и главный герой проводит несколько глав, мучительно пытаясь её уяснить. «Что же определяет успешность предприятия?», — терзают его сомнения, — «может быть минимизация издержек или стопроцентное использование производственных мощностей?». Сначала мне эти мучения показались наигранными — прибыль, вот основная цель любой компании и та идея, до которой главный герой доходит спустя некоторое время. Но почему Голдрат хотел показать что это неочевидно?

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

Усовершенствование паттерна Flyweight в биовычислениях

Reading time13 min
Views2K
Предыстория

Сразу извиняюсь за сложность, но сложна как сама ситуация для применения этого, так и способ решения, но получается в результате красиво и эффективно :)

Началось с того, что описал одну проблемку о проблемах ООП. Потом случайно благодаря разговорам тут начал обдумывать паттерны проектирования. И в связи с темой «полное копирование объекта» вышел на паттерн Flyweight. Кто не знает — прошу вначале читайте о нем в Приемы объектно-ориентированного проектирования. Паттерны проектирования (Не в вики, а в оригинале).

Основная идея там такова:

Паттерн Flyweight описывает, как совместно разделять очень мелкие объекты без чрезмерно высоких издержек. Каждый объект-приспособленец имеет две части: внутреннее и внешнее состояния. Внутреннее состояние хранится (разделяется) в приспособленце и состоит из информации, не зависящей от его контекста. Внешнее состояние хранится или вычисляется объектами-клиентами и передается приспособленцу при вызове его методов.

Задача

Мы рассмотрим как это улучшить на конкретном примере. О биовычислениях буду говорить очень мало — но пример будет построен на этом. Суть биовычислений попытаюсь полностью вытравить, оставив только схему.

P.S. Если кому то интересна проблематика самих биовычислений по задаче сворачивания РНК/белков — делайте заказ напишу тогда отдельную статью.

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

Оценить и отследить качество дорог России теперь может каждый!

Reading time2 min
Views7.2K
Аркадий Хачкованян, менеджер по маркетингу Google Россия

Сегодня вместе c Auto.ru мы представляем проект Дороги России. Теперь пользователи мобильных устройств на базе Android смогут внести свой вклад в решение исконно русской проблемы — качества дорог, а любой интернет-пользователь получит возможность проверить состояние дорожного покрытия по интересующему его маршруту.
Читать дальше →

Несколько проблем при создании собственного языка программирования

Reading time3 min
Views2.7K
На форумах можно увидеть темы из разряда «Каким я вижу свой идеальный язык программирвоания». При этом создаются такие грамматики, которые анализатор никогда не сможет преобразовать в код. Под катом несколько опасностей, которые подстерегают разработчика нового понятного, изящного, гибкого языка программирования.

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

14 возможностей ReSharper по навигации и редактированию

Reading time8 min
Views43K
Инструменты – средство усиления вашего таланта. Чем они лучше и чем лучше вы ими владеете, тем больше вы сможете сделать.
Энди Хант и Дейв Томас «Программист-прагматик. Путь от подмастерья к мастеру»

DISCLAIMER: это не заказная и совершенно не проплаченная статья (JetBrains, я ни на что не намекаюJ). Здесь представлены лишь возможности популярного расширения для VisualStudio (а иногда и аналогичные возможности самой студии), которые я лично использую в повседневной деятельности.
Читать дальше →

Правильное использование паттерна «Мост» (Мост с двухсторонним движением) или MVC->«Бизнес-сущность — Визуализация — Контроллер»

Reading time9 min
Views7.8K
Предыстория

Статья Неверное использование паттерна проектирования «Мост» / «Bridge» как то так получилось разделила аудиторию на двое. Далее я подумал, сказав А не сказать Б, будет не правильно. Нет я не отказываюсь от своих слов, но я нашел где и как я использовал паттерн «Мост». Т.к. его еще и неверно понимают, кажется альтернативное название «Описатель/тело» — меньше вводит в заблуждение.

Так где же? Оказалось в моем аналоге использования концепции MVC (Модель/Представление/Контроллер).

Поэтому вначале ознакомлю со своей вариацией «Бизнес-сущность — Визуализация — Контроллер». Я уже ее писал, но думаю мало кто с этим знаком. А затем посмотрим где же там «Правильный мост».

P.S. Мне тут выдали кредит доверия, и я обязался написать еще одну статью о усовершенствовании паттерна Flyweight — отчитываюсь написал.

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

Прозрачный прокси сервер Squid с паролем на Ubuntu 11.04

Reading time3 min
Views25K
Недавно появилась задача реализовать некоторые функции Kerio в linux, а именно авторизацию
пользователей прокси сервера Squid в режиме transparent. Это сделать довольно просто и на
просторах интернета много статей как это сделать, но появилась проблема в режиме transparent
(прозрачный прокси) авторизация не работает. Конечно если у Вас небольшое количество пользователей
это не является проблемой, отключил transparent прописал у всех прокси сервер в браузерах и все.
Но когда пользователей и компьютеров становиться много и прописывать прокси сервер у всех нет
возможности/времени, тут приходиться искать решения. Одно из решений это связка Squid+PHP+NAT.
Читать дальше →

Доказано, что игра Super Mario является NP-полной задачей

Reading time1 min
Views7.9K


Анализ вычислительной сложности пяти классических игр для Nintendo показал, что среди них есть NP-полные задачи, то есть которые решаются за полиномиальное время на так называемых недетерминированных машинах Тьюринга. Проще говоря, это математически очень сложные задачи, сравнимые с задачей коммивояжёра или проблемой раскраски графа.

Учёные проанализировали следующие игры: Mario, Donkey Kong, Legend of Zelda, Metroid и Pokemon. Как выяснилось, ко всем играм серий Mario и Donkey Kong применимо определение о NP-полноте. Отдельные игры других серий принадлежат к классу NP, а некоторые игры — к классу PSPACE.
Читать дальше →

Перевод на русский язык презентации Apple от 7 марта 2012 года — The new iPad

Reading time1 min
Views35K
image

7 марта 2012 года состоялась очередная презентация компании Apple. Канал GTV представляет перевод презентации нового iPad на русский язык.
Читать дальше →

Быстрое сжатие изображений по алгоритму JPEG на CUDA

Reading time13 min
Views20K
Краткое содержание: Создан быстрый кодер FVJPEG для сжатия изображений по алгоритму JPEG на видеокартах NVIDIA. Значительное ускорение получено при распараллеливании алгоритма, его реализации и оптимизации с помощью технологии CUDA. По скорости сжатия кодер FVJPEG превосходит все существующие в настоящее время программные и аппаратные решения для компрессии изображений по алгоритму Baseline JPEG.
Читать дальше →

Еще раз про skiplist…

Reading time6 min
Views36K

… или как я получил «Аленку» за консольное приложение


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

Представьте, что ваш коллега-нытик пришел рассказать о своей непростой задаче — ему нужно не просто упорядочить по возрастанию набор целых чисел, а выдать все элементы упорядоченного набора с L-го по R-й включительно!
Вы заявили, что это элементарная задача и, чтобы написать решение на языке C#, вам нужно десять минут. Ну, или час. Или два. Или шоколадка «Алёнка»

Предполагается, что в наборе допускаются дубликаты, и количество элементов будет не больше, чем 10^6.

К оценке решения есть несколько комментариев:

Ваш код будут оценивать и тестировать три программиста:
  • Билл будет запускать ваше решение на тестах размером не больше 10Кб.
  • В тестах Стивена количество запросов будет не больше 10^5, при этом количество запросов на добавление будет не больше 100.
  • В тестах Марка количество запросов будет не больше 10^5.
Решение может быть очень интересным, поэтому я посчитал нужным его описать.
Читать дальше →

Если Вы все еще думаете, делать бизнес в интернете или нет

Reading time2 min
Views10K
Для тех кто только собирается начать работать в среде электронной коммерции есть стразу несколько хороших новостей.

Во-первых, численность интернет-пользователей у нас в России на начало 2011 года превысила 46 млн. человек, что составляет более 52% от общего взрослого населения страны (+18). Если взять аналогичный период 2010 года, то прирост пользователей составил порядка 9%. Это данные организации «Мир Интернета».

Во-вторых, это данные агентства Data Insight, в 2010 году 12,5 миллиона покупателей потратили на онлайн-покупки в России 240 миллиардов рублей (7 млрд.$). По другим данным цифра чуть скромнее, потому что не брался в расчет рынок B2B, но все равно цифры заставляют задуматься. Стоит так же отметить, что по данным Яндекс.Маркет за 2011 год рынок интернет-торговли вырос по сравнению с 2010 годом примерно на 25%. К примеру, интернет магазин Озон за первое полугодие этого года вырос на 36%.

image
Подробности...

Information

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