вівторок, 3 лютого 2009 р.

Робота в Adobe AIR з іконкою в треї

Вивчаючи AIR від Adobe вирішив написати невеличку програмку для своїх потреб. Мені необхідно було зробити так, щоб вона могла ховатися в трей при закритті головного вікна, або його мінімізації. Виявилось що в AIR це досить не тривіальна задача. Далі невеличкий приклад моєї реалізації роботи з треєм.
Створюємо змінну для роботи з системним треєм:
private var sysTrayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
Далі необхідно створити змінні самого меню і завантажувача малюнка:
private var trayIconMenu:NativeMenu = new NativeMenu();
private var trayIconMenuShow:NativeMenuItem = trayIconMenu.addItem(new NativeMenuItem("Show"));
private var trayIconMenuExit:NativeMenuItem = trayIconMenu.addItem(new NativeMenuItem("Exit"));
private var iconLoader:Loader = new Loader();
У функції яка викликається відразу після того, як створилося вікно (реакція на подію windowComplete) реалізуються механізми взаємодії з системним треєм:
public function Init():void {
// Перевіряємо чи підтримується робота з системним треєм
if (NativeApplication.supportsSystemTrayIcon)
{
// Налаштовуємо реакцію на шиглик по іконці в треї: виклик clickTrayIconHandler()
NativeApplication.nativeApplication.icon.addEventListener(MouseEvent.CLICK, clickTrayIconHandler);

// Налаштовуємо реакцію на завершення завантаження малюнку
iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function (event:Event):void {
// Встановлюємо завантажений малюнок у трей
NativeApplication.nativeApplication.icon.bitmaps = new Array(event.target.content.bitmapData);
});

// Підказка, що відображається при наведенні миші на іконку в треї
sysTrayIcon.tooltip = "Systrayicon example";

// Налаштовуємо реакцію на вибір пункту меню Exit у меню
trayIconMenuExit.addEventListener(Event.SELECT, function (event:Event):void {
NativeApplication.nativeApplication.icon.bitmaps = [];
NativeApplication.nativeApplication.exit();
});

// Налаштовуємо реакцію на мінімізацію вікна: виклик minimizeHandler()
stage.nativeWindow.addEventListener(NativeWindowDisplayStateEvent.DISPLAY_STATE_CHANGING, minimizeHandler);

// Налаштовуємо реакцію на вибір пункту меню Show у меню
trayIconMenuShow.addEventListener(Event.SELECT, clickTrayIconHandler);

// Встановлюємо меню
sysTrayIcon.menu = trayIconMenu;
}
}
Функція-реакція на закриття вікна:
// Реакція на закриття вікна        
protected function closingHandler(event:Event):void
{
// Забороняємо стандартну реакцію
event.preventDefault();

// Ховаємо вікно
this.visible = false;

// Завантажуємо і відображаємо іконку в треї
iconLoader.load(new URLRequest("images/systrayicon.png"));
}
Функція-реакція на щиглик по іконці в треї:
// Реакція на щиглик по іконці в треї, або вибір пункту меню Show
protected function clickTrayIconHandler(event:Event):void
{
// Прибираємо іконку з трею
NativeApplication.nativeApplication.icon.bitmaps = [];

// Відображаємо вікно
this.visible = true;

// Переводимо фокус на вікно
this.activate();
}
Функція-реакція на мінімізацію вікна:
// Реакція на мінімізацію вікна
protected function minimizeHandler(event:Event):void
{
// Перевіряємо, чи дійсно ми мінімізуємо вікно
if ((event as NativeWindowDisplayStateEvent).afterDisplayState == NativeWindowDisplayState.MINIMIZED)
{
// Забороняємо стандартну реакцію
(event as NativeWindowDisplayStateEvent).preventDefault();

// Ховаємо вікно
this.visible = false;

// Завантажуємо і відображаємо іконку в треї
iconLoader.load(new URLRequest("images/systrayicon.png"));
}
}
Завантажити вихідні коди проекту.

неділя, 1 лютого 2009 р.

Встановлення і налаштування Subversion

Для власних проектів виникла необхідність використовувати систему контролю версій.Но роботі довго і успішно використовується CVS. Вирішив не встановлювати всілякі екзотичні системи і зупинив свій вибір на Subversion, як логічного продовження CVS. Проаналізувавши різноманітні інструкції про встановлення і налаштування Subversion, побачив що у всіх якийсь нездоровий інтерес до встановлення системи зверху на Apache (припускаю що це може бути зручно для різноманітних web-проектів). Я вирішив встановити Subversion у вигляді окремого демону. Інформацію брав з відкритої книги Version control with Subversion.
Встановлюємо безпосередньо Subversion:
apt-get install subversion
Створюємо теку для сховища (далі всі налаштування ведуться з препущенням що сховище знаходиться в /home/sasha/Develop/repos):
mkdir /home/sasha/Develop/repos
Створюємо сховище:
svnadmin create /home/sasha/Develop/repos
Відредагуємо деякі файли налаштувань нашого сховища.
Файл /home/sasha/Develop/repos/conf/passwd
[users]
sasha = password
Файл /home/sasha/Develop/repos/conf/svnserve.conf
[general]
anon-access = none
auth-access = write
password-db = passwd
# authz-db = authz
realm = My Repository

[sasl]
# use-sasl = true
# min-encryption = 0
# max-encryption = 256
Налаштування сховища завершене. Subversion будемо запускати через inetd. Для цього до файлу /etc/inetd.conf додамо наступний запис:
svn     stream  tcp     nowait root     /usr/bin/svnserve svnserve -i -r /home/sasha/Develop/repos

Демон inetd тепер потрібно перезапустити:
/etc/init.d/openbsd-inetd restart
Тепер підключаємося до серверу зручним клієнтом за адресою svn://адреса_серверу.

четвер, 25 грудня 2008 р.

Подарунки від Wuala на Різдво

Хоч ми і не всі католики, але отримати подарунок на католицьке Різдво можна всім користувачам чудового сервісу Wuala незалежно від їх віросповідання. Достатньо зайти під своїм акаунтом 25-26 грудня і в подарунок отримаєте 1 Гб додаткового простору. Поспішість і гарних свят!

пʼятниця, 17 жовтня 2008 р.

GTK стиль Qt програм

Розробники Qt пішли на зустріч користувачам Gnome і створили їх QGtkStyle. Тепер Qt програми не будуть виглядати такими нерідними в Gnome середовищі. Для встановлення робимо наступне:

sudo apt-get install build-essential libqt4-dev libgtk2.0-dev subversion qt4-qtconfig
svn co svn://labs.trolltech.com/svn/styles/gtkstyle
cd gtkstyle/
qmake-qt4
sudo make install

Тема зібралась і встановилась. Заходимо в System-> Preferences-> Qt 4 Settings і зі списку вибираємо тему GTK.
Тепер всі Qt програми виглядають рідними в Gnome (всі Qt4 програми). Насолоджуємося ними і не згадуємо про існування KDE.

вівторок, 14 жовтня 2008 р.

Оновлення Ubuntu 8.04 до Ubuntu 8.10

Набридло чекати офіційного виходу релізу, тому вирішив оновитися і спробувати власноруч що нового в Ubuntu Intrepid (8.10).
У встановленій Ubuntu 8.04 натискаємо комбінацію клавіш Alt+F2 і у вікні запуску набираємо update-manager -d.
Далі нічого особливого. Update Manager повідомляє що є новий реліз. Тиснемо кнопку Upgrade.
Читаємо Release Notes:
Після того як ми знову натиснемо Upgrade нарешті починається встановлення:

Погоджуємося з тим що підтримка деяких пакетів закінчена:
І погоджуємся з тим що ми всетаки готові почати оновлення:
Далі потрібно набратися терпіння і зайнятися чимось корисним (я наприклад ліг спати), час від часу поглядаючи на монітор чи не повинні ми ще з чимось погодитись.

Після довгого встановлення і перезавантаження маємо нову Ubuntu.
Далі мова піде про те що хорошого, поганого і просто нового було мною помічено.

Хорошого:
1. Звичайно порадувало те, що тепер за умовчанням використовується Flash 10.
2. Сам інтерфейс став набагато краще виглядати, плюс нова темна тема просто чудова :).
3. Нові версії программ - в Compiz з’явилось декілька нових ефектів.
4. Таби в Nautilus звичайно зручна штука, яку давно потрібно було реалізувати, але я віддаю перевагу 2-х панельним файловим менеджерам.
5. Network Manager помітно підріс, але змінити налаштування за допомогою нього мені не вдалося - не знайшов як отримати права root.
Поганого:
1. Після оновлення мій ноут перестав вимикати живлення при вимкненні системи (жорсткі диски зупиняються але монітор не вимикається, доводиться вимикати руцями). Подібні помилки дратують мене найбільше, при тому що в 8.04 було все нормально.
2. Постійні креши різноманітних программ. Хоча це ж бета - є надія що виправлять.

пʼятниця, 3 жовтня 2008 р.

Робота з Android SDK в Ubuntu 8.04 x64

Не зрозуміло чому компанії-гіганти приділяють таку малу увагу x64 платформі. Цього разу Google теж забув про користувачів x64 систем. Я довго намагався встановити ADT для Eclipse 64bit, але нічого не вийшло і я вирішив піти іншим шляхом.
1. Для початку завантажуємо Eclipse IDE for Java EE Developers під Linux 32bit (на час написання на сайті була доступна версія 3.4.1 Ganymede). Розпаковуємо завантажений архів наприклад в /opt/eclipse32/.
2. Встановлюємо 32-бітну збірку Java командою sudo apt-get install ia32-sun-java6-bin.
3. Створюємо файл /opt/eclipse32/eclipse.sh з наступним вмістом:

#!/bin/bash
PATH=/usr/lib/jvm/ia32-java-6-sun/bin:$PATH
/opt/eclipse32/eclipse

Тепер все готове для запуску Eclipse. Для зручності можна додати запуск файлу eclipse.sh до меню.
4. Завантажуємо Android SDK для Linux (i386) з офіційного сайту. Розпаковуємо архів наприклад в теку користувача /home/user_name/android-sdk-linux_x86-1.0_r1.
5. Запускаємо Eclipse. Заходимо в Help -> Software Updates.... У діалоговому вікні переходимо на закладку Available Software. Натискаємо на кнопку Add Site... і додаємо адресу https://dl-ssl.google.com/android/eclipse/. Ставимо на ній галочку і тиснемо кнопку Install,чекаємо доки встановлення закінчиться і перезавантажуємо Eclipse.
Заходимо в Window -> Preferences. Переходимо до налаштувань Android і в полі SDK Location пишемо шлях до SDK і тиснемо OK.
Тепер все готове для роботи :)
6. Вибираємо File -> New -> Project... і сворюємо новий проект:
7. У новоствореному файлі TestAndroid.java напишемл щось осмислене:

package com.android.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class TestAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Тест пройшов успішно!!!");
setContentView(tv);
}
}

8. Тепер вибираємо Run -> Run, трішки чекаємо (як на мене досить довго) і милуємося мегапрогою:
Тепер маємо всі інструменті для створення програм під Android. Надіюсь залізо на його основі матиме популярність :)

вівторок, 9 вересня 2008 р.

Мій власний AutoMotoTrade.com.ua

Після довгої (часткової) розробки нарешті був запущений мій власний стартап AutoMotoTrade.
Ще один сайт по покупці і продажу автомобілів. Буду вдячний всім за коментарі і пропозицій щодо розвитку сайту.
Ось його мордочка створена за допомогою милого сервісу WebMorda: