Subscribe

Categories

Checkio.ORG

Subscribe to Posts

Email:

  • 24Apr

    Я последние несколько месяцев любую свободную минутку посвящаю именно этому проекту www.checkio.org, т. к. чувствую, что делаю что-то полезное, что-то что может помогать молоды специалистам.

    Я уже писал о нем, но сейчас, когда считаю, что закончен большой этап в развитии этого проекта решил написать еще раз, а лучше показать.

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

    Так-же у нас на стадии тестирования терниры между программами. И первой задачей для турнира сейчас выбрана игра five in row. Надо написать программу, которая будет играть в эту игру, в простонародье – бота

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

    Еще хотелось бы услышать от вас отзыв. Как Вам проект?

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: ,

  • 11Jan

    Это продолжение моего общения с собой на тему логов.

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

    Например у Вас такая часть лога


    "date time,"log,"inc sum: 100

    Парсер эту строку распарсит очень просто, а вот у человека не будет уверенности в цифре. А может там был мильен.

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

    Так что теперь наша запись в логах меняется на следующую:

    "date time,"log,"inc sum: 100,".

    В принципе можно заморочиться на том, чтоб записи, в которых реально только одна точка – заменять на 2, а 2 – на 3. Ну т.е. при парсе надо понимать, что если в записи – одни точки, то нужно уменьшить их кол на одну. Но чем дольше я об этом думаю, тем больше понимаю, что это уже перебор. И такую погрешность можно взять в учет.

    Откуда вообще у меня тараканы в голове на тему логов.

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

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

    Сегодня уже фиксы в текущие логи внести не получится, но завтра постараюсь выкроить время.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 03Jan

    Я уже когда-то писал и думал о системе логирования на основе csv формата. С начало идею, а потом первую версию для джанги.

    Но в процессе пользования этой системы вылезло несколько недостатков.

    1. В таком формате легко потерять целостность логов. Например скрипт ведения логов упал в момент из записи. Срока разорвалась в момент записи одно из полей и все. Вся БД логов потеряна
    2. Надо заранее знать количество полей в логе

    Поэтому я разработал другой формат – UCSV. И модуль для ведения логов на его основе python-ucsvlog.

    В этом формате нет конца ни у записи ни у ячейки, есть только начало записи и начало ячейки. В этом случае конец ячейки — это просто начало следующей или начало следующей строки.

    Начало записи — это перевод строки
    а начало ячейки — это просто ”
    ну и из csv формата — кавычка в данных ячейки заменяеться двумя

    В этом случае нам не надо волноваться за целостность всех логов. В случае падения мы потеряем только одну строку

    Вместе с логером я написал потоковый парсер. Ему не надо знать, какого размера у тебя файл, он читает файл порционно и порционно импортирует данные в БД. Все это происходит довольно просто и без регекспов.

    Класс импорта в SQLite — ReaderSqlite. Правда во время импорта данных у которых в записи неограниченное число ячеек столбцы добавляются по ходу.

    Из csv логов я забрал идею древовидности логов. Когда у каждой записи есть ключ, привязанный ко времени создания и ключ парент записи. За это отвечают 2 первые ячейки в записи. А также авторендеринг — имя файла логов можно задавать в виде шаблона. Например ‘/logs/%(syear)s-%(month)s-%(day)s.ucsv’

    Для джанги я создал отдельный пакет django-ucsvlog. Те кто пользовался django-csvlog смогут легко перескочить. Поддержку последнего я осуществлять более не буду.

    По мере пользования этой системы логирования я буду собирать еще один компонент django-ucsvlog-analytics. В нем будут собраны скрипты для анализа логов. Например профилирование, оно очевидно из-за привязки ко времени логов. Можно сводить статистику — самые тяжелые страницы + самые часто запрашиваемые и получать то, что надо оптимизировать в первую очередь. Или например анализ юзабилити. Можно вычислять точки не возврата, страницы, которые пользователь посещал в последний раз, или на какую страницу переходят после указанной ( иногда только такая сухая статика может убедить клиента в неюзабельность предложенного им варианта ). Можно делать каунтеры посещений определенных страниц, сколько уникальных просмотров было на этом альбоме. Можно увидеть путь по сайту определенного пользователя.

    Такие логи дают много возможностей, и список «можно» – можно продолжать бесконечно. Пробуйте.
    python-ucsvlog, django-ucsvlog, django-ucsvlog-analytics

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , , ,

  • 22Nov

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

    Спасибо всем, кто подробно описывал баги, помагал в их устранении. На этапе запуска в отсутствии нормального функционала для багрепорта это было очень полезно для процесса разработки и улучшения сервиса.

    Итак, за этот месяц нам удалось реализовать 3 идеи, причем в условиях полного рефакторинга ядра.

    Первая идея— Learning. Я назвал это «Подарок для наших маленьких слушателей», хотя она может быть полезна и большим дядям. Если попытаться изложить их идею одним предложением — это цепочка задач от легкой к сложной, причем в описании самой задачи есть все справочные данные для ее решения. Таким образом пользователь на примерах учится питону и параллельно пробует свои силы, т. к. я абсолютно уверен, что в программировании знания без практики не имеют никакой ценности.

    В последствии это может быть использовано для изучения и получения навыков работы с оупенсорсными библиотеками (я бы написал, к примеру, обучалку для Stream). К тому же, если Вы – разработчик какой-либо библиотеки, можете отправить мне список задач для использования Вашей библиотеки и мы добавим ее. Еще такой вариант: если это какие-нибудь системные библиотеки, то для них можно писать заглушки, полностью описывающие интерфейс, но ничего системного не делающие. Вообщем, мне кажется, что я вижу, куда раскручивать эту тему, и мы с командой будем это делать.

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

    Появление следующих 2 фич связаны с тем, что я люблю играть в логические игры: саперы, реверси, 5 в линию, лаинс, сокобан, судоку и многие другие. Благодаря чекио Вы сможете попробовать описать стратегию этих игр — программно. Т.е. Вы пишите программу, которая сама играет в игру.

    Итак, следующий тип задач — это Score Games или Single Player Game. Это игры, в которых выиграть нельзя, но можно постараться набрать как можно больше очков. Первым представителем этих игр стал Lines lite. От классической игры в Lines эту игру отличает то, что не нужно, чтобы шар проходил путь полностью, а достаточно, чтоб он просто становился на пустое место. По мере того, как пользователи буду справляться с этой задачей, мы добавим и не «облегченную» версию.

    Играть довольно просто. Вашей программе checkio передается дикт из следующих ключей:

    • steps — это массив координат только что поставленных шаров
    • map — это текущая карта. В этой версии игры размер карты 9х9. Каждый шар обозначен цифрой от 1 до 9, пустые места обозначены 0
    • colors — цвета следующих трех маркеров.

    Как результат, Ваша функция должна вернуть массив из 2х координат (координата – это массив из 2х чисел) – откуда и куда необходимо передвинуть шарик на поле. Тот, кто впервые слышит об этой игре, тот может ознакомиться с ее правилами более подробно на wikipedia.

    Как только Вы написали программу, нажимайте play. Вы увидите в результатах работы программы поле, которое будет заполняться шарами разных цветов. Нажимая next или prev, Вы будете двигаться по итерациям этой игры. Под игровым полем выводится количество набранных очков. Если Вы набираете больше 0, то попадаете в High Score этой игры. Мы попали в High Score с оглушительным счетом – 5ть очков. Попробуйте нас переплюнуть :-)

    Ну и о последнем обновлении Вы, наверное, уже догадались. Это Competition или Multi Player Game. Тут уж выигрывать можно и нужно. Для тестирования Вашей программы нужен соперник. Под соперником мы понимаем написанную на этом портале кем-то другим программу, т.е. играть друг с другом будут Ваши программы. Давайте лучше на примерах. Первым представителем этой игры является 5 in row или Gomoku(wikipedia).

    Вам нужно написать программу, которая бы играла с «кем-то» в эту игру. На вход (как уже принято) подается дикт со следующими ключами:

    • you — твой марк в игре
    • data — данные игры

    Данные игры — это так же дикт со следующими значениями:

    • map — текущая карта. Массив 19х19 со значениями 1 или 2, если занято первым или вторым игроком и 0, если не занято никем
    • step — ход противника

    На выходе – ваша программа должна вернуть координаты вашего хода.

    Для выбора соперника вам необходимо нажать на Check With и обозначить пользователя, находящегося сейчас на арене, нажав напротив понравившегося кнопку check. Можете для тестирования выбирать в соперниках – oduvan. Можете посмотреть на нашей странице фейсбука или линкедина, как она играет пока сама с собой.

    Как и в score game справа выведутся результаты игры. В соревнованиях игра прокручивается дважды: в первой игре первым ходишь ты, во второй — твой соперник. Именно поэтому и передается параметр you в функцию.

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

    Когда Вы решили, что ваша программа теперь очень даже ничего и пришло время и ей найти свое место на арене – смело нажимайте «On Arena» на верхней панели. Теперь другие пользователи могут тестить свою игру с Вашей программой. Игры, помещенные на Арену, будут периодически запускаться системой для проведения между ними соревнований. Если во время соревнования Ваша программа выпала с ошибкой, то она вылетает из турнирной таблицы, иначе, своими победами она будет достигать все лучших и лучших результатов.

    Так что, попробуйте написать своего непобедимого игрока, мы своего уже написали.

    Когда мы пытались написать свое решение для этих типов задач, самой большой проблемой было несовершенство браузерного редактора кода. Для средних тасков из каталога – его очень даже хватает, но Competition и Score Game – это уже более сложные и комплексные задачи. Теперь Вы можете просто скачать эту программу себе на компьютер и решать ее в своем любимом редакторе кода, тут же тестировать и дебажить работу программы. Для этого необходимо распаковать скачанный архив, написать свою программу в файл solution.py и запустить checkio.py для проверки ее работы.
    В случае Score Game, ваша программа будет играть с компьютером и зарабатывать очки, а в случае с Competition Game, Вы будете сами играть со своей программой, либо можете использовать возможность заранее составить файл с массивом ходов противника и передать ее checkio.py во время запуска.

    Ну и конечно, самое крутое, это то, что у проекта появились новости и рсс через feedbearn, свое место в FaceBook, LinkedIn и Twitter, теперь Вы сможете быть в курсе всего и удобным для Вас способом. И именно поэтому на своем блоге я больше ни слова не напишу о чекио, дабы не засорять агрегаторы, в которых нахожусь, нецелевой информацией. Тут теперь только о питоне, джанге и еще всякой интересной программистической штукенции. Но, тем не менее, буду очень признателен тем своим читателям, которые отметят этот скромный проект отзывами на своих блогах, думаю, это приведет в проект еще больше сильных игроков с новыми и интересными решениями. Буду очень признателен за отзывы, критику и предложения, которые касаются этого проекта, в FaceBook и LinkedIn.

    Еще появилась возможность у себя в профиле указывать ссылки на свой сайт, на профили в LinkedIn, FaceBook и Twitter. Мир должен знать своих героев в лицо. А также можете повесить на свой сайт нашу плюшку (чем-то напоминающую плюшку из StackOverflow), тем самым пригласить своих читателей в наш сервис, ну и похвастать своими результатами в нем. Я себе уже такую повесил.


    oduvan on checkio.org
    Еще немного о критике. Во время первого запуска мы выложили несколько сырых либо некорректных программ. Подобные ошибки я бы хотел устранять благодаря Тестеровщикам/Контролерам качества (название для этой группы людей еще обсуждается). Эти люди будут видеть еще не опубликованные задачи. Они смогут попробовать решить их раньше всех, высказать свое мнение об описании, сложности и по существу самой задачи. Еще не знаю как, но уверяю, что их заслуги не будут забыты. Подать заявку о входе в ряды Тестеровщиков можно в разделе «Как помочь?» и выбрать «Стать тестером» или просто написать мне.

    Вообщем, это вкратце то, что я хотел сегодня рассказать об этом проекте. Хочу сказать спасибо моей команде. Отдельные слова благодарности Денисенко Екатерине за помощь в переводе некоторых частей сайта на английский язык. Спасибо noonerus за помощь в нарезке и за то, что дал мне несколько хороших и весьма полезных уроков. И самое большое спасибо Вам за то, что помогаете своими багрепортами, отзывами и программами :)

    Ту би континюэд….

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 01Jul

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

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

    • catalog
      • urls.py
      • views.py
      • models.py
      • settings.py
      • tests.py

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

    1. try:
    2.     from ex_catalog.views import *
    3. except ImportError:
    4.     pass

    таким образом, если кто-то будет использовать Вашу апу — точкой расширения будет дополнительная апа ex_catalog, в котором вы можете переопределить некоторый функции из view.py, и при этом ex_catalog не надо добавлять в список апов в настройках.

    А теперь главный вопрос этого поста. Почему так не делают?

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , ,

  • 22Jun


    Чем меньше рутины мы привносим в свою работу, тем больше она может приносить удовольствия.

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

    Я Вам расскажу про Fabric(На момент написания статьи 0.9.1 — бала последняя стабильная версия), наиболее подходящий для этого инструмент, который делает все описанное и даже больше через ssh.

    Про установку рассказывать особо нечего, pip отлично справляется с этим.

    В корень своего проекта я кладу fabfile.py, в этом файле и будут храниться все процедуры для работы с Fabric. Ниже приведу небольшой пример скрипта, который будет архивировать наш проект, заливать его на сервер и там разархивировать.

    1. from fabric.api import *
    2. env.hosts = ['oduvan@lyabah.com']
    3.  
    4. def deploy():
    5.     local('tar czf /tmp/my_project.tgz .')
    6.     put('/tmp/my_project.tgz', '/tmp/')
    7.     with cd('/home/oduvan/www/test_fab/'):
    8.         run('tar xzf /tmp/my_project.tgz')

    Если у Вас все получилось, а я очень надеюсь, что с этим хостом и именем пользователя ни у кого кроме меня получиться ничего не может (так что поменяйте свою строку конекта во второй строке), то вы можете увидеть что-то сильно напоминающее вот это:

    1. $ fab deploy
    2. [localhost] run: tar czf /tmp/my_project.tgz .
    3. Password for oduvan@lyabah.com:
    4. [oduvan@lyabah.com] put: /tmp/my_project.tgz -> /tmp/my_project.tgz
    5. [oduvan@lyabah.com] run: tar xzf /tmp/my_project.tgz
    6. [oduvan@lyabah.com] err: tar: ./fabfile.pyc: time stamp 2010-06-21 10:03:41 is 4.461083597 s in the future
    7. [oduvan@lyabah.com] err: tar: .: time stamp 2010-06-21 10:03:41 is 4.460804762 s in the future
    8.  
    9. Done.
    10. Disconnecting from lyabah.com… done.

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

    Кому лень вводить пароли могу добавить после второй сроки
    env.password = ‘oh_its_my_real_password’

    либо сгенерить себе файл с ссш ключом и путь к нему положить в
    env.key_filename — в отличие и пароля тут может быть передан массив ключей

    Но и этот код можно сократить. У Fabric есть contrib libs, одна из них project. Тут подробно каждую я описывать не буду, просто покажу пример с одной из них, дабы просто показать, что они есть

    1. from fabric.api import *
    2. from fabric.contrib.project import rsync_project
    3. env.hosts = ['oduvan@lyabah.com']
    4.  
    5. def deploy():
    6.     local('python manage.py test', capture=False)
    7.     rsync_project('/home/oduvan/www/test_fab/','.')

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

    Вот основные команды, которые Вам необходимо знать, чтоб свободно пользоваться Fabric

    put — копировать файл с локальной машины на удаленную. Доп параметр mode — устанавливает права на файл, см chmod
    get — копировать файл с удаленной на локальную
    local — выполнить команду на локальной машине. Доп параметр capture — скрывать выходные данные, по умолчанию False
    run — выполнить команду на удаленной машине
    sudo — выполнить команду на удаленной машине через судо. Доп параметр user — указываем имя пользователя, под которым необходимо запустить команду

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

    Для деплойтинга на несколько серверов, причем различной конфигурации, и роли – у Fabric тоже кое-что припасено.

    1. from fabric.api import *
    2. from fabric.contrib.project import rsync_project
    3. env.roledefs =  {'web':['oduvan@lyabah.com','oduvan@dev.lyabah.com'],
    4.         'db':['oduvan@db1.lyabah.com','oduvan@db2.lyabah.com'],
    5.         'media':['oduvan@media@lyabah.com'],
    6.         }
    7.  
    8. @roles('web')
    9. def deploy():
    10.     rsync_project('/home/oduvan/www/test_fab/','.')

    в этом примере заливка файлов будет идти сразу на 2 вебовых сервака. Как видите вы можете запланировать у себя роли отдельных серверов под БД, под медиа файл и т.д.

    кроме как декоратаром роль можно указывать и при запуске процедуры

    1. $ fab deploy -R web

    Иногда в момент или во время запуска необходимо передать данные скрипту.

    В момент запуска это делается через аргументы самой функции

    к примеру если у вас

    1. def deploy(arg1,arg2):
    2.     pass

    то эти 2 аргумента можно передать как

    1. $fab deploy:'HI','HO'
    2. $ fab deploy:'HI',arg2='HO'
    3. $ fab deploy:arg1='HI',arg2='HO'

    Либо спросить что-то во время работы функции у пользователя функцией
    prompt(text, key=None, default=”, validate=None)

    Задает вопрос пользователю с текстом text, если пользователь не вводит данные, то возвращает значение из default, предварительно отчищая его функцией validate, и возвращает как результат этой функции, если не передан key, иначе кладет значение в env[key]

    А теперь примеры функций деплойтинга из реальной жизни, которые вы можете написать и у себя в проекте:

    bounce_wsgi_procs — зарелоадить wsgi через touch в него
    deploy_media — загружаем только медиа файлы
    migrate — запускаем скрипт миграции через South
    update_repositories – обновляем репозитарии
    update_dependencies — устанавливаем зависимости
    reload_nginx — перегружаем nginx
    deploy — полная установка, последовательный запуск всех этих функций.

    Подводя итоги могу сказать, что Fabric должна стать musthave tool в разработке.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 09May

    Думаю съездить на DevConf, который пройдет в Москве 17ого числа.

    Программа, как мне кажется, будет интересная. Не обойдут стороной нашу любимую Джангу. Да и дополнятся она еще будет. Не может не радовать обилие кофебрейков и перерывов, это на всех питонячих конфах такое?

    Интервью Ивана Салагаева о конфе о питоне и не только.

    А вы что думаете? Стоит слетать в Россию?

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 05May

    Мда. Экономней надо кодить. Мой эклипс с pydev и аптаной на борту не кисло оперотивочки съедает, а это, с появлением в моей семье нового нетбучного малыша – стало большой проблемой. И начал я посматривать в сторону VIMа. Не очень хочется прощаться с приятными IDE-шными фичами.

    Вот то, что у меня получилось, после того, как я досмерти замучал глупыми вопросами весь pythonua@conference.jabber.ru

    Тут у нас слева по F5 мы видим все функции и классы открытого файла, а по F6 файловый менеджер.

    Вот архив с моими настройками и плагиными vim.zip. Тем, у кого вим вообще никак не настроен – можно просто взять и распоказать это в свой хоум.

    Так что начинаю потихоньку прывыкать к виму. Думаю по мере развития этого моего нового пристрастия – буду вам писать.

    Ну и на последок несколько ссылок в тему.

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

    Спасибо deepwalker за помощь и пояснения и за львиную часть его конфига вима :)

    PS: А еще есть GVIM тоже, только в окошке и с менюшками.

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 31Jan

    pycamp-logo-newСегодня рано утром вернулся с pycamp, который прошел в Киеве 30ого января в учебном центре i-klass.

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

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

    Александр Шигин (гость из солнечного Рамблера) «Почему Python — тормоз и как заставить его меньше тормозить». Были небольшие обзорчики кода, со сравнениями производительности. Сравнение результатов работы алгоритмов, реализованные разными способами — картежи, дикты, классы. Первые быстрее, но мы и так это знали. Хотя местами были довольно интересные результаты. Был упомянут Cython, но только вскользь, хотя мне бы тема была куда интереснее. Так что после в кулуарах мы написали небольшой хелло ворлд на cython, получили сошник и заюзали в самом питоне.

    Кратко выглядит примерно так

    ваш скрипт

    1. print "Hello World"

    скрипт setup.py:

    1. from distutils.core import setup
    2. from distutils.extension import Extension
    3. from Cython.Distutils import build_ext
    4.  
    5. setup(
    6.     cmdclass = {'build_ext': build_ext},
    7.     ext_modules = [Extension("helloworld", ["helloworld.pyx"])]
    8. )

    получаем сошник

    1. $ python setup.py build_ext –inplace

    и дальше его используем в ваших скриптах.

    1. >>> import helloworld
    2. Hello World

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

    Для себя отметил, что им как раз можно пользоваться для оптимизации питонячего кода практически без ограничений в использовании приятного синтаксиса питона. У себя в бложке буду освежать свои успехи в этом деле.

    Юрий Юревич «Рецепты декораторов». Лично для себя ничего нового не увидел, кроме того, что довольно грамотно все разложено по полочкам и что несомненно помогло упорядочить в голове знания.

    Михаил Кашкин (замляк из Днепра) «Работа с хранилищами данных в Google App Engine, отличия от реляционной модели». Я Апсы еще не юзал вообще. Но в скором времени мне таки придется уткнуть свой нос у туда. И пока то, что я узнал — мне не очень понравилось. Реляционных БД там нет вообще. Только их не реляционная БД и мемкеш.

    Мое первое впечатление — это модели бд, как в классической ОРМ, при этом кладутся данные в виде модели и в виде этой же модели забираются, с вытекающими ограничениями. Фишка которая сразу смутила весь зал — если вы копили-копили данные, а потом захотели добавить еще одно поле в модель, то старые данные, построенные на старой модели не обновятся, а нужно руками доставать каждого и задавать ему новое поле, и по словам Михаила — чем больше вы делаете выборку, тем дольше она получается.

    В кулуарах мне рассказали немного больше о самом App Engine. Он не совсем на шару, а в нем есть лимиты, я пологаю, что лимиты на все. Причем при приодалении этих лимитов вам просто закрывают доступ к сайту, хотя по совести их просто надо не давать использовать больше. И хотя питон с джангой были первыми в арсенале App Engine – они там со своими ограничениями. Так что 40 минут доклада оставило для меня много вопросов.

    Александр Соловьев. «Redis: Дикий Запад баз данных». Если коротко — то Redis — этот мемкешед, который сторит данные на винте с промежуточным хранилищем в памяти. С типами данными не только строки но и инты, листы, сеты. И с довольно обширным функционалом для их применения. Мастер-Слейв репликация, кстати только в этом наверно редис проигрывает мемкешу, т.к. мемкеш может использовать несколько серверов и данные между ними отлично распределять ( но редис держит данные на винте а не в памяти ). Ну и конечно же, Александр, как авторитетный велосипедист не мог не написать к редису чего-то своего pyredis ( питонячий клиент для редиса )

    Не мог не оценить подачу материала Александром. Очень живо, я даже подумал что презентация получилась в стиле теле-магазина: «Вы хитите это — пожалуйсто — редис отлично с этим справляется, это – и это вы можете сделать как 2 пальца об асфальт и то и то…». Но я бы на его месте такой продукт подавал как Стив Джобс — Макбук Аир. «Представте систему, которая быстрее мемкеша но данные сторит на винте, с типизацией ячеек и т.д. и т.п. И в конце Редис» Ну что-то в этом стиле.

    В любом случае, Александру спасибо. Будем смотреть, будем пробовать. Интересно, он кешовый бекенд для редиса на джанге уже написал?

    Владимир Пузанов и Владимир Кирилов «Расширения и встраивание Python». Эти два молодых хакера рассказали о том где можно применять питон, с чем и как его можно связывать. Jython, IronPython и многое другое, что я еще не запомнил. Надеюсь где нить раздобыть их презентацию. Но для себя отложил Stackless Python — у него очень «крутые» треды, на сколько крутые — я уже буду пробовать ручками сам. И когда я говорю о Stackless мне уже какой раз предлогают глянуть на greenlet. Общее впечатление о докладе осталось очень хорошее – хороший обзор, живая подача материал и оставило много вопросов (как и должно быть в подобных докладах). В конце парни показали прикольный примерчик как они питоном хачат сафари и меняют в нем титл через его жсный движок. Хотелось бы ответить всем бегающим по залу участникам с вопросам «Нафига надо было хачить софари». Объясняю — просто так!!! Просто точка ( довольно прикольная ) в докладе о расширениях и встраиваниях питона, обидно, что многие из всего доклада запомнили только эту точку.

    Андрей Мишковски «Использование Python в ГИС» . Проблематика Гиографические Информационные Системы для меня была нова, но подача информации была доступна и понятна даже слушателю не знакомым с темой. Так что если кто хочет может просмотреть презентацию, и дождаться выхода видео.

    Сергей Кирилов. «WebSockets в twisted». WebSockets — это новое расширение протокола HTTP в сторону двухстороннего взаимодействия клиент-сервер с одним коннектом, которая описана в стандарте HTML5. Поддерживается пока не всеми ( поэтому пользуемся библиотечкой, которая подменяет стандарт для тех, кто его еще не поддерживает ). Я мог пропустить, но по моему twisted-у был отведен один слайд, на котором выведено 42 строчки кода и сказано, что их 42 :) Кстати нагугли и хабровскую статью на эту тему.

    Не могу не оценить рисковый ход Сергея — реальная демонстрация продукта. Заработало почти с первого раза. У меня так никогда не получалось. Простенький чатик с инпутом и кнопочкой сабмит — впечатлил всех но не демострацией работы а то что почти все, у кого был ноут и получалось воспользоваться вайфаем — начали болтать и прикалываться друг с другом на большом экране, да так что в зале поднялся шум и гам, было очень весело, но по-моему не все успели задать вопросы.

    Сергей, если у вас сохранилась копия этой болтавни в чате — выложите куда-то, было прикольно :)

    И последний из понравившихся мне докладов был у Ивана Моргуна, сразу после нее я и убежал, т.к. надо было успеть на поезд обратно. Доклад был о «Работа с платежными системами в Django (PayPal, WebMoney)». Из джанго я ничего интересно для себя не вынес, но некоторые интересные моменты для PayPal подчеркнул.

    Организаторам, спонсорам и докладчикам мероприятия огромное спасибо. У вас все отлично получилось. Давайте как нить повторим. :)

    Еще о pycamp:
    curvedbrain.org “Мысли по мотивам PyCamp Kyiv”
    Макс Ищенко “мысли к вчерашнему pycamp”
    Vladimir PyCamp впечатления
    Дмитрий Гайворонский “PyCamp @ Kiev, 30 Jan 2010″
    … пишите в комментах ссылки на свои посты о кемпе …

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

  • 20Jan

    c81822b789f2Так что через неделю собираюсь в Киев на PyCamp Kyiv. Все об этом мироприятии можно почтить у них на сайте.

    Кто не сможет там быть – обещаю выложить небольшую статейку о том, что вы пропустили ( и углубляясь в те моменты, которые мне были интересны )

    Share and Enjoy:
    • Facebook
    • LinkedIn
    • Twitter
    • del.icio.us
    • StumbleUpon
    • MySpace
    • Reddit
    • Digg
    • Google Bookmarks
    • Technorati
    • email
    • Print
    • Sphinn
    • Mixx
    • Blogplay
    • Add to favorites
    • Linkter
    • Live
    • MSN Reporter
    • NewsVine
    • RSS
    • Yahoo! Bookmarks
    • Yahoo! Buzz
    • Yigg
    Rating 3.00 out of 5
    [?]

    Tags: , ,

« Previous Entries   Next Entries »

Recent Posts

Recent Comments

  • похоже, опчатка...
  • JSONotEncode - Это JSON Not Encode? Не сразу это понял )...
  • В чем фишка этого маневра-дублирования?loads = json.l...
  • Очень понравилось!...
  • Если данные простые, я чаще всего пихаю их в ту же таблиц...