software simian's typewritings

двуязычная русско-английская проверка правописания в ubuntu

comments: 0

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

  1. удалить aspell, myspell, ispell со словарями (но не библиотеками, от которых могут зависеть многие другие программы) — что-то из этого может ставиться по умолчанию, и загромождать список словарей
  2. поставить libhunspell
  3. скачать «Орфографический словарь для myspell-hunspell: английский+русский (с ё)»
  4. переименовать словарь в enru.zip и положить его в $HOME/.opera/dictionaries
  5. перезапустить оперу, в многострочном поле ввода в контекстном меню выбрать Dictionaries → «English-Русский (с ё)»
  6. создать папку $HOME/.config/enchant/myspell, в которую распаковать словарь (в новой убунте ещё и переименовать из enru.* в используемую локаль, например, en_US.*)
  7. перезапустить пиджин (и гажим)

если подробнее, то разных спеллчекеров в линуксе уже штук восемь. Кто-то справедливо решил, что так жить нельзя, и сделал для них общую обёртку Enchant. Именно её использует GtkSpell, которой пользуются Pidgin и Gajim. Но Pidgin ещё не умеет выбирать словарь по умолчанию, поэтому должен остаться только один словарь — двуязычный. Именно поэтому удаляются aspell, ispell и myspell (и другие установленные спеллчекеры) вместе со своими словарями. libhunspell, наверное, нужен для того, чтобы Enchant мог прочитать формат этого словаря.

история самого словаря тоже довольно любопытная : ) Началось всё с Александра Лебедева. Его словарь был использован в качестве основы для словаря OpenOffice. А уже из него был изготовлен двуязычный (бинарный?) словарь.

а раньше склеивать словари приходилось вручную

квоты на количество данных в localStorage

, comments: 0

сейчас большинство браузеров уже поддерживают localStorage, и можно довольно смело его использовать для хранения данных на клиенте. Но каков размер этого хранилища? Спецификация говорит про «случайно выбранное ограничение в 5 мегабайт». Но не всё так просто.

большинство приложений будет хранить не байты, а символы. Абсолютное большинство символов даже в utf-8 занимает два байта. Некоторые реализации используют utf-16, которая использует два байта даже для ascii-символов.

каждый производитель браузеров принял своё решение. Chrome ограничивает размер базы именно пятью мегабайтами. Firefox позволяет хранить около 5 миллионов символов. Explorer — чуть меньше 5 миллионов. И только Opera уже сейчас при достижении предела просто предлагает пользователю выделить побольше места для приложения — вплоть до всего диска!

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

javascript ide

, , comments: 6

недавно вышла IDE WebStorm специально для веб-разработчиков. Я скачал её на попробовать, впечатлился, и даже подумал купить её. Но как же обойтись без небольшого исследования перед приобретением важного рабочего инструмента? : )

последний раз я сравнивал IDE пару лет назад, и не нашёл ничего достаточно хорошего. Все они приблизительно одинаково не подходили под мои требования. В итоге я остановился на Komodo Edit, который хотя бы тормозит меньше, чем остальные. Но порой за два года многое меняется. Итак, вот мои претенденты.

Eclipse — классная среда. В ней очень умно и удобно сделано почти всё. Собственно, именно её я использовал, когда работал преимущественно не с js. Однако поддержка яваскрипта в ней всегда хромала. Под эклипс есть несколько плагинов, поддерживающих яваскрипт, и все они почти блокнотного уровня. JSEclipse выкуплен и убит Адобом. Spket ничем особенным себя не проявляет. WebTools, хотя и сменил версию с 1.5 на 3, по-прежнему примитивен.

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

NetBeans оказался вполне прикольным. Местами лучше эклипса, местами похуже, да и страшноват. Но тоже обрабатывает каждый файл как вещь в себе.

Visual Studio я не рассматривал по понятным причинам ; )

в чём же обломались все перечисленные IDE? В примитиве. Go to definition работает, только если функция определена в этом же файле. Это смешно для любого хоть сколько-то крупного проекта. Даже Komodo иногда справлялся с этой задачей.

в общем, пока что я попробую остановиться на WebStorm, благо демка у него на 45 дней.

да, на всякий случай скажу, что между набором простых утилит и gui я выбираю gui

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

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

кстати, мой любимчик — highlight selected. Поставил курсор на слово, и оно подсветилось во всём тексте. Для этого нужно нажать ноль клавиш.

удобная работа с классами

, , comments: 2

в спеке html5 есть удобный интерфейс classList для работы с классами (и другими подобными строками из разделённых пробелами слов). Естественно, он базируется на том, что яваскрипт-библиотеки давно уже сделали удобным и привычным, поэтому переходник сделать очень легко в качестве развлечения на пять минут:

Element.addMethods({
  getClassList: function(element) {
    element = $(element);
    return element.classList || (element.classList = {
      has:    attach('has'),
      add:    attach('add'),
      remove: attach('remove'),
      toggle: attach('toggle')
    });
    function attach(name) {
      return element[name + 'ClassName'].bind(element);
    }
  }
});

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

  item:   function(index){ return element.classNames()[index]; },
  length: function(){ return element.classNames().length; },

в целом, конечно, это очень похоже на переходник к не менее удобному dataset, который я делал пару лет назад.

webfinger для вашего емейла

comments: 0

в свете недавнего подключения гуглом поддержки webfinger для всех публичных профилей я решил сделать то же самое для своего емейла me@arty.name. Как выяснилось, это очень просто.

  1. в document root домена я создал папку .well-known
  2. в эту папку я положил файлы host-meta, me@arty.name, acct:me@arty.name, .htaccess
  3. в файле host-meta я написал:

    <?xml version='1.0' encoding='UTF-8'?>
    <XRD xmlns='http://docs.oasis-open.org/ns/xri/xrd-1.0'
      xmlns:hm='http://host-meta.net/xrd/1.0'>
      <hm:Host>arty.name</hm:Host>
      <Link rel='lrdd'
        template='http://arty.name/.well-known/{uri}'>
        <Title>Resource Descriptor</Title>
      </Link>
    </XRD>
    
  4. в файлах me@arty.name и acct:me@arty.name я написал:

    <XRD xmlns="http://docs.oasis-open.org/ns/xri/xrd-1.0">
      <Subject>acct:me@arty.name</Subject>
      <Alias>http://arty.name/</Alias>
      <Link rel="http://webfinger.net/rel/profile-page"
        href="http://arty.name/" type="text/html"/>
      <Link rel="http://microformats.org/profile/hcard"
        href="http://arty.name/" type="text/html"/>
      <Link rel="http://gmpg.org/xfn/11"
        href="http://arty.name/" type="text/html"/>
      <Link rel="http://specs.openid.net/auth/2.0/provider"
        href="http://arty.name/"/>
      <Link rel="describedby" href="http://arty.name/"
        type="text/html"/>
    </XRD>
    
  5. для того, чтобы все эти файлы отдавались с правильным Content-Type, в .htaccess я добавил строчку

    DefaultType application/xrd+xml
    

вуаля! теперь можно идти на webfinger demo client и пробовать там адрес me@arty.name

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