Tom Adler’s blog

поддержка ЧПУ в браузере

когда-то давным-давно Дмитрий Смирнов ввёл в широкое обращение термин ЧПУ — человекопонятный урл. По сути, это было просто удобное название для идеи «пользователю должно быть удобно читать адреса страниц на сайте». Сейчас это довольно распространённый подход, но почему-то долгое время для него не существовало никакой поддержки в браузерах. Первой, как обычно, вступила Опера, позволив по хоткею Ctrl+Backspace перейти на уровень выше. Затем в Firefox появился дивный плагин LocationBar², которому я долго радовался, а потом огорчался, что он не работает в FF3 (впрочем, в описании есть ссылка на обновлённую версию).

но, будучи оперофилом, я захотел иметь аналогичные возможности и в любимом браузере, потому что «перейти на уровень выше» не всегда работает идеально. Написать плагин невозможно, зато user javascript может очень многое. В итоге за час родился «Locationbar²-like url segments navigator», показывающий нужные ссылки по нажатию Ctrl.

, ,

тюнинг раскладки в иксах и гноме

сейчас потихоньку начинают распространяться тюнингованные раскладки клавиатуры. Наверное, началось всё с поста Ильи Бирмана «Типографская раскладка клавиатуры», и с тех пор много уже написано и сделано.

по традиции, в линухе такие вещи настраиваются очень просто — дописыванием нескольких слов в соответствующих используемым языкам файлах в /etc/X11/xkb/symbols. Вот пример того, что было и что стало:

key <AB03> { [     c,          C ] };
key <AB03> { [     c,          C,     copyright ] };

однако, когда из линукса начинают делать юзер-френдли виндовс, (сюрприз!) начинаются проблемы. Для начала: эти любовно настроенные файлы затрёт первое же автоматическое обновление. Хорошо, можно скопировать их с новыми именами, чтобы их никто не стёр. Новые имена прописываются в /etc/X11/xorg.conf: Option "XkbLayout" "us_arty,ru_arty", и всё прекрасно работает. До тех пор, пока вы не запускаете гном. Гном любит пользователя, и даёт ему прекрасный инструмент для настройки клавиатуры, который в лучших традициях винды не предполагает тюнинга раскладок. Он даёт варианты, которые берёт из списка, который затирается автообновлением, поэтому его нельзя подкорректировать. И, естественно, гном ставит свои настройки выше общесистемных.

к счастью, иксы можно настраивать уже после запуска. Поэтому рецепт настройки раскладки прост:

  1. взять файлы тюнингованных раскладок: русской и английской, допилить их по вкусу, положить в /etc/X11/xkb/symbols
  2. в автозапуск гнома (System → Preferences → Sessions) добавить такую команду:

    /usr/bin/setxkbmap -symbols "pc+us_arty+ru_arty:2+group(caps_toggle)+altwin(super_win)+nbsp(level3)"

у такого подхода есть плюсы и минусы по сравнению с использованием Compose. Плюс — он работает на уровне иксов, поэтому нет необходимости настраивать способ ввода. Минус — иксам известно ограниченное количество юникодных символов, поэтому многоточие так вводить не получится. Ещё плюс — хоткей состоит только из двух кнопок.

python: scope, closure

сегодня я узнал две вещи о питоне: одну плохую и одну хорошую, и обе про область видимости aka scope

хорошая новость — про клёвый reflection в питоне: с помощью функции locals() можно получить словарь локальных переменных. Я пока что не знаю, зачем это могло бы пригодиться (впрочем, есть такой вариант), но возможность радует!

(если что, замыкание/closure — это такая фича языка, когда при объявлении функции запоминается её область видимости, и потом при вызове её из любого места она может обращаться к тем переменным, которые были ей «видны при рождении»)

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

>>> def outer():
...     a = 4
...     def inner():
...         a += 1
...         print a
...     return inner
...
>>> outer()() 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in inner
UnboundLocalError: local variable 'a' referenced before assignment

но если убрать строчку a += 1, то всё волшебным образом становится хорошо…

а вот как это работает в js:

js> function test(){ var a = 3; return function(){ print(++a); }; }
js> test()()
4

эх, вроде и симпатичный язык питон, но всё-таки яваскрипт лучше. Особенно в четвёртой редакции, о которой пока что можно только мечтать : )

импорт емейлов в новом вебе

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

к счастью, теперь API для получения контактов есть не только у продвинутого и малопопулярного GMail, но и у суперизвестного Yahoo! Вообще они молодцы: уже второй раз приносят огромной массе своих пользователей новую технологию, перед этим у Yahoo! появился openid-сервер. Хотя в импорте не обошлось без ложки дёгтя — для авторизации используется хотя и похожий на oauth протокол, но всё же не oauth. И, конечно, жаль, что пока что это не про российских веб-разработчиков.

via Simon Willison

socialhistory.js — любые интернет-закладки на выбор

для довольно старого трюка с определением посещенных страниц нашлось новое интересное применение, решающее проблему бесконечных списков сайтов [а]социальных закладок

надо бы, действительно, собраться, и сделать это для openid-провайдеров

, ,