В одном из комментариев здесь была просьба рассказать подробнее об индексах, и так как, в рунете практически нет сводных данных о поддерживаемых индексах различных СУБД, в данном обзоре я рассмотрю, какие типы индексов поддерживаются в наиболее популярных СУБД
Игорь @MgDuke
Архитектор матрицы )
Концептуальная уязвимость в механизме загрузки DLL (MSA2269637)
3 min
17KНа прошлой неделе на Хабре уже писали о заявлении HD Moore и найденной им уязвимости, которая содержится в достаточно большом количестве приложений и работает на всех версиях MS Windows. Но все оказалось куда серьезнее, так как речь идет не просто о найденной уязвимости, а о концептуальной ошибке в дизайне механизма загрузки динамических библиотек. По этому поводу вчера Microsoft официально выпустила Security Advisory (2269637), что означает официальное признание серьезности данной уязвимости. Но давайте попробуем разобраться в сути этой проблемы, так как она ничуть не менее серьезная, нежели недавно найденная уязвимость в загрузке LNK-файлов.
Уязвимость заключается в том, что многие программы при вызове функции LoadLibrary() не проверяют корректность пути, по которому эта библиотека может быть загружена. Таким образом, они позволяют произвести подмену выполняемой библиотеки. Это связано с тем, что поиск загружаемой библиотеки осуществляется в первую очередь в директории, содержащей образ исполняемого файла, который породил процесс (подмененная библиотека выполняется с привилегиями пользователя, запустившего процесс). К примеру, Georgi Guninski предложил следующую демонстрацию (PoC) данной уязвимости:
Уязвимость заключается в том, что многие программы при вызове функции LoadLibrary() не проверяют корректность пути, по которому эта библиотека может быть загружена. Таким образом, они позволяют произвести подмену выполняемой библиотеки. Это связано с тем, что поиск загружаемой библиотеки осуществляется в первую очередь в директории, содержащей образ исполняемого файла, который породил процесс (подмененная библиотека выполняется с привилегиями пользователя, запустившего процесс). К примеру, Georgi Guninski предложил следующую демонстрацию (PoC) данной уязвимости:
+38
Декартово дерево: Часть 1. Описание, операции, применения
15 min
158KОглавление (на данный момент)
Часть 1. Описание, операции, применения.
Часть 2. Ценная информация в дереве и множественные операции с ней.
Часть 3. Декартово дерево по неявному ключу.
To be continued...
Декартово дерево (cartesian tree, treap) — красивая и легко реализующаяся структура данных, которая с минимальными усилиями позволит вам производить многие скоростные операции над массивами ваших данных. Что характерно, на Хабрахабре единственное его упоминание я нашел в обзорном посте многоуважаемого winger, но тогда продолжение тому циклу так и не последовало. Обидно, кстати.
Я постараюсь покрыть все, что мне известно по теме — несмотря на то, что известно мне сравнительно не так уж много, материала вполне хватит поста на два, а то и на три. Все алгоритмы иллюстрируются исходниками на C# (а так как я любитель функционального программирования, то где-нибудь в послесловии речь зайдет и о F# — но это читать не обязательно :). Итак, приступим.
Введение
В качестве введения рекомендую прочесть пост про двоичные деревья поиска того же winger, поскольку без понимания того, что такое дерево, дерево поиска, а так же без знания оценок сложности алгоритма многое из материала данной статьи останется для вас китайской грамотой. Обидно, правда?
Следующий пункт нашей обязательной программы — куча (heap). Думаю, также многим известная структура данных, однако краткий обзор я все же приведу.
Представьте себе двоичное дерево с какими-то данными (ключами) в вершинах. И для каждой вершины мы в обязательном порядке требуем следующее: ее ключ строго больше, чем ключи ее непосредственных сыновей. Вот небольшой пример корректной кучи:

На заметку сразу скажу, что совершенно не обязательно думать про кучу исключительно как структуру, у которой родитель больше, чем его потомки. Никто не запрещает взять противоположный вариант и считать, что родитель меньше потомков — главное, выберите что-то одно для всего дерева. Для нужд этой статьи гораздо удобнее будет использовать вариант со знаком «больше».
Сейчас за кадром остается вопрос, каким образом в кучу можно добавлять и удалять из нее элементы. Во-первых, эти алгоритмы требуют отдельного места на осмотр, а во-вторых, нам они все равно не понадобятся.
+155
Асимптотический анализ алгоритмов
7 min
170KПрежде чем приступать к обзору асимптотического анализа алгоритмов, хочу сказать пару слов о том, в каких случаях написанное здесь будет актуальным. Наверное многие программисты читая эти строки, думают про себя о том, что они всю жизнь прекрасно обходились без всего этого и конечно же в этих словах есть доля правды, но если встанет вопрос о доказательстве эффективности или наоборот неэффективности какого-либо кода, то без формального анализа уже не обойтись, а в серьезных проектах, такая потребность возникает регулярно.
В этой статье я попытаюсь простым и понятным языком объяснить, что же такое сложность алгоритмов и асимптотический анализ, а также возможности применения этого инструмента, для написания собственного эффективного кода. Конечно, в одном коротком посте не возможно охватить полностью такую обширную тему даже на поверхностном уровне, которого я стремился придерживаться, поэтому если то, что здесь написано вам понравится, я с удовольствием продолжу публикации на эту тему.
В этой статье я попытаюсь простым и понятным языком объяснить, что же такое сложность алгоритмов и асимптотический анализ, а также возможности применения этого инструмента, для написания собственного эффективного кода. Конечно, в одном коротком посте не возможно охватить полностью такую обширную тему даже на поверхностном уровне, которого я стремился придерживаться, поэтому если то, что здесь написано вам понравится, я с удовольствием продолжу публикации на эту тему.
+57
По ту сторону браузера: Как подключить прием платежей
4 min
33KПривет!
Лето — жарко и писать про бухгалтерию совсем не хочется. Поэтому мы решили начать серию статьей, описывающих работу нашего SAAS сервиса изнутри. Напишем как о чисто технических вещах (процессинг платежей, безопасность, техподдержа), так и о том как мы выросли от перспективного стартапа к самоокупающемуся бизнесу — о деньгах, о людях, о проблемах любого молодого бизнеса и путях их преодоления. Если интересно что-то еще — пишите в комментариях или в личку.
Итак, в какой-то момент вы понимаете что хотите начать принимать от пользователя денежку за свои услуги и начинаете думать как бы вам это лучше сделать. Ниже я опишу системы, с которыми мы начинали работать и на чем в итоге остановились. Все приведенное в статье является только нашим опытом, ни в коем случае не реклама и отражает только наше мнение. Возможно, где-то нам просто не повезло, а где-то наоборот способствовала удача.
Лето — жарко и писать про бухгалтерию совсем не хочется. Поэтому мы решили начать серию статьей, описывающих работу нашего SAAS сервиса изнутри. Напишем как о чисто технических вещах (процессинг платежей, безопасность, техподдержа), так и о том как мы выросли от перспективного стартапа к самоокупающемуся бизнесу — о деньгах, о людях, о проблемах любого молодого бизнеса и путях их преодоления. Если интересно что-то еще — пишите в комментариях или в личку.
Процессинг платежей
Итак, в какой-то момент вы понимаете что хотите начать принимать от пользователя денежку за свои услуги и начинаете думать как бы вам это лучше сделать. Ниже я опишу системы, с которыми мы начинали работать и на чем в итоге остановились. Все приведенное в статье является только нашим опытом, ни в коем случае не реклама и отражает только наше мнение. Возможно, где-то нам просто не повезло, а где-то наоборот способствовала удача.
+78
Google выпускает skipfish — сканер безопасности сетевых приложений
1 min
436
высочайшая скорость: написан на C, оптимизированные HTTP запросы, минимальные требования к CPU — скорость запросов легко достигает 2000 в секунду.
простота использования: эвристика запросов поддерживает как фреймворки так и сайты построенные на смешанных технологиях, система самообучаема, поддерживает словари и автозаполнение форм.
отличная логика безопасности: высокое качество работы, различные способы проверки безопасности.
Поддерживаются операционные системы — Linux, FreeBSD, MacOS X и Windows (требуется Cygwin).
Google skipfish
+77
Расширения стандартного механизма кэширования в ASP.NET 4
4 min
2.3KTranslation

+4
Автоматизируем работу с сайтом за 5 минут на примере Yandex.Почты с помощью NetExport
7 min
10KИногда, бывает нужно автоматизировать некоторые процессы на чужом сайте. Залогиниться на сайт, скачать какой нибудь файл, открыть страничку. Часто приходится разбираться в коде сайта, чтобы найти, как правильно написать запрос curl.
Предлагаю Вашему вниманию способ, которым я сам пользуюсь, чтобы значительно облегчить себе жизнь и автоматизировать все и вся, от проверки почты, до загрузки данных в телебанке. Я постараюсь, на примере Yandex.почты показать, как можно очень быстро и почти без программирования сгенерить curl php скрипт для захода на любой сайт и загрузки контента в автоматическом режиме.
Предлагаю Вашему вниманию способ, которым я сам пользуюсь, чтобы значительно облегчить себе жизнь и автоматизировать все и вся, от проверки почты, до загрузки данных в телебанке. Я постараюсь, на примере Yandex.почты показать, как можно очень быстро и почти без программирования сгенерить curl php скрипт для захода на любой сайт и загрузки контента в автоматическом режиме.
+38
Инструмент для учета отработанного времени фрилансера — Tahometer.com
2 min
3.8KУважаемые коллеги, представляю на ваш суд стартап Tahometer (www.tahometer.com).

Задача Тахометра – отчитываться перед заказчиком о затраченном фрилансером времени, рассчитывать стоимость проделанной работы в соответствии с заданными почасовыми ставками.
Почасовая оплата за работу — это одна из самых привлекательных форм для фрилансера-профессионала. Она позволяет заниматься своим делом и при этом упрощает бухгалтерию. К сожалению, «почасовку» очень сложно контролировать, а отработку часов легко симулировать. Часто именно поэтому сложно убедить заказчика перейти на почасовую форму оплаты. Вот здесь-то и появляется «необходимое зло», — счетчик отработанного времени, система, находящаяся на нейтральной территории.

Задача Тахометра – отчитываться перед заказчиком о затраченном фрилансером времени, рассчитывать стоимость проделанной работы в соответствии с заданными почасовыми ставками.
Почасовая оплата за работу — это одна из самых привлекательных форм для фрилансера-профессионала. Она позволяет заниматься своим делом и при этом упрощает бухгалтерию. К сожалению, «почасовку» очень сложно контролировать, а отработку часов легко симулировать. Часто именно поэтому сложно убедить заказчика перейти на почасовую форму оплаты. Вот здесь-то и появляется «необходимое зло», — счетчик отработанного времени, система, находящаяся на нейтральной территории.
+36
Эксперимент с формой логина: OpenID, два в одном, или обычный порошок?
3 min
1.1KПривет,
.
Недавно, когда запускали Кинобазу, мы помимо способов противодействия хабраээфекту задались ещё одним вопросом, который нас давно интересовал: какая форма логина удобнее всего для большинства пользователей. Для этого мы провели эксперимент: до сегодня всем посетителям сайта предлагалась случайным образом один из 4х вариантов формы логина, каждый из которых состоял из 2х форм. Оценку мы проводили очень просто: по количеству человек, которые всё-таки зарегистрировались через каждый из вариантов форм. Поскольку варианты предлагались случайным образом, чем больше человек зарегистрировалось — тем удобнее форма (или тем меньшее количество людей она отпугнула:).
Итак, участники эксперимента и его результаты:

Недавно, когда запускали Кинобазу, мы помимо способов противодействия хабраээфекту задались ещё одним вопросом, который нас давно интересовал: какая форма логина удобнее всего для большинства пользователей. Для этого мы провели эксперимент: до сегодня всем посетителям сайта предлагалась случайным образом один из 4х вариантов формы логина, каждый из которых состоял из 2х форм. Оценку мы проводили очень просто: по количеству человек, которые всё-таки зарегистрировались через каждый из вариантов форм. Поскольку варианты предлагались случайным образом, чем больше человек зарегистрировалось — тем удобнее форма (или тем меньшее количество людей она отпугнула:).
Итак, участники эксперимента и его результаты:
+85
Двунаправленный асинхронный обмен данными в веб-приложениях
4 min
21KОдной из основных черт современного веба эксперты называют RIA, что часто расшифровывается как тренд, когда веб-приложения по функциональности приближены к настольным приложениям. Тем не менее, это приближение весьма условно. Подавляющее большинство «обогащеных» веб-приложений по-прежнему построены по модели «запрос-ответ». Т.е. события на стороне клиента могут быть отражены на стороне сервера, никак не наоборот. Для того чтобы реализовать такую банальную вещь как чат приходиться прибегать к изощренным уловкам. Спасибо Алексу Расселу (Alex Russell) из Dojo, у нас есть даже имя для подобной техники – Comet.
+60
Автоматизация Undo/Redo функциональности с помощью .NET Generics
11 min
6KTranslation
Перевод статьи Automating Undo/Redo with .NET Generics Сергея Архипенко.
Введение
Эта статья описывает библиотеку, которая предоставляет undo/redo функциональность для каждого действия в вашем приложении. Вы можете использовать сложные структуры данных и сложные алгоритмы не задумываясь о том, как они будут переведены в предыдущее состояния по запросу пользователя или в результате возникновения ошибки.
Предпосылки
Если вы когда-нибудь разрабатывали графический редактор или дизайнер для сложных данных, вы сталкивались с трудоёмкой задачей реализации undo/redo функциональности, которая бы поддерживалась во всём приложении. Реализация парных Do и Undo методов для каждой операции скучный и подверженный ошибкам процесс, когда вы разрабытываете что-либо более серьёзное, чем калькулятор. В результате моих экспериментов я нашёл способ сделать поддержку undo/redo прозрачной для бизнес логики. Чтобы этого добиться, мы будем использовать магию generics.
Этот проект опубликован на CodePlex, чтобы каждый мог его использовать или внести свой вклад.
Введение
Эта статья описывает библиотеку, которая предоставляет undo/redo функциональность для каждого действия в вашем приложении. Вы можете использовать сложные структуры данных и сложные алгоритмы не задумываясь о том, как они будут переведены в предыдущее состояния по запросу пользователя или в результате возникновения ошибки.Предпосылки
Если вы когда-нибудь разрабатывали графический редактор или дизайнер для сложных данных, вы сталкивались с трудоёмкой задачей реализации undo/redo функциональности, которая бы поддерживалась во всём приложении. Реализация парных Do и Undo методов для каждой операции скучный и подверженный ошибкам процесс, когда вы разрабытываете что-либо более серьёзное, чем калькулятор. В результате моих экспериментов я нашёл способ сделать поддержку undo/redo прозрачной для бизнес логики. Чтобы этого добиться, мы будем использовать магию generics.Этот проект опубликован на CodePlex, чтобы каждый мог его использовать или внести свой вклад.
+34
Быстрое создание CRUD-основы приложения на Entity Framework/ASP.Net MVC
12 min
14KБольшинство прикладных приложений, которые приходится разрабатывать на практике, сводятся к примитивному шаблону: есть некая предметная область, в которой выделены объекты и связи между ними. Все это легко представляется в виде таблиц в базе данных, а базовый функционал приложения состоит в том, чтобы выполнять над этими таблицами четыре основных действия: создание, модификацию, просмотр и удаление объектов. Далее, обычно, на эту основу прикручивают дополнительную бизнес-логику, модуль отчетов и остальной необходимый функционал.
Естественной реакцией организма разработчика на присутствие определенного шаблона является желание автоматизировать его применение, например, используя кодогенерацию. Шутка. Кодогенерация – это тот же метод copy-paste, только за программиста его делает специально написанный инструмент. Иногда это оправдано, но перед тем, как решится на генерацию кода, лучше хорошо подумать, а нельзя ли здесь обойтись средствами ООП, к примеру?
Естественной реакцией организма разработчика на присутствие определенного шаблона является желание автоматизировать его применение, например, используя кодогенерацию. Шутка. Кодогенерация – это тот же метод copy-paste, только за программиста его делает специально написанный инструмент. Иногда это оправдано, но перед тем, как решится на генерацию кода, лучше хорошо подумать, а нельзя ли здесь обойтись средствами ООП, к примеру?
+14
Text Template Transformation Toolkit (T4): генератор кода в Visual Studio
8 min
29K Приветствую, Хабр!
Сегодня мы поговорим о рутине. Время от времени каждому программисту приходится совершать много нудной, объемной и шаблонной работы, которую постоянно так и хочется автоматизировать, да руки не доходят. Вот об одном малоизвестном способе упростить себе жизнь с помощью кодогенерации я и хочу сегодня рассказать сообществу дотнетчиков. Способ известен как Text Template Transformation Toolkit или попросту T4.
Сегодня мы поговорим о рутине. Время от времени каждому программисту приходится совершать много нудной, объемной и шаблонной работы, которую постоянно так и хочется автоматизировать, да руки не доходят. Вот об одном малоизвестном способе упростить себе жизнь с помощью кодогенерации я и хочу сегодня рассказать сообществу дотнетчиков. Способ известен как Text Template Transformation Toolkit или попросту T4.
+26
WPF 4
11 min
31KTranslation
Нововведения в WPF 4
WPF (Windows Presentation Foundation) — один из компонентов ядра .NET Framework, который позволяет разработчикам создавать богатые, различные Windows приложения. WPF 4 содержит важные улучшения в продуктивности, производительности, возможностей — в частности в областях: элементов управления, XAML, текста, графики, интеграции в Windows 7 (мультитач, интеграция в панель задач, и т.п.), основных принципов работы, развертывания. Это только первая статья из серии, которая описывает нововведения.
Я напишу отдельную статью, которая опишет важные изменения, которые грядут в WPF и Silverlight конструкторах в VS 2010.

WPF (Windows Presentation Foundation) — один из компонентов ядра .NET Framework, который позволяет разработчикам создавать богатые, различные Windows приложения. WPF 4 содержит важные улучшения в продуктивности, производительности, возможностей — в частности в областях: элементов управления, XAML, текста, графики, интеграции в Windows 7 (мультитач, интеграция в панель задач, и т.п.), основных принципов работы, развертывания. Это только первая статья из серии, которая описывает нововведения.
Я напишу отдельную статью, которая опишет важные изменения, которые грядут в WPF и Silverlight конструкторах в VS 2010.
+30
WebSockets — полноценный асинхронный веб
7 min
347K
Что же такого интересного сулит нам технология? На мой взгляд, WebSocket — это самое кардинальное расширение протокола HTTP с его появления. Это не финтифлюшки, это сдвиг парадигмы HTTP. Изначально синхронный протокол, построенный по модели «запрос — ответ», становится полностью асинхронным и симметричным. Теперь уже нет клиента и сервера с фиксированными ролями, а есть два равноправных участника обмена данными. Каждый работает сам по себе, и когда надо отправляет данные другому. Отправил — и пошел дальше, ничего ждать не надо. Вторая сторона ответит, когда захочет — может не сразу, а может и вообще не ответит. Протокол дает полную свободу в обмене данными, вам решать как это использовать.
Я считаю, что веб сокеты придутся ко двору, если вы разрабатываете:
— веб-приложения с интенсивным обменом данными, требовательные к скорости обмена и каналу;
— приложения, следующие стандартам;
— «долгоиграющие» веб-приложения;
— комплексные приложения со множеством различных асинхронных блоков на странице;
— кросс-доменные приложения.
+198
Сжатие Юникод данных
4 min
4.4KВ одном будущем проекте встала задача передавать и хранить данные в формате VCard, которые содержат кириллические буквы. Так как размер передаваемой информации ограничен, необходимо было уменьшить размер данных.
Было несколько вариантов:
Красивый, но бесполезный, график результатов:

Было несколько вариантов:
- Использовать традиционные кодировки (для кириллицы — CP1251).
- Использовать форматы сжатия Юникода. На сегодняшний день это — SCSU и BOCU-1. Детальное описание этих двух форматов привожу ниже.
- Использовать универсальные алгоритмы сжатия (gzip).
Красивый, но бесполезный, график результатов:

+46
Realplexor: производительный Comet-сервер с API для PHP и Javascript (realtime)
5 min
21K
Хотя идейным вдохновителем Realplexor-а был предыдущий проект, dklab_multiplexor, код Realplexor-а не имеет с ним практически ничего общего. Поэтому я и решил сменить название. Несопоставимы также возможности продуктов (см. ниже), да и размер кода увеличился в 7 раз.
Realtime-направление сейчас довольно активно развивается на Западе, и в нем особенно выделяется продукт Tornado — событийно-ориентированный веб-сервер на языке Python. Правда, Tornado — это не столько Comet-сервер, сколько инструмент, с помощью которого можно запрограммировать «в том числе» и Comet-сервер. Ключевые слова: Comet, Push Server, Long polling, JavaScript, XMLHttpRequest.
Главные преимущества Realplexor-а:
- простота использования: наличие API для JavaScript, API для PHP (в будущем — и для других языков);
- простота конфигурирования;
- широкий функционал (либо отстутствующий, либо недоступный напрямую в аналогах).
Лучше один раз увидеть...
Я сделал отдельную онлайн-песочницу, чтобы продемонстрировать функционал нового Realplexor-а и то, для чего вообще нужны Comet-серверы (кстати, это физически тот же самый демон Realplexor-а, что использует мой новый стартап РуТвит). Песочница реализует что-то типа многоканального чата: зайдя, вы получите как будто бы 2 независимых «браузера», запущенных на разных компьютерах.
- Верхний «браузер» отображает каналы — в них моментально появляются новые сообщения, как только кто-то их туда отправляет на стороне сервера. Конечно же, эту страницу могут просматривать одновременно сотни тысяч пользователей, и они все будут видеть одно и то же (реализовано с использованием Realplexor JavaScript API). Можно «на лету» добавлять новые каналы (подписка) или скрывать уже имеющиеся (отписка).
- Нижний браузер содержит формы, позволяющие добавлять сообщение в произвольный канал, указав его имя. Форма AJAX-ом отправляется на сервер, и уже там PHP-скрипт записывает в Realplexor полученный текст через PHP API. (И да, так можно чатиться.)

Песочница демонстрирует следующие функции Realplexor-а:
+85
+54
Обфускаторы (и деобфускаторы) для .NET §0
3 min
22KНи для кого не секрет, что из скомпилированных сборок (exe и dll) для платформы .NET может быть легко восстановлен код на языках высокого уровня (C#, VB.net). Это означает не только то, что если в программе имеется система лицензирования, то она может быть легко снята; но и то, что ваш исходный код могут скопировать, например, нечистые на руку конкуренты. Чтобы обезопасить себя от подобных угроз большинство разработчиков коммерческого софта используют разного рода обфускаторы.
+13
Information
- Rating
- Does not participate
- Location
- Украина
- Date of birth
- Registered
- Activity