Oracle DB, Oracle APEX, Linux etc.

воскресенье, 24 мая 2009 г.

Pidgin - вроде всё хорошо, но...

Жутко не хватает возможности по комбинации клавиш изменять раскладку уже написанного текста (всего или части), как это делает, например, плагин Миранды Switch Layout. Потому я решился, во-первых, на изучение того, как пишутся плагины для Пиджина на C, и, во-вторых, на написание подобного плагина в свободное время. Раз пишу для себя, то затягивать особо не буду... ;)
Читать далее

понедельник, 18 мая 2009 г.

Установка Mono 2.4 и MonoDevelop 2.0 в deb-дистрибутивах by Jan Dzik

Предисловие от автора перевода (т.е., меня)


Как я уже писал раньше, в определённый момент мне захотелось разобраться с программированием на C# под *никсами. Прочитав про Mono, я полез в deb-репозитории, но ни в lenny, ни в squeeze на тот момент не было даже Mono 2.2, что уж говорить про свеженькую стабильную 2.4... Стало ясно, что придётся собирать из исходников. Поискав в Сети, я наткнулся на статью, которая сильно облегчила процесс установки. И - да, она была на человеческом английском. На русском, к сожалению, я подобного не обнаружил, потому решил сделать этот перевод - неточный, но близкий к тексту и передающий основное. Возможно, он будет полезным кому-то с аллергией на английский. ;) Только учтите, что некоторые мысли в переводе пропущены как незначительные...

Введение от автора статьи


С грустью вынужден сказать, что в последние версии Убунту и Дебиан не включены самые последние пакеты Mono - предпочтение отдано стабильности, а не новизне версии. Хотя, судя по списку рассылки ответственных за пакеты, это не лёгкая задача - поддерживать пакеты для Mono и всего, что с ней связано. (Прим. пер.: род у Mono женский, поскольку это среда выполнения)

Я - чайник, когда дело касается последнего писка и новейших версий, особенно если над этим придётся подумать, как в случае с Mono. В последний стабильный релиз Mono, версию 2.4 входит масса таких новых особенностей, как интерактивная оболочка C#, расширения SIMD и улучшенная поддержка возможностей C# 3/.NET 3.5, таких как методы расширения и LINQ. Смотрите информацию по релизу здесь. Я разочаровался, когда обнаружил, что самая последная версия deb-пакетов Mono, которые я мог найти, - это версия 2.0.1 в неофициальных репозиториях.

Что же делать? Скачивать исходники, настраивать и собирать, чтобы запускать параллельно с версией Mono, установленной на моём десктопе с Убунту (среда выполнения Mono в Убунту всегда устанавливается по умолчанию, даже если запускать ОС с компакта, потому что она необходима для запуска .NET-приложений, как F-Spot, который стал стандартом на рабочем столе GNOME). Оказалось, что это не так сложно, как кажется.

Шаг 1: Установка требуемого для компиляции.


Для начала, Вам нужно установить соответствующие инструменты для настройки и компиляции исходного кода. Вы можете установить их, используя Synaptic, но ради скорости давайте используем особенную консольную магию. ;)

Откройте консоль и введите следующее для установки компилятора gcc и заголовочных файлов для разработки, необходимых для компиляции компиляторов Mono, инструментов и набора библиотек. (Прим. пер.: автор не боится тавталогий, приходится терпеть и переводить as is.)

user@system$> sudo apt-get update
user@system$> sudo apt-get install build-essential autoconf automake \
bison flex gtk-sharp2-gapi boo gdb valac libfontconfig1-dev \
libcairo2-dev libpango1.0-dev libfreetype6-dev libexif-dev \
libjpeg62-dev libtiff4-dev libgif-dev zlib1g-dev libatk1.0-dev \
libglib2.0-dev libgtk2.0-dev libglade2-dev libart-2.0-dev \
libgnomevfs2-dev libgnome-desktop-dev libgnome2-dev libgnomecanvas2-dev \
libgnomeui-dev libgnomeprint2.2-dev libgnomeprintui2.2-dev \
libpanel-applet2-dev libnautilus-burn-dev librsvg2-dev \
libgtkhtml3.14-dev libgtksourceview2.0-dev libgtksourceview-dev \
libvte-dev libwnck-dev libnspr4-dev libnss3-dev libxul-dev \
libwebkit-dev libvala-dev

Это должно установить всё необходимое ПО и заголовочные файлы, необходимые для компиляции.

Шаг 2: Загрузка архивов с исходниками mono 2.0


Отправляйтесь на http://ftp.novell.com/pub/mono/sources-stable/. Вам не нужен каждый архив в списке. В этом руководстве мы будем использовать mono-2.4.tar.bz2, libgdiplus-2.4.tar.bz2, gluezilla-2.4.tar.bz2, xsp-2.4.tar.bz2, mono-tools-2.4.tar.bz2, gecko-sharp-2.0-0.13.tar.bz2, mono-debugger-2.4.tar.bz2, mono-addins-0.4.zip, gtk-sharp-2.12.8.tar.bz2, gnome-sharp-2.20.1.tar.bz2, gnome-desktop-sharp-2.20.1.tar.bz2, webkit-sharp-0.2.tar.bz2.

Также зайдите на сайт MonoDevelop и скачайте исходники для monodevelop 2.0: monodevelop-2.0, monodevelop-debugger-mdb-2.0, monodevelop-debugger-gdb-2.0, monodevelop-database-2.0, monodevelop-java-2.0, monodevelop-vala-2.0.

Создайте папку в своём домашнем каталоге для разархивированных исходников, например, src/mono-2.4.

user@system$> mkdir -p src/mono-2.4; cd src/mono-2.4

Распакуйте скачанные архивы в эту папку.

Шаг 3: Подготовка параллельного окружения


Сейчас самое время подготовить нашу систему для двух сред выполнения Mono. Хорошей идеей будет установить всё связанное с Mono 2.2 по определённому пути вроде /opt/mono-2.2 и создать скрипт, который будет загружать окружение, используя версию, размещённую по этому пути, вместо обычной установки. Так Вы не превратите уже установленную у Вас версию mono в нечто нестабильное или неработающее.

Теперь напишем скрипт, который будет загружать окружение mono-2.4.

user@system$> cat > mono-2.4-environment
#!/bin/bash
MONO_PREFIX=/opt/mono-2.4
GNOME_PREFIX=/opt/gnome-2.4
export DYLD_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
PATH=$MONO_PREFIX/bin:$PATH
PS1="[mono-2.4] \w @ "
[Нажмите Ctrl+D, чтобы закончить файл]
user@system$> sudo mv mono-2.4-environment /usr/local/bin
user@system$> sudo chmod +x /usr/local/bin/mono-2.4-environment
И создадим второй скрипт, который будет загружать окружение и выполнять переданные аргументы.
user@system$> cat > mono-2.4
#!/bin/bash
MONO_PREFIX=/opt/mono-2.4
GNOME_PREFIX=/opt/gnome-2.4
export DYLD_LIBRARY_PATH=$MONO_PREFIX/lib:$DYLD_LIBRARY_PATH
export LD_LIBRARY_PATH=$MONO_PREFIX/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=$MONO_PREFIX/include:$GNOME_PREFIX/include
export ACLOCAL_PATH=$MONO_PREFIX/share/aclocal
export PKG_CONFIG_PATH=$MONO_PREFIX/lib/pkgconfig:$GNOME_PREFIX/lib/pkgconfig
PATH=$MONO_PREFIX/bin:$PATH

exec "$@"
[Нажмите Ctrl+D, чтобы закончить файл]

user@system$> sudo mv mono-2.4 /usr/local/bin
user@system$> sudo chmod +x /usr/local/bin/mono-2.4
Загрузите окружение:
user@system$> source mono-2.4-environment
После этого пользовательское приглашение в консоли изменится на [mono-2.4], показывая, что Вы работаете в окружении Mono 2.4.
[mono-2.4] ~ @ cd ~/src/mono-2.4
Прим.пер.: дальше автор обращает внимание на то, что до конца установки мы будем работать в этом окружении, но пользовательское приглашение он будет писать старое - user@system$>; в переводе всё так же.

И теперь создадим папку, куда всё будет устанавливаться:
user@system$> sudo mkdir -p /opt/mono-2.4

Шаг 4: libgdiplus


Перед компиляцией основных исходников Mono нам надо скомпилировать libgdiplus, если мы хотим пользоваться тем, что есть в пространстве имён System.Drawing.
user@system$> cd libgdiplus-2.4
user@system$> ./configure --prefix=/opt/mono-2.4 --with-pango
Скрипт configure должен вывести что-то вроде такого:
---
Configuration summary

* Installation prefix = /opt/mono-2.4
* Cairo = 1.8.0 (system)
* Text = pango
* EXIF tags = yes
* Codecs supported:

- TIFF: yes
- JPEG: yes
- GIF: yes
- PNG: yes
NOTE: if any of the above say 'no' you may install the
corresponding development packages for them, rerun
autogen.sh to include them in the build.

---
Если по какой-нибудь опции будет стоять "no" ("нет"), тогда у Вас отсутствует что-то зависимое. Вы можете использовать Synaptic, чтобы найти соответствующий пакет для установки. Тем не менее, эти зависимости не обязательны. (Прим. пер.: хотите — устанавливайте, хотите — нет.)

Пришло время собрать исходники:
user@system$> make
user@system$> sudo make install

Шаг 5: mono-2.4


Самое время скомпилировать основные исходники mono, которые дадут нам, кроме всего прочего, компиляторы C# и базовые библиотеки классов.
user@system$> cd ../mono-2.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
Проверим, что компиляторы mono установились:
user@system$> which gmcs
Должно вывести: /opt/mono-2.4/bin/gmcs.

Ваша существующая установка mono будет сохранена, раз всё устанавливается в папку /opt/mono-2.4.

Шаг 6: gtk+ и gnome


На очереди компиляция библиотек, необходимых для среды рабочего стола, они зовутся gtk-sharp, gnome-sharp, gnome-desktop-sharp, gtksourceview-sharp.
user@system$> cd ../gtk-sharp-2.12.8
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../gnome-sharp-2.20.1
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../gnome-desktop-sharp-2.20.1
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install

Шаг 7: gluezilla, gecko-sharp, webkit-sharp


Теперь давайте скомпилируем библиотеки для встраивания html-движков gecko и webkit.
user@system$> cd ../gluezilla-2.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../gecko-sharp-2.0-0.13
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../webkit-sharp-0.2
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install

Шаг 8: собираем Mono.Addins


Пора скомпилировать библиотеки Mono.Addins:
user@system$> cd ../mono-addins-0.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install

Шаг 9: собираем инструменты Mono


Теперь время скомпилировать изумительную коллекцию инструментов Mono, включающую в себя Gendarme (прим. пер.: утилита для поиска часто встречающихся проблем в .NET-приложениях и библиотеках) и GSharp (интерактивную C#-оболочку).
user@system$> cd ../mono-tools-2.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
Этим Вы установили утилиту gsharp. Проверьте:
user@system$> gsharp
Немного поиграйтесь с командами на C#. :) Введите quit;, когда закончите.

Шаг 10: собираем Mono XS


Это действительно очень полезная вещь. XSP - это автономный веб-сервер, написанный на C#. Его можно запустить из командной строки или даже встроить в Ваше приложение, ссылаясь на сборку Mono.WebServer.
user@system$> cd ../xsp-2.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install

Шаг 11: собираем Mono Debugger


Подбираясь ближе к концу нашего сеанса компиляции, давайте соберём отладчик mono, который позволит нам отлаживать наш несовершенный код.
user@system$> cd ../mono-debugger-2.4
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install

Шаг 12: собираем MonoDevelop 2.0


А теперь вопрос: чем это всё будет без хорошей среды разработки? MonoDevelop 2.0 наконец-то даст нам поддержку отладчика!
user@system$> cd ../monodevelop-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../monodevelop-debugger-mdb-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../monodevelop-debugger-gdb-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../monodevelop-database-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../monodevelop-java-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
user@system$> cd ../monodevelop-vala-2.0
user@system$> ./configure --prefix=/opt/mono-2.4
user@system$> make
user@system$> sudo make install
И... Это всё. У Вас теперь есть работающее окружение mono-2.4 и превосходная среда разработки для работы с ним.

Вы можете запустить любую .NET-программу следующим образом:
user@system$> mono-2.4 PATH_TO_THE_PROGRAM_AND_ITS_ARGUMENTS_IF_ANY
ЗАМЕЧАНИЕ! Это будет работать только для shell-скриптов, которые обычно идут вместе с mono-приложениями. Если Вы заглянете в /opt/mono-2.4/bin/monodevelop, то увидите, что это просто shell-скрипт, который, в сущности, выполняет что-то вроде: mono /opt/mono-2.4/lib/monodevelop/bin/MonoDevelop.exe. Попытка запустить .NET-приложение, например main.exe, просто набрав mono-2.4 main.exe, выдаст ошибку. Взамен Вам стоит писать mono-2.4 mono main.exe.

Счастливого хака!

Читать далее

вторник, 12 мая 2009 г.

deb-репозитарии и gpg-ключи

Пустяки, дело-то житейское, но никак не могу запомнить, как добавлять gpg-ключи сторонних deb-репозиториев. Потому небольшая напоминалка.

Так загружаем ключ 1234567890ABCDEF и добавляем его:
$ gpg --keyserver keyserver.name --recv-key 1234567890ABCDEF &&  gpg -a --export 1234567890ABCDEF | sudo apt-key add - 

А это список серверов, название одного из которых подставляем вместо keyserver.name:

pgpkeys.mit.edu
keys.niif.hu

Другие сервера ключей можно и гуглом отыскать...
Читать далее