software simian's typewritings

open google reader

, , , comments: 6

GR хороший, но мелких проблем у него хватает. Когда натыкаешься на них по многу раз на дню, это начинает раздражать. Поэтому встречайте Open Google Reader с преферансом и гимназистками

работает он как юзерскрипт на домене GR, получая таким образом доступ к GR API. На всю полноту функций папочки не претендует, при необходимости даёт к нему доступ

некоторые фичи:

пока что у проекта один пользователь — я, и о других способах использования ридера я думал (и знал) мало. Из этого следуют «баги»:

для установки на странице проекта кликните по ссылке для своего браузера

и да поможет запуску пятница!

о новомодных кодеках и поддержке html5 video

comments: 0

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

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

итак, очевидное: к этому моменту всё, что сделали ютюб и вимео — потратили один день программиста и неделю тестировщика, чтобы по желанию юзера вместо embed на странице оказывался тег video. Всё. Это вся «поддержка html5 video». Соотношение затрат и позитивной реакции на это событие очень впечатляет, так что шаг умный, не спорю. Меня удивляет скорее радость юзеров: чему тут радоваться?

а вот чего не сделал ни один из этих сайтов (но давно уже сделал dailymotion) — это перекодирования имеющегося архива видео в открытый и бесплатный Ogg Theora. Поэтому если за спиной вашего браузера не стоит богатейшая компания типа Google или Apple, способная заплатить до $5.000.000 за право встраивать в свои продукты кодек H.264, если вы пользуетесь собранным энтузиастами браузером Chromium или Firefox, то вам остаётся тормозной флеш или разные ухищрения.

естественно, перекодирование таких объёмов требует огромных ресурсов. Поэтому ютюб не будет этим заниматься сейчас. Нет, пока что они соберут хорошую карму за упоминание html 5 и потестируют фичу на широких массах юзеров. А вот через полгода-год, если не через два, возможно, начнётся конвертация. Если всё будет хорошо.

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

opera + prism: desktop web-applications

, comments: 0

несколько лет назад опера научилась запускать в отдельных системных окнах маленькие приложения-виджеты, вроде тех, что сейчас часто можно видеть на стартовых экранах смартфонов. Конечно, так можно было запускать и приложения покрупнее, но этим мало кто занимался. Тем более, что эти приложения работали только до тех пор, пока работала опера. А использовать отдельный процесс оперы с отдельным профилем — хлопотно.

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

будущее наступило : ) И теперь достаточно нескольких кликов, чтобы превратить веб-приложение в «настольное»! Зайдите оперой на страничку Opera Prism: desktop web-applications, введите урл и нажмите Install. Или скачайте его на диск, чтобы поредактировать. Или отправьте конечную ссылку другу.

конечно, я не буду утверждать, что опера была первее всех — это очевидно даже из названия заметки. До неё таким трюкам научились Mozilla Prism и Хром. Однако у оперы есть преимущество: она ест заметно меньше памяти, и эти приложения более похожи системные (вплоть до автопакетирования в deb в убунте).

а иконок нет пока только из-за моей лени ; ) Вернее, я не знаю ещё нормального способа добывать их автоматически или вручную.

созрели новые стандарты!

comments: 2

конец года выдался урожайным на приятные новости. Несколько модулей CSS3 наконец стали реальными стандартами, выйдя из стадии, где каждый браузер реализует тот предварительный вариант, который ему больше нравится (а их фанаты поплёвывают на оперу, ждущую хоть какой-то определённости).

итак, самый крутой модуль — CSS3 Selectors — теперь является Proposed Recommendation, и ему остался последний шаг до W3C Recommendation.

следующий в списке CSS3 Backgrounds and Borders, который сейчас стал Candidate Recommendation. Это этап, на котором разработчики спеки официально заявляют: «пришло время воплощать идеи в коде».

ну и последний модуль — CSS Multi-column Layout, который теперь тоже Candidate Recommendation.

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

p.s.: если кто не слышал, Еврокомиссия в очередной раз признала Микрософт нарушителями закона и заставила добавить в винду экран выбора браузера. Приятно, что в Евросоюзе такие законы. Приятно, что кто-то может добиться их выполнения. Даже если этот кто-то — скромная норвежская компания.

как добавить pubsubhubbub в блог на django

, comments: 0

наверное, вначале стоит пояснить, что такое PubSubHubbub. Эта технология была придумана недавно как замена веб-пингам, позволяющим оповестить всех заинтересованных, что у вас в блоге появилась новая запись. Для этого при добавлении записи нужно было отправить http-запрос на один или несколько специализированных серверов, которые дальше сами рассылали уведомления всем подписавшимся. PubSubHubbub развивает эту идею дальше, добавляя в этот запрос само содержимое поста, так что заинтересованные сайты не ломятся все сразу в ваш блог, чтобы скачать фид и вынуть из него новый текст. Однако для большего нашего удобства работает и старый механизм: достаточно «пингануть» подходящий сервер, и он сам скачает фид, извлечёт из него пост, и разошлёт его подписчикам

кратко процесс можно описать так:

  1. вы добавляете запись
  2. ваш блог отправляет серверу сообщение «в таком-то фиде новое содержимое»
  3. сервер скачивает фид и находит в нём новый пост
  4. сервер отправляет всем подписанным на обновления этого фида новый пост

итак, что нужно сделать для подключения вашего блога на django к этой радости? Во-первых, выбрать PubSubHubbub-сервер. Я сам пока знаю только один: http://pubsubhubbub.appspot.com/. Пропишем его в настройках (settings.py):

PUSH_URL = u'http://pubsubhubbub.appspot.com/'

затем нужно скачать и установить питоновский модуль для публикации в PuSH. Установка после распаковки делается обычным sudo python setup.py install

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

from pubsubhubbub_publish import publish
publish(settings.PUSH_URL, u'http://your.blog/feed.url')

но это самый простой вариант, мне хочется оповещать ещё и об обновлениях в фидах тегов:

from pubsubhubbub_publish import publish
from django.core.urlresolvers import reverse as reverse
params = [settings.PUSH_URL, u'http://your.blog/feed.url']
params.extend(map(lambda tag: 'http://your.blog%s' % (reverse('tag_feed', args=[tag])), tags))
publish(*params)

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

<link href="http://pubsubhubbub.appspot.com/" rel="hub" />

но в django для фидов используется навороченный Syndication Framework, поэтому придётся унаследоваться от стандартного класса отрисовки фида Atom1Feed и добавить строчку вот таким образом:

class PubSubHubbubEnabledFeed(Atom1Feed):
    def add_root_elements(self, handler):
        super(PubSubHubbubEnabledFeed, self).add_root_elements(handler)
        handler.addQuickElement(u'link', attrs={u'rel': u'hub', u'href': settings.PUSH_URL})

после этого в определениях классов фидов нужно заменить feed_type = Atom1Feed на feed_type = PubSubHubbubEnabledFeed

всё, добавление PuSH завершено! Пройдёт некоторое время, пока заинтересованные сайты узнают, что ваши фиды транслируют обновления таким способом, и после этого новые записи будут появляться на них практически моментально

ну а если вам хочется свести код минимуму, то наверное link можно прописать в фиде вручную, и вместо вызова метода publish просто отправлять на сервер запрос с параметрами hub.mode=publish&hub.url=yourfeedurls

кстати, вот обсуждение, которое сподвигло меня на доработку блога и этот пост