С подачи Тапа делаем svn diff а-ля гит - цветной и в less'е:
2 svn diff | awk '/^\+(.*)$/ { print "\033[32m" $0 "\033[0m"}; /^-(.*)$/ { print "\033[31m" $0 "\033[0m"}; /^[^+-].*$/ {print $0}' | less -r
Пролетая над гнездом пингвинов. Непопулярно от Linux и open-source до интернета и разработки.
С подачи Тапа делаем svn diff а-ля гит - цветной и в less'е:
на
13:39
0
коммент.
Обратил внимание после того, как мне пришёл комментарий. Внезапно в ленте руникса всплыли все (или многие, не суть) мои записи про линукс. Подозреваю в этом глюк гугла, который недавно заподозрил мой блог в спаме и заблокировал, вероятно происшедшее - результат разблокирования. Хотя в ридере лента этого блога не обновилась (да, я читаю себя и иногда даже нахожу опечатки и отправляюсь править пост), так что это может быть и глюк агрегатора руникса. Делайте выводы.
на
17:45
8
коммент.
Если коротко - не следуйте документации в способе задания роутов для контроллеров. Документация советует так:
на
12:41
0
коммент.
Смотрел я тут скринкаст на тему ObjC, было там немного про тестирование, и понял я - дальше так нельзя - тестировать. Полез в гугль (хотя кхе, туда я за этим давно залезал, руки не доходили применить), тот меня выкинул сначала на одного из коммитеров в Camping с его тестсьюитом 'camping/test', а потом и на mosquito в репозитарии автора того самого скринкаста. Скажу сразу, москит отстал от жизни и не работает, зато в том репозитории нашлось много полезного: ruby-style категории над основными Cocoa классами, скрипты для правильной максимизации окна (очень пригождается с MacVim) и куча пищи для размышлений.
Заодно накидал Rake task для дампа фикстур из используемого кемпингом (и только кемпингом, забудем про Rails, аминь) sqlite:
на
23:45
0
коммент.
NEVER Override Existing Methods.
Never, ever do this. Never override an existing method. Period, full stop, no excuse.
Rails Worst Practices: 13 Coding Nightmares You Should Avoid
на
14:22
0
коммент.
В последнее время пишу прототип внутреннего сервиса на Camping. Попутно должен заметить, что это весьма хорошая штука от чокнутого _why для очень быстрого прототипирования - весь мой фронтэнд лежит в одном файле и занимает 150 строк.
И само собой, без отправки электронной почты не обошлось. А раз уж camping это такие очень маленькие рельсы - почему бы не встать на плечи ещё одного из гигантов мира рельс - ActionMailer. К условиям задачи добавилась и необходимость использования Google Apps for Domains.
Первым делом нужно научить Ruby <= 1.8.7 там авторизоваться:
sudo gem install openrain-action_mailer_tls -s http://gems.github.com
на
20:33
0
коммент.
Захотелось мне использовать в своём приложении акселерометр, симулятор его не поддерживает, а железяка для тестирования ещё в пути. А тут такая оказия - на ловца и пост с описанием и решением проблемы бежит.
Если очень коротко, то идея состоит в захвате данных с акселерометра мака и посылке этих данных по сети приложению в симуляторе.
Итак, берём Unimotion, собираем, туда же кладём питон скрипт, приведённый в указанном выше посте. Запускаем эту связку:
./motion -f 17 | python sendaccsim.py
на
12:51
0
коммент.
на
0:56
0
коммент.
на
0:13
10
коммент.
на
15:07
2
коммент.
Продолжая ковырять таблетку.
Как уже неоднократно убеждались владельцы, использовать maemo девайсы в качестве плеера крайне неудобно - они тихие.
А дело в том, что каждый раз при втыкании и вытыкании наушников программым методом снижается уровень pcm канала. Понаблюдать и порулить этим можно из миксера aumix, который водится в том же треде. И как одно из решений - тем же самым аумиксом по крону устанавливать звук на максимум (не бойтесь, не оглохнете - плеера управляют другим каналом):
aumix -w + 100
cat ~/.mplayer/config
softvol=1
softvol-max=300
на
12:43
0
коммент.
Байка: в одном продукте под ОС семейства видовс версия ОС определялась по наличию в корне диска c: папок с именами windows, winnt и т.п., что приводило к странным флуктуациям при наличии нескольких или отсутствию таковых.
Призказка: работал на n810 плеер kagu, да и перестал. И UKMP тоже перестал. А без kagu n810 вообще не плеер, поскольку была в kagu самая главная возможность любого плеера - быстро поставить его на паузу (аппаратной кнопкой на корпусе или на родной гарнитуре).
Сказка: а причина была как в той самой байке - из-за странного способа идентификации ОС: по наличию определённого пути (который я удалил, дабы в автодополнении шелла не мешал). Вот так:
#/usr/bin/MediaCenter.py
if os.name=="posix" and os.path.exists('/media/mmc1'): ISMAEMO=1
uname -a
Linux Nokia-N810-23-14 2.6.21-omap1 #2 Wed Jul 16 12:29:11 EEST 2008 armv6l unknown
на
14:34
4
коммент.
Пока нет ничего серьёзного к опубликованию, вот вам лёгенькая тема.
Заметил давно, что используемый мой метод hibernate в виде ядра с патчами tuxonice и скриптом оттуда же ну слишком уж медленный. Краткое раскидывание мозгами и раскапывание вопроса показало, что достаточно большую долю времени занимает сохранение дисковых буферов, что само по себе весьма экстравагантный финт - сохранять на винт кеш обращений к винту. Решил отключать кеш перед засыпанием и восстанавливать после просыпания:
#/etc/hibernate/common.conf
OnSuspend 10 echo 3 > /proc/sys/vm/drop_caches
OnResume 10 echo 0 > /proc/sys/vm/drop_caches
на
22:08
4
коммент.
Часто бывает - постишь код, кусок документации или просто цитату в Kopete и лог разговора моментально забивается так, что за деревьями леса не видно. Скальпель!
В папке с темой оформления окна разговора Kopete (я скопировал одну из стандартных, получился такой путь: ~/.kde/share/apps/kopete/styles/PXClear/Contents/Resources) ищем main.css и добавляем
на
18:20
0
коммент.
Вся эта шумиха вокруг web-based IDE(bespin, heroku) и тонких клиентах для веб-сервисов вообще (google mail, docs) останется шумихой до тех пор, пока тонкий клиент (ноутбук, MID, телефон etc. + браузер) не будет считаться неработоспособным, если он не в состоянии функционировать в течении всего периода бодрствования человека без подзарядки (скажем 20 часов - в случае более длительного периода без доступа к розетке вам скорее нужно ружьё, нож и палатка) и обеспечить доступ в сеть из любой точки земного шара, включая метро, самолёт, глухую тайгу и дикие горы.
на
1:46
2
коммент.
Захотелось мне удобства дополнительного в вышеозначенном плазмоиде, а именно - знакомого по браузерным вкладкам поведения, когда шелчок по заголовку вкладки средней кнопкой закрывает её. Так и тут захотел закрывать окна шелчком колеса на соотв. кнопке таскбара (важно - при этом не затрагиваются окна, бывшие ранее в группе - я не использую группировку). В общем-то, всё просто, хотя пришлось вспомнить великий могучий цпп и поползать по иерархии классов:
на
19:07
3
коммент.
Ну в общем в курсе все, что 4.2 вышел, он крут и наступило щастье. Так что это пока не обсуждаем.
А вот то, что поломался звук - предмет нашего разговора.
Поломался звук, amarok не играет, а всё потому что phonon не видит свои backend'ы, ибо всё раскидано в разных местах, понеже кто-то на useflag kdeprefix внимание обращает, а кто-то нет и кладёт всё по FHS.
Варианта, как водится, два.
1. Отмержить к чёрту все версии KDE ниже 4.2, отключить kdeprefix, только тогда ставить 4.2. Более правильный на мой взгляд. В воздухе повисшим оставим тот вопрос, что же делать с k3b и прочим антиквариатом.
2. Помочь найти потерянные backends.
ln -s /usr/share/kde4/services/phononbackends/ /usr/kde/4.2/share/kde4/services/phononbackends
на
5:44
1 коммент.
Ещё одна крупица мудрости и благодати позволит преобразовывать non-ASCII символы в строке в их экранированный Unicode эквивалент вроде \u0444:
>> puts "фывыфdd".escape_unicode
\u0444\u044b\u0432\u044b\u0444dd
на
9:31
0
коммент.
на
19:44
0
коммент.
Приложение "Часы" в ITOS, скажем так, несколько странное, и при установке даты заставляет устанавливать не часовой пояс, а город, в списке доступных городов моего города нет, более того, города, по которому назван мой часовой пояс, там тоже нет! Такого бредового подхода я нигде не видел, да везде можно установить свой пояс в Asia/Yekaterinburg! Так что открываем рутову консоль и колдуем стандартное
echo "Asia/Yekaterinburg">/etc/timezone
date 01252055 (см. UPD)
/mnt/initfs/usr/bin/retutime -T 2009-01-25/20:04:36
на
1:25
6
коммент.