Showing posts with label macos. Show all posts
Showing posts with label macos. Show all posts

Apple безпощаден к уязвимостям в Java и ломает Chrome.

Apple довольно просто решили проблемы уязвимостей в Java 6.
Ребята просто удалил эту версию.

About Java for OS X 2012-006

This update uninstalls the Apple-provided Java applet plug-in from all web browsers. To use applets on a web page, click on the region labeled "Missing plug-in" to go download the latest version of the Java applet plug-in from Oracle.

Все бы хорошо, только вот Chrhome например не умеет использовать Java 7 :(.
Но ребята из "скупертино" не столь злобны, они нам покажут как вернуть все "взад":


Java for OS X 2012-006: How to re-enable the Apple-provided Java SE 6 applet plug-in and Web Start functionality

sudo mkdir -p /Library/Internet\ Plug-Ins/disabled
sudo mv /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin /Library/Internet\ Plug-Ins/disabled
sudo ln -sf /System/Library/Java/Support/Deploy.bundle/Contents/Resources/JavaPlugin2_NPAPI.plugin \
            /Library/Internet\ Plug-Ins/JavaAppletPlugin.plugin
sudo ln -sf /System/Library/Frameworks/JavaVM.framework/Commands/javaws /usr/bin/javaws

Перезапускаем Chrome (just in case) и открываем тестовую страницу.
И вуаля:
UPDATE: Решение оказалось не долговечным.

К счастью решение есть.

Симптомы:

$ javaws -viewer
Bad installation. No JRE found in configuration file
Решение:

1) Узнаем версию java:
$ java -version
java version "1.6.0_37"
Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909)
Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode)
2) Открываем файл "защиты" на редактирование:
$ sudo vi /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/XProtect.meta.plist
3) Корректируем версию (в соответствии со своей:
<key>JavaWebComponentVersionMinimum</key>
<string>1.6.0_37-b06-434</string>
Стоит понимать что использую старую версию Java вы подвергаете себя риску быть "атакованным".

UPDATE: Apple опять решили помочь пользователям и выпустили апдейт "Java for OS X 2013-001" / "Java for OS X 2013-002" / "Java for OS X 2013-004".
This update uninstalls the Apple-provided Java applet plug-in from all web browsers. To use applets on a webpage, click on the region labeled "Missing plug-in" to go download the latest version of the Java applet plug-in from Oracle.
К счастью повторение шагов из http://support.apple.com/kb/HT5559 решает проблему и позволяют пользоваться Java 1.6.0_51 в браузере.

Bye-Bye Mac OS X :(



Прощай Mac OS X, теперь ты просто OS X :(


OS X 10.8 Mountain Lion: the Ars Technica review
Enter OS X 10.8 Mountain Lion. Apple made a half-hearted attempt to brand 10.7 as "OS X Lion," but the "Mac" prefix was far from completely expunged at launch. This is the first of many areas where Mountain Lion aims to succeed where its predecessor failed, so "OS X Mountain Lion" it is—emphatically, universally, with a bullet.
Рекомендую прочесть весь обзор от John Siracusa.

Профилактика в вашем QuickTime Player


Не так давно обнаружил интересное "шоу" на канале "Россия", под названием "Профилактика". Жаль что трансляция идет поздно (0:45). Но можно же посетить портал канала "Россия" и насмотреться всеми выпусками. Вот только использовать Flash в броузере увольте.



Но есть выход:
curl --user-agent 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3' \
http://russia.tv/video/show/brand_id/5200 | \
perl -ne 'm/("http[^"]+showZoomBtn[^"]+")/ and print $1' | \
xargs curl --user-agent 'Mozilla/5.0 (iPad; CPU OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3' | \
perl -ne 'm/("http[^"]+\.mp4[^"]+")/ and $_=$1 and s#\\##g and print' | \
xargs open -a 'quicktime player'
"Засовываем" это в Automator, и все ОК :).



Зачем такие трудности? У меня, к сожалению не 12-ти ядерный Xeon. И очень жалко 50-80% одного из двух ядер на Flash видео. Для сравнения: QuickTime Player "отъедает" на том же "контенте" всего 8-10%.

UPDATE:

Больше можно не париться, ребят выгнали с телика и у них теперь нормальный сайт :), а видео в youtube.com

http://profilaktica.tv 

OS X Mountain Lion - следующая кошка так скоро?

Apple не как не может оставить в покоее стой успех в iPhone/iPad и хотят привлечь пользователей в своим компьютерам.
В результате мы видим 'Mac OS X Lion' и его логическое продолжение в лице 'OS X Mountain Lion'.
 или
Какая же кошна нам милей?
Лично мне старый добрый 'Snow Leopard', как это не грустно :(.
Почему?

Потому что горная кошка принесет еще больше "негатива":
  • Больше не стандартно выглядящих приложений (аля школьник познал возможность рисовать GUI картинками).
  • Messages, которые работают только с iPhone/iPad/... (и другими зло-игрушками).
  • GateKeeper, который обещает еще больше усложнить жизнь сторонним разработчикам которые не могут или не хотят вписываться в жесткие рамки MacAppStore (состоящий  из низкосортного го*** на 80%, ИМХО).
  • Да и кстати мы болше не увидим слова 'Mac' в названии ОС, что тоже грустно (ну не любитель я iOS и всего сопутствующего).
  • Ежегодный релиз, а вот это уже страшно. Ведь не на пустом месте маководы со стажем более года (имеющие опыт перехода от релиза к релизу) все как один говорят: "Сейчас обновляться не буду, надо подождать до версии 10.Х.5 или хотя бы 10.Х.3". А что будет теперь? С какой версии ОС будут приводить к нормальному/рабочему виду? Конечно можно предположить что просто будут будут скакать версии а новшеств будет минимальное кол-во. Но тогда за что Apple будут спрашивать 30$ (теперь уже ежегодно)? Поживем, увидим :( .
А хорошее есть? Вроде да:
  • Notification Center, хорошая заменя Growl (только из за его не-бесплатности), хотя фишка эта будет доступна приложениям из MacAppStore (как предполагают интернеты).
  • AirPlay Mirroring, вроде как не плохая возможность (еще бы apple tv был бы не обязательным).
  • Share Sheets / Twitter, думается кому то будет полезно.
Жаль, а мне так нравилась старая концепция (Tiger/Leopard/Show Leopard).

UPDATE: Полазив по интернетам обнаружил, что я не одинок (и это приятно):
Особо "доставляющие" комментарии :)

Лева, что ты сделал с жестами ?


В продолжении впечатлений о Льве:
Обноружил что парой 4-х пальцевые жесты могут перестать работать (без резонных на то причин).
Решение (точнее сказать временный костыль) оказалось простым: надо включить (потом можно выключить) опцию "Перетаскавание 3-мя пальцами" (aka "Three finger drag").





Не перестает меня "радовать" этот Лев :)

Не торопливый Safari в упряжке Lion

Продолжая делится впечатлениями о Lion
Заметил неприятное "торможение" Safari (5.1....). Поиск по простором сети показал что можно попробовать перегрузить WebKit framework. 
Похоже хваленый Resume, не так хорош на практике. 


Свои искания закончил на выключении этой "чудесной" фишки и добавлением следующего oneliner'a в арсенал:
killall -9 WebProcess

Лев, царь зверей?



Вот и пришел момент когда я решил пересесть со Show Leopard на Lion. Текущая версия 10.7.2.
Ниже впечатления.

Позитивное
  • Desktops/Screens - прилично реализовали ничего не скажешь (в предыдущих релизах screens было скорее подобием нежели инструментом) 
  • Spotlight - поиск улучшился (не более того, все так же приходится использовать сторонние разработки)
  • Dictionary - словарь стал получше (но не без тормозов, которых раньше не было), да и стройной тап для перевода прекрасная идея
  • Full Screen Apps - приятная мелоч (хотя раньше были обходные пути :) )
  • Наконец немного изменился внешний вид (иногда надо освежать UI)
  • Как не крути а количество мелких улучшений радует (все и не найдешь)

Нейтральное
  • iCloud - не знаю не пользовался, т.е. ничего сказать не могу
  • AirDrop - небыло рядом маководов 
  • Launchpad - меня и Stacks устаивал
  • Versions - надеюсь что не будет граблями (стараюсь не пользоваться)

Отрицательное
  • Тачпад - почему то "touch to drag" (или как оно там называется) стал работать отвратительно. Раньше в Linux/Windows чувствовал себя не ловка при использовании тачпада. Теперь же и в Macintosh непонятные странности в работе.
  • Lion Recovery - весьма сомнительная радость для обладателей "модемной" связи (буржуи забывают что бывает еще и gprs подобные интернеты). Представляю радость Российского пользователя ждущего 24+ часов пока скачается OS. 
  • Address Book и iCal - ну за что же превращать нормальные утилитарные приложения в цирк (напоминает извращения школьников в Delphi).
  • Resume - чаще мешает чем помогает
  • Непонятные проблемы с Disk Utility (Если пользоваться новой версией, забудте о Linux, grub/refit просто не может справиться c таблицей разделов. При этом таких проблем нет если пользоваться Disk Utility от Show Leopard)
  • Давольно часто случаются подвисания графического интерфейса (например чернеет пункт меню File после использования cmd+t в Safari, случается это конечно не всегда, но часто)

Большой и свободный словарь для Dictionary.app

Решил выложить в общий доступ словарь, который получился после игр с пропатченным DictUnifier.
Оригинал можно взять с sourceforge.net.
Собственно ссылка: https://www.rapidshare.com/files/191887152/rus_eng_full.dictionary.zip

И обратный перевод: https://www.rapidshare.com/files/3771216057/eng_rus_full.dictionary.zip

Голуби без иксов, но с кварцом.

Не для кого не секрет что, какой хорошей не представляется платформа (ОС), пользователю всегда чего-то  не хватает.
Вот и мне не хватает на маке Pidgin'а. А точнее одного из протоколов (sipe).
Как всегда, елси есть Unix приложение, его можно попробовать собрать под MacOS X.
Но вот внешний вид этих приложений...

Не беда. Как всегда берем macports и вперед:
$ sudo port selfupdate
$ sudo port install pidgin +quartz +no_x11
На выходе имеем возможность запустить pidgin из консоли (без необходимости запускать X11 или XQuartz).
Правда внешний вид все еще не привлекателен.

Но мы это исправим:
$ sudo port install gtk-theme-switch
$ switch2
Выбираем понравившуюся тему, и получаем (тему можно взять например здесь):

Теперь, все выглядит прилично.
Даже иконка уходит в верхний бар:
Остался последний штрих. Запускать визуальное приложение из консоли не очень удобно.

По этому мы напишем маленькую обертку в Xcode:
1) Запускаем Xcode.
2) Выбираем новый проект (Application -> Cocoa Application).
3) Открываем main.m, и приводим его к следующему виду:
#import <cocoa/cocoa.h>

int main(int argc, char *argv[])
{
 (void)system("/opt/local/bin/pidgin");
 return 0;
}
4) Перетягиваем картинку приложения в проект (например эту), не забывая конвертировать картинку в icns (например тут или тут).
5) Открываем в левой панели: Targets -> <Имя_приложения> -> Get Info -> Properties
6) Указываем имя файла иконки (перетянутого ранее в проект) в поле "Icon File" (без расширения).
7) "Жмакаем" кнопку "Build and Run".

Иммем .app файл в директории проекта (выетка build).
Переносим куда хочется и пользуемся.

P.S. Я не Cocoa программист, поэтому не могу сказать насколько правильно создано приложение :).
Если кто знает более корректный путь, милости прошу.

Что Лев грядущий нам готовит?

Вот и стал доступен первый релиз Max OS X Lion.
(доступный для разработчиков и любителей P2P)
Что мы увидем в нем?
Официальный пресс-релиз можно всегда посмотреть на официальном сайте.
А я покажу несколько скриншотов.

Новый "About this Mac", стал более наглядным.




















Словарь стал более интерактивным.
























А "Spotlight" более "умным".
Теперь он умеет показывать "превью".
И искать стал имеено то что мне надо (надеюсь в финальном релизе, это не изменится).

Midnight Commander и Mac

Finder отличный файл-менеджер, такой же хороший как Explorer, Konqueror, Nautilus, ...
Но иногда этого не хватает.
И на сцену возвращаются старые добрые двух панельные файл-менеджеры. Но что мы имеем в среде MacOS X? А дела не так уж и плохи:
  • Xfile (платный, да и контора какая-то непонятная ИМХО)
  • Disk Order (и опять просят денег :( )
  • Path Finder (да что такое, кто-нибудь вообще делат бесплатный софт?)
  • muCommander (наверное самый лучший из свободных, но это Java и памяти хочет не мало)
  • ForkLift (платный, и поэтому мало интересный для меня)
  • Xfolders (слишком простой)
  • Midnight Commander (вот оно счастье, и свободный и быстрый и ничего лишнего)
Одна проблема у MC в среде MacOS X - нету отдельного проекта который бы предоставлял нам mc.app. Хорошо что open-source сообщество не обходит стороной творения Apple.
И так у нас есть как минимум 4 способа установить MC:
  1. Использовать macports (мой вариант)
  2. Использовать Fink (на вкус и цвет все карандажи разные)
  3. Взять готовый пакет (по мне сторонние разработки лучше держать отдельно)
  4. Собрать из исходников (тут я пас)
Установить/собрать mc это еще пол дела, теперь надо подружить его с нашим терминалом.
Самое главное (как мне кажется), заставить терминал думать что opt/alt это тоже самое что и meta:

Для этого всего-то надо поставить "галку" в настройках (как показано на картинке).
Также рекомендую поставить "галку" System Preferences -> Keyboard -> Keyboard -> Use all F1, F2, etc. keys as standard function keys

Далее можно приступать к настройки самого mc:
Запускаем mc.
Идем в настройки F9 -> o -> c (Options -> Configuration), и ставим галки. Например: Lynx-like motion (позволит переходить в деректория путем нажатия стрелок).

Теперь можно перечислить самые необходимые клавиатурные сокращения (не забываем что meta = opt):
СомбинацияОписание
Ctrl-\Закладки.
Ctrl-oПоказать/Скрыть консоль.
Meta-hПоказать историю команд.
Meta-n и Meta-pПоказать следующую/предыдущую команду (вперед/назад по истории команд)
fn-shift-↑ или Meta-v"Листать" вверх.
fn-shift-↓ или Ctrl-v"Листать" вниз.
Ctrl-s или Meta-sПоиск.
Ctrl-tВыделить файл.
Ctrl-x pСкопировать полный путь текущей директории.
Meta-EnterСкопировать имя выделенного файла в командную строку.

Хочется больше? Просто! Смотрим документацию.

"Виджеты" для 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)"
Надеюсь кому нибудь пригодится.

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: к сожалению данный скрипт уже не работает (интернет штука динамическая). Времени написать свежую версию нет :(

Свободные словари (часть 2)

Продолжая «публикацию» о свободных словарях, перенесем военные действия в визуальную среду (а точнее в Dictionary.app).
После некоторых поисков на тему как же заставить работать DictUnifier, было найдено пару патчей. Прежде всего спасибо David’s logbook. Пролистав комментарии можно обнаружить что там есть ссылка на патчик.
Патченная версия работает лучше. Но вот с форматированием проблема. Словарные статьи не как не форматированы, текст идет в одну или несколько длинных строк. К тому же вся словарная статья заключена в тег pre. И мы видем что-то вроде этого:

Это мало мне нравилось. И я подправил (слегка) build_dict.sh. Данный скрипт отвечает за всю логику работы приложения. Добавил я не много. А точнее блок 'butifier'. И вот что получилось:
.
Пропатченный DictUnifier можно скачать с rapidshare.
Прошу заметить что данная версия DictUnifier`а создает файлы в диретрии ~/.sdconv_back.

Зачем?

Все просто: в эту директория копируются исходники для создания словаря (как до butifier так и после). Имея эти файлы можно подправить, то что скрипт не смог.

Удачи.

Свободные словари (часть 1)

Пролог

Я с нетерпением ждал нового Show Leopard. Как только долгожданный диск стал доступен, тут же был приобретен за кровные 990р :). С приобретением нового лицензионного продукта, решил окончательно покончить с остатками вареза на своем маке. Началась война за чистоту содержимого давно. В этот раз дошел до последнего рубежа (надеюсь все остальное уже «чисто»): словари Lingvo. О словарях речь и пойдет.

Попытка номер раз

Большая часть простых пользователей для начала попытается найти готовое (и красивое решение). Выбор программы: Сама реализация от Apple меня очень даже устраивает. Но есть один нюанс … готовые словари. К сожалению родной Dictionary.app согласен работать только с одним форматом словарей, а именно *.dictionary. Выбор словарей: Жаль но готовых русско-английский/англо-русский словарей я не нашел (возможно не дано). Адаптация словарей: Если нет готовых (и «родных») словарей надо найти конвертер. Как мне кажется самая большая коллекция свободных (и к тому же довольно объемных) словарей расположена на xdxf.revdanica.com. Портал может предложить 2 вида словарей: XDXF и StarDict. Значит надо найти конвертер для этих форматов. И о чудо есть прекрасный проект, где можно найти DictUnifier который позволит нам превратить StarDict словарь в Apple Dictionary словарь. К сожалению проект скорее мертв чем жив (последние обновления в приложение датированы Мартом 31, 2008). И полученный словарь не всегда работает в Dictionary.app.

Попытка номер два

Альтернативные программные продукты (бесплатные конечно). Что мы имеем из готового? Как оказалось, не много :(. В основном это старые малопригодные к работе приложения. Приводить их список особого смысла думаю нет.

Попытка номер три

А почему мы обошли стороной StarDict (скомпилированный под Mac), так любезно предоставленный разработчиками StarDict. Ответ прост. Таким продуктом пользоваться не хочется: Выглядит оно может и хорошо (все в мире относительно). screen-shot-2009-10-01-at-6.18.48-pm.png Но вот интеграции с ОС просто нет. Пример: попробуем свернуть окошко (cmd + h), и о «чудо» мы его теперь не «вернем» (закрываем, и открываем заново).

Попытка номер ...

Наверное пора сдаваться. Готовых решений нет. Но постойте ведь мы же пользуемся UNIX системой! Конечно! Надо найти что-то из MacPorts. Увы ничего… Ничего страшного! Ведь мы же не безрукие (хочется верить), «адаптируем» сами. И тут какраз нашелся консольный вариант StarDict: sdcv. Ура!!! Осталось только собрать это чуда для себя :). Качаем, распаковываем, открываем терминал, и…: pkgconfig и glib2 никто (из Apple) установить в систему не «успел» %). Я пошел простым путем: зачем делать самому, можно взять готовое. Устанавливаем всем известный (надеюсь это так %) ) MacPorts и вперед:
$ port deps glib2
Full Name: glib2 @2.20.5+darwin
Build Dependencies:   pkgconfig
Library Dependencies: gettext, libiconv, perl5, python_select
$ sudo port install glib2
Затем «собираем» sdcv:
$ cd sdcv-0.4.2
$ ./configure --prefix=/opt/local
$ make
$ make check
$ sudo make install
$ make clean
Но не все так просто, нас ждет две трудности (для шага make)
  1. Ошибочка в lib.cpp
    lib.cpp: In member function ‘const gchar* offset_index::read_first_on_page_key(glong)’: 
    lib.cpp:516: error: no matching function for call to ‘min(long unsigned int, guint32&)’ 
    К счастью решается просто: в форему написано что в svn уже поправили (берем новую версию файла). Вот кстати можно взять патчик отдельно.
  2. getopt.h содержит «не правильное» для «нас» определение функции getopt().
    In file included from sdcv.cpp:33: 
    ./getopt.h:146: 
    error: declaration of C function ‘int getopt()’ conflicts with /usr/include/unistd.h:458: 
    error: previous declaration ‘int getopt(int, char* const*, const char*)’ here 
    Решение еще проще: Меняем стоку «extern int getopt ();» на «extern int getopt (int __argc, char *const *__argv, const char *__shortopts);» в вышу указанном файле. Вот diff -u для оригинала и измененного:
    --- getopt.h_orig    2005-01-12 00:11:10.000000000 +0300
    +++ getopt.h    2009-10-01 20:38:22.000000000 +0400
    @@ -143,7 +143,8 @@
        errors, only prototype getopt for the GNU C library.  */
     extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
     # else /* not __GNU_LIBRARY__ */
    -extern int getopt ();
    +extern int getopt (int __argc, char *const *__argv, const char *__shortopts);
     # endif /* __GNU_LIBRARY__ */
     
     # ifndef __need_getopt
После этого все «соберется». Складываем словари (предварительно скаченные с xdxf.revdanica.com) в ~/.stardict/dic и вуаля.

Немного вольностей

Но вот беда. Вывод sdcv не очень красочный:
screen-shot-2009-10-01-at-8.48.03-pm.png
Но как это и полагается, мы пойдем своим путем. А именно: напишем скрипт-оболочку (скорее помятую обертку). И получим что-то вроде этого:
screen-shot-2009-10-01-at-8.48.17-pm.png
Помоему уже не плохо. Скрипт можно взять здесь. Сильно прошу не судить (написан был быстро и без особых претензий).

Эпилог

Так как проект sdcv тоже больше похож на мертвеца, думаю что следующий шаг будет в написании чего-то самому. Жаль только что из всех языков программирования сейчас пользуюсь только perl/ksh. Другие позабыл уже давно. Поэтому волонтеры заинтересованные в написании альтернативы Dictionary.app и представленного здесь «Костылъ.арр», могут обращаться. В данный момент начил осваивать GUI в Xcode. Надеюсь на продолжение истории…

А где кнопка "OK"?

А где же кнопку ОК взять :) ?