ACSII-сортировка при помощи sort в Linux

Всё не так очевидно, как кажется на первый взгляд.

Допустим, что имеется файл с таким текстом:

[-]
View Code Text
~a
~z
c
f
x
a
b

Так как ASCII-код тильды больше, чем у любой латинской буквы, то ожидаемый результат сортировки будет таким:

[-]
View Code Text
a
b
c
f
x
~a
~z

Тем не менее, если натравить команду sort на исходный набор данных, получим такой результат:

[-]
View Code Text
a
~a
b
c
f
x
~z

Далее »

Автор: , опубликовано в: Linux, комментариев: нет
16
Май
2011

OpenMP, параллельный режим и утечки памяти в GNU Standard C++ Library

Стандартнуя библиотека GNU языка C++ поддерживает так называемый параллельный режим, который предоставляет экспериментальную поддержку параллельных алгоритмов из <algorithm> и <numeric>. Для включения данного режима исходный код нужно компилировать с опеределённым макросом _GLIBCXX_PARALLEL, либо явно подключать заголовочные файлы из <parallel/> и использовать пространство имён __gnu_parallel.

В параллельном режиме для реализации параллелизма используется .

Как оказалось, при использовании в своей программе OpenMP и параллельного режима libstdc++ можно столкнуться с очень неприятными и недокументированными особенностями реализации и получить незабываемое «удовольствие» при отладке. Далее »

Автор: , опубликовано в: C/C++, комментариев: 2
14
Май
2011

k-путевое слияние на C++

Алгоритмы слияния — семейство алгоритмов, последовательно обрабатывающие отсортированные списки и генерирующие один или более отсортированных списков на выходе. Слияние используется в алгоритме сортировки слиянием (например, функция bitonic_merge() в алгоритме битонной сортировки).

k-путевое слияние использует k отсортированных списков; в данном примере генерируется один выходной список, размер которого равен размеру всех входных списков.

k-путевое слияние может быть очень эффективно при сортировке очень больших объёмов данных: большой исходный файл разбивается на несколько файлов меньшего размера, каждый из которых можно отсортировать в оперативной памяти; после сортировки получается n отсортированных файлов. Над отсортированными файлами выполняется многопутевого слияния (возможно, в несколько этапов), на выходе получается отсортированный исходный файл.

Как сортировку, так и слияние можно выполнять параллельно (например, при использовании быстрой сортировки можно использовать конструкцию task из  3.0; слияния же можно проводить в несколько потоков потоков — например, 100 файлов можно отсортировать в 4 потока, используя 25-путевое слияние — правда, это создаст дополнительную нагрузку на диск). Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
6
Май
2011

Регулярное выражения для проверки правильности email

Простенькое такое регулярное выражение, отлавливающее порядка 99% используемых -адресов:

[-]
View Code Text
^([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x22([^\x0d\x22\x5c\x80-\xff]|\x5c[\x00-\x7f])*\x22))*\x40([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d)(\x2e([^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c\x3e\x40\x5b-\x5d\x7f-\xff]+|\x5b([^\x0d\x5b-\x5d\x80-\xff]|\x5c[\x00-\x7f])*\x5d))*$

Далее »

Автор: , опубликовано в: Всё подряд, комментариев: 5
30
Апр
2011

Bitonic Mergesort на C++

Битонная слиянием (bitonic mergesort) — параллельный алгоритм сортировки, рекурсивно разделяющий входную последовательность на сортированные последовательности меньшего размера.

Алгоритм битонной сортировки может выполняться параллельно, потому что каждая операция разделения независима от всех других операций.
Далее »

Автор: , опубликовано в: C/C++, комментариев: 1
16
Апр
2011

Как правильно избавляться от fglrx

У драйвера есть одна неприятная особенность: его не так-то просто удалить. И дело даже не в том, что после удаления остаются лишние файлы — всё намного хуже: с не полностью удалённым проявляются неожиданные ошибки в открытых драйверах /radeon. Далее »

Автор: , опубликовано в: Linux, комментариев: 1
13
Апр
2011

Пример рабочей реализации QDomDocument::elementById

Так сложилось, что в реализация метода QDomDocument::elementById() нерабочая: при попытке использования данного метода выдаётся предупреждение elementById() is not implemented and will always return a null node и возвращается пустой элемент .

Временами это очень неудобно: например, вместо использования из QXmlPatterns может быть проще получить элемент DOM по его id и пройтись по его потомкам. А при использовании XPath функцию id() использовать не получится в силу тех же причин. Далее »

Автор: , опубликовано в: Qt, комментариев: 4
19
Мар
2011

Обнаружение ловушек Project Honey Pot

Project Honey Pot — web-сервис, предоставляющий сеть ловушек (honeypots), встраиваемых в сайты, для сбора информации об IP-адресах, используемых для сбора адресов ( harvesting) в целях рассылок спама, оставления -комментариев на форумах и блогах, проведения атак на сайты и прочей нежелательной активности.

Начинание, безусловно, полезное, но реализация, к сожалению, подводит. Далее »

Автор: , опубликовано в: Безопасность, комментариев: 2
18
Мар
2011

SQL Injection Vulnerability в Z-Vote 1.1

В плагине Z-Vote 1.1 была обнаружена , позволяющая злоумышленнику выполнять произвольные запросы к базе данных ( типа «»).

Уязвимость существует из-за неправильного использования метода wpdb::prepare() и отсутствия проверки и очистки переменной $_GET['zvote'].

Уязвимость позволяет злоумышленнику изменять запросы к базе данных, выполнять произвольные запросы, читать или изменять конфиденциальную информацию. Далее »

Автор: , опубликовано в: Безопасность, Патчи, комментариев: 8
25
Фев
2011

mod_rewrite и content negotiation

Ситуация (из шедевров арабских программистов): есть файлы login.php, logout.php, somethinglese.php и в том же духе.

Есть такие правила :

[-]
View Code Apache configuration
RewriteEngine On
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. В чём же дело? Далее »

Автор: , опубликовано в: Администрирование, комментариев: 7
25
Фев
2011