Тема → Программирование

Сегодня было обсуждение нового проекта, со сроком на реализацию 2 месяца. И собственно постал вопрос на каком фреймверке писать. Было взято два варианта Twisted(мой любимый фрейм) и Django(самый раскрученый фрейм). До сего момента я никогда не юзал Django так как считал его копией Symfony но только для Питона. Но так как сроки довольно узкие то решил взять его в сравнение (так как имеет довольно много готовых модулей).

После двух часов изучения мануалов установки и связки lighttpd->fcgi->django+PostgreSQL были проведены первые тесты. И тут как бы я немножко офигел. На моем слабеньком ноуте Интел центрино 1.8 Django выдал 60rps против 670rps у Twisted.

В тесте выполнялся один селект из БД + генерация простого темплейта в пару байт.

В итоге я искренне не понимаю фанатов Django ибо как по мне то это полная лажа. Конечно можно врубить кеши и прочее, но как бы в Твистеде тоже. И в итоге выходит что можно экономить на мощностях в 10-15 раз, что поверте очень неплохо. Нет я понимаю, что сейчас привкли считать что главное не экономия а удобство и что легче докупать сервера, но не настолько же. Я как бы лучше потрачу лишний месяц на работу но буду экономить 90% на стоимости железа на весь период жизни железа.

Как по мне то программер должен писать код который экономит деньги, а не тот который их тратит.

Вообщем люди если вам дороги деньги не юзайте Django.

Спасибо Гуглу за приятные возможности.

Что бы понять всю суть советую почитать две неплохие статьи на эту тему:

  1. Хакер – Навигация без GPS
  2. Позиционирование абонентов в сетях Gsm

Код для работы с этим всем прилагается:

country = 'fr'
device = "Nokia N95 8Gb"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
mmap_url = 'http://www.google.com/glm/mmap'
geo_url = 'http://maps.google.com/maps/geo'
 
from struct import pack, unpack
from httplib import HTTP
import urllib2
 
def fetch_latlong_http(query):
    http = HTTP('www.google.com', 80)
    http.putrequest('POST', '/glm/mmap')
    http.putheader('Content-Type', 'application/binary')
    http.putheader('Content-Length', str(len(query)))
    http.endheaders()
    http.send(query)
    code, msg, headers = http.getreply()
    result = http.file.read()
    return result
 
def fetch_latlong_urllib(query):
    headers = { 'User-Agent' : user_agent }
    req = urllib2.Request(mmap_url, query, headers)
    resp = urllib2.urlopen(req)
    response = resp.read()
    return response
 
fetch_latlong = fetch_latlong_http
 
def get_location_by_cell(cid, lac, mnc=0, mcc=0, country='fr'):
    b_string = pack('>hqh2sh13sh5sh3sBiiihiiiiii',
                    21, 0,
                    len(country), country,
                    len(device), device,
                    len('1.3.1'), "1.3.1",
                    len('Web'), "Web",
                    27, 0, 0,
                    3, 0, cid, lac,
                    0, 0, 0, 0)
 
    bytes = fetch_latlong(b_string)
    (a, b,errorCode, latitude, longitude, c, d, e) = unpack(">hBiiiiih",bytes)
    latitude = latitude / 1000000.0
    longitude = longitude / 1000000.0
 
    return latitude, longitude
 
def get_location_by_geo(latitude, longitude):
    url = '%s?q=%s,%s&output=json&oe=utf8' % (geo_url, str(latitude), str(longitude))
    return urllib2.urlopen(url).read()
 
if __name__ == '__main__':
    print i,get_location_by_cell(20465, 495, 3, 262)
    print get_location_by_cell(20442, 6015)
    print get_location_by_cell(1085, 24040)
    print get_location_by_geo(40.714224, -73.961452)
    print get_location_by_geo(13.749113, 100.565327)
  • Комментарии выключены

http://create-cv.appspot.com

Сделано:

  • Добавлен новый темплейт
  • Переписаны обработчики входящих данных (в GAE как оказалось есть не мало багов)
  • Исправлены баги с таром темплейте
  • изменен вид выбора темплейта
  • Комментарии выключены

Сегодня обновил онлайн генератор резюме. http://create-cv.appspot.com или http://creotiv.in.ua/create_cv

Теперь он имеет более простой и не напрягающий дизайн.

Генерация резюме производится в формат PDF.

Вот пример сгенерированого резюме:

Пример резюме

На данный момент сервис базируется на Google Engine.

Мне крайне интересно ваше мнение по поводу данного сервиса. Нужен ли он вам и стоит ли его развивать.

Все коментарии по сервису просьба оставлять в Реформал.ру (синяя кнопка с правой стороны страницы)

  • Комментарии выключены

Для примера нужно было нашкрябать скрипт веб-прокси, как площадку решил выбрать GAE за ее халявность.

С учетом потраченого времени вышло довольно живенько: Jhon Doe

Вместо URLFetch от  Google Engine API, я юзал urllib2 так как там есть автоматический хендлинг кукисов.

А теперь о проблемах, вышло так что пакет cookielib оказался не рабочим и парсил куки не правелньо, хотя и сами они каряво пишутся. Суть проблемы в том что куки бьются по “,” символу, но в тоже время этот символ встречается в поле expires (expires=Mon, 09-Jul-2012 06:19:49 GMT;) в результате разбиение идет не верно. Вообще странно это все.

Вообщем в результате я забил на эту либу и написал свой CookieJar от которого потом написал DatastoreCookieJar. Данный модулек пишет все куки в датастор ориентируясь по контрольной куки с сидом которую нужно вешать клиенту.

Вообщем если кому надо то пишите на creotiv@gmail.com поделюсь)

  • Комментарии выключены

I create some binding for z3c.rml and reportlab packages so it can work under Google App Engine.

In z3c.rml i replaced lxml.etree with ordinary xml.etree.ElementTree

And in reportlab replaced loader (if i don’t mistake) so it can work with zipLoader. Thanks to the heldermanlaw

You can get this all from my gitgub http://github.com/creotiv/RML-to-PDF-converter-for-Google-Engine

  • Комментарии выключены

Ввиду большого интереса к Google Application Engine решил перевести переводчик азбуки Морзе на него.
Что получилось можно лицезреть здесь http://morze-code.appspot.com/

Как и ожидалось использование GAE крайне простое и приятное. Особенно радует статистика в режиме лайв и версионинг приложения.

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

А так все чудесно и крайне приятно)

  • Комментарии выключены

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

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

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

Google Application Engine (GAE) – на мой взгляд идеальное решение данной задачи. Лимитирование для бесплатного приложения довольно таки человеческие http://code.google.com/intl/ru-RU/appengine/docs/quotas.html
Развертывание до ужаса простое. В итоге имеем идеальную площадку для взращивания стартапов за 0$ ))

  • Комментарии выключены

I read many articles on the net and all of them are wrong, cause all of these people simple didn’t read the manuals)

Base problem not in the encoding of data to generate, but in the Font Unicode supporting.

Fore example just download this Unicode-based font: CODE2000

Thats all Folks)

  • Комментарии выключены

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

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

Чуть больше о нашей компании вы можете узнать на нашем официальном сайте Imaginarium

  • Комментарии выключены

Наверх