Friday, 12 December 2008

Интеграция встроенного Apple словаря в Firefox

До последнего времени, единственное, что останавливало меня от перехода на Firefox с Safari на Mac OS X - невозможность использовать встроенный Apple Dictionary. Apple Dictionary, дополненный словарями из StraDict оказался черезвычайно мощным и лёгким инструментом.

Теперь, поставив плагин Ask Dictionary для Firefox, я могу пользоваться Apple словарём прямо из Firefox.

Идея плагина основана на том, что в Mac OS X статьи в словаре имеют свои URI. Так вы можете ввести в браузере dict:///word  и откроется окно Apple Dictionary со статьёй "word". 

Monday, 29 September 2008

Мой Thunderbird не понимает русских букв

Если вы пользутесь почтовым клиентом Thunderbird, работая на Макинтоше (Mac OS). У Вас могут возникнуть проблемы с отображением шрифтов.

ПРОБЛЕМА:
Вместо русских букв, я вижу вопросительные знаки.

РЕШЕНИЕ:
Отредактируйте или создайте файл в вашей домашней директории:

~/Library/Thunderbird/Profiles/xxxxxxx.default/chrome/userChrome.css

где
xxxxxxx.default - имя вашего профайла
~/ - ваша домашняя директория

В файл необходимо добавить

* {

font-family: Sans-Serif !important;
font-size: 10pt !important;
}

где
Sans-Serif - название шрифта содержащего кирилические буквы
10pt - размер шрифта

Friday, 5 September 2008

Учебник по Java EE

Наконец появился рускоязычный перевод учебника по Java EE:

Учебник по Java EE:
http://ru.sun.com/java/j2ee/index.html
В контексте Cocoa интеесны следующие Objective-C расширения:

Categories:
Механизм, позволяющий добавить реализацию к существующему классу, не наследуясь от него. Например, можно добавить метод к базовому классу иерархии и, таким образом, получить новую функциональность всех библиотечных класов [не выглядит ОО ;-)]

Protocols:
По сути, это интерфейс. Бывают двух видов формальные и неформальные. Неформальные - это категории (см. пункт 1), а формальные - честные.

Соответственно, ключеые слова
@optional
@required
позволяют помечать методы интерфейса, как обязательные или не обезательные к реализации в классах наследниках.

NB:
Что-то типа generics:
- (void)draggingEnded:(id )sender;
// Аргумент может быть любого типа, должен реализовывать NSDraggingInfo протокол


Thursday, 4 September 2008

Несколько способов превратить список в строку в консоли (linux, unix, mac os):

awk 'BEGIN {ORS=" "} { print $0}'
cat a.txt | awk '{ printf $0}'
tr -s '\n' ' '

Thursday, 21 August 2008

Компиляция программы на основе фреймворка Cocoa из командной строки

Cocoa - это библиотека классов для создания графического интерфейса, написанная на языке Objective C.

Простейшая программа, которая не покажет ничего на экране, но воспользуется фреймворком Cococa, выглядит так:

SimpleStringsOperations.m:

1 #import "AppKit/AppKit.h";
2
3 int main(int argc, const char *argv[]) {
4 return NSApplicationMain(argc, argv);
5 }
6

Компилятору gcc необходимо передать ключ "-framework Cocoa":

gcc -framework Cocoa SimpleStringsOperations.m -o SimpleStringsOperations

Фреймворк Cocoa включает в себя фреймворк AppKit, который мы включили в программу.

Но запустить откомпилированный файл просто так не удастся

при попытке запустить файл, вы получите сообщение об ошибке:


2008-08-21 18:13:16.182 SimpleCocoa[26695:10b] No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting

Что означает это сообщение, и как правильно запустить программу, читайте в следующем посте ;-)

GCC: Сборка на Mac OS

Откомпилировать программу на Mac OS (в моём случае Leopard) можно с помощью gcc.

Простейшая программа на Objective C выглядит следующим образом:
1 #import <AppKit/AppKit.h>
2
3 int main(int argc, const char *argv[]) {
4 NSLog(@"You can think I'm wrong, but that's no reason to quit thinking. (House M.D)");
5 return 0;
6 }
Данный исходный код можно сохранить в файле с расширением .m

Например: cite_gregory_house.m

Откомпилировать программу можно с помощью комманды:

gcc -framework Foundation cite_gregory_house.m -o cite_gregory_house

Важно отметить, что если вы используете и другие Frameworks, их нужно указать


Wednesday, 23 July 2008

Ubuntu: О Боже! Я не могу подключить свой flash drive!

В случае, если вы пользователь Gnome (вариант рабочего стола для пользователей Linux и других *nix). И вы поменяли опции монтирования флеш диска (flash drive) с помощью диалога Наутилуса (Nautilus - файловый менеджер среды Gnome). То, с некоторой вероятностью, вы столкнётесь с той же проблемой, что и я. Монтирование (mount) конкретного диска средствами Gnome становится невозможным. Короткое решение:

запустите команду

gnome-mount -d <ваше устройство> --erase-settings

ПРИМЕР:

gnome-mount -d /dev/hdb1 --erase-settings

Saturday, 29 March 2008

GlassFish: примеры приложений

I


Скачать приложение можно здесь.

II
Католог от BluePrints - Web 2.0 решения
Находится здесь.

Забавно посмотреть на пример с картой:
Map Viewer Geo-code JSF 1.2 Component


III
Ещё примеры, но уже без исходников:
Здесь.

Tuesday, 19 February 2008

Firefox locks

К сожалению, Firefox и Thunderbird не всегда правильно обрабатывает аварийное завершение программы (crash), или неожиданое завершение программы (перезагрузка Window Manaer). При попытке повторно включить Firefox, появляется диалоговое окно с сообщением о том, что сессия Firefox или Thunderbird уже запущена. Проблема в том, что, при запуске новой сессии, создаются файлы-lock'и. При нормальном завершении работы, они правильно удаляются, при аварийном - нет.

Я написал для себя такой скрипт на bash, позволяющий находить проблемные файлы. Найдя, вы можете удалить их вручную (не стоит полагаться в таких делах на скрипт).

>cat ~/bin/find_mozilla_locks.sh
#!/bin/sh
echo "FIREFOX: "
find ~/.mozilla -name .parentlock -print
find ~/.mozilla -name lock -print
echo "THUNDERBIRD: "
find ~/.thunderbird -name .parentlock -print
find ~/.thunderbird -name lock -print

Вывод скрипта может выглядет, например, так

FIREFOX:
/home/denis/.mozilla/firefox/ynulai8b.default/.parentlock
/home/denis/.mozilla/firefox/ynulai8b.default/lock
THUNDERBIRD:
/home/df153228/.thunderbird/vd0inkm8.default/.parentlock


Отмечу, что имя профайла выглядит не human readable, и, в данном случае, скрипт очень полезен.