24 мая 2013 г.

Git + кириллические имена файлов на OS X

Не ожидал, что в мире современного ПО могут быть проблемы с Unicode. Мне казалось, что все неприятности с кодировками закончились с приходом Unicode'а. Давно по крайней мере с ними не встречался. Но, как оказалось, git несколько некорректно работает с русскими именами файлов на Mac'е.

Есть у меня репозиторий, в котором я храню все свои заметки. Половина из них была написана в muse-mode, остальное в Markdown. Соответственно имена файлов с текстом содержат заголовки, содержащие кириллицу. Мне так удобнее. Ранее с таким подходом ни разу проблем не встречал.

И вот проблема на Mac'е. Все русские буквы в выводе git status отображаются в восьмеричном виде. И более того все файлы содержащие в именах кириллицу помечаются как untracked. Пример:

$ izonov:text izonov$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\271\320\273\320\276\320\262 \320\275\320\260 OS X.md"
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\270\314\206\320\273\320\276\320\262 \320\275\320\260 OS X.md"
#   .....

Вторая проблема (untracked файлы) решается достаточно легко. Подсмотрено в вопросе на Stackoverflow:

git config --global core.precomposeunicode true

После этого видим следующее:

$ izonov:text izonov$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\271\320\273\320\276\320\262 \320\275\320\260 OS X.md"

Решения отображения русских букв в git status я не нашел. Кириллические символы в именах новых и измененных файлов все равно отображаются в восьмеричном виде. Как вариант можно использовать git add -i. Там все символы отображаются в привычном виде.

P.S. [2013-05-28]: Вчера Konstantin Khomoutov подсказал, как решить проблему отображения русских букв в git:

git config --global core.quotepath false

23 мая 2013 г.

Evernote Web Clipper. Опять забыл пароль?

Довольно часто пользуюсь Evernote. Это действительно удобный инструмент для ведения заметок. Пользуюсь им с iPhone и через веб интерфейс с остальных систем (дом - Linux, работа - Windows). А теперь еще и оригинальным приложением для Mac'а пользоваться начал.

Все это к чему? Есть у этого замечательного сервиса казалось бы отличное дополнение для Firefox: Evernote Web Clipper. Но! После одного из последних обновлений он напрочь отказывается запоминать пароль и с жуткой периодичностью просит авторизоваться.

В Firefox на Mac'е подобные проблемы не наблюдаются. Логиниться часто не просит. Думаю это связано с тем что последнее обновление клиппера было установлено на чистый профиль.

Буду завтра на работе (до домашнего компа пока добраться не могу) пробовать установить Evernote Web clipper поверх нового профиля Firefox'а.

P.S. [2013-05-24] На работе поставил поверх чистого профиля клиппер. Он пароль вроде как перестал агрессивно спрашивать. Когда до стационарного компьютера доберусь, попробую найти файлы, которые надо почистить, чтобы профиль не менять.

22 мая 2013 г.

Xbox One. Впечатления

Во время написания вчерашнего поста одним глазом смотрел презентацию Xbox One. Похоже уже давним являюсь поклонником Xbox'а. Давным давно купил Xbox 360 пополам с сестрой. Веселая была история! Чтобы уговорить сестру на подобную сделку, был куплен специальный розовый джойстик. До этого я долго не играл на PC, так как снес Windows и погрузился в мир Linux. Было в общем не до компьютерных развлечений. После приобретения приставки я вернулся в новый для меня мир игр. Сейчас же играю в основном в хоккейчик, но и то редко.

Вернемся к Xbox One. Девайс однозначно крутой. Начинка его будет покруче всех моих девайсов вместе взятых. И видимо надо будет брать, если будет желание порвать всех в новом хоккейчике. А он то однозначно будет.

Не понравились некоторые маркетинговые и дизайнерские фишки. Например само имя "Xbox Единственный" (не знаю как лучше перевести. "Xbox Один"?). У меня по крайней мере сразу складывается впечатление, что вот он венец игровых технологий и лучше точно не будет. Привередливый я. Напомнило iPad New и следующий за ним iPad 4. Напридумывают всяких хитрых имен для устройств, а потом мучаются. Кстати почему Xbox 360 я тоже не знаю. Не интересовался.

Сам вид нового устройства с первого раза больше напомнил страшно сказать Play Station. Черный, квадратно-прямоугольный. Где элегантность предыдущих Xbox'ов? Также ожидал, что все поместят в одну небольшую коробочку, а в итоге их две. Сенсор Kinect снова в отдельной коробке. В принципе понимаю почему так сделали (удобнее и легче Kinect устанавливать отдельно над или под телевизором). Но было бы думаю круто иметь одну компактную коробку вместо нескольких. Надеюсь они общаются без проводов. Пропустил этот момент.

В джойстике порадовало, что кнопку Xbox передвинули подальше вперед. На старых (ох, они уже старые) контроллерах периодически случайно эта кнопка нажимается. И это уж очень мешает игре.

Можно заметить, что мои претензии достаточно мизерны. Это все последствия моего дурного вкуса. Но мой совет всем: надо брать. Чего только стоит устроить танцевальную вечеринку (Dance Central). Сколько с друзьями не собирались все в полном восторге. Xbox однозначно лучший продукт Microsoft (как бы я недолюбливал эту компанию). Если игры и компьютерные развлечения, то только Xbox.

21 мая 2013 г.

Macbook Air, блог и bash crash

Со вчерашнего дня решил писать по записи в день в данный блог, но умудрился уже проштрафиться. Просто напросто не успел. Этот план направлен на структуризацию своих мыслей. Хочу лучше понимать куда стремиться и чем лучше интересоваться, заниматься. Кроме того довольно часто начал сталкиваться с различными вопросами, решения которых не получается с первого раза найти в google (искать наверное разучился). Буду выносить все это дело в виде постов сюда. Постараюсь чтобы сюда попадали исключительно околотехнические темы. Остальное в Google+ или Twitter.

Итак начну с того, что любимая девушка подарила мне на день рождение MacBook Air. Поэтому с этого момента на данном блоге будут появляться посты посвященные и данному замечательному устройству, а также OS X (название блога видимо надо немного поменять). Все они будут помечены с помощью тега mac.

На Mac'е как раз и столкнулся с одной неприятной мелкой проблемой, которая несколько меня раздражает, но на данный момент я не знаю, как ее решить. Сразу же при получении этого девайся я начал устанавливать привычное мне консольное окружение. Для этого я использовал macports.

Настроил git completion и prompt, используя скрипты из git-core порта. Были установлены следующие версии портов:

  • bash 4.2.42_0
  • bash-completion 2.0_1
  • git-core 1.8.2.3_0

И теперь, время от времени после выхода из свящего режима, bash падает вот с такой ошибкой:

-bash(23573,0x7fff75972180) malloc: *** error for object 0x7fb1cb40c530: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug

При этом я не совсем уверен, что эта ошибка связана с bash-completion или git. Буду искать решение, но отказываться от completion и prompt совсем не хочется. Думаю попробовать bash из homebrew, ну или ручками собрать. Какие еще варианты? Куда копать на mac'е?

PS. Вот и ушло у меня пару часов на написание казалось бы небольшого текста.

P.S. [2013-05-25] bash все равно продолжает падать даже с выключенными completions и git-prompt. Происходит это стабильно раз в день.

12 февраля 2013 г.

Infinality патчи на стабильной ветке

Как-то я пропустил тот факт, что похоже уже давно infinality патчи находятся на стабильной ветке в gentoo portage. До этого ставил их из lcd-filtering. Теперь все намного проще. Добавляем USE-флаг infinality в make.conf и пересобираем freetype:

emerge -1q freetype
eselect fontconfig enable 52-infinality.conf
eselect infinality set infinality
eselect lcdfilter set infinality

Как видим теперь необходимо несколько раз дополнительно запустить eselect. При этом вариантов для выбора eselect infinality и eselect lcdfilter предоставляют многовато. Я с ними не экспериментировал. Если кто пробовал, поделитесь впечатлениями.

5 февраля 2013 г.

Использование Gitolite вместе с Redmine

Появилась необходимость добавить git репозиторий в Redmine проект на домашнем сервере. Для управления git репозиториями использую Gitolite. Как оказалось по-умолчанию Gitolite запрещает доступ всем кроме пользователя, которым он обслуживается. В моем случае доступ есть только у пользователя git. Redmine же запускает пользователь redmine. В общем главная загвоздка — найти umask опцию в настройках Gitolite.

Решение со Stackoverflow:

  • Добавляем в Redmine путь к необходимому репозиторию. Например: /home/git/repositories/repo.git.
  • Добавить пользователя, который запускает веб-сервер с Redmine в git-группу:

      usermod -a -G git redmine
    
  • В файле .gitolite.rc (находится в домашней директории git) поменять значение UMASK с 0077 на 0027. Теперь новые файлы Gitolite будет создавать с правами на чтение для группы git.

  • Также необходимо поменять права доступа для всех существующих репозиториев. В директории с репозиториями запускаем следующее:

      chmod -R g+rX
    

Есть еще варианты решения этого вопроса?

3 февраля 2013 г.

Svn to Git

Краткая инструкция миграции с svn на git.

Руководство к действию

  • Найти всех авторов с помощью скрипта

    #!/usr/bin/env bash
    authors=$(svn log -q | grep -e '^r' | awk 'BEGIN { FS = "|" } ; { print $2 }' | sort | uniq)
    for author in ${authors}; do
        echo "${author} = NAME <EMAIL>";
    done
    

    Все записи NAME и EMAIL вручную заменяем на необходимые значения.

  • Склонировать svn репозиторий

    git svn clone [-s] --no-metadata --username=USER --authors-file=SVN-AUTHORS SVN_URL
    

    Пара слов про опции:

    • -s — необходима, если используются стандартные svn папки (trunk, tags, branches).
    • --no-metadata — удаление записей git-svn-id из логов.
    • --username — тут все понятно.
    • --author-file — список авторов в svn репозитории (см. пункт выше).
  • Импорт ignore файлов

    На каждой ветке необходимо сделать следующее:

    git checkout BRANCH
    git svn create-ignore
    git commit -a -m "Import svn:ignore."
    

Полезные ссылки

Весь этот небольшой материал основан на следующих статьях:

24 января 2013 г.

Blogger пост из Emacs? Markdown + Googlecl script

Побаловался с googlecl. Умудрился случайно наделать множество постов, состоящих всего лишь из одного слова в своем читальном блоге. Сейчас вроде бы все исправил. Постараюсь подобное предотвращать в будущем. Но главное — проверил, что googlecl работает. Далее хочу обсудить варианты публикации сообщений из Emacs.

Ранее для написания заметок я использовал muse-mode. Каждая muse-заметка экспортировалась в html. А далее я ручками копировал в форму Блоггера нужный контент. Долго я пользовался именно этой схемой. Muse в какой-то момент перестал удовлетворять моим требованиям. Были у него некоторые проблемы со вложенными списками и вставками кода. А всякие списки я ой как люблю. Это наверное последствия долгого использования org-mode. Ну а потом я вообще перестал что-либо публиковать в сети.

Также когда-то я пробовал наладить google интерфейс, который шел в поставке с emacsspeak. Но безуспешно. Интересно в каком состоянии он сейчас? Давно не слышал.

Теперь я собираюсь изобрести новый велосипед. В его основе Markdown и Googlecl. Собственно смысл в том, чтобы написать мини скрипт на bash, который переведет md-файл в html (python-markdown). При этом он должен вырезать избыточные поля. Например, заголовок, который в блоггере в отдельное поле вводится. Далее отправить это добро в googlecl, который успешно опубликует новую заметку с правильным заголовком и тегами в нужном месте. То есть из Emacs надо будет дернуть этот скриптик и собственно все.

Как вариант можно написать полностью тоже самое на elisp, но хочется простой возможности публиковать файлы из консоли. Также я пока не совсем понимаю, как настроить раскраску кода при конвертировании md в html, но думаю с этим больших проблем не должно быть.

Как вам такая схема? Не слишком ли я заворачиваю? Сейчас буду реализовывать это добро.

1 октября 2010 г.

Xxkb. Флажок в трее

На домашнем компьютере использую OpenBox вместе с приложениями из kde. На днях обновил кеды до версии 4.5.1 и обнаружил, что куда-то пропал используемый мной индикатор раскладки клавиатуры kxkb. Где-то в блогах натолкнулся на сообщение, что его перенесли в плазмойды. Ну а так как plasma — это именно то, что я в kde-4 невзлюбил, то возникла необходимость в программе, аналогичной kxkb, позволяющей сохранять определенную раскладку для окон и приложений, а не только глобально.

В portage быстренько нашел xxkb. Достаточно простенькое приложение. Настройки находятся в файле /etc/X11/app-defaults/XXkb. Они вроде интуитивно понятны. Изменил только размер флажка и добавил в автозагрузку при старте OpenBox.

Порадовала возможность отображать в заголовке окна текущую раскладку. Но данная функция не работает в некоторых специфических приложениях из-за чего xxkb падает. Подобные программы необходимо добавить в игнор в настройках, используя свойства окон, которые можно узнать с помощью xprop. Кроме того, проигнорировать надо и программы подобные fbpanel. Но к сожалению порой "лишний" флажок на панели все равно появляется.

В общем, программа оставила положительные впечатления. Но был бы рад посмотреть другие аналоги kxkb. Кто чем пользуется для подобных задач?

2 сентября 2010 г.

Отключение поиска по ctrl-e на Nokia N810

Тоже из старых заметок. На N810 интенсивно пользуюсь emacs из консоли. Но при нажатии C-e в таком случае появляется окно поиска maemo. Это естественно не удобно. Для отключения надо сделать следующее:

$ gconftool -s /apps/osso/keybindings/global/osso-global-search --type=string ''

md5sum для паролей

Давно в заметках висело. Надо было когда-то быстро пароли с помощью md5sum зашифровать для сайта. Из консоли это делается так:

echo -n "test" | md5sum

19 августа 2010 г.

mkv2avi для просмотра через xbox

Столкнулся на днях с проблемой. Очень захотелось посмотреть фильм в формате mkv на большом экране телевизора. Я использую ushare для просмотра видео через xbox 360. Но на xbox, как оказалось, проигрывается достаточно малая часть существующих форматов. И естественно mkv в этот список не входит.

3 декабря 2009 г.

X.org reboot

После очередного обновления системы случайно обнаружил, что теперь в иксах не работает сочетание клавиш Ctrl-Alt-Backspace, предназначенное для их перезапуска. Зачем эта функция была отключена не особо понимаю. Для восстановления ее работоспособности необходимо подправить конфигурацию клавиатуры. У меня она настраивается через hal в файле /etc/hal/fdi/policy/10-keymap.fdi. Добавляем к строке с опциями (key="input.xkb.options") еще один параметр: terminate:ctrl_alt_bksp. Таким образом, у меня, например, эта строка выглядит так:

<merge key="input.xkb.options" type="string">grp:rwin_toggle,grp_led:scroll,compose:ralt,terminate:ctrl_alt_bksp</merge>

Теперь после перезапуска hal и X.org все будет работать как раньше.

18 октября 2009 г.

mc — смена каталога при выходе

После обновления mc до версии 4.7.0_pre1, было обнаружено, что пропала удобная функция, позволяющая при выходе из программы остаться в последней директории, а не в той, которая была на момент запуска mc. В gentoo это работало благодаря добавлению следующих строк в .bashrc:

if [ -f /usr/share/mc/mc.gentoo ]; then
    . /usr/share/mc/mc.gentoo
fi

Так вот, выяснилось, что файл /usr/share/mc/mc.gentoo отсутствует в новой версии mc. Ну и собственно, для возврата работоспособности описанной функции, необходимо под root'ом создать файл /usr/share/mc/mc.gentoo следующего содержания:

#!/bin/sh

MC_ENV=/usr/libexec/mc/mc.sh

for i in $MC_ENV; do
    if [ -x $i ]; then
        . $i
    fi
done

Также не забываем проверить наличие указанного выше фрагмента в .bashrc. Теперь все должно работать, как раньше.

P.S Как правильно заметил ForeverYoung, все можно настроить без создания дополнительного файла. Начиная с версии 4.7.0_pre3 в gentoo, после установки mc, советуют для включения описанной выше функции добавить нечто вроде следующих строк в ~/bashrc:

if [ -f /usr/libexec/mc/mc.sh ]; then
    . /usr/libexec/mc/mc.sh
fi

22 августа 2009 г.

Org-mode даты?

Возник вопрос с датами в org-mode. Возможно ли настроить сложные повторяющиеся события, такие как, повтор события каждую неделю во вторник, среду и пятницу. Если просто добавить несколько дат, то во время изменения состояния события на DONE, изменятся все даты, а не одна нужная.

Сейчас для подобных событий делаю 3 одинаковые записи с разными датами. Например:

#+STARTUP:showall
* TODO Полить цветы
  SCHEDULED: <2009-08-25 Tue 11:00 +1w>
* TODO Полить цветы
  SCHEDULED: <2009-08-27 Thu 11:00 +1w>
* TODO Полить цветы
  SCHEDULED: <2009-08-29 Sat 11:00 +1w>

P.S. Строка #+STARTUP:showall добавлена для того, чтобы при конвертировании в HTML из muse-mode, фрагмент примера заключенный в тег <src lang="org"></src> отобразился полностью, а не только названия дел.

Баги Amarok 2.1.1

С недавнего времени удалил все приложения kde-3 и qt3. Соответственно обновился на существующие версии программ для kde-4 и qt4. И теперь в качестве оконного менеджера использую OpenBox. Так вот в связи с этим всем обновил и amarok — любимый аудио плеер, подтолкнувший меня давным давно аккуратно каталогизировать коллекцию музыки.

Уже ранее пробывал 2-ой amarok, но тогда сразу же отказался от его использования, в виду малой функциональности по сравнению с ранними версиями. 2.1.1 сначала порадовала. Импортировала старую базу с mysql. Очень хороша показалась на этот раз интеграция с last.fm. Появились поддержка очереди. На этом похоже радости кончились.

Первое, что бросилось в глаза — знаки вопросов вместо русских букв в названиях групп и песен для некоторых русских исполнителей, которые ранее отображались абсолютно нормально, как в amarok-1.4, так и в easytag.

Также было замечено, что 2-ой amarok напрочь отказывается проигрывать некоторые треки и чуть ли не виснет при этом. Например, он не захотел проигрывать ни одну песню группы #####. У меня подозрение что это опять же связано с тегами. Заметил что с amarok идет их собственные библиотеки taglib и taglib-extras. И собственно не совсем понимаю, зачем надо было создавать новые решения существующих рабочих библиотек.

Последнее, что добило окончательно — amarok по своим непонятным причинам переставал играть следующую композицию в списке. Тут я не выдержал и удал его. Сейчас поставил пока себе Exaile, но он меня все же также не особо радует. Не хватает функций работы с коллекциями. Жду с надеждой новых релизов amarok. Да и подумал — пора уже сделать качественный upgrade компьютеру. Производительности Celeron 2100 Hz на современные программы порой уже не хватает.

14 августа 2009 г.

Работа с Emacs --daemon

С выходом Emacs-23.1 сразу же перешел на указанную версию любимой программы. Как известно одной из новых функций является возможность запуска Emacs в режиме демона. Дальнейшая работа производится с помощью emacsclient позволяющего подключаться к демону как в иксах, так и из консоли.

Теперь для полного выхода из Emacs (убийство демона) использую функцию kill-emacs. Но в таком случае не сохраняются открытые буферы и сессия (desktop). Поэтому добавил в файл инициализации далее описанную функцию и назначил на нее клавиши C-x c:

(defun my-kill-emacs ()
  (interactive)
  (save-some-buffers)
  (desktop-save-in-desktop-dir)
  (kill-emacs))

(global-set-key (kbd "C-x c") 'my-kill-emacs)

Для запуска Emacs в меню OpenBox добавил пункт выполняющий следующее:

emacsclient -c -a emacsdc

Где emacsdc - скрипт следующего содержания лежащий в папке ~/bin, которая добавлена в PATH:

#!/bin/bash

emacs --daemon && emacsclient -c

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

emacsclient -t

P.S. Оказывается все намного проще! Не надо никаких скриптов придумывать. Запускать Emacs надо так:

emacsclient -c -a ""

P.P.S. Спасибо тов. Juev'у.

19 марта 2009 г.

Большой расход памяти imagemagick!

Никак не могу разобраться, как это происходит. И из-за чего!

Первоначальная задача была конвертировать около 200 jpeg файлов в pdf. Использовал imagemagick:

convert *.jpg converted.pdf

При этом convert затратил память около 2-х Гб и повесил комп (т.к. у меня оперативка + swap = 2 Гб). При этом общий объем изображений не превышает 50 Мб. Думал сначала, что вся проблема связанна именно с конвертацией в pdf. Но аналогичная ситуация возникает при попытке конвертирования достаточно большого количества любых файлов.

При конвертировании 20 jpg файлов convert занимает 400 Мб! Это вообще нормально?

8 марта 2009 г.

Оптимизация компиляции для нескольких компьютеров (distcc и ccache)

Решил провести небольшое исследование о влиянии программ distcc и ccache на скорость компиляции. Поводом стала небольшая заметка о ускорении компиляции и собственно наличие 2-х компьютеров, работающих под gentoo в одной сети с почти одинаковыми процессорами (Celeron 2100 и Celeron 1800).

Настройка данных программ достаточно подробно описана в handbook'е и на сайте gentoo. На них останавливаться не буду.

Скорость компиляции проверялась при сборке pidgin версии 2.5.3. Процесс сборки представляет собой разархивацию исходников, конфигурацию, компиляцию, составление бинарного пакета и его установку в систему. Представленные программы направлены только на ускорение компиляции.

  • Время сборки без distcc и ccache: 13:12;
  • Время сборки с distcc: 10:14;
  • Время сборки с distcc и ccache: 7:08;

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

С ccache за довольно большое время использования при сборке различных программ проблем замечено не было. А вот с distcc были некоторые трудности. Например, возникали ситуации, когда 2-ой компьютер не успевал выполнить посланную задачу из-за некоторых перегрузок или нехватки свободной памяти, что замедляло или вешало процесс. Также для некоторых программ действие distcc вообще нулевое из-за принудительной компиляции в один поток (make -j1). Ну и также встретились программы, которые вообще отказались собираться с distcc.

В итоге на данный момент из-за указанных недостатков я distcc не пользуюсь. ccache же успешно работает.

12 января 2009 г.

Отказать SCIM!

Намучился тут с утрица с настройкой scim. В результате отказался от этого дела! Основная причина недовольства этой программой — отсутствие нормальное поддержки compose. Во-первых, scim не поддерживает настройки из ~/.XCompose. А, во-вторых, так и не удалось мне добиться хоть какого-нибудь результата работы compose в Qt.

Кстати, если для emacs, как советуют, отключать использование xim, то compose там тоже прекращает работать.