Unknown keycode 0x0
Вот такая веселая надпись будет нас ожидать в gnome если установлена раскладка отличная от en_*.
Это есть глобальная проблема большинства java-приложений в linux - в них не работаю горячие клавиши в раскладке отличной от латиницы (русской и любой другой).
От этого страдают все: и простые пользователи LibreOffice, и разработчики, которые вынождены пользоваться всякими разными ide, которые написаны на java.
Ага. А лечить-то как?
Для продуктов jetbrains существует два рецепта:
Добавить в idea.properties
-Dide.non.english.keyboard.layout.fix=true
Раньше работало, а теперь, увы, нет.
И второй способ, который можно использовать не только с jetbrains, но и с любым другим софтом на java.
Достаточно скачать маленький jar с гитхаба и следовать инструкции. Пока этот способ работает.
Проблема также замечена в smartsvn.
Управление зависимостями проекта при помощи bower+composer
Отлично. У нас есть новая интересная идея для нового проекта. Садимся мы значит за клавиатуру и… Эм. А что “и”? Наш проект зависит от кучи библиотек и фреймворков: yii, angularjs, doctrine, twitter bootstrap и т.д.
Ок. Открываем браузер или папочку на диске (в которой все нам нужное скачано и рассортировано) и начинаем неспешно скачивать/копировать/распаковывать.
Мы моложцы, справились. Все скопировали, но только злобные разработчики пофиксили баги и выкатили новую версию своей библиотеки, фреймворка.
Пофикшенные баги - это всегда хорошо. Начинаем процесс скачивания/распаковки заново.
Страшный сон? Кошмар разработчика? Нет-нет, что вы! Стандартная процедура, через которую проходят много-много разработчиков. И даже не задумывыются, что все это можно автоматизировать, упростить и дать себе возможность наконец-то реализовать задуманный проект, а не заниматься tar -xf или zip -u, или что у них там еще.
А ответ-то простой - это bower в связке с любым другим менеджером для вашего любимого языка (composer для php, npm для nodejs и т.п.). Больше всего мне приходится иметь дело с php, поэтому опишу на примере composer.
Опять же. Почему bower и composer. Потому что первый - это менеджер для фронтенд-составляющей, а второй - для бекенда. Композером не слишком удобно пользоваться для управления зависимостями морды приложения.
Начнем-с.
Включение TRIM на SSD с LVM/LUKS
Trim - это полезная ata-команда, которая препятствует деградации производительности SSD-дисков.
Но часто случается, что дистрибутивы не включают ее на разделах.
Первым делом надо ее включить на нативных разделах просто добавив опцию discard к записи в fstab.
UUID=397b890a-c661-47f4-bd2a-2260379f8c6f /boot ext4 defaults,discard 1 2
Как поступать с разделами, которые расположены на шифрованных томах или lvm?
Для lvm надо сначала разрешить проброс команды trim к дискам (он запрещен по дефолту).
Правим /etc/lvm/lvm.conf и меняем опцию issue_discards с 0 на 1.
issue_discards = 1
Проверяем
$ sudo fstrim -v /home /home: 54,4 GiB (58440941568 bytes) trimmed
Отлично. Но что если разделы расположены на шифрованном томе, который размещен в lvm?
Важно: включение trim для зашифрованных томов может ослабить безопасность шифрования! Так как по перемещенным блокам можно сделать вывод о том, какая файловая система используется.
В /etc/crypttab нужно добавить опцию allow-discard.
luks-xxx UUID=some-uuid none allow-discards
для debian-based дистрибутивов строчка немного меняется
luks-xxx UUID=some-uuid none luks,discard
Теперь надо пересобрать initramfs.
Для rpm-based
$ sudo dracut --force
У fedora 18 есть баг из-за которого нужно указывать пусть к crypttab
$ sudo dracut --force -I /etc/crypttab
Проверим, что ctypttab был успешно добавлен в initrd.
$ sudo lsinitrd |grep crypttab
Теперь нужно заставить систему отправлять trim для томов.
# echo -e "fstrim /\nfstrim /home\nfstrim /boot" > /etc/cron.hourly/fstrim
AngularJS: простой прогресс-бар
AngularJS: забавная особенность bindonce
Для AngularJS существует модуль bindonce, который позволяет сократить количество вотчеров и тем самым ускорить страинцу.
У этого модуля есть директива bo-attr, которая позволяет использовать в качестве атрибута элемента любое нужное нам значение. В качестве значения выступает выражение, которое будет проинтерпретировано и добавлено в dom.
Однако, у этой директивы есть забавное поведение, которое связано с особенностями интерпретации.
$scope.title = 'some text with $peci@l chars'
$scope.title_ref = 'title'
$scope.title_title_ref = 'title_ref'
<a bo-attr="" bo-attr-title="title">anchor1</a>
<a bo-attr="" bo-attr-title="">anchor2</a>
<a bo-attr="" bo-attr-title="''">anchor3</a>
<a bo-attr="" bo-attr-title="">anchor4</a>
Как думаете, что выведется в каждом случае? :)