ACSII-сортировка при помощи sort в Linux
Всё не так очевидно, как кажется на первый взгляд.
Допустим, что имеется файл с таким текстом:
~z
c
f
x
a
b
Так как ASCII-код тильды больше, чем у любой латинской буквы, то ожидаемый результат сортировки будет таким:
b
c
f
x
~a
~z
Тем не менее, если натравить команду sort на исходный набор данных, получим такой результат:
~a
b
c
f
x
~z
Май
2011
OpenMP, параллельный режим и утечки памяти в GNU Standard C++ Library
Стандартнуя библиотека GNU языка C++ поддерживает так называемый параллельный режим, который предоставляет экспериментальную поддержку параллельных алгоритмов из <algorithm> и <numeric>. Для включения данного режима исходный код нужно компилировать с опеределённым макросом _GLIBCXX_PARALLEL, либо явно подключать заголовочные файлы из <parallel/> и использовать пространство имён __gnu_parallel.
В параллельном режиме для реализации параллелизма используется OpenMP.
Как оказалось, при использовании в своей программе OpenMP и параллельного режима libstdc++ можно столкнуться с очень неприятными и недокументированными особенностями реализации и получить незабываемое «удовольствие» при отладке. Далее »
Май
2011
k-путевое слияние на C++
Алгоритмы слияния — семейство алгоритмов, последовательно обрабатывающие отсортированные списки и генерирующие один или более отсортированных списков на выходе. Слияние используется в алгоритме сортировки слиянием (например, функция bitonic_merge() в алгоритме битонной сортировки).
k-путевое слияние использует k отсортированных списков; в данном примере генерируется один выходной список, размер которого равен размеру всех входных списков.
k-путевое слияние может быть очень эффективно при сортировке очень больших объёмов данных: большой исходный файл разбивается на несколько файлов меньшего размера, каждый из которых можно отсортировать в оперативной памяти; после сортировки получается n отсортированных файлов. Над отсортированными файлами выполняется сортировка многопутевого слияния (возможно, в несколько этапов), на выходе получается отсортированный исходный файл.
Как сортировку, так и слияние можно выполнять параллельно (например, при использовании быстрой сортировки можно использовать конструкцию task из OpenMP 3.0; слияния же можно проводить в несколько потоков потоков — например, 100 файлов можно отсортировать в 4 потока, используя 25-путевое слияние — правда, это создаст дополнительную нагрузку на диск). Далее »
Май
2011
Регулярное выражения для проверки правильности email
Простенькое такое регулярное выражение, отлавливающее порядка 99% используемых email-адресов:
Апр
2011
Bitonic Mergesort на C++
Битонная сортировка слиянием (bitonic mergesort) — параллельный алгоритм сортировки, рекурсивно разделяющий входную последовательность на сортированные последовательности меньшего размера.
Алгоритм битонной сортировки может выполняться параллельно, потому что каждая операция разделения независима от всех других операций.
Далее »
Апр
2011
Как правильно избавляться от fglrx
У драйвера fglrx есть одна неприятная особенность: его не так-то просто удалить. И дело даже не в том, что после удаления fglrx остаются лишние файлы — всё намного хуже: с не полностью удалённым fglrx проявляются неожиданные ошибки в открытых драйверах ati/radeon. Далее »
Автор: Vladimir, опубликовано в: Linux, комментариев: 1Апр
2011
Пример рабочей реализации QDomDocument::elementById
Так сложилось, что в Qt реализация метода QDomDocument::elementById() нерабочая: при попытке использования данного метода выдаётся предупреждение elementById() is not implemented and will always return a null node и возвращается пустой элемент DOM.
Временами это очень неудобно: например, вместо использования XPath из QXmlPatterns может быть проще получить элемент DOM по его id и пройтись по его потомкам. А при использовании XPath функцию id() использовать не получится в силу тех же причин. Далее »
Мар
2011
Обнаружение ловушек Project Honey Pot
Project Honey Pot — web-сервис, предоставляющий сеть ловушек (honeypots), встраиваемых в сайты, для сбора информации об IP-адресах, используемых для сбора адресов email (email harvesting) в целях рассылок спама, оставления спам-комментариев на форумах и блогах, проведения атак на сайты и прочей нежелательной активности.
Начинание, безусловно, полезное, но реализация, к сожалению, подводит. Далее »
Автор: Vladimir, опубликовано в: Безопасность, комментариев: 2Мар
2011
SQL Injection Vulnerability в Z-Vote 1.1
В плагине WordPress Z-Vote 1.1 была обнаружена уязвимость, позволяющая злоумышленнику выполнять произвольные запросы к базе данных (уязвимость типа «SQL-инъекция»).
Уязвимость существует из-за неправильного использования метода wpdb::prepare() и отсутствия проверки и очистки переменной $_GET['zvote'].
Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию. Далее »
Автор: Wandering Soul, опубликовано в: Безопасность, Патчи, комментариев: 8Фев
2011
mod_rewrite и content negotiation
Ситуация (из шедевров арабских программистов): есть файлы login.php, logout.php, somethinglese.php и в том же духе.
Есть такие правила mod_rewrite:
RewriteRule ^login$ login.php
RewriteRule ^logout$ logout.php
RewriteRule ^top-questions$ top.php?what=questions
# и так далее
При этом правила, для которых существует файл, имя которого без учёта расширения совпадает с запросом, не выполняются.
Например, запросы http://example.com/login, http://example.com/logout возвращают 404 ошибку, а http://example.com/top-questions отрабатывает на ура.
Налицо некая избирательность mod_rewrite. В чём же дело? Далее »
Автор: Wandering Soul, опубликовано в: Администрирование, комментариев: 7Фев
2011

Меня зовут Владимир, я программист-фрилансер, специализирующийся на Web-программировании и програмировании под Linux.
По совместительству занимаюсь администрированием LAMP/LNMP-серверов и техническим переводом.

