Pull to refresh
128
0
Сергей @seriyPS

backend

Send message

Бенчмарк HTML парсеров

Reading time10 min
Views82K
Переписывал в островке кусок одного сервиса с Python на Erlang. Сам сервис занимается тем, что скачивает по HTTP значительное количество однотипных HTML страниц и извлекает из них некоторую информацию. Основная CPU нагрузка сервиса приходится на парсинг HTML в DOM дерево.

Сперва захотелось сравнить производительность Erlang парсера mochiweb_html с используемым из Python lxml.etree.HTML(). Провел простейший бенчмарк, нужные выводы сделал, а потом подумал что неплохо было бы добавить в бенчмарк ещё парочку-другую парсеров и платформ, оформить покрасивее, опубликовать код и написать статью.
На данный момент успел написать бенчмарки на Erlang, Python, PyPy, NodeJS и С в следующих комбинациях:
  • Erlang — mochiweb_html
  • CPython — lxml.etree.HTML
  • CPython — BeautifulSoup 3
  • CPython — BeautifulSoup 4
  • CPython — html5lib
  • PyPy — BeautifulSoup 3
  • PyPy — BeautifulSoup 4
  • PyPy — html5lib
  • Node.JS — cheerio
  • Node.JS — htmlparser
  • Node.JS — jsdom
  • C — libxml2 (скорее для справки)

В тесте сравниваются скорость обработки N итераций парсера и пиковое потребление памяти.

Интрига: кто быстрее — Python или PyPy? Как сказывается иммутабельность Erlang на скорости парсинга и потреблении памяти? Насколько быстра V8 NodeJS? И как на всё это смотрит код на чистом C.
Читать дальше →
Total votes 72: ↑66 and ↓6+60
Comments36

Так как же удалить миллионы файлов из одной папки?

Reading time5 min
Views147K

Феерическая расстановка точек над i в вопросе удаления файлов из переполненной директории.

Прочитал статью Необычное переполнение жесткого диска или как удалить миллионы файлов из одной папки и очень удивился. Неужели в стандартном инструментарии Linux нет простых средств для работы с переполненными директориями и необходимо прибегать к столь низкоуровневым способам, как вызов getdents() напрямую.

Для тех, кто не в курсе проблемы, краткое описание: если вы случайно создали в одной директории огромное количество файлов без иерархии — т.е. от 5 млн файлов, лежащих в одной единственной плоской директории, то быстро удалить их не получится. Кроме того, не все утилиты в linux могут это сделать в принципе — либо будут сильно нагружать процессор/HDD, либо займут очень много памяти.

Так что я выделил время, организовал тестовый полигон и попробовал различные средства, как предложенные в комментариях, так и найденные в различных статьях и свои собственные.
Читать дальше →
Total votes 155: ↑145 and ↓10+135
Comments103

Самая короткая запись асинхронных вызовов в tornado v2, или патчим AST

Reading time9 min
Views4.4K
Меня очень заинтересовала статья Самая короткая запись асинхронных вызовов в tornado или патчим байткод в декораторе, не столько с практической точки зрения, сколько с точки зрения реализации.
Всё-таки модификация байткода в рантайме это слишком опасная и ненадежная операция. И уж наверняка не поддерживаемая альтернативными интерпретаторами Python.

Попробуем исправить этот недостаток способом, который для этого предназначен куда больше и который применяется для схожих целей во многих других языках (я точно встречал в Lisp или Erlang). Этот способ — модификация Абстрактного синтаксического дерева (AST) программы.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments4

Уязвимость в стандартной функции glob() как угроза для FTP-серверов

Reading time2 min
Views3K
Сайт SecurityReason сообщает об обнаружении опасной ошибки в реализации библиотечной функции glob() из стандартной библиотеки языка C (libc) на множестве платформ.

Эта функция предназначена для получения списка файлов, чьи имена удовлетворяют заданному шаблону. Ошибка заключается в том, что ограничение на выдачу функции, задаваемое переменной GLOB_LIMIT, не действует в случае задания некорректных путей в шаблоне. Такими некорректными значениями могут быть, например, «*/../*/../*foo» или «{..,..,..}/*/{..,..,..}/*bar». При этом вызов функции glob() может исчерпать всю доступную память процесса.

Особенную опасность данная ошибка представляет для (S)FTP-серверов, особенно с разрешенным анонимным доступом. Очевидно, запрос на листинг файлов с вышеприведенной маской приводит к скорому отказу в обслуживании FTP-сервера.

Уязвимости подвержены, по последним данным, как минимум следующие ОС: OpenBSD 4.7, NetBSD 5.0.2, FreeBSD 7.3/8.1, Oracle/Sun Solaris 10, а также все версии Linux с GLIBC. Уязвимость пока что устранена только в NetBSD; компании и сообщества, занимающиеся разработкой вышеперечисленных (за исключением NetBSD) операционных систем, пока не дают никакой информации; именно поэтому уязвимость классифицируется как «0-day». Сообщается также, что vsftpd не подвержен уязвимости.

Желающим попробовать уязвимость в действии могу предложить набрать в bash консоли команду наподобие
ls ../../*/../*/*/../../*/*/*/*

Можно эксплуатировать, например, из PHP:
php -r 'print glob("../../*/../*/*/../../*/*/*/*");'

или Python
python -c 'import glob; glob.glob("../../*/../*/*/../../*/*/*/*")'
и из любого другого языка, обращающегося к этой функции.

Оригинальный отчет об уязвимости тут: securityreason.com/securityalert/7822
Total votes 87: ↑81 and ↓6+75
Comments50

На чем написать програмку?

Reading time1 min
Views5.1K
Хочу спросить совета у десктоп-программистов…
Давно хотел изучить ЕЩЕ какой-нибудь язык программирования, а тут и повод появился…

Итак, цель: желательно в короткий срок написать небольшую & достаточно простенькую програмку с GUI и, главное, при этом изучить новый язык программирования

Исходные данные:
1) Есть солидный опыт программирования на PHP, Javascript, XSL
2) Я сам сижу под Linux, есть виндовс в виртуалке. Разрабатывать хотелось-бы в Eclipse под Linux-ом
3) Десктопные и GUI приложения никогда не разрабатывал.

Пожелания (читай — требования) к готовой программе:
1) Кроссплатформенная (но основной упор на Linux)
2) На интерпретируемом языке (на 80% склоняюсь к Python, на 20% к Ruby, НЕ хотелось-бы Java)
3) Для Windows можно создать .exe инсталлятор. Чем меньше его размер, тем лучше. После установки сразу работает «из коробки».

Теперь вопросы:
Реально-ли выполнить эти требования? (знаю что реально)))
Какой язык программирования вы бы посоветовали (Python, Ruby, Java… может еще что)?
Какую GUI библиотеку использовать (Qt, GTK, WxWidgets.....)?
С чего начать изучение? по каким ссылкам походить? Какие книжки почитать?

Заранее спасибо за ответы-советы!
UPD1: Програмка эта для личного пользования… Для работы с небольшой XML базой данных с применением некоторых физико-математических законов и преобразований. Возможно построение на основе результатов простых графиков. Для кафедры книверситета моего, хочется науч.руководителю подарок сделать перед дипломом.
Основная цель все-же — НАУЧИТЬСЯ делать десктомные програмки с перечисленными характеристиками. Просто в рамках личного и профессионального развития. Для начала простенькую програмку сделать, потом постепенно может что поинтереснее.
Total votes 27: ↑16 and ↓11+5
Comments63

Протоколы прикладного уровня: Jabber/XMPP часть1

Reading time7 min
Views8.2K
Прочитав статью и испробовав команды, научимся
--Соединяться с Jabber сервером
--Логиниться
--Менять статусы
--Отправлять сообщения
--Отключаться

И все это на чистом XML

В принципе, можно статью назвать «Введение в XMPP» или типа того… Но суть не изменится
Приступим-же!
приступить...
Total votes 79: ↑75 and ↓4+71
Comments21

Почтовая кухня #2: SMTP

Reading time4 min
Views38K
SMTP (англ. Simple Mail Transfer Protocol — простой протокол передачи электронной почты) — это сетевой протокол, предназначенный для передачи электронной почты в сетях TCP/IP.
ESMTP (англ. Extended SMTP) — масштабируемое расширение протокола SMTP. В настоящее время под «протоколом SMTP», как правило, подразумевают ESMTP и его расширения.

Сразу отмечу, что в настоящее время SMTP в чистом виде практически не используется, т.к. он даже не поддерживает элементарно авторизацию… Используется ESMTP. Когда/если вы отправляете почту почтовым клиентом (Outlook, Thunderbird, Evolution, TheBat) происходит работа именно по этому протоколу.
от теории к практике
Total votes 19: ↑16 and ↓3+13
Comments21

Information

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