• 30Mar

    ocherednoj-super-bordak_13224_s__1Первое, что меня смутило при работе с БД в питоне — это невозможность вернуть результаты в виде хеша, только массив строк и столбцов. И это не поддерживается в DB API принципиально

    Note that the reason for not extending the DB API specification
    to also support dictionary return values for the .fetch*()
    methods is that this approach has several drawbacks:

    * Some databases don’t support case-sensitive column names or
    auto-convert them to all lowercase or all uppercase
    characters.

    * Columns in the result set which are generated by the query
    (e.g. using SQL functions) don’t map to table column names
    and databases usually generate names for these columns in a
    very database specific way.

    As a result, accessing the columns through dictionary keys
    varies between databases and makes writing portable code
    impossible.

    Но есть у курсора свойство .description которое можно использовать для получения массива столбцов и преобразование результатов в хеш.

    1. def fetchdictall(cursor):
    2.     desc = cursor.description
    3.     dlen = len(desc)
    4.     ret = []
    5.     for item in cursor.fetchall():
    6.         onerow = {}
    7.         for field,i in zip(desc,range(dlen)):
    8.             onerow[field[0]] = item[i]
    9.         ret.append(onerow)
    10.     return ret
    11. def executedict(cursor,*arg):
    12.     cursor.execute(*arg)
    13.     return fetchdictall(cursor)

    Но у драйвера для постгриса есть уже встроено решение:

    1. #!/usr/bin/python
    2. import psycopg2,psycopg2.extras
    3. dbc = psycopg2.connect("user=oduvan password='gr1v1ca5a' dbname=oduvan")
    4. dbc.set_isolation_level(1)
    5. cursor = dbc.cursor(cursor_factory=psycopg2.extras.DictCursor)
    6. dbc.set_client_encoding('UNICODE')
    7. cursor.execute('select * from "t1"')
    8. ret = cursor.fetchall();
    9. print ret[0]['name']

    Статьи по теме:

    http://www.devx.com/opensource/Article/29071/0/page/1

    file:///usr/share/doc/python-psycopg2/doc/extensions.rst.gz

    http://www.python.org/dev/peps/pep-0249/

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 26Mar

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

    box2d
    Box2DFlashAS3

    ape
    AcrionScript Physics Engine

    fisix
    Fisix Engine

    as3isolib_logo_main
    as3isolib

    Вот так я безвкусно все накидал. Просто заходим, смотрим, удивляемся.

    Rating 3.00 out of 5
    [?]

    Tags: , , , ,

  • 26Mar

    table-versus-divУ JQuery есть возможность парсить ХМЛ как текст, если передавать его как аргумент «волшебной функции»

    Я это использовал для парсинга XML респонса аякса. Происходило это вот так:

    $.ajax({
    1.  'url':url,
    2.  'dataType':'text',
    3.  'type':"POST",
    4.  'data':data,
    5.  'contentType':'text/xml',
    6.  'success':function(data){
    7.   parser.parse($(data))
    8.  }
    9. })

    Т.к. если аргументом функции JQ передать текст, то она его переводит объект, для которого доступны все функции JQ. По крайней мере я так думал до недавнего времени.

    Как в последствии оказалось:

    Следующий код в mozilla и IE6 будет давать разные результаты.

    1. $('<nn><c1 /><c1/></nn>').children().length

    mozilla – 2
    IE6 – 0

    А все почему, я по детской наивности откладываю тестирование проекта в IE на последний момент. Наверно потому, что во мне сидит маленький человечек и говорит, что типа «забей, все равно в ИЕ6 никогда все нормально не работает, поэтому тр…ся будеш потом, а пока получай удовольствие и думай, что у тебя все работает отлично»

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

    1. $.ajax({
    2.   'url':url,
    3.   'dataType':'xml',
    4.   'type':"POST",
    5.   'data':data,
    6.   'contentType':'text/xml',
    7.   'success':function(data){
    8.      parser.parse(data.documentElement)
    9.   }
    10. })

    В mozilla такое работает, но в ИЕ даже в эту функцию не заходит. Проблема оказалась в хеадере, необходимо передавать Content-Type: text/xml . Сразу решил у XML составить правильную шапочку.

    1. <?xml version="1.0" encoding="utf-8" ?>

    Если серверную часть вы пишите на Django, то вам просто придётся респонсы переделать.

    1. return HttpResponse(''+response,'text/xml; charset=utf-8')

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

    Проходимся по всем childNodes:

    1. var childs = el.childNodes
    2. for(var i=0;i<childs.length;i++){
    3.   if(childs[i].nodeName!='#text'){
    4.    parseXml(childs[i])
    5.   }
    6.  }

    Получение аттрибута:

    1. el.getAttribute('id')

    Получения текста:

    1. el.childNodes[0].nodeValue

    Но если вам необходимо парсить текст, который к вам зашёл не через ajax. У меня, к примеру, флешка через External Interface передает аргументы ХМЛ, который необходимо уже парсить внутри JS. Для этих целей я написал отдельную функцию:

    1. function textToXmlEl(text){
    2.    return (new DOMParser()).parseFromString(text,'text/xml').documentElement
    3. }
    4.   if($.browser.msie){
    5.      textToXmlEl = function(text){
    6.       var xml = new ActiveXObject("Microsoft.XMLDOM");
    7.       xml.async = false;
    8.       xml.loadXML(text);
    9.       return xml.documentElement
    10.      }
    11.  }

    первая функция работает для mozilla, но если вы являетесь счастливым обладателем IE, то функция будет переопределена.

    Функционал ещё тестируется и дорабатывается, поэтому я, возможно, буду ещё дописывать и изменять эту статью, так что, жду вашу конструктивную критику.

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

    PS: В Джанго есть еще конфиги DEFAULT_CONTENT_TYPE, это на случай, если вы не хотите переписывать строчку с HttpResponse и вы всегда возвращаете только ХМЛ

    Rating 3.00 out of 5
    [?]

    Tags: , , , , , ,

  • 22Mar

    Первое, что я подумал, когда увидел сайт с этой книгой — это то, что автор должен быть большим профессионалом своего дела, если своей книге по построению пользовательских интерфейсов дал такое тонкое название. А когда прочитал, то пожалел, что не нашёл эту книгу раньше. Состоит она из двух частей. Первая Часть называется «Продуктивная работа» – еще только теория, но теория не только разработки пользовательских интерфейсов, но и вообще подход к процессу разработки. Так что полезно будет всем. Вторая уже более практичная и уже ближе к практике. Но прочитать все равно стоит, хотя бы ради того, чтоб увидеть, как автор улучшит дизайн стандартного виндового калькулятора. Не знаю как вы, но я теперь стандартным калькуляторам пользоваться не могу, т.к. знаю, как он на самом деле должен выглядить.

    Книга совсем малюсенькая не поленитесь.

    Rating 3.00 out of 5
    [?]

    Tags: ,

  • 09Mar

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

    piranha.org.ua/blogAlexander Solovyov – фанат минималистических дизайнов. В основном блог о Python, Django, JS. О технологиях, идеях, мыслях. Правда, сейчас реже стал писать, хотелось бы чаще видеть посты от него.
    abrdev.comАлександр Лозовюк Участвует в создании и поддержке многих он-лайн игр. Блог о новостях в IT обзоры технологий. Также было по началу, сейчас уже меньше – обзоры архитектур популярных сервисов. PHP, JS а также сопутствующие фреймворки
    www.arturclancy.com – Артур Оруджалиев. Интернет, Маркетинг, Бизнес да и просто интересные вещи о жизни о людях о Интернете.
    www.design-freak.comМиша Квакин авторский дизайн-ресурс и не только, идеи, взгляды.
    www.insight-it.ruИван Иванович Блинков Архитектура и новости популярных сервисов, новости рунета, программирование, но о нем меньше :)

    livedev.org Мысли, идеи, задачи и решения по веб-разработке. На самом деле Илья довольно разносторонняя личность, так что в блоге найдете много интересного.

    Software Maniacs – блог Сагалаева Ивана, руководитель группы разработки контент-сервисов в компании “Яндекс”. Блог о веб разработке, о программировании и все больше о Python и Django. Также можно заглянуть в разделы Форум и Программы

    Продвижение в регионах – блог Сергея Чабатько специалист по СЕО оптимизации, а блог о становлении белорусского Интернета. Как, вы что не из Белоруссии?? да какая разница, все равно есть идеи интересные. + Его же форум

    Блог Веб-разработчика – Антона Шевчука. Дизайн, программирование php, javascriupt и jquery. Кстате, о jquery у него есть отличная серия статей “jQuery для начинающих”, в четырех частях (1,2,3 и 4)

    Блог Дмитрия Лазерева – занимается бизнес тренингами, а блог об этом в том числе. Автор книги “Презентация: лучше один раз увидеть!”. Также на сайте можно найти хорошие видео материалы с его бизнес тренингов.

    Пока хватит. Но все сразу выкладывать не буду, и так очень долго не писал. Авторам блогов, хочу высказать свою благодарность.

    PS: никогда не думал, что писать о чьем-то блоге так сложно. Хоть и 1-3 предложения о каждом, но все равно хочется же каждый выделить среди других.

    Rating 3.00 out of 5
    [?]

    Tags: , , , , , , , , , , ,

   

Recent Posts

Recent Comments

  • Я просто оставлю это тут: ...
  • спасибо...
  • Если вдуматься в каждое слово, то время беСконечно в русском...
  • Спасибо, Евгений, исправленно.P.S.: перехал на диску...
  • за опечатку - спасибо...