"Виджеты" для GeekTool/NerdTool.

GeekTool/NerdTool: "It let you display on your desktop different kind of informations..."
Другими словами, упомянутые проекты занимаются отображением разного рода информации прямо на рабочем столе. Это можнет быть текстовый файл, картинка и результат выполнения команды. Последнее волнует меня больше всего :).
Ниже хочу привести маленькие shell скриптики, которыми пользуюсь я:
  • Время (мировое):
echo " \033[01;30m--------- Time ---------\033[00m "
date +"Moscow: %l:%M %p on %d %B"
TZ=England/GMT date +"London: %l:%M %p on %d %B"
TZ=Boston/GMT+5 date +"Boston: %l:%M %p on %d %B"
  • Процессы (прожорливые приложения):
echo " \033[01;30m---------- Top ---------\033[00m "
top -l2 -F -n 10 -u -R -S -stats pid,ppid,command,cpu,time,th,pstate|tail -23| \
sed -e '/^MemRegions:/d' -e '/^SharedLibs:/d' \
    -e '/^VM:/d' -e '/^Networks:/d' -e '/^Purgeable:/d'
  • Состояние дискового пространства:
echo " \033[01;30m---------- DU ----------\033[00m "
df -H -l
  • Сетевые интерфейсы (IP адреса):
echo " \033[01;30m-------- Network -------\033[00m "
ifconfig en0 | grep inet|grep -v inet6|sed -e 's/.*inet/Ethernet IP:/g'
ifconfig en1 | grep inet|grep -v inet6|sed -e 's/.*inet/ Airport IP:/g'
echo External IP: `curl -s http://checkip.dyndns.org/ | sed 's/[a-zA-Z<>/ :]//g'`
  • Календарь:
echo " \033[01;30m------- Calendar -------\033[00m "
RVR=`tput smso`        # reverse
END_RVR=`tput rmso`        # end reverse
BLNK=`tput blink`    # blink
UNDER=`tput smul`        # underline
END_UNDER=`tput rmul`      # underline
CLEAR=`tput clear`    # clear screen
BELL=`tput bel`        # bell sound
BOLD=`tput bold`    # bold    
DIM=`tput dim`        # dim    
INVIS=`tput invis`    # invisible
END=`tput sgr0`        # turn off dim, blink, bold, dim, invisible
DATE=`date +%d | sed "s/^0/ /g"`
cal | head -1
cal | tail -7 |\
sed "s/ ${DATE}/ ${UNDER}${BOLD}${DATE}${END}/g" | \
sed "s/${DATE} /${UNDER}${BOLD}${DATE}${END} /g"
  • Дела/Задачи (icalBuddy должен быть установлен):
echo " \033[01;30m-------- Events --------\033[00m "
/usr/local/bin/icalBuddy -eep notes -sc eventsToday | \
sed -e "s/------------------------/^^^^^^^^^^^^^^^^^^^^^^/g"

echo " \033[01;30m--------- ToDo ---------\033[00m "
/usr/local/bin/icalBuddy -stda -nc uncompletedTasks | \
perl -ne '
my $flag=0;
m/^\S+/ and chomp and print and $flag=1;
m/^\s{4}due:\s+(.+)$/ and print " ($1)" and $flag=1;
print "\n" if ( $flag );
'
  • Погода (код города надо заменить на свой, здесь RSXX0063 = Москва):
echo " \033[01;30m------- Weather -------\033[00m "
curl --silent "http://xml.weather.yahoo.com/forecastrss?p=RSXX0063&u=c">tmp.xml
grep "<title>Conditions" tmp.xml | sed -e 's/<\/*title>//g'
grep -A 4 "Current Conditions" tmp.xml | sed -e's/<\/*[bB][rR]* *\/*>//g'
rm tmp.xml
#!/bin/sh
print_currency_info() {
    perl -ne '
    print "$1 " if (m#<from>(\S+)</from>#);
    print "--> $1\n" if (m#<rate>(\d+\.\d*)</rate>#);
    '
}

# USD
curl --silent "http://finance.rambler.ru/ajax/currency_converter.xml?count=1&from=2210&to=2211&date=`date +%d.%m.%Y`&rand=52908"| \
print_currency_info;

# EUR
curl --silent "http://finance.rambler.ru/ajax/currency_converter.xml?count=1&from=2209&to=2211&date=`date +%d.%m.%Y`&rand=87715"| \
print_currency_info;

# GBP
curl --silent "http://finance.rambler.ru/ajax/currency_converter.xml?count=1&from=2303&to=2211&date=`date +%d.%m.%Y`&rand=91799"| \
print_currency_info;

echo "(finance.rambler.ru)"
Надеюсь кому нибудь пригодится.

rEFIt или не rEFIt

Каждый маковод, смотрящий дальше проприетарных рамок созданных всеми любимыми Microsoft и Apple, знает, что почти все руководства по устаноке Linux ссылаются на rEFIt.
Правда внешние его вид не столь уж привлекателен:

Мне стандартный вид загрузочного меню нравится больше:

Отсюда вопрос: а так ли нужен этот rEFIt?
Ответ прост: надо попробовать.

Мне периодически хочется поковырять Linux, но Ubuntu уже не столь интересна (хотя пакетный менеджер и огромное сообщество это good). Слышав много но не видев не разу решил попробовать ArchLinux (весьма кстати говоря интересная вещь, для тех кто знает что такое unix-like). Благо в "здешнем" wiki можно легко найти страничку Macbook.
Дальше все просто. Следуем рекомендациям из wiki странички и все хорошо.
Но :

  • заранее размечаем диск для Linux (форматирую раздел в fat32 aka dos)
  • не ставим fEFIt
  • не забываем что у нас MacBook, и чтобы нажать F1 надо нажать fn+F1
  • не забываем посмотреть какой раздел стоит указать как корень (root aka /) системы (для этого можно выполнить в liveCD fdisk -l /dev/sda)
  • не спешить с установкой GRUB (а переключится в другую виртуальную консоль, например fn+alt+F2, выполнить обновление типа раздела и вернуться в установщик нажав fn+alt+F1)
  • не забываем что таблицу разделов после установки ArchLinux (или любого другого Linux дистрибутива) за нас никто не исправит
А вот на последнем пункте остановимся по подробнее.
К сожалению современные Linux дистрибутивы не могут корректно обновить тип раздела на маках (толи GUID не нравится, толи EFI). По этому нам надо делать это руками, примерно так:
$ fdisk /dev/sda
m  # печатаем меню
p   # печатаем таблицу разделов
a
<номер активного раздела>
a
<номер раздела с Linux>
t    # изменяем код типа раздела
L  # выводим список кодов
86 # выбираем код linux (для ext2/3/4)
w  # записываем изменения
Запуская fdisk без параметров (но указывая диск) мы попадаем в интерактивный режим. Вот пример вывода ключа m:
Не забываем после манипуляций в fdisk что нам надо вернуться в окно установщика и продолжить с установкой загрузчика GRUB в начала раздела с Linux (не стоит ставить GRUB в MBR)
После этого можно спокойно (по крайней мере у меня все получилось) использовать свеже установленный Linux.

Будте бдительны и помните что я не отвечаю за возможный вред нанесенный вашим данных в процессе выше-описанных манипуляций.

Anki, транскрипция и произношение.

Сейчас многие занимаются изучением иностранных языков.
Я тоже не исключение. Для расширения словарного запаса мне помогает Anki (прекрасное кросс-платформенное приложение).
Все прекрасно в этом творении софтверной мысли :).
Но вот так называемые Deck'и редко содержать что-то больше чем слово и его самый распатроненный перевод. Не густо. Хочется видеть как минимум транскрипцию, да и звуковое сопровождение (от носителя языка) тоже не плохо. Благо Anki это может.

Транскрипцию я предпочитаю брать из словарей Lingvo, звук из словарей Google.
Делая это "руками" и броузером теряем слишком много времени и бесценное внимание (концентрацию на задаче).

Соответственно...

Вот мой скриптик который помогает делать следующие:
  • получить mp3 файл с произношением
  • получить транскрипцию (копируется в буфер)
  • ну и можно как словарь консольный пользовать :)
#!/usr/bin/ksh
#

if [[ "x$1" = "x" ]]; then
    echo "Specify word!"
    exit 1
fi

echo "=-=-=-=-=-=-=-= General =-=-=-=-=-=-=-="
s_word=$*
echo "word => ${s_word}"

s_url=$(
        curl --silent "http://www.google.ru/dictionary?langpair=en%7Cru&q=${s_word}" | \
        perl -ne "m#${s_word}.+?mp3#i and print" | \
        perl -ne 'm#(http://.+?\.mp3)# and print $1 and exit' 
       )

echo "URL => ${s_url}"
curl --silent -O ${s_url} &

for l_word in ${s_word}
do
    s_regex=${l_word}'(<[^>]+>)+\[(<[^>]+>)+([^<]+)(<[^>]+>)+\]'
    s_trans=$(
        curl --silent "http://lingvo.yandex.ru/en?text=${s_word}&lang=en&search_type=lingvo&st_translate=on" | \
        perl -ne "m/${s_regex}/ and print '[' . \$3 . ']' "
    )
    echo -n ${s_trans} | pbcopy
    echo "transcription => ${s_trans}"
    echo
done
echo

echo "=-=-=-=-=-=-= Translation =-=-=-=-=-=-="
curl --silent "http://lingvo.yandex.ru/en?text=${s_word}&lang=en&search_type=lingvo&st_translate=on" | \
grep  'p class="L1"' | \
perl -pe '
s/(<p[^>]*>)|(<br[^>]*>)/\n/gi; 
s/(<[^>]+>)+//gi; 
s/[\t ]+/ /g; 
s/Syn:/\nSyn:/gi;
s/«[^»]+» в других словарях.*//gi;
s/\n+/\n/sg
' | head -40 #remove this if you want to see full translation

[[ -x $( which mpg123 ) ]] && \
[[ -f "${s_word}.mp3"   ]] && mpg123 ${s_word}.mp3 2>/dev/null &

Может кому поможет ;)
Всем спасибо, Все свободны.

UPDATE: к сожалению данный скрипт уже не работает (интернет штука динамическая). Времени написать свежую версию нет :(