9 августа 2011 г.

Обновили сайт

Сегодня мы немного обновили сайт студии. На главной появилась ссылка на наши разработки с открытым исходным кодом на гитхабе. Сейчас там несколько форков приложений для django, плагин для анимации спрайтов на jquery и репозиторий для DjangoDash 2011. О двух последних подробнее в следующий раз. На всех наших новых проектах мы используем Django, верстаем как завещал великий БЭМ, применяя возможности современных браузеров, известные под термином HTML5. Теперь об этом свидетельствуют ссылочки в подвале главной. С большим опозданием, но всё же обновился раздел Команда, свои заслуженные места обрели Рома и Виталий.
Появился раздел вакансии, мы всегда ищем энергичных и опытных укротителей питонов. Приходите к нам, у нас интересно.

1 августа 2011 г.

Поиск в Django с помощью Sphinx

Для интеграции Sphinx (движка для полнотекстового поиска) и Django существует приложение django-sphinx.

Это приложение автоматически генерирует конфигурационный файл (на основе которого строятся поисковые индексы), позволяет делать полнотекстовый поиск по моделям или по нескольким индексам одновременно (получая queryset-подобные объекты).

Управление свойствами индексов, весами атрибутов и тому подобным ведётся прямо из модели:

class MyModel(models.Model):
   ...
   search = SphinxSearch(weights={ 'name': 100, 'description': 10, 'tags': 80}, mode='SPH_MATCH_ALL', rankmode='SPH_RANK_NONE')
   ...
 

На основе этих данных manage-команда ./manage.py generate_sphinx_config составляет конфигурацию индексов.

К сожалению, проект развивается автором не очень интенсивно, но на github.com существует некоторое количество форков, решающих ряд проблем, среди которых изменившиеся в Django 1.3 настройки баз данных (поддержка нескольких БД) и поиск по нескольким индексам.

Для того, чтобы поиск одновременно по нескольким индексам позволял оперировать с результатами как с ORM-объектами, а не идентификаторами записей, необходимо проследить, чтобы выполнялись следующие два условия:

  1. В запросах, на основе которых строятся индексы (sql_query в секциях source конфига), в секции SELECT должно присутствовать <число> AS content_type, то есть должна быть связь с типом контента (для того, чтобы django-sphinx смог понять, какой модели принадлежит результат).
  2. В той же секции должно присутствовать объявление sql_attr_uint = content_type.
После этого запросы SphinxQuerySet(index='индекс1 индекс2 индекс3').query('поисковая фраза') будут возвращать списки ORM-объектов.


Наш форк django-sphinx можно найти тут

6 июня 2011 г.

GeoIP в Django

Мы начали публиковать свои наработки на гитхабе. Это первая ласточка, приложение форк django-ipgeobase.

На нашем последнем проекте для того, чтобы определять, из какого города посетитель сайта, мы использовали базу адресов от ipgeobase.ru. Она содержит достаточно подробную информацию по России и Украине (886 городов) и регулярно обновляется. Этого оказалось вполне достаточно, чтобы привязать контент сайта к разным регионам России, например.

Для геолокации в Django обнаружилось готовое приложение от Ивана Петухова, которое умело импортировать данные с ipgeobase и определять город и регион по ip. А также хорошй форк от mjr27, добавивший админку и поддержку адресов Украины.

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

Пример использования:

  from django_ipgeobase.models import IPGeoBase

  ip = "212.49.98.48"

  ipgeobases = IPGeoBase.objects.by_ip(ip)
  if ipgeobases.exists():
      ipgeobase = ipgeobases[0]
      print ipgeobase.city # Населенный пункт (Екатеринбург)
      print ipgeobase.region # Регион (Свердловская область)
      print ipgeobase.country # Страна (Россия)
Очень удобно вынести определение города или региона в отдельную middleware и записать в request значение region, таким образом оно станет сразу доступно во всех видах и шаблонах.

3 июня 2011 г.

Зеркалирование репозиториев Eclipse

Мы не по наслышке знакомы с проблемой медленных и очень медленных зеркал репозиториев Eclipse. И это касается не только основного репозитория текущего Eclipse Helios, но и популярных плагинов к нему, которые мы используем в нашей повседневной работе: PyDev, Aptana, FileSync и некоторые другие. Их установка для каждого члена нашей команды однажды заняла неприлично много времени и мы все единодушно решили, что необходимо найти решение для создания локальных зеркал всех необходимых нам репозиториев. В любом случае хорошо уменьшить зависимость своей работы от причуд сторонних сервисов. Да, эти плагины тянутся не так уж и часто, но удобно, когда они под рукой и наверняка доступны в любое время.

25 мая 2011 г.

Вакансия python- & django-разработчика 2

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

За условиями под кат.

4 мая 2011 г.

Предновогодняя фотосессия

The FuturecolorS
The FuturecolorSТёмаИльяИлья и ТёмаПотому что мы бандаНаш талисман
Future ColorsНе православно!Табы против пробеловПерерыв

Декабрь 2010, a set on Flickr.
Состав Future Colors образца 2011 года

29 апреля 2011 г.

Eclipse и SSH passphrase

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

О чём речь

Многие используют passphrase для защиты своих ssh-ключей, а кто-то оставляет свой id_rsa без пароля. Мы вам рекомендуем в целях безопасности всё-таки использовать passphrase, а иначе можно считать что вы храните доступ ко всем ssh в plain-тексте. Если данный абзац поставил вас в тупик, на гитхабе есть хороший ликбез «Working with SSH key passphrases».

Проблема

Последний на данный момент Eclipse Helios плохо дружит с id_rsa с паролем и реагирует на ввод корректной passphrase выдаёт «Auth failed»

Решение

Есть очень простой workaround: удалить passphrase, вручную добавить ключ в Eclipse, а потом средствами того же эклипса установить passphrase обратно.

Сбрасываем passphrase:
user@futurecolors:~/.ssh$ ssh-keygen -p

По этому пути в меню нужно импортировать id_rsa вручную:
Window → Preferences → General → Network connections → SSH2
Key Management → Load Existing Key…
Сразу же всё на заработает, надо рестартануть эклипс.
Там же импортированному ключу возвращаем passphrase.

Безопасных вам коннектов!