пʼятниця, 15 липня 2011 р.
пʼятниця, 8 жовтня 2010 р.
BeHealthy 0.1.6 build 13 beta for Mac OS
BeHealthy Release Notes
0.1.6b13 Change Log:
- [FEATURE] Added sending anonymous system profile option.
- [FIX] "Give me X min" buttons work correctly for short break.
- [FEATURE] Changed update server.
Мітки:
Мої проекти,
BeHealthy,
Mac OS,
My projects
четвер, 30 вересня 2010 р.
BeHealthy 0.1.5 build 12 beta for Mac OS
BeHealthy 0.1.5b12 Release Notes
Change Log:
- [FEATURE] Added short breaks.
- [FEATURE] Added enable/disable notification sounds option.
- [FEATURE] Remastered Preferences dialog.
- [FEATURE] Added status menu icons.
- [FEATURE] Added logging support.
- [FIX] Fixed bug with user settings.
Мітки:
Мої проекти,
BeHealthy,
Mac OS,
My projects
понеділок, 6 вересня 2010 р.
BeHealthy 0.0.4 build 11 beta for Mac OS
BeHealthy 0.0.4b11 released.
Features:
Мітки:
Мої проекти,
BeHealthy,
Mac OS,
My projects
неділя, 22 серпня 2010 р.
середа, 14 липня 2010 р.
IP адреса без використання DNS
Раніше для того щоб отримати IP адресу я використовував gethostbyname, хоч і рекомендують її замінювати іншими. Проблеми з’являються, якщо у користувача якісь проблеми з мережою - програма просто застигає і чекає доки функція не віддасть керування (зменшити час очікування не вдається). Тому тепер я беру IP адресу з мережевого інтерфейсу (потрібно підключити ifaddrs.h):
Протестовано на MacOS Snow Leopard і Tiger.
ifaddrs *myaddrs, *ifa;
sockaddr_in *s4;
int status;
char ip[64];
status = getifaddrs(&myaddrs);
if (status != 0)
PrintLog("getifaddrs failed");
for (ifa = myaddrs; ifa != NULL; ifa = ifa->ifa_next)
{
if (ifa->ifa_addr == NULL)
continue;
if ((ifa->ifa_flags & IFF_UP) == 0)
continue;
if (ifa->ifa_addr->sa_family == AF_INET)
{
s4 = (struct sockaddr_in *)(ifa->ifa_addr);
if (inet_ntop(ifa->ifa_addr->sa_family, (void *)&(s4->sin_addr), ip, sizeof(ip)) == NULL)
PrintLog("%s: inet_ntop failed", ifa->ifa_name);
}
}
freeifaddrs(myaddrs);
Протестовано на MacOS Snow Leopard і Tiger.
пʼятниця, 9 липня 2010 р.
BeHealthy 0.0.2 build 9 beta for Mac OS
BeHealthy 0.0.2b9 released.
Features:
Мітки:
Мої проекти,
BeHealthy,
Mac OS,
My projects
середа, 7 липня 2010 р.
BeHealthy now available in Bodega Mac apps store
Good news! Today BeHealthy was approved to great Mac application store Bodega. New updates of application will be soon - I'm working on it.
Мітки:
Мої проекти,
BeHealthy,
My projects
четвер, 1 липня 2010 р.
BeHealthy 0.0.1 build 1 beta for Mac OS
I've just released ver. 0.0.1 b1 of BeHealthy - utility to control your work time. I made it for my own, so feel free using it and be healthy.
BeHealthy is currently in beta stage and therefore some functions might not work as you like. Please don’t get angry and have patience!
Mac OS 10.6 required
Download
BeHealthy is currently in beta stage and therefore some functions might not work as you like. Please don’t get angry and have patience!
Mac OS 10.6 required
Download
Мітки:
Мої проекти,
BeHealthy,
Mac OS,
My projects,
Utilites
четвер, 27 травня 2010 р.
Android sqllite БД на SD карті
Виникла потреба розміщувати базу даних на SD карті мого HTC Hero. Вирішення знайшлося майже відразу (я ж новенький в розробці для Android):
try
{
File dbPath = new File(Environment.getExternalStorageDirectory(), "myappname");
if (!dbPath.exists()) {
dbPath.mkdirs();
}
File dbFile = new File(dbPath, "mydb.db");
SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
db.setVersion(1);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
db.execSQL(CREATE_MYTABLENAME);
}
catch (SQLException ex)
{
System.out.print(ex.getMessage());
}
Тепер є можливість редагувати файл бази даних сторонніми засобами.
четвер, 24 грудня 2009 р.
вівторок, 2 червня 2009 р.
C++0x: static_assert
Поцяцькався з новою VS2010 beta і вирішив слідкувати за новим стандартом, до якого надіюсь залишилось не так довго.
Найперша і найдоступніша фіча, застосування якій можна знайти відразу - це static_assert. Призначення її очевидне - перевірка виразів на етапі компіляції. Раніше для цих цілей я використовував Boost.StaticAssert (і зараз використовую, бо переводити комерційні проекти на VS2010 ще рано, та і про кросплатформеність поки ще рано мріяти). Але на відміну від boost версії тут є можливість вказувати текст помилки.
При компіляції коду де присутня стрічка
Чекаємо з нетерпінням стандарту, а поки використовуємо boost реалізацію.
Найперша і найдоступніша фіча, застосування якій можна знайти відразу - це static_assert. Призначення її очевидне - перевірка виразів на етапі компіляції. Раніше для цих цілей я використовував Boost.StaticAssert (і зараз використовую, бо переводити комерційні проекти на VS2010 ще рано, та і про кросплатформеність поки ще рано мріяти). Але на відміну від boost версії тут є можливість вказувати текст помилки.
При компіляції коду де присутня стрічка
static_assert(false, "It is false"); бачимо:------ Build started: Project: test1, Configuration: Debug Win32 ------При використанні boost
ClCompile:
test1.cpp
c:\documents and settings\alexandr\my documents\visual studio 10\projects\test1\test1\test1.cpp(18): error C2338: It is false
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
BOOST_STATIC_ASSERT(false); отримуємо не такий зрозумілий вивід:------ Build started: Project: test1, Configuration: Debug Win32 ------
Compiling...
test1.cpp
c:\documents and settings\alexandr\my documents\Visual Studio 2005\projects\test1\test1\test1.cpp(18):(3455) : error C2027: use of undefined type 'boost::STATIC_ASSERTION_FAILURE'
with
[
x=false
]
test1 - 1 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Чекаємо з нетерпінням стандарту, а поки використовуємо boost реалізацію.
понеділок, 1 червня 2009 р.
Суб’єктивний огляд MS Visual Studio 2010 Beta
Після денного завантаження всіх компонентів нової MS Visual Studio 2010 Beta нарешті встановив її. Перше що кидається в очі це жахливий синій інтерфейс, дуже повільна робота і неприємно розмазані шрифти(можливо недоліки бета версії; можливо у Windows XP воно так і повинно виглядати, бо розраховували на Windows 7). Також у новоствореному проекті під час сканування файлів проекту - Solution Explorer бридко блимає :(
Порадувало досить симпатичне діалогове вікно створення нового проекту. Непоганий дизайн, ергономічність і все досить логічно структурузовано:

З нового, що відразу помітно:
UPD1 02.06.2009
З нового, що відразу помітно:
- мова F# встановлена за умовчанням (відразу з’явилося бажання вивчати функціональне програмування), що не може не радувати;
- нова .NET Framework 4.0 (так як шарпові мови цікавлять мало про нововведення тут);
- можливіть вибору версії .NET Framework під час створення проекту;
- у діалоговому вікні створення проекту є пункт Online Templates, де знаходяться декілька досить цікавих шаблонів;
- покращений редактор коду;
- додали Extension Manager зі зручним інтерфейсом доступу до додатків, їхнім встановленням і керуванням (є досить цікаві і надія що будуть досить зручні додатки для доступу до систем контролю версій)
- додали Parallel Patterns Library (PPL). Річ досить цікава, але як я зрозумів не кросплатформена (але ж Microsoft це ніколи не хвилювало), тому доведеться використовувати OpenMP покищо (omp.h наявний). Ще були додані Asynchronous Agents Library, Work scheduler і Resource manager, але їх я ще не вивчав. Досить зручно використовувати для розпаралелювання циклів(Concurrency::paparallel_for_each, Concurrency::paparallel_for):
#include <ppl.h>
#include <array>
#include <iostream>
template<class Ty>
void square_function(Ty& n)
{
n *= n;
}
int main(int argc, char* argv[])
{
std::tr1::array<int, 5> values = { 1, 2, 3, 4, 5 };
Concurrency::paparallel_for_each(values.begin(), values.end(), &square_function<int>);
return 0;
} - додані нові C++ фічі (Lambda functions, Transporting exceptions, Rvalue references, auto keyword, decltype keyword).
UPD1 02.06.2009
понеділок, 18 травня 2009 р.
Зміни у веденні блога
Привіт.
Я, blackstone - програміст на мові Java з невеликим стажем. Відтепер я допомагатиму вести цей блог IUKNOWN.
Думаю що мої пости переважно будуть присвячені Java, але зараз про це ще рано щось казати.
вівторок, 3 лютого 2009 р.
Робота в Adobe AIR з іконкою в треї
Вивчаючи AIR від Adobe вирішив написати невеличку програмку для своїх потреб. Мені необхідно було зробити так, щоб вона могла ховатися в трей при закритті головного вікна, або його мінімізації. Виявилось що в AIR це досить не тривіальна задача. Далі невеличкий приклад моєї реалізації роботи з треєм.
Створюємо змінну для роботи з системним треєм:
Створюємо змінну для роботи з системним треєм:
private var sysTrayIcon:SystemTrayIcon = NativeApplication.nativeApplication.icon as SystemTrayIcon;
Далі необхідно створити змінні самого меню і завантажувача малюнка:private var trayIconMenu:NativeMenu = new NativeMenu();У функції яка викликається відразу після того, як створилося вікно (реакція на подію windowComplete) реалізуються механізми взаємодії з системним треєм:
private var trayIconMenuShow:NativeMenuItem = trayIconMenu.addItem(new NativeMenuItem("Show"));
private var trayIconMenuExit:NativeMenuItem = trayIconMenu.addItem(new NativeMenuItem("Exit"));
private var iconLoader:Loader = new Loader();
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:
Файл /home/sasha/Develop/repos/conf/passwd
Встановлюємо безпосередньо 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]Файл /home/sasha/Develop/repos/conf/svnserve.conf
sasha = password
[general]Налаштування сховища завершене. Subversion будемо запускати через inetd. Для цього до файлу /etc/inetd.conf додамо наступний запис:
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
svn stream tcp nowait root /usr/bin/svnserve svnserve -i -r /home/sasha/Develop/reposДемон inetd тепер потрібно перезапустити:
/etc/init.d/openbsd-inetd restartТепер підключаємося до серверу зручним клієнтом за адресою svn://адреса_серверу.
Мітки:
Розробка,
Linux,
Subversion,
Ubuntu
четвер, 25 грудня 2008 р.
Подарунки від Wuala на Різдво
Хоч ми і не всі католики, але отримати подарунок на католицьке Різдво можна всім користувачам чудового сервісу Wuala незалежно від їх віросповідання. Достатньо зайти під своїм акаунтом 25-26 грудня і в подарунок отримаєте 1 Гб додаткового простору. Поспішість і гарних свят!
Мітки:
Цікаве
пʼятниця, 17 жовтня 2008 р.
GTK стиль Qt програм
Розробники Qt пішли на зустріч користувачам Gnome і створили їх QGtkStyle. Тепер Qt програми не будуть виглядати такими нерідними в Gnome середовищі. Для встановлення робимо наступне:
Тема зібралась і встановилась. Заходимо в System-> Preferences-> Qt 4 Settings і зі списку вибираємо тему GTK.
Тепер всі Qt програми виглядають рідними в Gnome (всі Qt4 програми). Насолоджуємося ними і не згадуємо про існування KDE.
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. Постійні креши різноманітних программ. Хоча це ж бета - є надія що виправлять.
У встановленій Ubuntu 8.04 натискаємо комбінацію клавіш Alt+F2 і у вікні запуску набираємо update-manager -d.
Погоджуємося з тим що підтримка деяких пакетів закінчена:
Після довгого встановлення і перезавантаження маємо нову Ubuntu.
Хорошого:
1. Звичайно порадувало те, що тепер за умовчанням використовується Flash 10.
2. Сам інтерфейс став набагато краще виглядати, плюс нова темна тема просто чудова :).
3. Нові версії программ - в Compiz з’явилось декілька нових ефектів.
4. Таби в Nautilus звичайно зручна штука, яку давно потрібно було реалізувати, але я віддаю перевагу 2-х панельним файловим менеджерам.
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 з наступним вмістом:
Тепер все готове для запуску 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 напишемл щось осмислене:
8. Тепер вибираємо Run -> Run, трішки чекаємо (як на мене досить довго) і милуємося мегапрогою:
Тепер маємо всі інструменті для створення програм під Android. Надіюсь залізо на його основі матиме популярність :)
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.
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, трішки чекаємо (як на мене досить довго) і милуємося мегапрогою:
Підписатися на:
Дописи (Atom)