Публикации с меткой «javascript»

Блог python на хабрахабре

Python / Реализация объектов-словарей, как в Javascript

Недавно, после длительного взаимодействия моего мозга с Javascript я вернулся к привычному для меня Python, и понял, что чего-то мне не хватает, а именно объектов как в Javascript, тех что хеш-таблицы, ага. Фууууу, может быть скажете вы и, возможно зря.

Блог python на хабрахабре

Python / [Ссылка] Создание сервера оповещений с использованием Tornado и Socket.IO

В статье описывается создание Comet-сервера оповещений с использованием Tornado на стороне сервера и SocketIO на стороне клиента.

Подводные грабли web, django, python

Надо работать

Итак друзья, в связи с сильно затянувшимися новогодними каникулами и полным отсутствием денег, ищу любую оплачиваемую удаленную работу “по специальности” (можно и не удаленную, но тогда в Тюмени или в Москве в с предоставлением жилья). Под “специальностью” надо понимать django, python, SEO, HTML/CSS верстка, javascript’овые фичи и пр. Люблю и немного умею оптимизировать проекты под высокие нагрузки. Работал со большинством реляционных систем управления базами данных.

Рассмотрю любые предложения. Пишите: markeev@gmail.com.






Сергей Матвеенко

Пам-парам, по "монгам"

Пару месяце назад я начал активно использовать MongoDB как для своих открытых проектов, так и по работе. Надо сказать, что этот относительно кратковременный опыт весьма и весьма положительный.

Я не хочу здесь пересказывать документацию. Однако, хочу описать некоторые вкусности, неочевидности и, конечно, подводные камни, с которыми я столкнулся в самом начале пути. Возможно, кому-то это сэкономит нервы в начале освоения этой документ-ориентированной базы данных.

В основном я использую MongoDB из Python, для чего использую PyMongo напрямую или MongoEngine (подобие ORM для MongoDB с несколькими фишками для использования его с Django). И вот как раз с взаимодействием с MongoDB из Python-а и связаны пара подводных камушков. Точнее с параллельным использованием JavaScript встроенного в MongoDB и PyMongo.

Вообще говоря, "питоновский" тип DateTime прекрасно обрабатывается MongoDB. Внимательный читатель документации сразу обратит внимание (я этого не сделал), что PyMongo нужно передавать дату/время в UTC, т.е. нужно использовать datetime.utcnow(), а не привычное большинству datetime.now(). Это первый подводный камень, который, впрочем, вполне очевиден и в явном виде отражен в документации.

Есть еще один подводный камень связанный с хранением времени. Предположим, что, по каким-то причинам, мы хотим хранить время в формате unixtimestamp, т.е. вещественное количество секунд прошедших с 1.01.1970 с тремя знаками после запятой или даже просто целым числом. Это может быть нужно чтобы упростить и ускорить запись журнала каких-либо событий в MongoDB. Пока мы работаем с этими числами через PyMongo, все хорошо. Но потом встает необходимость оперировать с этим значением времени из функции JavaScript, например, при выполнении операции Map/Reduce или просто в консоли MongoDB. Пусть в базе лежит такой документ (timestamp получен сейчас, т.е., как минимум, в 2010 году):
{ "_id" : ObjectId("4d125e16f52cb12e01d5d041"), "timestamp" : 1293038527, "name" : "jump" }
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/1Ot. Код раскрашен с помощью Paste.NoPHP.ru.
Пусть нам нужно получить год, месяц и число, в который произошло событие. Вот с чего начал я:
db.events.find().forEach(function (event) {
var date = new Date(event.timestamp);
print(date.getFullYear(), date.getMonth(), date.getDate());
})
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/1Ov. Код раскрашен с помощью Paste.NoPHP.ru.
Какого же было мое удивление, когда я увидел в ответ "1970 0 16", т.е. нулевой (!) месяц и всего 16-й день от начала эпохи. Чтение документации по JavaScript Date Object открыло мне глаза прежде всего на то, что в JavaScript timestamp - это целое число миллисекунд прошедших от начала эпохи. И код превратился в такой:
db.events.find().forEach(function (event) {
var date = new Date(event.timestamp * 1000);
print(date.getFullYear(), date.getMonth(), date.getDate());
})
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/1Ow. Код раскрашен с помощью Paste.NoPHP.ru.
Этот код вернул уже "2010 11 22", но сегодня 22.12.2010. Да, да, да, вспоминаем нулевой месяц. Из той же документации по JavaScript Date Object я узнаю, что, оказывается, именно месяц считается в JavaScript начиная с нуля (зачем???), тогда код приобретает окончательный вид:
db.events.find().forEach(function (event) {
var date = new Date(event.timestamp * 1000);
print(date.getFullYear(), date.getMonth() + 1, date.getDate());
})
Постоянная ссылка на этот кусок кода: http://paste.nophp.ru/1Ox. Код раскрашен с помощью Paste.NoPHP.ru.
Теперь ответ правильный: "2010 12 22".

На сегодня, думаю, этого достаточно. В следующий раз поделюсь опытом использования MapReduce в MongoDB. Покажу как возвращать из Reduce списки значений и какого подхода к расчету значений в Reduce следует избегать.

Подводные грабли web, django, python

SuperBoxSelect для ExtJS

Он реально крут! Советую всем, кто когда-либо собирается делать формы на ExtJS присмотреться к нему:

http://technomedia.co.uk/SuperBoxSelect/examples3.html

Наиболее приятная (для меня) его часть в том, что допилить djangoextjs для генерации форм с ним сможет даже однорукий дебил.






Сергей Мельниченко

Новые плюшки SyntaxHighlighter 3


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

2 июля 2010 года была анонсирована новая версия SyntaxHighlighter 3.0.83. В этом небольшом посте хочу немного рассказать про новые возможности и недостатки данной версии.

Динамическая загрузка кистей


Одним из самых привлекательных изменений, которые могут сподвигнуть на переход к 3-й версии, является динамическая загрузка кистей для различных языков. Как раз вот это вот изменение и сподвигло меня написать эту статью.

Для подключение динамической загрузки используйте следующий код:
<script src="shCore.js" type="text/javascript"></script>
<script src="shAutoloader.js" type="text/javascript"></script>
<script type="text/javascript">
SyntaxHighlighter.autoloader(
'js jscript javascript  /js/shBrushJScript.js',
'applescript            /js/shBrushAppleScript.js');
SyntaxHighlighter.all();
</script>

Отсутствие flash-а


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

Пример выделения:


Результат копирования:
C:\Sphinx>bin\indexer --all
02 Sphinx 0.9.9-rc1 (r1566)
03 Copyright (c) 2001-2008, Andrew Aksyonoff


В версии 3 проблема решена разделением блоков нумерации и кода.



Выделяем необходимую область и копируем (Ctrl-C). Проще простого, а главное интуитивно понятно!

"Скрываемые" блоки


Эта возможность позволяет помещать скрытые блоки кода на страницу и отображать их по клику пользователя на тексте. Добавьте атрибут title к тегам <pre /> или <script /> следующим образом.
<script type="syntaxhighlighter" class="brush: bash" title="Хочешь посмотреть код, жми тут!">
C:\Sphinx>bin\indexer --all
Sphinx 0.9.9-rc1 (r1566)
Copyright (c) 2001-2008, Andrew Aksyonoff
</script>


В результате будет только фраза "Хочешь посмотреть код, жми тут!", при клике на которой раскроется контейнер с кодом.

Непредвиденное поведение


В данной версии не обошлось и без небольших багов. Возможно будет поправлено в следующих релизах.

Первое. При наведении мышкой на область "подсвеченного" кода иногда возникает почти незаметный эффект прокрутки внутри области, тем самым блокируя прокрутку во всем окне, что доставляет определенные неудобства :(. Замечено в FireFox 3.6.10.

Второе. Кликает двойным щелчком на область "подсвеченного" кода (происходит выделение всего кода), потом одинарным кликом на любое место той же области и замечаем, что текст всей области стал одноцветный (черный). Если убрать курсор(клик за рамками области) с области, то цвета будут отображены снова. Наблюдается в FireFox 3.6.10, Safari 5.0, Chrome 6.0.472.62.

Добавление SyntaxHighlighter 3 в блог Blogger


Думал упростить данную установку и реализовать виджет в котором бы содержалась вся логика по установке и инициализации SyntaxHighlighter 3. Но после отладки скриптов столкнулся с особенностью реализации виджетов в Blogger. Как оказалось, каждый такой виджет запускается в фрейме, в котором блокируется доступ("удаляются" ссылки) к основной странице :(. Т.е. эффект от этого виджета будет стремится к 0 :). Поэтому заходим в на страницу редактирования шаблона ("Дизайн"->"Изменить Html"), находим элемент "</body>" и вставляем следующий код до этого элемента.
<link type="text/css" rel="Stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript"></script>
<script type="text/javascript">
function path() {
var args = arguments, result = [];
for(var i = 0; i < args.length; i++) {
result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/')); 
}
return result;
}

SyntaxHighlighter.autoloader.apply(null, path(
'applescript            @shBrushAppleScript.js',
'actionscript3 as3      @shBrushAS3.js',
'bash shell             @shBrushBash.js',
'coldfusion cf          @shBrushColdFusion.js',
'cpp c                  @shBrushCpp.js',
'c# c-sharp csharp      @shBrushCSharp.js',
'css                    @shBrushCss.js',
'delphi pascal          @shBrushDelphi.js',
'diff patch pas         @shBrushDiff.js',
'erl erlang             @shBrushErlang.js',
'groovy                 @shBrushGroovy.js',
'java                   @shBrushJava.js',
'jfx javafx             @shBrushJavaFX.js',
'js jscript javascript  @shBrushJScript.js',
'perl pl                @shBrushPerl.js',
'php                    @shBrushPhp.js',
'text plain             @shBrushPlain.js',
'py python              @shBrushPython.js',
'ruby rails ror rb      @shBrushRuby.js',
'sass scss              @shBrushSass.js',
'scala                  @shBrushScala.js',
'sql                    @shBrushSql.js',
'vb vbnet               @shBrushVb.js',
'xml xhtml xslt html    @shBrushXml.js'
));

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>

Надеюсь, что-то новое и/или полезное вы для себя нашли! :)

Сергей Мельниченко

Новые плюшки SyntaxHighlighter 3



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

2 июля 2010 года была анонсирована новая версия SyntaxHighlighter 3.0.83. В этом небольшом посте хочу немного рассказать про новые возможности и недостатки данной версии.

Динамическая загрузка кистей


Одним из самых привлекательных изменений, которые могут сподвигнуть на переход к 3-й версии, является динамическая загрузка кистей для различных языков. Как раз вот это вот изменение и сподвигло меня написать эту статью.

Для подключение динамической загрузки используйте следующий код:
<script src="shCore.js" type="text/javascript"></script>
<script src="shAutoloader.js" type="text/javascript"></script>
<script type="text/javascript">
SyntaxHighlighter.autoloader(
'js jscript javascript  /js/shBrushJScript.js',
'applescript            /js/shBrushAppleScript.js');
SyntaxHighlighter.all();
</script>

Отсутствие flash-а


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

Пример выделения:


Результат копирования:
C:\Sphinx>bin\indexer --all
02 Sphinx 0.9.9-rc1 (r1566)
03 Copyright (c) 2001-2008, Andrew Aksyonoff


В версии 3 проблема решена разделением блоков нумерации и кода.



Выделяем необходимую область и копируем (Ctrl-C). Проще простого, а главное интуитивно понятно!

"Скрываемые" блоки


Эта возможность позволяет помещать скрытые блоки кода на страницу и отображать их по клику пользователя на тексте. Добавьте атрибут title к тегам <pre /> или <script /> следующим образом.
<script type="syntaxhighlighter" class="brush: bash" title="Хочешь посмотреть код, жми тут!">
C:\Sphinx>bin\indexer --all
Sphinx 0.9.9-rc1 (r1566)
Copyright (c) 2001-2008, Andrew Aksyonoff
</script>


В результате будет только фраза "Хочешь посмотреть код, жми тут!", при клике на которой раскроется контейнер с кодом.

Непредвиденное поведение


В данной версии не обошлось и без небольших багов. Возможно будет поправлено в следующих релизах.

Первое. При наведении мышкой на область "подсвеченного" кода иногда возникает почти незаметный эффект прокрутки внутри области, тем самым блокируя прокрутку во всем окне, что доставляет определенные неудобства :(. Замечено в FireFox 3.6.10.

Второе. Кликает двойным щелчком на область "подсвеченного" кода (происходит выделение всего кода), потом одинарным кликом на любое место той же области и замечаем, что текст всей области стал одноцветный (черный). Если убрать курсор(клик за рамками области) с области, то цвета будут отображены снова. Наблюдается в FireFox 3.6.10, Safari 5.0, Chrome 6.0.472.62.

Добавление SyntaxHighlighter 3 в блог Blogger


Думал упростить данную установку и реализовать виджет в котором бы содержалась вся логика по установке и инициализации SyntaxHighlighter 3. Но после отладки скриптов столкнулся с особенностью реализации виджетов в Blogger. Как оказалось, каждый такой виджет запускается в фрейме, в котором блокируется доступ("удаляются" ссылки) к основной странице :(. Т.е. эффект от этого виджета будет стремится к 0 :). Поэтому заходим в на страницу редактирования шаблона ("Дизайн"->"Изменить Html"), находим элемент "</body>" и вставляем следующий код до этого элемента.
<link type="text/css" rel="Stylesheet" href="http://alexgorbatchev.com/pub/sh/current/styles/shThemeDefault.css"/>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js" type="text/javascript"></script>
<script src="http://alexgorbatchev.com/pub/sh/current/scripts/shAutoloader.js" type="text/javascript"></script>
<script type="text/javascript">
function path() {
var args = arguments, result = [];
for(var i = 0; i < args.length; i++) {
result.push(args[i].replace('@', 'http://alexgorbatchev.com/pub/sh/current/scripts/')); 
}
return result;
}

SyntaxHighlighter.autoloader.apply(null, path(
'applescript            @shBrushAppleScript.js',
'actionscript3 as3      @shBrushAS3.js',
'bash shell             @shBrushBash.js',
'coldfusion cf          @shBrushColdFusion.js',
'cpp c                  @shBrushCpp.js',
'c# c-sharp csharp      @shBrushCSharp.js',
'css                    @shBrushCss.js',
'delphi pascal          @shBrushDelphi.js',
'diff patch pas         @shBrushDiff.js',
'erl erlang             @shBrushErlang.js',
'groovy                 @shBrushGroovy.js',
'java                   @shBrushJava.js',
'jfx javafx             @shBrushJavaFX.js',
'js jscript javascript  @shBrushJScript.js',
'perl pl                @shBrushPerl.js',
'php                    @shBrushPhp.js',
'text plain             @shBrushPlain.js',
'py python              @shBrushPython.js',
'ruby rails ror rb      @shBrushRuby.js',
'sass scss              @shBrushSass.js',
'scala                  @shBrushScala.js',
'sql                    @shBrushSql.js',
'vb vbnet               @shBrushVb.js',
'xml xhtml xslt html    @shBrushXml.js'
));

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();
</script>

Надеюсь, что-то новое и/или полезное вы для себя нашли! :)

Заметочки

Python datetime to javascript Date

В Django есть DjangoJSONEncoder, который используется при конвертировании данных в json-формат. Он форматирует дату в строку. Пришлось написать свой енкодер, что бы на клиенте получать обьект Date, а не строку.

Copy Source | Copy HTML
  1. from django.utils import simplejson
  2.  
  3. class DatetimeJSONEncoder(simplejson.JSONEncoder):
  4.  
  5.     class DateInt(int):
  6.         '''
            Наследуемся от int, потому что тогда значение будет без "".
            В других случаях получим: "new Date(100500)" и при eval будет просто
            строка.
            '''
  7.         def __str__(self):
  8.             return 'new Date(%s)' % (self*1000)
  9.  
  10.     def default(self, o):
  11.         from django.utils import datetime_safe
  12.         from datetime import datetime
  13.         import time
  14.  
  15.         if isinstance(o, datetime):
  16.             d = datetime_safe.new_datetime(o)
  17.             return self.DateInt(int(time.mktime(d.timetuple())))
  18.         else:
  19.             return super(DatetimeJSONEncoder, self).default(o)
  20.  
  21. #example
  22. from datetime import datetime
  23. from django.utils import simplejson
  24.  
  25. data = dict(date=datetime.now())
  26. json = simplejson.dumps(data, cls=DjangoJSONEncoder)

Vurtseed

JavaScript программисты

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

Получается, что за те же деньги проще взять Java программиста который знает GWT, а на jQuery или подобном фреймворке делать несложные случайные задачи.

(цитата из комментария)

При этом я не хочу оскорбить именно тех кто действительно является JS программистами. Тот же jQuery придумали и написали люди с большим скиллом. А JavaScript входит в список очень популярных языков программирования. Но если посмотреть на вакансии, то обычно "HTML Верстальщик/JavaScript" или "PHP/JavaScript".

Вполне может оказаться, что даже если человек написал сотню страниц кода на JS, то он при этом остался jQuery пользователем.

PYонер

Ищу удаленную работу

Пишу на python, javascript
использую фреймворки django, jquery

по вопросам сотрудничества пишите devex.soft@gmail.com

Блог django на хабрахабре

Django Framework / Загрузка нескольких файлов в Django — Multifile upload Django SWFUploader

Django предоставляет отличные средства для быстрого построения back-end без лишних телодвижений. Однако создание на его основе галлереи связано с множеством ручной работы по загрузке каждого файла в отдельности.

Решений у этой проблемы несколько:
  1. загрузка архива и его распаковка на сервере,
  2. использование специального поля,
  3. имитация множественных post-запросов.

Я выбрал последний вариант, так как в этом случае нужно внести минимум изменений. Все операции выполняются на клиенте. Использовать для этого будем swfuploader.

Задумка проста, модифицируем стандартный интерфейс добавления, так что бы перехватывать событие сохранения объекта. Заполненные поля будем использовать в качестве шаблона для создания множества объектов для выбранных файлов.

Итак выполним следующие действия.

Блог django на хабрахабре

Django Framework / DTemplate — шаблон django проекта для ускорения разработки

Доброго времени суток, уважаемый All!

Хочу представить на суд хабрасообщества проект, над которым я работал последнее время. Очень хочу получить конструктивную критику и предложения по его улучшению.

Описание проекта


DTemplate — проект с открытым исходным кодом, который дает возможность пользователям django иметь многочисленные инструменты упрощающие работу при создании нового django проекта без необходимости настраивать их каждый раз.

DTemplate создавался для собственных целей из уже существующих приложений с открытым кодом. Публикуя данный проект я хотел бы выразить огромную благодарность людям, которые предоставили возможность доступа к своим интеллектуальным трудам.

Блог django на хабрахабре

Django Framework / Допиливаем Django-admin бензопилой. Часть II &mdash; WYSIWYG

Итак обещанное продолжение прошлого поста. В результате мы прикрутим TinyMCE к flatpages и превратим лист/форму созданной модели с картинками в простой файловый менеджер для вставки картинок. Для этого понадобится совсем немного Javascript и единственная строчка в 'admin.py'.

Блог django на хабрахабре

Django Framework / Допиливаем админку бензопилой. Часть I — Thumbnails

Вставлю свои пять копеек о том, насколько классная и гибкая штука — админка Django. Многие упорно не хотят понять, что это не игрушка, а вполне себе приложение production-качества, которое просто глупо не использовать, если есть такая возможность.

И дело здесь совсем не в том, что разработчики такие молодцы, что предусмотрели так много возможностей кастомизирования, чтобы покрыть все нужды юзеров — это конечно же не совсем так. Тем не менее в распоряжении разработчика всегда есть другое мощнейшее средство кастомизации любых веб-приложений вообще. Таким средством является Javascript. Разработчики Django, прекрасно это осознавая, предоставляют нам все средства для подключения кастомного JS/CSS, что по сути, вобще снимает какие-либо ограничения на то, что мы хотим слепить из нашей админки.

Конечно в этом нет ничего военного и большинство опытных разработчиков так и делают, я лишь попытаюсь описать парочку жизненных рецептов, на основании которых можно, подключив немного фантазии, решать практически любые вопросы связанные с кастомизированием Django-админки. Если конкретнее, то заниматься будем тем, что сделаем акуратные thumbnails для наших ImageField'ов, подключим TinyMCE, и научим его вставлять картинки используя саму Django-admin в качестве файл-менеджера для выбора картинок.

Денис Мищишин

python standard libs for sculpt and pycow

Идея следующая — взять pypy, скомпилировать его с помощью pycow и посмотреть что получится. Результатом должен полный набор стандартных библиотек python которые можно будет запользовать как для sculpt так и для pycow .

Единственное что сдерживает — непонятка с алгоритмом работы import. В том плане что ни в sculpt, ни в pycow import не реализован вообще.

И это обоснованно — потому что действительно неочевидно — как организовывать import в удаленный клиент. Плодить кучу файлов и переспрашивать их с помощью XmlHttpRequest — плохо, потому как много запросов. Упаковывать весь python в один файл — тоже ни разу некомильфо, потому как получится один большой файл, в котором будет много лишнего.

Метки

.net .NET C# .sort 1.2 2009 2010 404 error admin ajax amazon analytics and apache api archlinux asp.net async asynchronous autocomplete bash blender blog blogengine blogs book bootstrap bot bpython buildout byteflow bzr C c plus plus C++ cache cbv Chaco checkio chrome ci ckeditor class based views clojure closure cms cms с удобной админкой code coding style collectd COM comet competition conference ConfigParser contest Context continuous integration CouchDB coverage CppCMS cpyext cpython crud csrf CSS ctypes curl custom model fields cx_freeze cython database db dbm dbqueries debian debug debugging decorator decorators deploy deployment descriptor design dev devconf developers development diveintopython Django django 1.2 django 1.3 django advent django framework django template django trunk django weblog django-admin-tools django-cms django-compressor django-hosts django-piston django-registration django-sphinx django.admin djangoadvent djangocms djangodash doc documentation drupal e-legion eclipse EGit emacs encoding Enthought epoll erlang event exception ExtJS fabric facebook fastcgi finaloption fixtures fonts forms formset fp framework freebsd freeswitch fs2web ftp fun funcparserlib functional gae gamin gandi generic views gettext gevent gil git github gitosis Google Google App Engine google picasa Google Translate google wave Google Web Toolkit grab grablab greenlet gtd gui haskell hg hgshelve highlighter host hosting how-to howto html html5lib Hudson humor i18n icfpc ide idiomatic image-scripting improvements Internet interpreter ipython ironpython izmenimsya.ru jabber java javascript jenkins jetbrains JIT job jquery json jstree jython kde kiev kiyv kyivpy l10n ldap library libs Life Links linux Linux & Unix LLVM logging logs lxml Mac OS X magic mail markdown Matplotlib Mayavi maybe mediavirus meetup memcache Memcached memory messages metaclass middleware migration mikrotik mkd model models mod_python mod_wsgi mongodb monitoring mptt musicmans.ru musicx mvc my-projects mysql netCDF networkx newforms newforms-admin news nginx Nhibernate nix nose NoSQL numpy oop open source OpenID openoffice opster optimization oracle orm os pagination parsing path patterns pdf PDF-принтер PEP PEP8 performance performance optimization perl personality photo php picture-driven computing PIL pinax pingback pip plasma plone plugin plugins postgresql programming progress bar psycopg2 py2exe pybb pybbm pycamp pycharm pycon pycow pycurl pydev pygtk pylons PyNGL pypy pyqt PyQt4 pyrad pyramid PySide Python Python 2.5 python 2.7 python 3 python c api python speed python-mssql python3 pywinauto Qt Qt4 queue rabbitmq radius raw sql re redis redsolution redsolution cms regexp regular expressions release repoze.bfg RequestContext reusable apps robokassa rss ru ruby ruby-on-rails sample satchmo scalability SciPy scraping screencast search selenium self.error seo server setattr settings setuptools shell sikuli sms snippet socket.io software sorting south sphinx spider sql sqlalchemy sqlite ssh startup step-by-step subdomain subversion svn SyntaxHighlighter system tags tdd tddspry teh drama template templates templatetags test testing thinkpad threading threads tips tips and tricks tools tornadio tornado tornado server tricks tutorial tweepy twisted twitter typography uapycon Ubuntu ucsvlog uml Uncategorized unicode unit test unit testing UnitTest Unladen Swallow upload urllib urls utf-8 uwsgi validation vcs versioning video vim virtualenv Visual Studio vkontakte voip wave web web-devel web-services web-разработка webdev webfaction webkit webpy websockets webtest widget widgets Win API windows Wirbel work wrapper wsgi wxPython wxWidgets wysiwyg xapian xml xmonad xmpp xpath yandex youtube zip zomg zope [cdata[cbv]] [cdata[ci]] [cdata[class based views]] [cdata[continuous integration]] [cdata[django framework]] [cdata[django-sphinx]] [cdata[django]] [cdata[nginx]] [cdata[python]] [cdata[virtualenv]] [cdata[программирование]] автоматизация администрирование администрирование django админка алгоритмы архитектура атрибуты базы данных Без рубрики безопасность библиотеки блоге бот веб-разработка видео Визуализация данных вконтакте Все записи гвидо ван россум граббер графика графы декоратор декораторы дескриптор дескрипторы документация заметки игра жизнь идея интересное киев Клиентам книги конференция личное математика метаклассы модели модули монады морфология мысли невозможное новости о облачные вычисления обо мне Обработка данных оптимизация оптимизация кода Основная лента основы парсинг парсинг сайтов перевод песочница Питон поебень поиск правила кодирования программирование Проектирование производительность работа рабочее размышлизмы Разное разработка разработка приложений разработки регулярные выражения сайт событие события ссылки статьи тестирование тесты Тюмень убунтариум фигня философия формы форум Хабрахабр хакинг хостинг шаблоны шаблоны проектирования эксперимент Эксперименты юмор я пиарюсь Яндекс