27 янв. 2010 г.

Управление информационной политики ТюмГНГУ не хочет больше новости писать

Изящный способ не работать придумали в управлении информационной политикой ТюмГНГУ: открыли “Внутривузовский конкурса на лучшее информационное сопровождение деятельности структурных подразделений на официальном портале”.

Не читайте новость по ссылке, первые 5 абзацев, видимо, скопированы из чего то диплома, а цели конкурса заставляют если не смеяться, то хотя бы плакать. Пример: “Содействие инновационному развитию вуза” (прим.: как?) или “Воспитание толерантности” (видимо толерантности к изначально х****му отношению сотрудников управления к своей работе).

Итоги конкурса будут подводится каждый месяц (!), а тур путевку дадут через год. Значит в течении года друзья управления будут получать флэшки, а сотрудники ковыряться в носу.




Интернет свобода или как ушатать банк?

День добрый, друзья! Я давно не писал и не написал бы, если б не одно маленькое событие: сегодня в РСС-ленту упало сообщение с рекомендацией прочесть “Очень расстроена и в шоке от удивления.”. Коротко: сотрудники альфа-банка после неизвестного разговора (крайне смутно описанного в сообщении) позвонили ещё пару раз и нахомили из-за 26 центов за автокредит.

Все даму поддерживают и никто почти никто не сомневается, что она полностью права. Один из сотрудников банка, видимо прочел её мягкий отсыл к факту, что она являлась сотрудником пресс-службы решил все быстро замять и послал её “подарок”. Но не тут то было! Война с альфой продолжается. Нашлись (как всегда) анонимные комменты о том, что в альфе всегда было очень плохо.

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

А теперь внимание! Вопрос: Вы помните, как ушатали Северную казну?

Сперва в интернете и сми прочно поселили мысль – банки в тяжелом состоянии и многие из (да почти любые) могут лопнуть. Затем: у лопнувших банков не будет возможности вернуть все деньги по депозитам. А потом у почти каждого моего знакомого “нашлись” друзья в Москве, которые советовали срочно забирать деньги из Северной казны! Срочно! Банку пипец, говорили они.

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

Был банк и нет теперь, хотя за кредит все равно платить приходится :).

Факты:

  1. Ирина Василевицкая являлась сотрудником пресс-службы
  2. Есть запись разговора с хамом из альфы (сделанная без его разрешения) и несколько истории о хамском отношении банка к клиентам
  3. Есть гневные сообщения на форумах и в комментах

А все началось с того, что Ирина поселила в мозгу блоггеров идею: “банку я нафиг не нужна как клиент, ему, что вполне естественно, важен хороший пиар”.

Мое мнение: плох тот журналист, которые не хочет стать пиарщиком и из всех пиаров черный, как известно, наиболее доходен.

Кому может быть выгоден черный пиар Альфа-банка?




6 янв. 2010 г.

Django 1.2 alpha 1

Только что выложили Django 1.2 alpha 1 для тестирования и предпросмотра. Пересаживать стабильные проекты на этот релиз, наверное, пока не стоит, хотя, как уже отмечалось, транк django отличается редкой стабильностью и вниманием к мелочам.

В новой версии большие изменения в защита от кросдоменных запросов, поумневший тэг {% if %}, группы методов get_db_prep_*(), переделанный E-mail бэкенд, добавленный Messages Framework, конечно же любимый всеми multiple databases, BigIntegerField, readonly_fields (ура!), подсветка кода.

Полный список изменения тут: http://docs.djangoproject.com/en/dev/releases/1.2-alpha-1/#what-s-new-in-django-1-2-alpha-1

Roadmap такой: 26 января (+ неделя) - бета, 2 марта – 1-ый релиз кандидат, 9 марта – релиз.

Поздравляю всех!

Django-tagging и русские тэги.

Основательно потрахавшись с django-tagging пришел к выводу, что не лишним будет поделится накопленным опытом.


# urls:

    ...

    url(r'^tag/(?P<tag>[^/]+)/$', bookmarks_by_tag, name = "tag"),

    ...



# views:

@login_required

def bookmarks_by_tag(request, tag):

    tag = urllib.unquote(unicode(tag))

    tag = get_object_or_404(Tag, name = tag)

    bookmark_instances = TaggedItem.objects.get_by_model(BookmarkInstance, tag)



    return render_to_response("bookmarks/your_bookmarks.html", {

        "bookmark_instances": bookmark_instances,

    }, context_instance=RequestContext(request))



# tamplates:

{% load tagging_tags %}



{% tag_cloud_for_model bookmarks.UserBookmarkInstance as tags with steps=9 min_count=0 distribution=log %}



<div id="cloud">

    {% for tag in tags %}

       <a href="{% url tag tag|urlencode %}" style="font-size: 1.{{ tag.font_size }}em">{{ tag }}</a>&nbsp;

    {% endfor %}

</div>


5 янв. 2010 г.

InputEx 0.4.0

Сегодня обновился InputEx до версии 0.4.0. InputEx – библиотека виджетов полей форм. Основана на YUI. Прелесть и мощь виджетов в поддерживаемых проверках ввода и краткости кода (JSON) необходимого для инициализации оных. Минус - очевидная посредническая функция библиотеки, изменится версия YUI и мы зависнем в ожидании нового кода от Eric Abouaf.

В новой версии InputEx обзавелся dependency configurator’ом и новыми виджетами. Полный список изменений см. на сайте http://javascript.neyric.com/inputex/.

3 янв. 2010 г.

Визитка Vesper Lynd

Далее скрин визитки Vesper Lynd из Казино Рояль. Сайта www.theteasury.gov.uk нет :).

visitka_lynd

А вообще, в очередной раз пересмотрел этот фильм и пришел к выводу, что правы те, кто утверждает, что второй серией (Квант Милосердия) загублен колоссальный потенциал Казино рояль. Фильм просто великолепный.

Django-compress – не compressor.

Ранее я писал об использовании django-compressor (1, 2, 3) для объединения и обработки (чистки, сжатия) css и js файлов.  Вкратце, compressor мне не понравился. На днях появился форк compressor'а – django-css, но как в анекдоте про пропавшее серебро: “ложку мы потом нашли, но неприятный осадок остался”.

Сегодня будем смотреть на Django-compress, который появился значительно раньше compressor’а, но к сожалению (или к счастью) не менялся с 16.03.2009.

Что умеет compress?

  • объединять js/css файлы,
  • минифицифировать css файлы (вот так, да. На самом деле всего лишь удалять пробелы, переносы, табы и пр. мусор),
  • автоматически или вручную обновлять файлы (ура!),
  • продвинутый конфиг для объединения в группы, сжатия и пр. опиции,
  • включенный фильтр для YUI compressor, CSSTidy,
  • инфраструктуру для создания собственных фильтров,
  • спец. template тэги для простой загрузки получившегося безобразия.

Установка и настройка

Делаем чекаут svn co http://django-compress.googlecode.com/svn/trunk/ django-compress или клонируем git’ом с адреса git://github.com/pelme/django-compress.git. Заходим в каталог, выполняем python setup.py install.

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

Для начала в settings.py нужно указать что и как мы будем собирать, сжимать и пр.


COMPRESS_CSS = {

    'common': {

        'source_filenames': (

             'css/ui-lightness/jquery-ui-1.7.1.custom.css',

             'js/jquery.fancybox/jquery.fancybox.css',

             'common/style.css'),

        'output_filename''css/common.css',

        'extra_context': {

            'media''screen,projection',

        },

    },

    'rikone': {

        'source_filenames': (

             'rikone.ru/css/style.css',),

        'output_filename''rikone.ru/css/rikone.css',

        'extra_context': {

            'media''screen,projection',

        },

    },

    '72arenda': {

        'source_filenames': (

             '72arenda.ru/css/template_css.css',),

        'output_filename''72arenda.ru/css/72arenda.css',

        'extra_context': {

            'media''screen,projection',

        },

    },

    'realtor-tyumen': {

        'source_filenames': (

             'realtor-tyumen.ru/css/lg-stl.css',),

        'output_filename''realtor-tyumen.ru/css/realtor-tyumen.css',

        'extra_context': {

            'media''screen,projection',

        },

    },

}



COMPRESS_JS = {

    'common': {

        'source_filenames': (

             'js/jquery-1.3.2.min.js',

             'js/jquery-ui-1.7.custom.min.js',

             'js/ui.datepicker-ru.js',

             'js/jquery.fancybox/jquery.easing.1.3.js',

             'js/jquery.fancybox/jquery.fancybox-1.2.1.pack.js'),

        'output_filename''js/common.js',

    }

}



COMPRESS = True

COMPRESS_AUTO = COMPRESS_VERSION = False



COMPRESS_CSS_FILTERS = None


Если уже потрудились добавить csstidy куда-нибудь в видное из проекта место, то можно смело убирать последнюю строку. По умолчанию включенная опция COMPRESS будет жать файлы при помощи JSmin (встроен) и csstidy (последняя строка как раз его отключала). Эта пара (JSmin и csstidy) дает неплохие результаты.

Я тестировал на наборе из трех css файлов (забиты были всякой ерундой из бесплатных шаблонов) и трех js (скопированная debug версия последней jquery). Результат: было 400 кб, стало 312 кб.

Но прелесть подобных инструментов в возможности использовать более мощные инструменты сжатия. Yuicompressor, например, на таком же исходном наборе давал 218 кб. Ощутимо?

Подключить yuicompressor можно так:


COMPRESS_YUI_BINARY = 'java -jar yuicompressor-2.4.2.jar'

COMPRESS_CSS_FILTERS = COMPRESS_JS_FILTERS = ("compress.filters.yui.YUICompressorFilter",)


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

synccompress –force

Главная прелесть django-compress в том, что он умеет определять изменился ли файл. Собственно, можно даже использовать номера ревизий в названии комбинированных и сжатых файлов, чтоб уж точно не возникло проблем с кешем.


COMPRESS_VERSION = True



COMPRESS_JS = {

    'common': {

        'source_filenames': (

             'js/jquery-1.3.2.min.js',

             'js/jquery-ui-1.7.custom.min.js',

             'js/ui.datepicker-ru.js',

             'js/jquery.fancybox/jquery.easing.1.3.js',

             'js/jquery.fancybox/jquery.fancybox-1.2.1.pack.js'),

        'output_filename''js/common.r?.js',

    }

}


На место “?” встанет номер версии файла. Изменчивость названии – не проблема. Для вызова групп в шаблонах используется специальный templatetag:


{% load compressed %}



{% compressed_css 'common' %}

{% compressed_js 'common' %}


В примере, кстати, заметна ещё одна “приятность”, имена групп для js и css файлов могут совпадать.

Теперь вернемся к заголовку “synccompress –force”. О чем это? Если отключить COMPRESS_AUTO, то файлы перестраиваться не будут, но их можно перестраивать спец. managment командой – synccompres, она смотрит изменились ли файлы набора и перестраивает результирующий файл (если необходимо). Но можно команду “заставить” перестраивать опцией “—force” (вонючий livewriter норовит сожрать двойное “-“). Команду можно дергать по cron или не лениться вызывать руками при обновлении css и/или js.

Django-compressor: прошла неделя.

Ранее я писал восторженные посты о django-compressor, compressor и фльтры. Теперь, по прошествии недели весь восторг куда-то улетучился. Во-первых, compressor’у раз в сутки не хватает памяти (машинка у нас не слабая, видимо, проблема с трэдами питонячими). Во-вторых, нет доступных моему мозгу способов заставить компрессор не пересоздавать не изменившиеся наборы файлов. На сколько я понял, компрессор вообще не смотрит на даты изменения файлов (вес, мд5 хэш), что само по себе – тупо.

В комментах ко второму посту (про фильтры) было замечание о django-compress, которым я и планирую заменить compressor (см. процесс и первые результаты в следующем посте).