Archive 2012

Установка Open vSwitch на RHEL/CentOS 6.3 в 10 шагов

Published at December 20, 2012 ·  2 min read

 

Open vSwitch (http://openvswitch.org/) - это виртуальный свитч, котороый позволяет вам строить виртуальную сеть (SDN) поддерживает различные протоколы для мониторнига и управления (NetFlow, sFlow, SPAN, RSPAN, CLI, LACP, 802.1ag и др). Приставка “open” означает что он является opensource продуктом со всеми вытекающими плюсами и минусами.  На просторах интернета найти документацию по нему и руководства по установки не проблема, если вы знаете английский язык. На русском практически ничего нет:(. Далее я расскажу процесс установки его с исходников на Red Hat Enterprise Linux 6.3 (RHEL) и основанной на базе него бесплатной CentOS 6.3 с ядром 2.6.32-279.el6.x86_64. 

...


Lettuce и Python3

Published at December 3, 2012 ·  1 min read

 

Решил я для своих маленьких и уютных домашних проектов (pet project’ов) использовать Python 3.3. Казалось бы, ничто не предвещало беды. Ну кроме как отсутстие поддержки Python 3.x у некоторых библиотек. В частности, Lettuce(http://lettuce.it/).

Но так, как я уже выбрал не самый простой, на данный момент, путь (да, я про python3), то отступать было не куда, решил портировать Lettuce под Python 3.3. Возможно, свою роль в этом сыграли еще свежие воспоминания о UA Pycon 2012, в частности, доклад Михаила Коробова “Как всем перейти на Python 3.x” (http://ua.pycon.org/talks/26).

...


Краткой описание сетевых интерфейсов в Linux

Published at November 29, 2012 ·  1 min read

Посмотрим какие сетевые интерфейсы бывают и какие есть на конкретном хоте. Делается это командой “ifconfig” или “ip link show”. У каждого тут будет разный список, в моем случае, команда “ip link show” выводит следующее:

 

Рассмотрим подробнее типы интерфейсов:

lo - local loopback interface, виртуальный интерфейс, который присутствует в ядре, отвечает на адрес 127.0.0.1. Весь пакеты, отправленные на него будут автоматически отправлены обратно на тот же интерфес(адрес), с какого отправили.

...


Избавляемся от ошибки ValueError: unknown locale

Published at October 8, 2012 ·  1 min read

Переодически сталкиваюсь с этой проблемой и приходится гуглить. Решил, записать, что бы проще искать.

Собственно, проблема выглядит так:

File “/home/e0ne/src/project/.venv/app/lib/python2.7/locale.py”, line 496, in getdefaultlocalereturn _parse_localename(localename)File “/home/e0ne/src/project/.venv/app/lib/python2.7/locale.py”, line 428, in _parse_localenameraise ValueError, ‘unknown locale: %s’ % localenameValueError: unknown locale: UTF-8

Проблема заключается в том, что для текущего сеанса шелла(bash, etc) не настроена системная локаль. Ошибка позникала как под Linux(Ubuntu, RHEL-based), так под Mac OS. Фиксится просто:

...


Private Clouds: что? где? зачем?

Published at October 2, 2012 ·  1 min read

 

Так как в последнее время я часто слышу вопросы вида “зачем нужны частные облака и что это такое?”, то решил написать этот пост, на который смогу ссылаться.

Итак, вначеле уже традиционное определение из Wikipedia:

Частное облако (англ. private cloud) — инфраструктура, предназначенная для использования одной организацией, включающей несколько потребителей (например, подразделений одной организации), возможно также клиентами и подрядчиками данной организации. Частное облако может находиться в собственности, управлении и эксплуатации как самой организации, так и третьей стороны (или какой-либо их комбинации), и оно может физически существовать как внутри, так и вне юрисдикции владельца.

...


OpenStack и Quantum: начало

Published at September 11, 2012 ·  4 min read

 

Из wiki.openstack.org:

Quantum is an OpenStack project to provide “network connectivity as a service” between interface devices (e.g., vNICs) managed by other Openstack services (e.g., nova).

Из описания можно предположить, что в будущем это станет заменой nova network, что не далеко от правды. Ниже я расскажу об установки OpenStack + Quantum и немного о самом Quantum.

Установка OpenStack c помощью скриптов devstack является одной из самых простых и быстрых. В простейшем случае, это выглядит так:

...


Создание своего локального PyPI репозитория

Published at June 12, 2012 ·  3 min read

 

Создать свой PyPI репозиторий для рабочего проекта мне пришлось сразу по нескольким причинам: начиная от архитектурных особенностей, заканчивая простотой удобством такого решения. Началось все с того, что наше приложение состоит из набора независимых между собой частей, packages. Соответственно, каждый такой пакет может зависить от любого числа других - как самописных так и нет. В таком случае создавать для каждого пакета свой файл pip-requirements для разворачивания окружения стало сложно и неудобно. Следующая причина - это сделать возможность установки любого пакета нужной верисии не имея доступа к нашей системе контроля версий (mercurial). Все-таки набрать команду “pip install my-package-name” намного проще и быстрее, чем указывать путь к исходникам или source control. И последняя причина для меня была в том, что необходимо следить за всеми зависимостями к внешним библиотекам: не только использовать нужную версию, устанавливать пропатченную, но и иметь список всего используемого в проекте (с этим пунктом возникло больше всего трудностей).

...


Пролемы с компиляцией (Xcode) после перехода на Mac OS Lion

Published at April 30, 2012 ·  1 min read

После перехода на Mac OS X Lion многие приложения, которые нужно устанавливать с исходноков перестали компилироваться с примерно такой ошибкой:

 

error trying to exec ‘cc1plus’: execvp: No such file or directory

В список таких приложений попали macports, MacVim, питоновские библиотеки, которые имели расширения на C и т.д. Суть проблемы заключается в том, что Xcode 4.3 или предыдущая версия (Xcode’ом не польщуюсь, поэтому особо не слежу за апдейтами) начал ставиться со всеми зависимостями и тулами в другую папку, а именно в /Applications/Xcode.app/Contents/Developer/ вместо /Developer/. А так, как у меня стояла предыдущая версия, то новая, по каким-то причинам оставило старую как дефолтную. 

...


Отключение кеширования статических файлов в 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

Это компиляция в 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. The bytecode is also cached in .pyc and .pyo files so that executing the same file is faster the second time (recompilation from source to bytecode can be avoided). This “intermediate language” is said to run on a virtual machine that executes the machine code corresponding to each bytecode. Do note that bytecodes are not expected to work between different Python virtual machines, nor to be stable between Python releases.

...


Восстанавливаем работу 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 + 12

Поведение достатчно логичное, если учесть, что:

»» isinstance(b, int)True

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

...



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

Published at February 27, 2012 ·  1 min read

Уже послезавтра (ну ладно, почти послезавтра) я буду делать доклад на очередной встрече харьковских QA - QAClub‘е. И все было бы ничего, если б в анонсе встречи не были добавлены следующие строчки:

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

После этого некоторые самые вкусные интересные вещи о XSS решил не рассказывать. Возможно, если доклад получится хорошим и будут желающие - будет вторая чать, более хардкорная, а пока планирую рассказать следующее:

...


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

Published at February 25, 2012 ·  1 min read

 

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

Краткое сравнение функциональности фреймворков (тут я выбрал наиболее важные для меня вещи): | |nose|pytest |Репозиторий |https://github.com/nose-devs/nose|https://bitbucket.org/hpk42/pytest/ |Дата последнего изменения|15.02.2012|6.02.2012  |Последняя версия|1.1.3|2.2.3  |Лицензия| |As is  |Документация| +, подробная, легко разобраться|+, подробная, легко разобраться  |Запуск определенного набора тестов|+|+  |Генерация отчета в формате xUnit|+|+  |Настройка детализации отчетов |+|  |Изменение стандартного наименования||+ |Поддержка fixtures|fixeures, setup* и *teardown методы|+, parametrized tests  |Интеграция с django|+, сторонний плагин|+, сторонний плагин  |Соответствие PEP8 |+|+  |Расширяемость|+, механизм плагинов|+, механизм плагинов  |Интеграция с setuptools |+ |+/- 

...


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

Published at February 21, 2012 ·  1 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 - больше. 

Решение достаточно простое. Т.к. при нажатии клавиш Ctrl+Z процесс получает команду “keyboard interrupt”, то достаточно обработать нужное исключение и корректно завершить процесс:

...


Переквалификация программиста - так ли это просто?

Published at January 25, 2012 ·  3 min read

 

Так как периодически сталкиваюсь с этой темой решил высказать свое мнение и заодно поспорить на тему “Насколько легко программисту выучить новый язык и писать на нем”.

Я неоднократно слышал утверждения о том, что хорошему программисту выучить новый язык и писать на нем качественный софт/код не составит труда. Со своей стороны, я уже второй раз поменял основной язык, на котором пишу/зарабатываю на хлеб с маслом. Сначала был C#/.NET, как правило, это был веб, ASP.NET/ASP.NET MVC. Часто приходилось писать на JavaScript, потом практически полностью ушел от серверной части и писал Front-end на JS. Переход на JavaScript был для меня безболезненным, даже не смотря на поддержку IE6 :). Тем временем познакомился с Python и через какое-то время перешел полностью на него. Исходя из такого, пусть и небольшого, программерского опыта утверждаю что переход на другой язык программирования - это почти всегда обучение с нуля, переход, грубо говоря, от Senior (которым я себя никогда не считал) к Junior.

...


virtualenv + pip как альтернатива buildout

Published at January 4, 2012 ·  2 min read

 

Мне всегда казалось, что для небольших проектов использование buildout - это как с пушки по воробьям: долго, сложно и неудобно. Хотелось чего-то более простого и понятного. И таким оказалась связка virtualenv + pip.

Про virtualenv я уже писал тут. pip - это замена easy_install, менеджер пакетов для python, который позволяет быстро и удобно устанавливать, обновлять и удалять пакеты. Более подробно можно почитать на официальном сайте. Сейчас же меня интересует возможность быстрого развертывания необходимого окружения для запуска проекта. В двух словах, задача выглядит так:

...


Мысли в влух о модульности Django

Published at January 3, 2012 ·  2 min read

Я всегда считал и продолжаю это делать, что Django - не очень-то и модульный фреймворк. Он расширяемый, но не модульный, IMHO. В моем понимании модульный фреймворк, это фреймворк, который состоит из ядра (core), и каких-то модулей, которые можно к нему подключать при желании/необходимости. Но и без них будет доступна минимальная функциональность. В случае же Django - выкинуть из него некоторые модули (e.g. models, template engine) достаточно сложно. Что-бы сделать что-то подобное, необходимо самостоятельно удалять ненужные куски кода, что тянет за собой проверку работоспособности оставшихся частей и прочие неприятности в виде сложной поддержки полученного кода и обновление фреймворка.

...


2012-й: успеть до конца света

Published at January 1, 2012 ·  1 min read

 

Небольшой список того, что хотелось бы сделать в этом году:

  • дочитать книги Learning Python & Prorgamming Python;
  • опрделиться до конца с форматом блога;
  • вывести со статуса beta notacash.com и доделать там всё, что планировал;
  • разобраться с CQRS и дописать брошенное django-cqrs;
  • ещё больше перейти на лицензионный контент (в первую очередь софт, книги, музыка);
  • прочитать всё из  http://www.etnogenez.ru/;
  • сделать регулярными встречи KharkivPy;
  • закончить начатое в 2011-м.

 

...


Tags

.net .net framework .net framework 3.5 agile ajax ajax control toolkit ampq ansible apache asp.net asp.net mvc automation axum babel bash benchmark blog blog engine bootstrap buildout c# cache centos chrome ci cinder ckan cli cloud code review codeplex community config debugger deface dependencies development environment devices devstack devtime disks django dlr dns docker dockerimage dos easy_install elmah encoding environment variables error event events everything-as-a-code exception exceptions fabrik firefox flask foreach forms fstab gae gcc gerrit git github go google google app engine grep hack hacked hardware headless horizon hound html hugo iaas ienumerable iis internet iptables iron python ironic iscsi java script javascript jenkins jquery js jsx k8s kharkivpy kiss kombu kubernetes kvm kyiv lettuce libvirt linux lio loci logging loopback losetup lvm mac os macos mercurial microsoft microsoft sync framework mobile mono ms office msbuild networking news nginx npm npx offtopic oop open source open xml opensource openstack openvswitch os p'n'p packages paraller development patterns & practices performance php pika pip plugins podcast popup postgresql profiler project protocols proxy pycamp pycharm pycon pykyiv pylint pypi python python 3 qcow quantum qumy rabbitmq rar react reactjs refactoring rfc rhel search engine security selenium server shell silverlight socket software engineering source control sourcegear vault sources sql sql server sql server express sqlalchemy ssh static site sublimetext svg tests tgt tipfy todo tornado typescript uapycon ui uneta unit tests upgrades usability vim virtualenv visual studio vitrage vm vue.js vuejs web development web server web service web_root webpack webroot windows windows live word press x32 x64 xcode xml xss xvfb интернет-магазин книги

Recent posts

Go 1.18: new features

Всё будет Kubernetes

2022 Relaunch

Everyday Blogging

I don't want this CI


Archives

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