28 янв. 2013 г.

Генерируем QR код в python

В посте не будет описания алгоритмов генерации QR-кодов. Это муторно и не интеренсо. В конце концов, вам скорее всего нужно просто один раз сгенерировать код для сайта или визитки. Но если вам всеже очень интересно, как это делается, читайте по ссылкам из kcoding.net.
Конечно, можно воспользоваться Google Charts:
<img src="https://chart.googleapis.com/chart?chs=250x250&amp;cht=qr&amp;chl=кодируемаяфраза&amp;choe=UTF-8">
Вместо "кодируемаяфраза" вы можете подставить свой кодируемый текст или ссылку.
Однако, в pypi есть библиотека qrcode, с помощью которой можно сгенерировать QR код картинку у себя на сервере. Google в большинстве случае проще, но во втором подходе можно "зашить" в QR код например логин с паролем, которые будут сгенерированы под браузерную суссию и "прочитаны" на телефоне, например. По сети будет минимум хождения приватных данных, так что вариант безусловно полезный.

1. Ставим билиотеку себе:
easy_install qrcode
# OR 
pip install qrcode
Еще нам понадобится PIL:
easy_install PIL
# OR
pip install PIL
Код генерации файла с QR кодом может выглядеть например так:
# coding: utf-8

import qrcode


qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    box_size=10,
    border=4,
)
qr.add_data('http://adinch.com')
qr.make(fit=True)

img = qr.make_image()
img.save('qr.png')

22 янв. 2013 г.

Костюм АйТишнику

Знакомые друзей открыли магазин мужских костюмов http://www.fe-style.ru/. Тема эта - новая и полезная. Я вам скажу, очень удобно сидя у себя в офисе, дождаться курьера, отдать ему 300 рублей, и примерить десяток размеров понравившеся тебе товарной позиции или позиций.
На вроде, выбрал себе костюм тройку, сорочку и плащ. Сделал заказ через интернет, померял все по приезду курьера, и профит. Необходимость ходить по магазином с грустным лицом отпадает. И это хоршо! Ту-бу-ду-ба-ду-ба-дууум!

22 нояб. 2012 г.

Собираем прокси лист для grab

Grab - фреймворк для парсинга сайтов, умеет работать через прокси сервера. В документации заявлено, что grab в принципе может сам брать сервера из файла-списка, сам может выбирать случайный, сам может менять сервера от запроса к запросу (Grab documentation. Работа с прокси-серверами).
Ниже скрипт для сбора этого списка с spys.ru - так проще, чем собирать список из поисковиков, а потом еще постоянно мониторить не отвалился ли какой-нибудь из серверов.

# -*- coding: utf-8 -*-

import os
import sys
import re
from grab import Grab, GrabError
from urllib import quote
from iptools import validate_ip


def parse():
    g = Grab()
    g.go('http://spys.ru/')
    rex = re.compile(r'(?:(?:[-a-z0-9]+\.)+)[a-z0-9]+:\d{2,4}')
    f = open(os.path.join(sys.path[0], 'proxy_list.txt'), 'w')
    for proxy in rex.findall(g.css_text('body')):
        ip, port = proxy.split(':')

        if len(ip.split('.')[0]) >= 4:  # на spys.ru для секурности дописывают двухсимвольную фигню в начало.
            ip = ip[2:]
            proxy = proxy[2:]

        if validate_ip(ip):
            g.setup(proxy=proxy, proxy_type='http', connect_timeout=5, \
                    timeout=5)
            try:
                g.go('http://www.apple.com/')
                try:
                    h1 = g.xpath_text("//h1")
                    if h1 in ['ERROR', 'Proxy Authentication Required']:
                        continue
                except Exception, e:
                    print e

                if g.response.code == 200:
                    print proxy.ljust(20), 'OK  ', g.response.code
                    f.write(proxy + '\n')

            except GrabError:
                print proxy.ljust(20), 'FAIL'
    f.close()

if __name__ == '__main__':
    parse()

9 нояб. 2012 г.

bitbucket в твоем домене

Не знаю видел ли ты, дорогой читатель, не очень новую, но очень полезную функцию bitbucket - привязка своего домена? Вместе с командными кабинетами эта функция позволяет за считанные секунды создать для команды общее хранилище репозиториев, issue tracker, wiki и много-много еще чего полезного...
Если у вас уже есть репозитории, которые не плохо было бы отдать команде, не беда - можно перенести их в аккаунт команды за несколько кликов в панели управления.
Членам команды могут быть назначены разные уровни доступа. Для деплоймента теперь можно создавать отдельные ssh-ключи, которым будет разрешен только pull.
Что тут скажешь? Глобализация. У разработчиков все меньше и меньше поводов обзаводится собственными серверами, а стартапы теперь можно начинать и вовсе без денежных вложений.

Примеры bitbucket'а на своем домене:


Тут можно создать команду: https://bitbucket.org/account/create-team/.

Подробней об этой и прочих фичах можно почитать по ссылке http://go-dvcs.atlassian.com/display/aod/Configuring+a+Bitbucket+account+for+your+team.

26 окт. 2012 г.

Джордж Карлин

Джордж Карлин - великолепный американский комик. Я очень люблю его выступление про новую парадигму "земля + пластик". Вообще, для него нет запретных тем. Уверен, когда-нибудь он шутил даже про женские усы (одна из тех вещей, которую все не замечают ;) ).
Когда у меня плохое настроение или не хватает мотивации делать что-либо, я просто открываю один из его концертов с ютуба.
Чтобы полюбить Карлина как люблю его я, нужно смотреть концерты в обратном хронологическом порядке. По аудиозаписям Джорджа здорово учиться английскому, но если  вас с этим проблемы, смотрите его в переводе и с титрами.
Я знал, что Карлин снимался в Догме, но не догадывался, что он еще и озвучивал Филмора в первой части Тачек и был уморным Зугором в диснеевском мультике Тарзан 2.
Кто-то называет Карлина - американским Задорновым, я не согласен. Задорнов конечно тоже показывал гибона, но все же Карлин намного жестче.

18 окт. 2012 г.

Pattern для любого датамайнинга на python

Речь сегодня пойдет о Pattern - модуле-комбаине для датамайнинга по разным "стихиям" (web, db, text analysis и пр.).
Самый, ожидаемо-популярный в Pattern пакет, как мне кажется, - web (документация). Он умеет возвращать, например, результаты поиска по поисковым системам Google, Bing, Yahoo. Также умеет искать в Twitter и Flickr.
Библиотека очень объемная, в том числе и потом, что включает некоторые другие библиотеки удобно используемые для решения задач Pattern'а.
В научной работе выделяют 2 взгляда на пользу научных изысканий: изобретение нового и обощения опыта в уже открытом. Программисты традиционно стремятся изобретать все с нуля, поэтому любой пакет обединяющий старый признанный опыт как глоток свежего воздуха.

Tears of Steel - Blender Foundation's fourth short Open Movie

Увидел в блоге у vasnake. Сделано очень здорово.