• Использование библиотеки для полнотекстового поиска Xapian в Python

    Сегодня, в эпоху Web 2.0, когда контента на сайтах становится все больше и больше, перед разработчиками встает задача реализации полнотекстового поиска.

    Вариантов немного:
    • использовать виджеты от разработчиков поисковых систем (Google, Яндекс, etc): легко внедрить, привычный для пользователя интерфейс, поддержка морфологии, исправление слов по словарю, возможно более быстрая индексация сайта поисковыми системами, но, как правило ограниченные возможности по настройке и неизбежное запаздывание индексации;
    • использовать встроенные в СУБД средства (например FULLTEXT-индекс для MySQL): достаточно легко внедрить, актуальный поисковый индекс, полный контроль над настройкой и внешним видом, но, чаще всего очень низкая производительность на больших объемах данных, отсутствие учета морфологии, либо, в худшем случае, полное отсутствие подобных средств в СУБД;
    • использовать отдельную библиотеку/систему полнотекствого поиска.

    Третий вариант кажется самым лучшим, ведь он сочетает достоинства двух других вариантов. Правда и здесь не обошлось без недостатков — библиотека требует установки, иногда даже запуска демона (например Sphinx), что может быть неприемлемо.

    Решений существует масса, у каждого есть свои достоинства и недостатки. Я бы хотел подробнее остановиться на относительно малоизвестной библиотеке Xapian.
    Читать дальше →
  • Не используй человека-клавиатуру

    • Перевод
    image
    Есть несколько вещей, которые раздражают меня больше, чем когда мне не по своей воле приходится принимать участие в создании привычки (или культуры), которая заставляет относиться к людям как к компьютерным клавиатурам. Люди не должны восприниматься как кнопки, на которые можно нажать, чтобы вызвать определенные функции.

    Что я подразумеваю под термином «человек-клавиатура»? Представьте себе на минуту, что вместо набора на клавиатуре или использования мыши, вам приходилось бы просить человека выполнить какую-нибудь задачу.
    «Зайди в мою электронную почту».
    «Покажи первое сообщение».
    «Прокрути немного вниз».
    «Прокрути чуть больше вниз».
    «Я хочу ответить на это письмо».
    Представляете себе, насколько страшное воздействие на производительность и удобство использования компьютером окажет такой интерфейс! Для такой простой задачи как «проверка e-mail» требуется 2 человека – вы и «человек-клавиатура», что повлечет за собой двойные затраты, двойные ошибки, проблемы в коммуникации между ними. Тем не менее, несмотря на глупость этого примера, похожие ситуации возникают довольно часто в бизнесе, при взаимодействии между сотрудниками, которые решают и ставят задачи друг друга.
    Читать дальше →
  • Уязвимость связки PHP+nginx с кривым конфигом

      Summary


      Announced: 2010-05-20
      Credits: 80sec
      Affects: сайты на ngnix+php с возможностью загрузки файлов в директории с fastcgi_pass




      Background


      Зачастую How-To по настройке связки nginx с php-fpm / php-cgi есть подобные строчки:

      location ~ \.php$ {
          fastcgi_pass 127.0.0.1:9000;
          fastcgi_index index.php;
          fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
          include fastcgi_params;
      }
      

      Читать дальше →
    • Сравнение кодеков libtheora и x264

        После того, как Youtube и Vimeo представили свои тестовые страницы в HTML5, вновь пошла волна разговоров, о том, что же лучше: H.264 или Ogg Theora.

        Я, конечно, за свободный веб. Но выводы о том, что Theora превосходит H.264 по качеству, сделанные многими людьми по результатам двух сомнительных сравнений (раз и два) весьма поспешны.
        Медведю плохо

        В первом сравнении вообще не представлено ни тестового видео, ни каких-либо настроек кодеков. Во втором сказано, что для H.264-кодека взят заведомо отстойный пресет с Youtube, а настройки Теоры умалчиваются.

        Так я решил сам проверить, что есть Ogg Theora и на что этот кодек способен.
        Графики, скриншоты, трафик
      • Материалы продвинутого уровня по Питону

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

          После прочтения Dive into Python или подобной ей и ознакомления с документацией возникает вопрос, а что читать дальше? Можно обратиться к списку книг на python.org. Там есть раздел Advanced Books, но в нем всего лишь 6 книг (седьмая не выходила), и только одну я бы назвал по-настоящему стоящей.

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

          Ниже собраны сложные материлы про Питон, его устройство и возможности. Все на английском (грех, не знать технический английский). Про Dive into Python я слукавил. Большинство приведенных материалов требуют хорошее знание Питона и наличие опыта программирования на нем.

          Подробнее
        • Переезд в Агаве

            Это как вообще, нормальная, общемировая практика или что?!

            «
            Уважаемые пользователи!

            В связи с изменением стоимости размещения серверов в Агава-2 мы вынуждены перевезти большую часть оборудования в наш дата-центр «Агава-Север» в городе Долгопрудном: www.renter.ru/dc.shtml

            В данный момент составляется график транспортировки серверов. Переезд будет осуществляться 14го, 18го и 21 января.

            Просим вас оперативно (до 13го января) прислать на col@agava.com информацию, необходимую для транспортировки:
            — удобную для вас дату переезда (14го, 18го и 21 января);
            — номер сервера;
            — авторизационные данные.

            Если информация с пожеланиями по переезду не будет предоставлена вовремя, мы будем вынуждены назначить дату по своему усмотрению. Во время переезда сервера не будут доступны ориентировочно с 7 до 19 часов.

            Для успешной работы сервера в новом дата-центре потребуется смена сетевых настроек для сервера. Необходимые настройки для серверов, находящихся на нашем администрировании, будут произведены силами наших специалистов. Для серверов, находящихся на собственном администрировании, необходимые настройки будут высланы индивидуально на контактный e-mail.
            »

            Может я не понимаю чего, но мне кажется это просто жесть. Переезжать с 7 до 19 часов, то есть весь день. Там есть сервера на которых минимум по 50 клиентов.

            Что думаете?
            Читать дальше →
          • mod_wsgi 3.1 вышел 25 ноября

              Что было нового в версии 3.0:
              1. Поддержка питона 3.1 и выше.
              2. Опции «process-group», «application-group», «callable-object» и «pass-authorization» могут быть размещены в директивах WSGIScriptAlias и WSGIScriptAliasMatch
              3. Если клиент обрывает соединение в процессе обработки итератора вместо «бросания исключения» теперь записывается отладочное сообщение в лог
              4. В директиву WSGIDaemonProcess добавлена опция «chroot», позволяющая запускать приложения более изолированно
              5. Добавлена глобальная директива WSGIPy3kWarningFlag, при использовании python2.6 будут выдаваться предупреждения
              6. Исправлена «assertion error» если питон был скомпилирован с директивой Py_DEBUG
              7. Добавлена поддержка «Content-Type: chunked» в запросе (директива «WSGIChunkedRequest»). Данные склеиваются и передаются приложению на обработку.
              8. Значения HTTP заголовков теперь передаются в справочнике окружения, для хуков доступа, авторизации и аутентификации
              9. Флаг «flag wsgi.run_once» не выставляется в True, при работе в режиме демона, когда «maximum-requests» установлен в 1. В случае использования множества потоков, параметр «maximum-requests» проверяется только после завершения обработки запроса, поэтому нет гарантии, был ли выполнен только один запрос
              10. Теперь интерпретаор инициализируется не в родительском процессе, а только после того, как будет создан дочерний
              11. Сообщения из модулей-расширений на C попадают в логи виртуальных хостов, как и положено, а не в общий лог, как было ранее
              12. Теперь невозможно писать сообщения в логи «чужих» виртуальных хостов
              13. В режиме демона может производиться внутренняя переадресация с использоваением заголовка «Location» в ответе
              14. В режиме демона может использоваться директива «WSGIErrorOverride», для того, чтобы возвращать стандартные страница ошибок Apache
              15. Добавлена директива «WSGIPythonWarnings» работающая по аналогии с директивой «-W» интерпретатора
              16. В директиву «WSGIDaemonProcess» добавлена опция «cpu-time-limit» определяющая количество процессорного времени, после которого процесс будет перезапущен
              17. В директиву «WSGIDaemonProcess» добавлена опция «cpu-priority» говорящая за себя
              18. Добавлена директива «WSGIHandlerScript» позволяющая определить скрипт, обрабатывающий определённый тип файлов


              И ещё множество исправлений и улучшений, о которых можно почитать в оригинале тут: code.google.com/p/modwsgi/wiki/ChangesInVersion0301

              Скачать, как обычно можно тут:
              code.google.com/p/modwsgi/downloads/list

              UPD:
              Да, всё работает
              ./configure --with-python=python3.1 --disable-framework
              make && sudo make install
            • Растеризация в Inkscape

                Здравствуй, хабранарод!

                В статье я постарался осветить несколько важных моментов, связанных с особенностями векторной графики вообще и Inkscape в частности.
                Следует отметить, что и в пером и во втором я совершенно недавно, поэтому суровым специалистам дальше читать не советую.

                Поводом к написанию данной статьи послужили несколько событий: Внезапное с моей стороны приобщение к этому графическому редактору, и прочтение этой статьи про сам редактор и этого крика бедной верстальщицы

                Читать дальше →
              • Mercurial для параллельной работы с несколькими похожими проектами, часть 1

                  Введение


                  В статье рассматриваются несколько проблем (и полезных возможностей) при работе с mercurial и предлагаются варианты их решения.

                  Несколько проектов на одном фреймворке

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

                  Что же делать?
                  Читать дальше →
                • Как сделать сайт более iPhone-совместимым за 5 шагов

                    Тот факт, что iPhone предлагает наиболее развитый мобильный браузер среди мобильных платформ, пожалуй, ни у кого не вызовет сомнений. Однако не все знают, что довольно небольшими усилиями можно сайт сделать еще более дружественным к тем, кто смотрят его на iPhone или iPod Touch.

                    Ниже предлагаются простые 5 шагов, с которых можно начать, на примере сайта WHOIS Digger.

                    Шаг 1. Аналог favicon.ico

                    Когда пользователь создает ссылку на ваш сайт в виде иконки в SpringBoard, iPhone автоматически формирует картинку из скриншота страницы. В результате почти всегда получается неразборчивая каша, которая на гордое звание «иконки для iPhone» никак не тянет. Пропишите этот тег в заголовке страницы:

                    <link rel="apple-touch-icon" href="res/iphone_icon.png" />

                    и добавьте соответствующую картинку res/iphone_icon.png размером 57х57 пикселов. iPhone сам добавит скругленные углы и полукруглый блик, сделав вашу иконку похожей на остальные.

                    Вот так выглядит исходная картинка и иконка на рабочем столе iPhone:


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