30 мар. 2009 г.

Штраф 50 тысяч Евро за отсутствие раздела "реквизиты" на сайте

В книге «Концепция разработки Web-сайтов. Как успешно разработать Web-сайт с применением мультимедиа-технологий», автор (Й. Якобсон) утверждает, что по законам Германии (а может и не только) за отсутсвие раздела сайта "Импрессум" (раздел об ответственных лицах - пришло из печатного дела) может быть наложен штраф 50 тысяч Евро. Конкретно, там должны быть указаны:

  • Имя и адрес владельца
  • Адрес эл. почты и телефон
  • Контролирующие органы, если собирается личная информация о пользователях
  • Номер и место регистрации (видимо, аналог нашего ИНН и пр. реквизитов)

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

А вы что думаете по этому поводу?

Code review

Нашел в нете http://www.review-board.org, заинтересовался. Система, безусловно, интересная, но ломать существующий инструментарий для внедрения в процесс фичи "Code review" не хотелось. Запарился поисками trac pluggin'а, т.к. сам трак заточен под очные обсуждения кода :).

Словами Шевчука - "Выход есть - как всегда в окно"

Distributed Peer Review -плагин для комментирования кода в "удобной для программистов обстановке" (текст со страницы плагина) - то есть дома :), где несогласный опонент не сможет навредить.

Линкотека: Автозагрузка ExtJS, min и max width в IE 6, покраска гитары своими руками и Python'ячи мудрости...

 

ExtJS Tips&Hacks: автоматическая загрузка библиотеки ExtJS по требованию.

"Изначально к странице добавляется стилевой файл из дистрибутива ExtJS. Из скриптов мы используем сборку библиотеки, использующую jQuery и специальный адаптер. Вот эти два файла мы объединим в один, сначала минифицированную версию jQuery, потом Ext-jquery-adapter. И этот скрипт загружается на страницу. Сжатая версия CSS от ExtJS занимает примерно 40 Кб (особенно, если и ее откорректировать под нужды проекта), а минифицированный скрипт, объединяющий необходимые библиотеки - 73 Кб, и это все пока без учета возможностей gzip-сжатия.

В результате мы получаем на странице, во-первых, основные возможности от jQuery, и, главное, самое-самое минимальное ядро от ExtJS, буквально основные функции и возможности корневого класса Ext и его расширения для стандартных объектов JavaScript (например, String, Array и Date при использовании ExtJS получают некоторые "бонусы")."

min and max-width - проще не бывает...

"

* {margin:0;padding:0;}
body {
background-color:#fff;margin:3px auto;
padding-left:600px;width:10%;
}
.middle {border:#000 1px solid;margin-left:-600px;}

<body>
<div class="middle">...</div>
</body>


Проверено в IE6 (7,8), OPERA9.64, FF3, SafariWIN, Chrome.



"




Покраска гитары своими руками




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




SQL Parsing with Python, Pt. II




" The API of the module is pretty simple. It provides three top-level functions on module level:sqlparse.split(sql) splits sql into separate statements, sqlparse.parse(sql) parses sql and returns a tree-like structure and sqlparse.format(sql, **kwds) returns a beautified version ofsql according to kwds. "




Python generator to list decorator




"



def listify(gen):
"Convert a generator into a function which returns a list"
def patched(*args, **kwargs):
return list(gen(*args, **kwargs))
return patched

@listify
def f(x):
for i in range(x):
yield "item" + str(i)

assert f(5) == "item0 item1 item2 item3 item4".split()


"

27 мар. 2009 г.

Нарратор в Fight Club

narrator

За весь фильм так ниразу и не назвали имя главного героя (Эдвард Нортон). В титрах тоже - норратор. Сплошное западло. Я читал Чака Паланика, но у него, по моему, тоже нет имени для главного героя...

Оказывается, снимал фильм David Fincher, который приложился ещё и к Seven и The Curious Case of Benjamin Button. Удивительный, один словом, человек.

Пасхальные яйца и фильма (в списке почему-то нету писки, которую в фильме показывают чаще Тайлера):

26 мар. 2009 г.

Тимати задержали в Мексике по подозоению в распространении наркотиков!

Естественно это не правда, но паренек похож. Фото с великолепного сайта http://www.boston.com/bigpicture, пост: http://www.boston.com/bigpicture/2009/03/mexicos_drug_war.html.

На Дениса он тоже похоже...

Документация к TsoguNG

Второго дня разговаривали с Иваном о документации к TsoguNG (он любезно поделился собственной версией API-документации), а сегодня появилась "официальная API-документация" для TsoguNG. Появилась конечно не сама, ей помогли Денис, Дима и epydoc.

Постепенно проект растет, и возможно, выйдет за пределы песочницы infs-a -было б неплохо...

Кстати, есть демо-страница TsoguNG

Technorati Теги:

ЗЫ. У Ильнура (iceone) есть блог - http://iceone7.blogspot.com/.

ЗЫ2. Дима, если у тебя есть тоже - напиши!

UPDATE: Эти Пиьски удалили меня из trac'a

25 мар. 2009 г.

Как увеличить свой балкон?

Сегодня заметил на одном из балконов вот такой необычный предмет - тележка из супермаркета. Любые комментарии излишни.

15 мар. 2009 г.

Juno - lightweight web framework

Напоролся на Juno случайно. Впечатлен примерами кода с http://brianreily.com/project/juno/:

'Hello, World' in Juno

  • The basics:
        from juno import *

    @route('/')
    def index(web):
    return 'Juno says Hi'

    run()



  • Add some url handling:
        @route('/hello/:name/')
    def hello(web, name):
    return 'Hello, %s' % name



  • Use a template:
        @get('/template/:name/')
    def template_hello(web, name):
    template('hello.html', name=name)




Models




  • Basics:
        >>> Person = model('Person', name='string')
    >>> p = Person(name='brian')
    >>> # p.name, p.id
    >>>
    >>> find(Person).all() # => [ <Person: id = 1> ]





Как видно из примеров, все очень быстро. Синтаксис реально минималистичен. Умеет MVC, совместим с WSGI, включает в себя "development server and SCGI/FastCGI servers", Jinja2 и Mako в качестве шаблонов и SQLAlchemy.

14 мар. 2009 г.

Фишки.Нет на trac-е нефтегаза.

12 -го марта некто Тимофей закомитил в трак кучу фоток сотрудников к, похоже, закрытой подсистеме "graduate". Решение о том, что подсистема закрытая напрашивается само собой после просмотра её исходников: http://trac.std.tsogu.ru/browser/graduate/trunk/core/views.py.

А ещё Тимофей держит в траке компилированные питон скрипты, файлы кэша тумбнейлов windows (thumbs.db) и файлы конфликтов синхронизации svn.

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

ЗЫ. Пожалуй, я не хотел обидеть никого из моих бывших коллег (условие: проработавших более 1 года) :) .


UPD: 16 марта товарищи все исправили: http://trac.std.tsogu.ru/timeline?from=03/16/09&daysback=0&wiki=on&milestone=on&ticket=on&changeset=on&update=Update

4 мар. 2009 г.

Как динамически импортировать модуль и/или класс

Ломал голову этим вопросом при работе над новым fsproject. Решение подсмотрел тут: http://davtec.wordpress.com/2009/03/04/how-to-dynamically-import-a-python-module/

 

module_name = ‘module1.module2′
parts = module_name.split(’.')
module = __import__(module_name)

for p in parts[1:]:
module = getattr(module, p)

Or you can use sys.modules:

import sys

module_name = ‘module1.module2′

module = sys.modules[module_name]

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