21 декабря, 2007

Google Code Day 2007 Russia

Google Code Day 2007 Russia
Открыла День Google Code Дженнифер Трелевич, Директор Центра Разработок Google Россия.


Дженнифер Трелевич
Директор Центра Разработок Google Россия


Трелевич начинала работать в компании Motorola, занималась созданием продуктов для обработки речевых сигналов. Работала в штаб-квартире IBM, также менеджером отдела научно-исследовательской деятельности IBM в России, странах СНГ и Восточной Европы.
Плохо говорит по-русски, хотя интересуется русской литературой, кино, театром, балетом.
В презентации были рассмотрены Продукты для разработчиков от Google, Google APIs
Ключевые моменты и фразы:
  • all apps in browser (все приложения в браузере)
  • keep advertising SOAP
  • Улучшение браузера через GoogleGears
  • "Cтратегические улучшения интернета в пользу всех." (с)
  • "Что хорошо для веба - хорошо для Google." (с)




В следующей секции выступил гость из Маунтин Вью, США, Брэд Фицпатрик, Технолог Google, известный как создатель социальной сети LiveJournal

Брэд Фицпатрик (Brad Fitzpatrick)


Ключевые моменты презентации Брэда "Открытие Социального Графа":

  • OpenID wiki

  • Социальный граф; как мы свзязаны друг с другом, как мы делаем полезные вещи с помощью социального графа

    Giant Global Graph (GGG)

    Термин GGG используется в семантических Web. Этот термин был придуман Тим Бернерс Ли в ноябре 2007 года. На блоге Тим рассказывает о том, что GGG (Глобальный Гигантский Граф) может быть более подходящим, чем таксономия "Semantic Web".

  • OpenSocial API, HTML+JavaScript

  • IM interopability for XMPP, AIM, MySpace, Facebook, LinkedIn, Ning, Oracle, orkut, etc..

  • собрать ГГГ через XFN && FOAF, используя разметку на сайтах
    <link rel="meta" type="application/rdf+xml" title="foaf">

  • XFN, hCard, OpenID, OAuth
    Plaxo.com, FriendFeed.com, Mugshot.org - аггрегация
    SixApart's updates.elsewhere.im - XML-поток в реальном времени, участие через OAuth

  • FOAF (foaf-project.org)
    Friend of a friend
    файлы XML RDF, SHA1_hex



Вторая часть мероприятия была посвящена практическим семинарам, workshop: GData, OpenSocial (forum), Geo (GeoRSS, KML, Mushup).



Related Links:

20 октября, 2007

Скажи "Прощай" Microsoft. Быстрая и Безболезненная Миграция с Windows на Linux

Вам надоели синие экраны смерти BSOD? ..и Вы все еще не используете OS GNU/Linux?


Скачиваем Windows установщик отсюда, прямая ссылка
По умолчанию, эта программа установит Debian etch.

Как это выглядит?



1. Скачиваем Debian Installer




2. Выбираем режим в котором будем производить установку: Текстовый - Text Install - или Графический - Graphical Install - Рекомендовано




3. Закачиваем сетевой установщик (~11mb)




4. Перезаргужаемся




5. Выбираем Debian Installer из меню




6. Очаровательный интерфейс установщика Debian GNU/Linux

Почему Linux?

  1. Почему Linux лучше ;;Добро пожаловать на шоколадную фабрику

  2. Debian Россия/Почему Debian?

  3. Гвоздь в гроб Windows

  4. Linuх - должен?


P.S. Wubi, эта программа установит Ubuntu Linux.
Wubi - Install Ubuntu from Windows

19 октября, 2007

Быстрая установка Windows Vista

HowTo: Быстрая установка Windows Vista



Прямая ссылка: http://www.youtube.com/watch?v=FVbf9tOGwno

12 октября, 2007

Управление Жизненным Циклом Информации - ILM - Как Новое Технологическое Направление

Файл - это наше всё

В этом постовом я коснусь основных понятий Управления Жизненным Циклом Информации - ILM - и приведу несколько определений этому понятию, а также поделюсь полезными ссылками.

IBM - ILM
Управление жизненным циклом информации (ILM) - это процесс, охватывающий весь жизненный цикл информации, от разработки концепции до вывода данных из обращения - с целью оптимизировать использование ресурсов хранения и доступ к ним с минимальными затратами. Наиболее эффективная ILM-стратегия для бизнеса предусматривает управление информацией в соответствии с ее ценностью. Для малых и средних компаний проблема прогнозирования потребностей в ресурсах хранения и ограничения затрат в условиях роста бизнеса может быть особенно сложной.


META Group's ILM
ILM - это процесс, в рамках которого информация с минимальными издержками перемещается по средам хранения согласно ее содержанию и бизнес-требованиям.
Сюда также входят постоянно совершенствуемые автоматизационные процессыуправления хранением, позволяющие поднять производительность труда без ущерба скорости реагирования на изменение бизнес-требований.


Tuxedo Live
ILM - это концепция автоматизированного размещения данных в ИТ-инфраструктуре на основании требований бизнеса к параметрам защищенности, доступности информации и с учетом ее ценности, актуальности и минимизации расходов на хранение.


Предшественницей ILM является концепция HSM (hierarhical storage management - Иерархическое управление носителями)

К средствам управления структурированной информацией относят программные продукты, осуществляющие перенос данных в инфраструктуре ранения согласно заданным правилам. Это СУБД - DBMS (от Oracle, IBM, EMC, Sun Microsystems), CRM, ERP, системы управления цепочками поставок и т.д. В роли структурированной информации могут выступать, к примеру, таблицы баз данных.

Процесс ILM:
  1. Классификация бизнес-требований, выявление информационных групп
  2. Оценка уровня сервиса, который обеспечивается для данной информационной группы
  3. Определение уровня обслуживания для приложения
  4. Реализация


Стандартизация ILM - это важнейшее во всех смыслах направление промышленного хранения данных, и пока что находится на начальной стадии своего исторического развития.


Также смотрите: Системы поддержки принятия решений - DSS, Система управления информацией предприятия - ECM, SNIA and Data Management Forum

P.S. Не забывайте, ценность информации - величина переменная ;)

В следующем постовом будет подробнее разобрано понятие ILM.

09 октября, 2007

25 Лучших ПК Всего Времени

PC World определил список 25 лучших персональных компьютеров. Список включает в себя таких гигантов кибер-индустрии как IBM, Apple, Sony, MITS, Xerox, HP.

  1. 1977 Apple II
  2. 1986 Compaq Deskpro 386
  3. 1981 Xerox 8010 Information System
  4. 1986 Apple Macintosh Plus
  5. 1992 IBM ThinkPad 700C
  6. 1981 IBM Personal Computer, Model 5150
  7. 1985 Commodore Amiga 1000
  8. 1983 Tandy TRS-80 Model 100
  9. 1982 Columbia Data Products MPC 1600-1
  10. 1991 Apple PowerBook 100
  11. 1998 Sony VAIO 505GX
  12. 1975 MITS Altair 8800
  13. 1984 IBM Personal Computer/AT Model 5170
  14. 1979 Atari 800
  15. 2001 Shuttle SV24 Barebone System
  16. 1977 Tandy TRS-80 Model I
  17. 1987 Toshiba T1000
  18. 1993 Hewlett-Packard OmniBook 300
  19. 2002 Apple iMac, second generation
  20. 1996 Gateway 2000 Destination
  21. 1998 Alienware Area-51
  22. 1993 Hewlett-Packard 100LX
  23. 1997 Apple eMate 300
  24. 2006 Toshiba Qosmio G35-AV650
  25. 1982 Non-Linear Systems Kaypro II


Новость не такая уж свежая, но все же интересно и познавательно ;)

06 октября, 2007

Проводим Пингвинов через VPN Туннель

Этот пост будет небольшим HowTo по подключению конечного пользователя к сети интернет через VPN туннель.

Для начала установим клиент для VPN-соединения: пакет pptp-linux
~$ sudo aptitude install pptp-linux


Point-to-Point Tunneling Protocol (PPTP) Client
Client for the proprietary Microsoft Point-to-Point Tunneling
Protocol, PPTP. Allows connection to a PPTP based VPN as used
by employers and some cable and ADSL service providers.
MPPE (Microsoft Point-to-Point Encryption) is supported with
the stock kernel.

LAN

Настроим локальную сеть (LAN)
~$ nano /etc/network/interfaces


auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp


Если адрес вашей машине присваивается динамически (DHCP),
ничего не меняем.

В случае, если адрес вашей машины постоянный (static IP) меняем строку iface eth0 inet dhcp на следующее:

iface eth0 inet static
address $IP #выдается провайдером сети
netmask 255.255.255.0 #маска сети
gateway $GATEWAY #шлюз


перезапускаем сетевые интерфейсы

~$ sudo /etc/init.d/networking restart


Теперь Вы можете работать в локальной сети :)

VPN

Приступим к настройке самого VPN туннеля

~$ nano /etc/ppp/options


удаляем все строки и вписываем туда
lock
noauth
persist


производим основные настройки pptp соединения

~$ nano /etc/ppp/peers/vpn


pty "pptp <$VPN_ADDRESS> --nolaunchpppd" #команда для соединения
maxfail 0 #бесконечное количество попыток соединения
lcp-echo-interval 60 #каждые 60 секунд узнаем о статусе своего ISPа
lcp-echo-failure 4 #если 4 раза не ответили, то мы отключены от ISPа
name ispnet #имя своего хоста
remotename PPTP #имя удаленного хоста
file /etc/ppp/options.pptp #дополнительные настройки
ipparam vpn #дополнительные параметры для ip-up, ip-pre-up, ip-down
+pap #если используется pap авторизация
+chap #если используется chap авторизация


Все, с настройками соединения закончили.

Теперь запускаемся:

~$ sudo pon vpn


Для отключения VPN:

~$ sudo poff vpn


Также для автоматического соединения с VPN при загрузке компа можно дописать в /etc/network/interfaces строки:

auto vpn
iface vpn inet ppp
pre-up ip link set eth0 up
provider vpn


И напоследок изменим таблицу маршрутизации

~# route add -net 10.10.10.10 netmask
255.255.255.0 gw 192.168.192.168


Отлично, теперь мы имеет доступ к сети Интернет и локальной одновременно.

30 сентября, 2007

Редизайн блога

Сегодня ночью занялся обновлением дизайна блога.
Все, что мне при этом понадобилось это умение читать коллег-блоггеров, пользоваться Google'ом, немного знаний о html+css и море энтузиазма.

Итак, о виджетах и кнопках, используемых на блоге. По порядку: сверху вниз, слева направо.

0. Nav bar в шапке блога
Его я просто снес. Спасибо virens за идею. инструкция здесь
теперь на этом месте Меню бар..

1. Меню бар в шапке блога
Самая юзабильная кнопка здесь, на мой взгляд, это Аккаунты Google. Те, кто пользуется сервисами гугла, не только блоггером, поймут меня. Как добавить меню бар читаем здесь

P.S. Задумался над шапкой блога. Надо как-нибудь попроще написать по-поводу гейтса и торвальдса =) или перефразировать. может коллеги-блоггеры подкинут идею?

2. Поиск по блогу (Custom Google Search)
Create

3. Буквицы
Каждая статья на моем блоге начинается с буквицы или инициала.
В таблицу стилей <style> добавляем
.dropcaps { 
float:left;
color: #800000;
font-size:100px;
line-height:80px;
padding-top:1px;
padding-right:5px; }

В статье я просто выделяю первую букву в тэг span <span class="dropcaps">А</span>
..и получается большая заглавная буква, растянутая на 5 строк.

4. Feeds в блоггере
Описание Feed в блоггере

5. Полезный хак с FeedBurner

6. Облака тэгов
Облако тэгов можно сделать по этой инструкции

7. "свертывание" статьи, или full post хак
Blogger beta и пара советов

8. Меняет стандартную иконку favicon блоггера [B] на свою
<head> заменяем на
<head>
<link href='http://mysite.ru/favicon.ico' rel='shortcut icon'/>


9. Содержание блога (Table of Contents)
Этот виджет можно скачать и настроить по этой статье

10. Отображение исходного кода в статьях
Для этого я испольую тэг <pre>. <pre style="font-size:90%;color:#009000;">
Для отображения html кода заменяйте < этим & lt; и > этим & gt;.

11. Сервис генерации E-Mail иконок
E-Mail Icon Generator
Для GMail, Hotmail, MSN, Yahoo!, AOL и многих других!
а также коллекция иконок в стиле web2.0 >


Ссылки, которые пригодились при редизайне блога, возможно и Вам они тоже пригодятся
BeautifulBeta
Blogger University
Digital Inspiration
Atubborn Fanatic
Hackosphere
Designing Blog Color Schemes

И еще хотел поблагодарить блоггеров за рефераллов
Записки дебианщика
Linux 2
Блог интернет-разработчика

..и конечно же спасибо моим комментаторам и читателям ;)

P.S. Tuxedo (Transactions for Unix, Extended for Distributed Operations)

20 сентября, 2007

Шифрование файловой системы в Debian - Ubuntu - Linux

Вы уже позаботились о безопасности данных на вашем ноутбуке?
Самое время это сделать.
Да, статья посвящена в первую очередь владельцам ноутбуков, которые не хотят, чтобы их данные были прочитаны третьими лицами.

Для начала приготовим к процедурам жесткий диск: разобьем его.
Я сделал это так:
  • /dev/sda1 swap 1.2GiB
  • /dev/sda2 reiserfs 12GiB
  • /dev/sda3 reiserfs 4GiB

Сразу отвечаю почему я разметил все разделы в reiserfs. Это шустрая fs, она быстро работает с маленькими файлами, очень удобно для ноутбуков. Но если вы собираетесь хранить фильмы и большие изображения, или музыку в корневом разделе, то советую разметить этот раздел в ext3, но лучше создать отдельный раздел для таких вещей, например /dev/sda4/ ext3 36GiB
/dev/sda1 весит 1.2 Гигабайта, так как я программирую под СУБД Oracle, она требует не меньше гига свопа, но Вы можете создать своп с 700мб памяти
В /dev/sda2 будет лежать наша будущая зашифрованная системы, в которой будут храниться Ваша почта (Evolution, Icedove, Thunderbird), кэш браузера (Epiphany, Iceweasel, Firefox), логи мессенджеров (Pidgin, GAIM, jabber, psi) и прочая конфиденциальная информация, которую сможет прочитать только владелец ноутбука
/dev/sda3 будем использовать как временную fs
О том, что разделы на жестком диске бывают активными, основными и логическими я не буду рассказывать рецепты - солите, перчите, гуглите (что-то мне подсказывает, что можно использовать панель поиска с надписью Google на блоге сверху). Могу только предупредить что ОС возможно установить только в основной раздел.

Итак, установите Debian или Ubuntu на раздел /dev/sda3 с минимальной конфигурацией (без Окружения или server версию), потом Вы сможете установить иксы X11, офисные и прочие пакеты. Как правильно установить Debian?

Загрузитесь в свежеустановленную систему.
Далее все танцы с бубном будут производится от root'а, поэтому:

~$ su -


Устанавливаем дополнительные пакеты

~# aptitude install cryptsetup reiserfsprogs


cryptsetup - инструмент для управления модулем dm-crypt
dm-crypt - модуль ядра, входит в его состав linux начиная с версии 2.6.4

~# mkdir /media/sda2
~# mount /dev/sda2 /media/sda2


создайте в /media/sda2 любой файл с любым содержанием
можно заполнить диск произвольным методом

~# if=/dev/urandom of=/dev/sda2


Криптуем
~# cryptsetup -y create root /dev/sda2


dm-crypt отобразит зашифрованный диск в /dev/mapper/root
Поскольку это блочное устройство мы просто его форматируем как жесткий диск

~# mkfs -t reiserfs /dev/mapper/root


Перед тем как скопировать временный дистрибутив с диска /dev/sda3 нужно смонтировать его в удобном месте и скопировать в зашифрованную fs (/dev/mapper/root)

~# mkdir /mnt/enc_fs
~# mount /dev/mapper/root /mnt/enc_fs/


нужно изменить порядок загрузки, начнем с fstab

~# nano /etc/fstab


/dev/mapper/root / reiserfs defaults,errors-ro 0 1


~# nano /etc/crypttab


root /dev/sda2 none cipher=aes-cbc-essiv:sha256


[
~# nano /etc/kernel-img.conf

ramdisk = /usr/sbin/mkinitrd

]

~# cp -axv / /mnt/enc_fs


переходим к зашифрованной файловой системе

~# chroot /mnt/enc_fs /bin/bash


монтируем файловые системы ядра
~# mount sysfs /sys -t sysfs
~# mount proc /poc - proc
[~# mount /dev/sda2 /boot]


добавляем следующие строки в /etc/mkinitrd/modules
sha256
aes_i586


~# nano /boot/grub/menu.lst


kopt=root=/dev/mapper/root devfs=mount ro


~# dpkg-reconfigure linux-image-2.6.18.4-686



Вот и всё. Для восстановления разделов пользуйте утилиты gpart и testdisk


19 сентября, 2007

XSLT преобразование в Mono

Иногда Вам нужно взять кусок информации из некоторого произвольного XML файла и преобразовать его во что-то другое. Нацеленый на HTML, XML, или простой текст, XML Stylesheet Language Transformation (XSLT) Вам в помощь.

В этом примере вы научитесь трансформировать любой произвольный XML документ в другой формат, используя XSLT.
Как я это сделаю?

Листинг 01 Transform.cs показывает программу, которая берет исходный код XML, файл таблицы стиля, и целевой(куда назначен) файл с параметрами, и исполняет XSLT трансформацию.

Листинг 01 Transform.cs

using System;
using System.Xml.Xsl;
public class Transform {

public static void Main(string [ ] args) {
string source = args[0];
string stylesheet = args[1];
string target = args[2];

try
{
XslTransform transform = new XslTransform( );
transform.Load(stylesheet);
transform.Transform(source, target, null);
}
catch (Exception e)
{
Console.Error.WriteLine(e);
}
}
}


Класс XslTransform создан и загружен. Метод Load( ) имеет несколько перегрузок, которые могут быть загруженными из различных источников, включая URL, XPathNavigator, IXPathNavigable и XmlReader. Последний параметр Load( ) небязательный XmlResolver, который необходим для решения вызывов во внешние таблицы стилей через XSLT компонент include или import. Если параметр нулейвой, эти внешние ресурсы не разрешены.

По умолчанию, Mono будет использовать управляющую реализацию XSLT. Если Вы хотите использовать неуправляемую реализацию из libxslt, определите переменную среды MONO_UNMANAGED_XSLT (любое значение подойдет). Вы можете использовать управляемую реализацию если Вам необходимо использовать компонент <msxsl:script> для расширения тегов в таблице стилей. В основном, некоторые операции наиболее эффективны при использовании управляемой версией, и некоторые эффективны при использовании неуправляемой реализацией.

Листинг 02 StockQuote.xml показывает XML документ

<stockquote symbol="NOVL" name="Novell, Inc">
<lasttrade>9.78</lasttrade>
<tradetime>2004-05-04T10:56-0400</tradetime>
<change>
<amount>0.00</amount>
<percent>0.00</percent>
</change>
<prevclose>9.78</prevclose>
<open>9.77</open>
<onedayrange>
<low>9.72</low>
<high>10.02</high>
</onedayrange>
<oneyearrange>
<low>2.70</low>
<high>14.24</high>
</oneyearrange>
<volume>1,203,227</volume>
</stockquote>


Непохожая на своего родственника, каскадной таблицы стилей (CSS), которая имеет свой синтаксис, таблица стилей XSLT сама по себе XML документ. Листинг 03 показывает таблицу стилей XSLT, которая может быть использована для трансформации XML из листинга 02 в текст.

Листинг 03 StockQuote.xsl


<xsl:stylesheet version="1.0" xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text">
<xsl:template match="/">
<xsl:apply-templates select="StockQuote">
</xsl:apply-templates>
<xsl:template match="StockQuote">
Ticker Symbol: <xsl:value-of select="@Symbol">
Name: <xsl:value-of select="@Name">
<xsl:apply-templates select="LastTrade">
</xsl:apply-templates>
<xsl:template match="LastTrade">
Last Trade: US$<xsl:value-of select=".">
</xsl:value-of>
</xsl:template>

Скомпилируйте и запустите программу как показано ниже:

~$ mcs Transform.cs
~$ mono Transform.exe StockQuote.xml StockQuote.xsl StockQuote.txt


У Вас должен получиться файл StockQuote.txt со следующим содержанием:

Ticker Symbol: NOVL
Name: Novell, Inc
Last Trade: US$9.78



Что дальше?

Источник всех знаний о XSLT, прежде всего, W3C. Смотрите страницу http://www.w3.org/Style/XSL/. Здесь есть всё о XSLT.

Также можно посмотеть XSLT руководства здесь и здесь.

Чтобы узнать о компоненте <msxsl:script>, обратите внимание на статью "XSLT Stylesheet Scripting using <msxsl:script>" в руководстве для .NET разработчиков здесь.

17 сентября, 2007

Ого, да Novell - это Microsoft от Linux

Novell и Microsoft запустили лабораторию интероперабельности

Microsoft и Novell объявили об открытии лаборатории интероперабельности (Interoperability Lab) в Кембридже (США, штат Массачусетс).

Сообщается, что основная цель новой лаборатории — совместная работа специалистов компаний над проектированием и тестированием новых решений в области программного обеспечения, а также взаимодействие с клиентами и сообществом для создания и поддержки технологий, обеспечивающих совместное функционирование операционных систем Microsoft Windows Server и SUSE Linux Enterprise.
«Лаборатория интероперабельности Microsoft и Novell официально открыта для бизнеса, — заявил Том Ханрахан (Tom Hanrahan), директор по Linux-интеропребельности в Microsoft. — Мы рады сотрудничать с Novell по этому совместному проекту по интероперабельности и хотим продолжать работать засучив рукава над улучшением способностей к взаимодействию Windows Server и SUSE Linux Enterprise».
Первое, чем займется команда сотрудников новой лаборатории, — вопросы интероперабельности между технологиями виртуализации Microsoft и Novell. Также особое внимание будет уделяться основанным на стандартах системам управления, идентификационной интеграции и совместимости форматов офисных документов.
www.novell.com

P.S. "Держи своих друзей близко, а врагов еще ближе" - Билл Гейтс перед поездкой в IBM, цитата из фильма Pirates of Silicon Valley

12 сентября, 2007

Быстрая установка XGL Beryl в Debian 4.0 Etch

HowTo: Быстрая установка XGL Beryl в Debian 4.0 Etch

Новичкам это поможет понять как работают виртуальные рабочие столы в Linux и насколько это удобно при работе в операционной системе.

1. Добавляем два новых репозитория

~$ su -
~# nano /etc/apt/sources.list


deb http://debian.beryl-project.org/ etch main
deb-src http://debian.beryl-project.org/ etch main


2. чтобы не ругался скачиваем и ставим gpg ключ для этих репозиториев:

~# wget -O - http://debian.beryl-project.org/root@lupine.me.uk.gpg | sudo apt-key add -


3. скачиваем пакеты

~# apt-get update
~# apt-get install beryl-manager emerald-themes


4. Beryl установлен, но он не будет у Вас работать, нужно править X.Org для корректной работы

~# nano /etc/X11/xorg.conf


5. добавляем в конец секции Screen следующие две строки:

Option "XAANoOffscreenPixmaps"
Option "AddARGBGLXVisuals" "true"

теперь эти в секцию Device:

Option "AllowGLXWithComposite" "true"
Option "RenderAccel" "true"


одну строку в секцию Server Layout:

Option AIGLX "on"


И в конец файла я добавил эти строки :

Section "Extensions"
Option "Composite" "Enable"
EndSection


6. Перезагружаем икс сервер <ctrl><alt><backspace>
В итоге получаем такую игрушку:

 


P.S. Для того, чтобы при каждой загрузке системы в ручную не запускать Beryl, просто вписываем его в автозагрузку
Главное меню - Система - Параметры - Сеансы, во вкладке [Запускаемые при старте программы] добавляем beryl-manager

Что дальше? Ну а дальше заходим в Beryl Settings Manager и ковыряемся в настройках горячих клавиш, эффектов и во всем, что Вы там найдете по вашему вкусу..

08 сентября, 2007

Windows или Linux? тест

Тебе нужен Linux
Тебе важны гибкость в настройке и бесперебойная работа. Компьютер ты используешь в основном для серьёзных целей, и тебе нет необходимости в поддержке новейших игровых технологий. Ты достаточно продвинут, можешь самостоятельно тонко настроить систему. Ты уважаешь закон и не пользуешься пиратским софтом, но и не хочешь выбрасывать деньги на лицензии.
Пройти тест

Мой Мир Linux

Об операционной системе Linux узнал 2 года назад, это была весна 2005 года ("хороши дистрибутивы весной", правда этот появился на свет вместе с журналом CHIP Special #4/04 =). Установленная на тот момент, благодаря моему другу Triklozoid'у, ASP Linux 9.2 CHIP Edition была первая установленная Linux система на мой комп. Я конечно поковырялся, но, честно говоря, долго не привыкая, пришлось вернуться к "окнам". Наверное боязнь потери времени или чего-то другого, но сейчас уверенно скажу, что тогдашний "Distrowatch" был не зря. После, мы c Триклозойдом долгое время хотели сложится на ASPLinux 10 Deluxe.. И в это время на горизонте появляется еще один линуксоид aiz, который, кстати тоже начинал с ASPLinux, и вручает нам по диску ASPLinux 11 + LME (Media Edition). За долгий промежуток времени, под воздейсвием unix-way'а, я перепробовал много дисрибутивов, среди которых Fedora, Knoppix, Mepis, Gentoo, Belenix, MOPS, Haiku, Mandriva (еще кстати Slackware и RedHat не успел лицезреть) и.. Летом 2006, это был июль, по моей просьбе сестра скачала 14 дисков дистрибутива Debian "Sarge" GNU/Linux, то есть: Debian 3.1 r2 i386 Bin-1, Debian 3.1 r2 i386 Bin-2, .. и так далее. Тем, кто собирается ставить Debian на компьютер советую заглянуть сюда и сюда. Вот таким образом, жонглируя дисками, я устанавливал и изучал пакеты. В этом мне помогала графическая утилита Synaptic, основанная на APT. Теперь же я умею пользоваться и уснановкой пакетов .deb через консоль, то есть ~$ dpkg -i $packet.deb или ~$ apt-get install $packet, а также собирать отдельные программы из исходных кодов. Кстати, в Debian "Etch" рекомендуют устанавливать пакеты таким образом: ~$ aptitude install $packet. Предпологается, что aptitude превосходит apt-get и работает с зависимостями пакетов лучше. Конечно, подключив репозитории debian в /apt/sources.list (не забудьте о ~$ aptitude update после правки листа), Вам не придется также жонглировать дисками, все пакеты будут выкачиватся из интернета.

О ресурсах, посвящённом Debian GNU/Linux и его веткам, а так же о других интересных ресурсах об операционной системе Linux, которые могут быть интересны и поклонникам других дистрибутивов можно узнать здесь


В чем истинное различие Windows от Linux? Кроме того, что она свободна, Все необходимое программное обеспечение Linux уже в коробке: gnome-terminal, GnomeBaker(создание образов дисков, прожигание CD/DVD-R/RW), Baobab (анализатор использования дисков), StarDict (переводчик, словарь), Tomboy (липкие записки, виджеты рабочего стола), gedit (текстовый редактор с подсветкой синтаксиса), vi, AbiWord (среди текстовых процессоров предпочитаю именно его тяжелому OOo), Audocious (графический муз. плеер), moc (консольный муз. плеер), Banshee (муз. плеер, чем-то похож на Apple iTunes), Inkscape (векторный иллюстратор), Dia (редактор диаграмм, правда еще слабоват для проприетарного MS Visio), GIMP (мощный редактор изображений, во многом превосходит закрытый Photoshop), F-SPOT (менеджер фотографий), gFTP (клиент доступа ftp, ssh), GAIM (интернет пейджер), Blam (читает RSS ленты), planner (Управление проектами), Emacs (Old School тектовый редактор, к нему написано куча плагинов, которые можно интегрировать с другими приложениями. Автор: Richard Stallman, его знает весь UNIX-way).

Да, целый мир (можете сказать "космос" для отдельных людей, кому как нравится) Linux открывает разработчикам программного обеспечения: GCC, Make, Anjuta, Eclipse, Mono, MonoDevelop, Perl, PHP, Ruby, Nemerle и т.д. Все эти средства доступны бесплатно. Серверные продукты: безусловно лидер - Apache веб-сервер. Основатель Apache Software Foundation и основной разработчик Apache Web Server, а также "an important figure in the open-source software movement" - Brian Behlendorf. Говоря о Linux нельзя не упомянуть об исполнительном директоре Linux International, человеке, который продвигает Linux в массы, Jon "maddog" Hall. Упомянутых выше людей можно лицезреть на фотографиях ниже =) Извиняюсь за качество фото :).

P.S. Гикам посвящается: «Revolution OS» — документальный фильм, рассказывающий об истории GNU, Linux, а также open source и free software движений. В нем представлены интервью со знаменитыми хакерами и предпринимателями, включая Ричарда Столлмэна, Майкла Тименна, Линуса Торвальдса, Ларри Аугустина, Эрика Реймонда, Брюса Перенса, Френка Хакера и Браина Бехлендорфа.

А теперь фото:


va1e & Triklozoid на Interop 2007


va1e & Brian Behlendorf


va1e & Jon "maddog" Hall


РИФ2007: Свободное ПО против Коммерческого (круглый стол),
слева направо: aiz, Павел Житнюк, va1e

05 сентября, 2007

Революционный интерфейс, или Monoполярная сила GTK#

Руководство GTK# для начинающих


"Билл! Революция началась без нас!"
Пол Аллен, Microsoft, Pirates of Silicon Valley

английская версия статьи лежит на mono-project.com (http://www.mono-project.com/GtkSharpBeginnersGuide)
перевод на русский: vig

Оглавление


1. Предисловие
1.1 Что такое GTK#?

2. Установка
2.1 Скачивание/Установка GTK#
2.2 Внутри библиотек GTK#
2.3 GTK# или Glade#

3. Первое GTK# приложение
3.1 Шаг 1. Присядьте удобнее
3.2 Шаг 2. Создание папок и файлов
3.3 Шаг 3. Формирование
3.4 Шаг 4. Добавление графического интерфейса GUI
3.5 Шаг 5. Формирование окна
3.6 Шаг 6. Добавление событий

4. Первое Glade# приложение
4.1 Шаг 1. Что такое Glade#
4.1.1 Что такое файлы glade?
4.1.2 На что похожи файлы .glade?
4.2 Шаг 2. Интеграция Glade файлов с нашей программмой
4.2.1 Как скомпилировать?
4.3 Шаг 3. Как использовать Glade# в моем коде

4.4 Как обращаться к виджетам определенным в gui.glade
4.5 Как добавить событие
4.5.1 Ссылки и другие руководства для изучения


1. Предисловие


Эта статья является руководством для начинающих GTK# программистов. Она поможет тем, кто никогда до этого не программировал графические пользовательские интрфейсы (далее GUI) при помощи GTK#. Программисты ранее знакомые с GTK+ API из опыта написания на других языках (C, C++, Perl, Python) так же найдут этот пассаж полезным, т.к. он объясняет основы процесса создания приложений на C# в среде Mono. Эта статья так же рассказывает об основах использования Glade и libglade как быстрого инструмента создания графического пользовательского интерфейса.


1.1 Что такое GTK#?


Проще говоря, gtk# - это обертка над gtk+, кроссплатформенным GUI фреймворком.

gtk+ - это мультиплатформенный тулкит для создания GUI. Предоставляя полный набор виждетов, gtk+ пригоден в различных проектах: от одноразовых игрушек до набора приложений уровня предприятия.

(from the gtk+ website (http://www.gtk.org/))


Сегодня gtk+ работает с любым X сервером, Direct Framebuffer'ом и производными в Microsoft Windows NT. Библиотека gtk+ известна от Linux, где она является базисом для построения виджетов рабочей среды GNOME. gtk+ включен практически во все дистрибутивы Linux, и стабильно работает под управлением Windows NT. (в 2000 работала нестабильно, если мне память не изменяет)

Портирование gtk+ на Mac OS X запланированно, но необходима заинтересованность других людей. Это зов к участию.

Одно из наиболее распространенных недоумений состоит в том, что GTK# требует Mono для работы. Это неверно. GTK# будет запускаться на любой .NET-совместимой среде. GTK# регулярно тестируется в MS .NET и Mono фреймворках, но также может быть запущена в любой полностью совместной среде. Это означает, что если Вы пишите приложение на GTK# и хотите запустить его в Windows, Вы можете развернуть проект только с GTK# с использованием среды MS, или развернуть его в среде Mono для Windows.

2. Установка



2.1 Скачивание/Установка


Первую вещь, которую необходимо сделать - это скачать GTK# и установить его.

Linux, MacOSX, FreeBSD и другие: Проверьте наличие требуемых пакетов gtk-sharp, mono в вашем дистрибутиве.
aptitude install mono gtk-sharp2

для Debian-based дистрибутивов.
В SuSE Linux выберите нужные пакеты в YaST. Если их нет в дистрибутиве, тогда ищите здесь(http://www.mono-project.com/Downloads) и загружайте. Если на mono-project.com нет пакетов для Вашей платформы, тогда Вам придется скомпилировать из исходников ;)

Windows: программируйте Windows.Forms, не хрен лезть в GTK =) [примечание автора]


2.2 Внутри библиотек GTK#



Компоненты GTK#
GTK# состоит из следующих сборок, каждая соответствует подобной библиотеке:

gtk-sharp (http://www.mono-project.com/monodoc/N:Gtk)
Связи тулкита gtk+ 2.x для создания GUI

glib-sharp (http://www.mono-project.com/monodoc/N:Glib)
Связи тулкита glib 2.x, которые обеспечивают низкоуровневое библиотеки ядра для gtk+ (не-GUI)

pango-sharp (http://www.mono-project.com/monodoc/N:Pango)
Связи Pango, высокоуровневая библиотека компоновки и рендеринга международных текстов

atk-sharp (http://www.mono-project.com/monodoc/N:Atk)
связи к atk фреймворку

gdk-sharp (http://www.mono-project.com/monodoc/N:Gdk)
низкоуровневый инструментарий для "рисования", используемый gtk+

glade-sharp (http://www.mono-project.com/monodoc/N:Glade)
Glade# позволяет Вам загружать интерфейсы Glade в программу. Это наиболее простой путь создания GTK# GUI.

art-sharp (http://www.mono-project.com/monodoc/N:Art)
библиотека для работы с векторной графикой и отрисовки

rsvg-sharp (http://www.mono-project.com/monodoc/N:Rsvg)библиотека отрисовки SVG

gtk-dotnet (http://www.mono-project.com/monodoc/N:Gtk.DotNet)
интеграция пространства имен Gtk# с System.Drawing

gnome-sharp (http://www.mono-project.com/monodoc/N:Gnome)
Связи GNOME

gnomevfs-sharp (http://www.mono-project.com/monodoc/N:GnomeVfs)
связи файлов, их MIME типов, изображений к методу обращения приложений GNOME'а к файловой системе

vte-sharp (http://www.mono-project.com/monodoc/N:Vte)
связи к терминальному эмулятору VTE

gconf-sharp (http://www.mono-project.com/monodoc/N:GConf)
Связи к системе хранения конфигураций в GNOME

gtkhtml-sharp (http://www.mono-project.com/monodoc/T:Gtk.HTML)
Связи к легковесному HTML виджету


Другие компоненты не включены в основной дистрибутив GTK#, но заслуживают упоминания, потому что имеют отношение к GTK#: Gecko#, Gtksourceview#, Gsf#, Guile#, Gst# и dbus#.

2.3 GTK# или Glade#


Когда люди начинают изучение Mono, они могут стоять на перепутье - какую библиотеку использовать: gtk# или glade#. Для этого Вам нужно понять что такое glade# и что такое gtk#. gtk# - это ядро для построения оконных и виджет систем. Glade# наследует GTK#, таким образом является подмножеством GTK# и является совместимой, но glade# автоматически компонует виджеты с сохраняет их как XML файл. XML компоновка GUI может быть сгенерирована при помощи Glade утилиты, студии дизайна WYSIWYG.

Для большинства окон Glade# - лучший выбор. Он экономит время за счет отсутствия необходимости написания программного кода для GUI и делает простым изменение интерфейса в будущем. Но возникает проблема в том, что Вам нужно от интерфейса, Glade# не может выполнять некоторые специфичные вещи (скрывать элементы, динамически загружать новые части, наследовать виджеты). Только опыт может Вам понять, что в конкретном случае лучше использовать.

Для быстрого ознакомления с Glade# Вы возможно захотете взглянуть на этот скринкаст(http://nat.org/demos/gtksharp.html) Ната Фридмана (Nat Friedman)(http://nat.org), в котором он создает простое графическое приложение всего за несколько минут.

3. Первое GTK# приложение



Шаг 1. Присядьте удобнее


Мы должны чувствовать себя комфортно. Откройте Dr. Pepper и включите любимую музыку. Хорошо, теперь мы готовы.

Шаг 2. Создание папок и файлов


Для начала нам нужно создать новую директорию для маленького проекта. (Пользователи Windows: давайте не будем использовать пробелы в названии директории, чтобы избежать в дальнейшем головной боли).

Откройте shell (Если вы в Windows, откройте меню сПуск :) далее Программы -> Mono 1.x.x -> Mono Command Prompt. Она автоматически установит нужные пути к mono библиотекам.) Перейдите в только что созданную директорию. Мы часто будем использовать консоль, поэтому оставьте ее запущенной.

Вернемся к делу. Откройте свой любимый редактор (MonoDevelop, vi, emacs, notepad и т.д.) и создайте новый пустой проект (если это возможно) или создайте новый пустой файл. Сохраните файл под именем "helloworld.cs".

Шаг 3. Формирование кода


Я надеюсь, что Вы уже знакомы с C#, и код написанный ниже не вызовет никаких проблем в понимании. Мы должны создать новый класс, использовать Gtk# и указать точку входа в нашу программу. Это будет выглядеть так:
using System;
using Gtk;

public class GtkHelloWorld {
public static void Main() {
Console.WriteLine("HelloWorld");
}
}


Это должно выглядеть весьма знакомо для Вас. Только теперь мы можем воспользоваться компилятором. Сохраним исходный код, перейдем в консоль и построим проект:

mcs -pkg:gtk-sharp-2.0 helloword.cs


Для тех кто пользовался csc компилятором в Windows параметр "-pkg:" может показаться незнакомым. Этого параметра не было в csc, потому что Mono пришел из мира Linux. Этот параметр позволяет указать на необходимость подключения пакета gtk-sharp-2.0. Т.е. система ищет файл "gtk-sharp-2.0.pc", который содержит данные о местоположении библиотеки для этого пакета (среди другой информации). Т.е. мы не должны вводить "-r:gtk-sharp-2.0.dll -r:atk-sharp-2.0.dll -r:pango-sharp-2.0.dll ...." руками.

Шаг 4. Добавление графического интерфейса GUI


Теперь давайте вернемся обратно к нашему коду. Уберем оператор "Console.WriteLine". Первое, что мы сделаем - создадим новое окно. Проделаем это добавлением нового оператора new Window и блока приложения (для начала нити цикла main). Вот так:
using System;
using Gtk;

public class GtkHelloWorld {
public static void Main() {
Application.Init();

//Create the Window

Window myWin = new Window("My first GTK# Application! ");
myWin.Resize(200,200);

//Create a label and put some text in it.

Label myLabel = new Label();
myLabel.Text = "Hello World!!!!";

//Add the label to the form
myWin.Add(myLabel);

//Show Everything

myWin.ShowAll();

Application.Run();
}
}


Теперь скомпилируем исходный код так же как мы делали это раньше, и запустим программу

mono HelloWorld.exe


В итоге вы получите что-то вроде этого:

Не так уж и сложно, да?

Первая вещь, которую Вы могли заметить, это то, что в отличии от использования System.Windows.Forms мы не писали код для точной компоновки текста в окне. Например, мы не писали 'myLabel.Left = 100' или 'myLabel.Width = 200' или что-то подобное для размещения текстовой метки на форме, мы просто пишем 'myWin.Add(...)'. И все это потому, что 'Gtk.Window' - это виджет, который наследуется от Bin, или одиночного виджета который размещен в контейнере Container.

Другая часть кода, которая могла Вас заинтересовать, это использование выражений "Application.Init()" и "Application.Run()". Если вы когда-либо ранее использовали System.Windows.Forms это аналогично использованию "Application.Run()" во многих случаях. Обычно, когда приложения заканчивает обработку любого кода в основном потоке, приложение останавливается. Команда "ShowAll()" не блокирует код и продолжает дальнейшее выполнение кода (вплоть до остановки). Команда "Application.Init()" говорит оболочке выполнения "слушать" сигналы поступающие от Gtk.Windows и в момент когда выполняется "Application.Run()" выполнение кода передается основному циклу сообщений. Это позволяет оставаться приложению запущенным до тех пор пока не будут закрыты все окна. Для большей информации смотрите информацию об объекте Application.

Шаг 5. Формирование окна


Возможно Вы захотите спросить себя "Как я смогу добавить новый виджет на окно, если оно может содержать только один виджет?" До этого мы говорили, что Window действительно может содержать в себе только один виджет, но виджет сам по себе может содержать в себе множество других виджетов. Некоторые из этих виджетов наследуются от контейнера Gtk.Box, а в некоторых случаях напрямую от контейнера. Контейнерный виджет Bin наследуется напрямую от виждета-контейнера, как и многие другие виджеты, но Bin может содержать в себе только один элемент управления.

Для того чтобы размещать большое количество виджетов в нашем окне, мы должны добавить на окно один из виджетов, который может содержать в себе другие виджеты. Существует множество виджетов, которые могут делать это, но мы затронем только некоторые простые: HBox(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.HBox), VBox(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.VBox) и возможно Table(http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.Table).

Шаг 6. Добавление событий


Все классы производные от 'Widget (http://www.go-mono.com/docs/index.aspx?link=T%3aGtk.Box)' предоставляют следующие события:
  • ButtonPressEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ButtonPressEvent)
  • ButtonReleaseEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ButtonReleaseEvent)
  • ScrollEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ScrollEvent)
  • MotionNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.MotionNotifyEvent)
  • DeleteEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.DeleteEvent)
  • DestroyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.DestroyEvent)
  • ExposeEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ExposeEvent)
  • KeyPressEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.KeyPressEvent)
  • KeyReleaseEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.KeyReleaseEvent)
  • EnterNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.EnterNotifyEvent)
  • LeaveNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.LeaveNotifyEvent)
  • ConfigureEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ConfigureEvent)
  • FocusInEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.FocusInEvent)
  • FocusOutEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.FocusOutEvent)
  • MapEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.MapEvent)
  • UnmapEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.UnmapEvent)
  • PropertyNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.PropertyNotifyEvent)
  • SelectionClearEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionClearEvent)
  • SelectionRequestEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionRequestEvent)
  • SelectionNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.SelectionNotifyEvent)
  • ProximityInEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ProximityInEvent)
  • ProximityOutEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ProximityOutEvent)
  • VisibilityNotifyEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.VisibilityNotifyEvent)
  • ClientEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.ClientEvent)
  • NoExposeEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.NoExposeEvent)
  • WindowStateEvent (http://www.go-mono.com/docs/monodoc.ashx?link=F%3aGtk.Widget.WindowStateEvent)


Многие их этих событий могут быть обработаны стандартным обработчиком событий. Например:

public static void HandlerMethod(object obj, EventArgs args)


Пример обработки событий нажатия на кнопку:

public static void ButtonPressHandler(object obj, ButtonPressEventArgs args)


ButtonPressEventArgs - это класс производный от EventArgs. Класс ButtonPressEventArgs, как и многие другие в gtk#, добавляет свойство Gtk.Event (или другое от Gtk.Event) к EventArgs.

Типы Gdk.Event:

  • EventType.Nothing
  • EventType.Delete
  • EventType.Destroy
  • EventType.Expose
  • EventType.MotionNotify
  • EventType.ButtonPress
  • EventType.TwoButtonPress
  • EventType.ThreeButtonPress
  • EventType.ButtonRelease
  • EventType.KeyPress
  • EventType.KeyRelease
  • EventType.EnterNotify
  • EventType.LeaveNotify
  • EventType.FocusChange
  • EventType.Configure
  • EventType.Map
  • EventType.Unmap
  • EventType.PropertyNotify
  • EventType.SelectionClear
  • EventType.SelectionRequest
  • EventType.SelectionNotify
  • EventType.ProximityIn
  • EventType.ProximityOut
  • EventType.DragEnter
  • EventType.DragLeave
  • EventType.DragMotion
  • EventType.DragStatus
  • EventType.DropStart
  • EventType.DropFinished
  • EventType.ClientEvent
  • EventType.VisibilityNotify
  • EventType.NoExpose
  • EventType.Scroll
  • EventType.WindowState
  • EventType.Setting


Например, для использования события Gdk.Event мы можем использовать такой код:

using Gdk;
...
widget.ButtonPressEvent += new ButtonPressEventHandler(ButtonPressHandler);
...
private void ButtonPressHandler(object obj, ButtonPressEventArgs args) {

// single click
if (args.Event.Type == EventType.ButtonPress) {

...
}
// double click
if (args.Event.Type == EventType.TwoButtonPress) {

...
}

// the left button was used
if (args.Event.Button == 1) {

...
}
}


В примере выше вы можете увидеть как обнаружить было ли одиночное нажатие мышкой или это был двойной клик.

4. Первое Glade# приложение



Шаг 1. Что такое Glade#


Glade# - это набор связей с libglade на языке C#. Позволяет легко создавать GUI приложения используя визуальные средства и сохранять их в формате, который приложение сможет использовать во время выполнения, чтобы создать интерфейс. На данный момент существует две среды для генерирования glade файлов: Glade(http://glade.gnome.org/) и конечно Stetic(http://mysterion.org/~danw/blog/2005/03/stetic).


4.1.1 Что такое glade файлы?


Файлы, записанные в XML формате, которые представляют собой GUI в GTK+, сохраняя сюда все аттрибуты и свойства.

4.1.2 На что похожи файлы .glade?


файл: gui.glade

<!--*- mode: xml -*-->

<glade-interface>

<widget class="GtkWindow" id="window1">

<property name="visible">True</property>
<property name="title" translatable="yes">Glade Window</property>

<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER</property>

<property name="modal">False</property>
<property name="default_width">256</property>

<property name="default_height">256</property>
<property name="resizable">True</property>

<property name="destroy_with_parent">False</property>
<property name="decorated">True</property>

<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>

<property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>

<property name="focus_on_map">True</property>

<child>
<widget class="GtkScrolledWindow" id="scrolledwindow1">

<property name="visible">True</property>
<property name="can_focus">True</property>

<property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
<property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>

<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>


<child>
<widget class="GtkLayout" id="layout1">
<property name="visible">True</property>

<property name="width">400</property>
<property name="height">400</property>

<property name="hadjustment">0 0 400 10 212.4 236</property>
<property name="vadjustment">0 0 400 10 212.4 236</property>


<child>
<widget class="GtkLabel" id="label1">
<property name="width_request">38</property>

<property name="height_request">17</property>
<property name="visible">True</property>

<property name="label" translatable="yes">label1</property>
<property name="use_underline">False</property>

<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>

<property name="wrap">False</property>
<property name="selectable">False</property>

<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>

<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>

<property name="single_line_mode">False</property>
<property name="angle">0</property>

</widget>
<packing>
<property name="x">96</property>
<property name="y">88</property>

</packing>
</child>

<child>
<widget class="GtkButton" id="button1">

<property name="width_request">60</property>
<property name="height_request">27</property>

<property name="visible">True</property>
<property name="can_focus">True</property>

<property name="label" translatable="yes">button1</property>
<property name="use_underline">True</property>

<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>

</widget>
<packing>
<property name="x">88</property>
<property name="y">168</property>

</packing>
</child>
</widget>
</child>
</widget>
</child>

</widget>

</glade-interface>


Файл .glade содержит в себе всю необходимую информацию для того, чтобы библиотека libglade могла воссоздать GUI.

Шаг 2. Интеграция glade файлов с нашей программой


Подразумевается что .glade файл уже создан, или при помощи Glade, или при помощи Stetic. Видео о Stetic можно посмотреть здесь (http://mysterion.org/~danw/blog/2005/03/steticzilla.html).

В намерениях нашего примера мы предпологаем, что GUI был сохранен в файл gui.glade, который содержит описание окна window1, кнопки button1 и метки label1.

Нам нужно будет создать новый указатель на Gtk# и Glade#, а затем создать новый класс и точку входа, с которой начинается наша программа.
// file: glade.cs
using System;
using Gtk;
using Glade;
public class GladeApp

{
public static void Main (string[] args)

{
new GladeApp (args);
}

public GladeApp (string[] args)
{

Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);
Application.Run();
}

}


4.2.1 Как скомпилировать?


Теперь мы должны скомпилировать исходный файл glade.cs указывая пространство имен для glade, которое находится в библиотеке glade-sharp. Команда компиляции следующая:

$ mcs -pkg:glade-sharp -resource:gui.glade glade.cs


Коммандой mcs -pkg:glade-sharp мы создаем программу glade.exe, а опция -resource внедряет файл gui.glade в исполняемую программу.

Передавая null как первый параметр в конструктор Glade.XML, мы сообщаем библиотеке libglade загружать glade файл из ресурсов, как вариант использования конструктора, файл может быть загружен из файловой системы, что особенно полезно тогда, когда Вы не хотите перекомпилировать GUI приложение после каждого изменения .glade файла.

Если мы запускаем программу наш GUI может открыться, однако, нажимая на кнопки Вы не добьетесь эффекта, потому как мы не назначали событий виджету, определенному в gui.glade файле. Изучив следующую секцию Вы научитесь это делать.


Шаг 3. Как использовать Glade# в моем коде


4.4 Как обращаться к виджетам определенным в gui.glade


Для доступа к объектам, определенным в gui.glade файле, Вы должны знать имя объекта и его тип, и только тогда добавлять его в C# код. Делается это следующим образом (обратите внимание на оттрибут [Widget]):

[Widget]
Тип имя;


Применяем это определение к нашему примеру как следует ниже в коде:

using System;

using Gtk;
using Glade;
public class GladeApp
{
public static void Main (string[] args)

{
new GladeApp (args);
}

public GladeApp (string[] args)
{

Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);
Application.Run();
}


[Widget]
Button button1;

[Widget]
Label label1;
}



4.5 Как добавить событие


Для добавления событий Вам необходимо следовать примеру кода ниже. Вы также можете добавлять события из Glade.


using System;
using Gtk;
using Glade;
public class GladeApp

{
public static void Main (string[] args)

{
new GladeApp (args);
}

public GladeApp (string[] args)
{

Application.Init();

Glade.XML gxml = new Glade.XML (null, "gui.glade", "window1", null);
gxml.Autoconnect (this);

button1.Clicked += OnPressButtonEvent;

Application.Run();
}


[Glade.Widget]
Button button1;

[Glade.Widget]
Label label1;

public void OnPressButtonEvent( object o, EventArgs e)

{
Console.WriteLine("Button press");
label1.Text = "Mono";
}

}


Впоследствии мы увидим готовый код использования событий для объектов, указанных в gui.glade файле.

4.5.1 Ссылки и другие руководства для изучения


  • Gtk# Screencast (http://nat.org/demos/gtksharp.html) - Скринкаст Ната Фридмана, который ясно демонстрирует использование Glade с C#/Mono

  • Gtk# website (http://gtk-sharp.sourceforge.net/) - Оффициальный вебсайт Gtk#

  • Glade website (http://glade.gnome.org/) - Оффициальный вебсайт Glade

  • Glade# and Gecko# (http://developer.novell.com/wiki/index.php/Glade-Sharp_and_Gecko-Sharp) - Простое приложение, показывающее как сделать простой веб-браузер используя Gtk#, Glade# и Gecko#

  • Steticzilla (http://mysterion.org/~danw/blog/2005/03/steticzilla.html) - Скринкаст danw (http://mysterion.org/~danw/blog/) показывающий простую конструкцию Mozilla-основанного браузера используя Stetic

  • Glade - быстрая разработка приложений с Gnome2 (http://www.gotmono.com/docs/gnome/bindings/glade/glade.html) - Другое руководство по Glade#, включает детали как внедрять .glade файлы в .exe


P.S. Мигель де Иказа рассказывает о Mono: стеке, доступных языках - эффективности IronPython, Moma - Mono Migration Analysis Tool, Games, Second Life
TurboCharging Linux with Mono

01 сентября, 2007

Учитесь плавать, или На острове Mono

Небольшой экскурс для начинающих разработчиков. Из чего же состоит Mono? Давайте посмотрим, что в коробке.
Вы дожны знать как использовать программы коммандной строки для Mono программирования, в частности msc (Mono C# компилятор) и mono (виртуальная машина Mono, или интерпретатор байткода)

mcs

mcs это СиШарп'овский Mono компилятор. mcs может не только компилировать, но и внедрять ресурсы, а также связывать отдельные файлы проекта.

Для практического примера скомпилируйте следующий исходный код:

public class HelloWorld {
public static void Main (string [] args) {
System.Console.WriteLine ("Hello, Tuxedo Live");
}
}


Делается это просто:

~$ mcs Hello.cs

В итоге получиться байткод файл Hello.exe. Да, как уже говорилось раньше, программы компилятся не в конечный исполняемый файл, а именно в промежуточный байткод Common Intermediate Language (CIL).

mono

Комманда mono исполняет скомпиленую программу виртуальной машиной. mono использует JIT компилятор для перевода CIL байткода в машинный язык перед его исполнением.
Hello.exe может быть исполнен так:
~$ mono Hello.exe

monop

Эта команда очень полезна, если Вам необходимо быстро проверить какой вид имеют классы и методы
Можно сделать это так:
~$ monop System.Byte

monodoc

Как можно было уже догадаться, это документация по всем программным интерфейсам (API) Mono.

gacutil

Для установки библиотек в Linux мы используем место /usr/lib, в виндозе - C:\Windows.
gacutil призвана управлять содержимым GAC (Global Assembly Cache). Системные сборки сохраняются именно в глобальный кэш.
Листинг всех сборок можно получить коммандой
~$ gacutil -l

P.S. Для тех, кто переходит с Java на C# рекомендую заглянуть сюда:
Сравнение C Sharp и Java - Википедия

P.S.S. Интересно как будут складываться дела Sun Microsystems после открытия исходного кода jvm. Опять же holy wars: .NET vs Java. Вопрос времени или силы хватки монстров IT?

30 августа, 2007

Откуда вылупился мой пингвин, или Linux Timeline

Кто же такие пингвины?

Пингвины (Sphenisciformes), отряд птиц.
Рост: от 40 см до 120 см, вес: от 3 до 42 кг. Оперение короткое, плотное, покрывает тело равномерно, на спине тёмное (от чёрного до сине-чёрного), низ тела белый; у некоторых видов на голове жёлтые пятна или хохол. Грудная мускулатура и грудина хорошо развиты. Крылья превращены в покрытые чешуевидными перьями ласты, которыми П. гребут при плавании и нырянии; перепончатые лапы и короткий хвост служат рулём. Иногда П. плывут, выпрыгивая из воды, как дельфины. На берег или лёд выходят из воды прыжком. На суше передвигаются шагом, реже бегают, по снегу скользят на брюхе, отталкиваясь лапами и ластами. Питаются рыбой, головоногими моллюсками, ракообразными. Гнездятся на побережьях колониями (до миллиона особей); некоторые виды селятся небольшими группами или поодиночке. Гнёзда - на камнях или гальке, у некоторых - под корнями деревьев и в пещерах. Птенцы вылупляются зрячими, покрытыми густым пухом. Подросшие птенцы некоторых видов сбиваются в плотные группы ("ясли") для защиты от опасностей, когда родители уходят за кормом.


Как Вы знаете пингвин (Tux) является символом операционной системы Linux. Ниже на рисунке приведено дерево развития дистрибутивов Linux, произошедших от 3х самых великих: Debian, Slackware и Red Hat.
Откуда вылупился Ваш пингвин?

P.S. Если Вы еще не выбрали Linux своей мечты жмем сюда.

26 августа, 2007

Linux-приложения, которые написаны с ипользованием Mono

  • Banshee
  • Beagle
  • TomBoy
  • F-Spot
  • Blam
  • iFolder
  • FUSE


Banshee

На мой взгляд лучший медиа-плеер на сегодня.
Среди "бенефитс" можно выделить то, что плеер умеет прожигать аудио-диски, импортировать с них композиции, скачивать из интернет базы обложки альбомов, выводить релевантные списки исполнителей. И всё это в одной песочнице.
А для тех, кто хочет получать отчеты о воспроизводимых трэках и быть в курсе концертов любимых исполнителей, то добро пожаловать в the Social Music Revolution.
Повезло также и обладателям mp3 аудио-плееров: в Banshee есть поддержка iPod, а также подобных им аппаратов.
Требует библиотеки: D-Bus, HAL, TagLib#, Boo, Mono.Zeroconf

Beagle
Настольная поисковая система по содержанию документов, истории чатов, почтовых сообщений, RSS фидов, MP3 ID3-Tag'ов.
В скором будущем разработчики Beagle (Joe Shaw и др.) обещают поиск в документах по тарболам и другим архивам.


TomBoy
Приложение, которое поможет Вам создать виджеты-заметки на рабочем столе. TomBoy подзволяет рационально организовывать записки, позволяя легко перемещаться по ссылкам между ними.


F-Spot
Удобная программа для управления фотографиями, очень эффективно сортирует снимки по дате, позволяя перемещаться скролом во времени.
Возможно добавление меток для лучшей индексации и поиска фотографий.
Можно прожечь архив фотографий на СД или выложить их в интернет двумя щелчками мыши.

Blam
RSS аггрегатор для среды GNOME.
Написан на языке C#, использует Mono, GTK#,
Atom.NET и RSS.NET.
оффсайт



iFolder
Умеет синхронизировать файлы между n машинами. Работает на основе протокола обнаружения сервисов Bonjour от Apple :lol:
Планируется поддержка шифрования файлов на лету.



FUSE - песочница для непривелигированных пользователей

Занавес, смотрим видео как на Nokia 770 запустили GTK# здесь
P.S. Могу с уверенностью сказать, что сегодня началась осень, на дачном газоне уже желтеют листья, упавшие с деревьев.

сейчас играет: Alchemist - Evolution 1 (The Bio Approach)