Хорошие подкасты

21 июля 2015

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

Мои фавориты:
1. Software Engineering Radio (на английском) — интересные гости, очень разные темы, от NodeJS и ZooKeeper до дизайна архитектуры и SBT.
2. DevZen (на русском) — тоже куча полезной информации, более низкоуровневая и практическая, чем в SER. Напросился в гости в 49-й выпуск :)

Выбор лицензии для open source проекта

23 июня 2014

Недавно возникла необходимость выбрать лицензию для своего open source проекта. Вот полезный сайт, на котором объясняется разница между лицензиями.

Пример работы с естественными языками (Natural Language Processing) на Python

21 декабря 2013

Хорошая статья с примерами и полезными ссылками. Традиционно NLP задачи реализовывались на Java, но Python приобретает все большую популярность в этой области.

PyCharm бесплатно

26 сентября 2013

Вчера пришла новостная рассылка от JetBrains, в которой говорится о том, что теперь есть бесплатная версия PyCharm — Community Edition. Я сам уже три года как пользуюсь Professional Edition, и это замечательный продукт. А для Java я пользуюсь IntelliJ IDEA :) Очень рекомендую тем, кто пишет на Python, и еще не знаком с PyCharm, попробовать ее. Есть встроенная поддержка Django, virtualenv, Git/HG, тестирования и покрытия кода тестами.

[Very] Simple Linear Regression on Java

15 октября 2012
double[] sx = {0.0, 1.0, 2.0, 3.0, 4.0};
double[] sy = {3.4, 5.2, 7, 8.8, 10.6};
double M = sx.length;

double sumXY = 0, sumX = 0, sumY = 0, sumX2 = 0;

for (int i = 0; i < M; i++) {
    sumX += sx[i];
    sumX2 += sx[i] * sx[i];

    sumY += sy[i];
    sumXY += sx[i] * sy[i];
}

double w1 = (M * sumXY - sumX * sumY) / (M * sumX2 - sumX * sumX);
double w0 = 1 / M * (sumY - w1 * sumX);

System.out.println("y = " + w1 + " * x + " + w0);

Django + PyPy + MySQL

4 мая 2012

Давно уже мои товарищи хвалят заоблачные скорости PyPy, но без работы с базами данных можно было только облизываться и мечтательно закатывать глаза, представляя рост производительности сайтов. Сегодня получилось подружить его с MySQL, так что появился отличный шанс проверить двойного питона с турбонаддувом в деле.

This is how I’ve managed to get PyPy working with MySQL:

  1. Download PyPy to some folder (I used /usr/local/pypy-1.8)
  2. Create a symlink in /usr/local/bin/ : ln -s /usr/local/pypy-1.8/bin/pypy pypy
  3. Make virtualenv with pypy as python: mkvirtualenv mysite —no-site-packages -p pypy
  4. Activate virtual env, install Django via pip
  5. Tricky part starts: download sources of MySQL-python
  6. Unpack it somethere in your virtualenv. Unfortunately you cannot use pip to install it. Go to this folder.
  7. You need to apply this patch, actually you need to patch only 2 files: converters.py and _mysql.c. Line numbers may be a bit different, this is Ok.
  8. After applying changes install MySQL-python via: python setup.py install
  9. Tricky part ends: try to work with your apps now.

Стэнфордские онлайн-курсы

25 ноября 2011

Стэнфорд делает потрясающе доброе дело. Я прохожу курс по AI, записался в том году на курс по Natural Language Processing. По последней ссылке внизу есть полный список новых курсов, среди них есть совершенно замечательные. И все это бесплатно.

Все мои знакомые киборги тоже в восторге: «Про стэнфордские онлайн-классы»

Django Social Auth: now with images

16 августа 2011

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

from social_auth.signals import pre_update

@receiver(pre_update)
def update_person_details(sender, **kwargs):
    person = kwargs.get('user')
    details = kwargs.get('details')

…

    load_person_avatar(sender, person, kwargs.get('response'))
…

def load_person_avatar(sender, person, info):    
    image_url = None
    
    if sender.name == 'vkontakte-oauth2':
        vk_response = info.get('response')
        if vk_response:            
            image_url = vk_response.get('user_photo') # If photo is absent user_photo is absent too
    
    elif sender.name == 'odnoklassniki':
        image_url = info.get('pic_2')
        if 'stub' in image_url: # No real image
            image_url = None
    
    elif sender.name == 'mailru-oauth2':
        if info.get('has_pic'):
            image_url = info.get('pic_big')
        
    elif sender.name == 'twitter':
        image_url = info.get('profile_image_url')
        if not 'default_profile' in image_url:
            image_url = image_url.replace('_normal', '_bigger')
        else: # No real image
            image_url = None

    elif sender.name == 'yandex-oauth2':
        image_url = info.get('userpic')
    
    elif sender.name == 'facebook':
        image_url = 'http://graph.facebook.com/%s/picture?type=large' % info.get('id')
    
    if image_url:
        try:
            image_content = urlopen(image_url)
            
            # Facebook default image check
            if sender.name == 'facebook' and 'image/gif' in str(image_content.info()):
                return
            
            image_name = default_storage.get_available_name(person.avatar.field.upload_to + '/' + str(person.id) + '.' + image_content.headers.subtype)
            person.avatar.save(image_name, ContentFile(image_content.read()))
            person.save()
        except Exception:
            pass # Here we completely do not care about errors

Примечания:

  1. В качестве backend для Вконтакте был выбран OAuth2 вариант — он в отличие от OpenAPI предоставляет информацию об изображении
  2. В качестве библиотеки для поля изображения мы испольуем sorl.thumbnail

Новости Django Social Auth — 2

30 апреля 2011

Предыдущие новости см. здесь.

В коммите добавлены:

  1. Поддержка OAuth 2.0 для ВКонтакте
  2. Поддержка OAuth 2.0 для Mail.ru
  3. Решена проблема с return_to. Одна строчка правок потребовала усилий со стороны четырех человек, вот как бывает.

Следующий коммит будет не раньше середины мая: уезжаю в отпуск.

Новости Django Social Auth

19 апреля 2011

В продолжение статьи «Авторизация в социальных сетях для Django».

Основная ветка проекта развивается довольно интенсивно, добавилась поддержка LinkedIn, Google OAuth2, тесты и большое количество мелких, но полезных фитюлечек, вроде автоматического ассоциирования пользователя по e-mail.

Замечена интересная особенность Google OpenID. Если ваш сайт поддерживает «сквозную» авторизацию на поддоменах и вам принципиально, чтобы человек, авторизовавшийся в одном поддомене, мог продолжать работать без авторизации и в другом, я рекомендую воспользоваться Google OAuth. Фишка в том, что Google OpenID выдает разные id пользователя для разных поддоменов одного и того же сайта. Так как библиотека не может определить, что пользователь, который пришел на поддомен ААА, уже был зарегистрирован в поддомене БББ, в результате создается новая учетная запись. У OAuth такой проблемы нет, зато есть два плюса: вы гарантированно получаете e-mail пользователя и вам не нужно регистрировать свое приложение, как в OAuth 2.0.

Обнаружена ошибка в библиотеке Python-OpenID, которая выдает довольно странную диагностику: OpenID authentication failed: return_to does not match return URL, при этом URL’ы совпадают. Обсуждение находится здесь, авторам библиотеки сообщение отправлено, ждем, когда поправят.

В моем форке два изменения:

  1. Для авторизации на Yandex теперь не обязательно указывать имя пользователя. Если оно не задано, то используются возможности OpenID 2.0, сервер с библиотекой договариваются сами и, когда надо, задают пользователю необходимые вопросы. Спасибо Ивану Сагалаеву за подсказку (детали обсуждения здесь).
  2. Добавлен backend для авторизации на Одноклассниках с использованием OAuth 2.0. По умолчанию запрашиваемый scope минимален, этого хватает для авторизации, а пользователю не нужно мучительно размышлять, давать ли доступ к своей стене, e-mail и пр.

Внимание, вопрос: поддержку какого именно сервиса авторизации вам бы хотелось увидеть следующей: ВКонтакте через OAuth 2.0 или Mail.ru?

← Предыдущие записи