e0ne's comments

Отключение кеширования статических файлов в Tornado

Published at April 5, 2012 ·  2 min read

Статические файлы (картинки, скрипты, css), как правило кешируются для более быстрой работы сайтов (уменьшение трафика - это уже скорее побочное явление). И в этом, казалось бы, нет ничего плохого. За исколючением одного - когда это самое кеширование мешает разработке. В моем случае используется стандартная связка nginx для статики + Tornado для всего остального. Но так как создавать вторую версию конфигурации nginx’а с отключенным кешированием мне не хотелось, да и в процессе разработке во многих случаях можно обойтить самим лишь Tornado, то я решил отключить кеширование в Tornado....

CPython: bytecode - что, где, зачем?

Published at April 3, 2012 ·  3 min read

Хотя python и является интерпретируемым языком программирования, но все-же какае-то компиляция в нем есть. Это не такая компиляция, которую многие привыкли в C/C++. Скорее это нечно похожее на JVM (java virtual machine) и CLR (Common Language Runtime). Это компиляция в bytecode - низкоуровневый платформонезависимый язык, который выполняется внутри Python Virtual Machine (PVM). Более полное и официалное определение с сайта python.org: Python source code is compiled into bytecode, the internal representation of a Python program in the CPython interpreter....

Восстанавливаем работу Mercurial и MacOS Lion + Python 2.7

Published at March 21, 2012 ·  1 min read

Уже не помню когда у меня перестал ратотать клиент к mercurial (hg) - после перехода на Python 2.7 или апгрейда дла Lion. Но так, как я им не пользовался, то решил не тратить время на восстановлние работоспособности. Но тут на проекте решили использовать Mercurial в качестве source control. Соответственно пришлось разбираться с hg. Сразу скажу что установка последней версии проблему не решила. Шаг 1. Выполняем команду hg и получаем ошибку:...

Интересная особенность типа bool

Published at March 6, 2012 ·  1 min read

На днях узнал об одной интересной особенности типа bool в python: >>> b = True >>> b + 1 2 Поведение достатчно логичное, если учесть, что: >>>> isinstance(b, int) True Всё дело в том, что тип bool - это всего-лишь синтаксический сахар и наследник от типа int, который, для удобства использования, может иметь всего два значения - 0 (False) и 1 (True). Пример выше врядли встретится в коде, но зать об этом стоит на случай если где-то случайно поменяется тип переменной с bool на int или наоборот....

Материалы доклада про XSS на QAClub (Харьков)

Published at March 6, 2012 ·  1 min read

Сама презентация: Невоторые полезные ссылки   http://en.wikipedia.org/wiki/Cross-site_scripting http://ha.ckers.org/xss.html http://www.amazon.com/XSS-Attacks-Scripting-Exploits-Defense/dp/1597491543/ref=sr_1_1?ie=UTF8&qid=1331027707&sr=8-1 https://www.owasp.org/index.php/Cross-siteScripting(XSS) http://www.ibm.com/developerworks/tivoli/library/s-csscript/ http://support.microsoft.com/kb/252985 http://css-tricks.com/what-is-xss/ http://habrahabr.ru/blogs/infosecurity/139453/   ...

Доклад про XSS на QAClub (Харьков)

Published at February 27, 2012 ·  2 min read

Уже послезавтра (ну ладно, почти послезавтра) я буду делать доклад на очередной встрече харьковских QA - QAClub‘е. И все было бы ничего, если б в анонсе встречи не были добавлены следующие строчки: “Докладчики постараются рассказать на уровне, который будет доступен и для людей, только знакомящихся с темой безопасности web-приложений. Для понимания доклада про XSS (cross site scripting) знание JavaScript не обязательно”. После этого некоторые самые вкусные интересные вещи о XSS решил не рассказывать....

Тестирование в Python: nose vs pytest

Published at February 25, 2012 ·  2 min read

Продолжаю сравнивать различные python-библиотеки. На этот раз выбор пал на два тест-фреймворка: nose и pytest. Первый позиционирует себя как unit test framework, второй - как для модульных, так и для функциональных и других тестов. Но так, как грань между модульными, интеграционными и функциональными тестами достаточно тонкая, то ее часто не замечают. Поэтому, эти библиотеки можно использовать для всех вышеперечисленных тестов. Краткое сравнение функциональности фреймворков (тут я выбрал наиболее важные для меня вещи): | |nose|pytest |Репозиторий |https://github....

Сравнение библиотек pika и kombu на примере работы с RabbitMQ

Published at February 21, 2012 ·  2 min read

RabbitMQ - одна из реализаций сервера для обмена сообщениями на базе протокола AMPQ(http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, http://amqp.org/). Подробно описывать его работу, достоинства и недостатки я сейчас не буду. Цель этого поста - сравнить две библиотеки для работы с ним с помощью Python. На самом деле, этих библиотек значительно больше, краткий список их доступен на сайте RabbitMQ: http://www.rabbitmq.com/devtools.html#python-dev. Сравнивал по принципу “нужно это, это и еще вооон то”. Детальное описание фич на сайте - ниже только те, которые были критичные для меня....

Конфигурация сетевых интерфейсов в RHEL-based операционных системах

Published at February 15, 2012 ·  1 min read

Еще один пост из серии “чтоб не забыть и знать где искать”. По умолчанию, RHEL 6.x и любой другой, основанный на нём (CentOS, Scientific Linux), кроме Fedora, дистрибутив в минимальной установки (в других не проверял) после запуска не поднимает доступные ему сетевые интерфейсы. Для их работоспособности необходимо сделать следующее: ifup eht0 # dhclient eth0 Первая команда включает сетевой интерфейс eth0, вторая - запускает DHCP Client. Рабочую сеть мы получили, но теперь прийдется выполнять данные команды после каждой перезагрузки, что не есть хорошо....

Избавляемся от ошибки socket.error: [Errno 98] Address already in use в python

Published at February 8, 2012 ·  1 min read

Время от времени, при разработке очередного API, которое работает поверх HTTP или создается Socket-сервер после остановки и попытки запуска сервера получаю ошибку: socket.error: [Errno 98] Address already in use Проблема заключается в том, что при аварийном (Ctrl+Z) завершении сервера в операционной системе остается запущенным процесс, который слушает нужный мне порт. В разных ОС время жизни такого процесса разное: в RHEL это около двух минут, в Ubuntu - больше. Решение достаточно простое....



Archives

2018 (2)
2017 (3)
2016 (2)
2015 (3)
2014 (5)
2013 (17)
2012 (22)
2011 (35)
2010 (25)
2009 (35)
2008 (32)
2007 (2)