Client Side Business Application Framework

July 12th, 2008 Иван Давидов

На какви изисквания би трябвало да отговаря платформа за бизнес приложения, предназначена за използване от крайни клиенти, чиято цел е не да предоставя готови решения, а да да ва основи, на които вече да се градят бизнес решения?

Малкото ми проучване по въпроса не даде съществен резултат. Ето защо сам си отговарям. Списъкът не е пълен, но дава някаква насока по въпроса:

  • Системата  трябва да  бъде модулна.
  • API-то за разширяване на платформата трябва да е публично достъпно.
  • API-то за разширяване на платформата не трябва да дава никаква готова имплементация по нито един бизнес въпрос. Това е работа на софтуерни архитекти/софтуерни инженери.
  • API-то за разширяване на платформата трябва да бъде изключително лесно за боравене.
  • Добавянето/редактирането/премахването на нов модул в системата трябва да става лесно, по възможност без програмиране, а с конфигурация (XML, анотации, …).
  • Задължително трябва да се поддържт версии на модулите.
  • Задължително трябва да се поддържат зависимости между модулите.
  • Визуализацията на бизнес приложението не бива да се определя от API-то, а от конкретната му имплементация.
  • API-то трябва да работи еднакво ефективно както на десктоп среда, така и в уеб среда (това е трудно, да не кажа направо невъзможно).
  • API-то трябва да предоставя канал за комуникация между отделните модули по време на инициализация, по време на работа и преди спиране на работта с приложението.
  • API-то не трябва да е обвързано с никаква конкретна технологиза за logging, persisting, business logic и т.н. Всичко това трябва да се дефинира от конкретната имплементация. API-то трябва само да предостави адекватен интерфейс и/или адекватни канали за комуникация.
  • Национализирането (Localization) е вече толкова задължително, че според мен механизъм за това би трябвало да се предоставя от API-то под формата на добре дефиниран комуникационен канал и/или интерфейс.

Със сигурност могат да се добавят още много неща, защото всичко това го написах на прима виста и 100% не съм го обмислил добре. Ако съм прав и това като идея не е реализирано, тогава трудът си заслужава. А ако не съм прав (повечето неща в съвременния свят отдавна са измислени, това сигурно също, просто не съм го намерил), тогава трудът пак си е заслужавал, защото си поразмърдах малко мозъчните клетки.

Аз се сещам за два примера, които могат да служат за подпобни платформи. Eclipse и NetBeans. И двете платформи са модулни, и двете са с добре дефинирани API-та, но и двете са правени и продължават да се развиват като основа за RAD IDE, а не като платформа за бизнес приложения. Не че не могат да се ползват и за бизнес приложения, но не са мислени с тази цел. А и не работят през web! :)

Posted in Всичко, Размисли, Технологии | No Comments »

Sun Learning Connection

May 29th, 2008 Иван Давидов

Sun Learning Connection - това е сайт на Sun Microsystems за онлайн обучение не само по продукти на Sun. Последното онлайн обучение, коео проведох преди да се “запозная” със SLC беше в CISCO академията в град Пловдив, където карах курсове по Java и CCNA. ДО скоро мислех, че CISCO са най-добрите в областта на електронното обучение, но по лично мнение онлайн курсовете на Sun са по-добри.

С какво ме грабна Sun Learning Connection?

Първо - онлайн курсовете са представени изключително качествено. Покрива се пълния спектър на мултимедийно представяне: текст, графика/анимация и звук. Има включително и междинни “тестове”, които определят до колко човек е спал, докато е преглеждал предходните няколко слайда.

Второ - курсовете не са само по продуктите на Sun. Има общи курсове за XML, Web Services, Application Security… общо взето за всеки по нещо. Естествено, колкото и да са общи, всички курсове рано или късно “загатват”, че най-доброто, което може да се плзва в крайна сметка е някой от продуктите на Sun. Същото важи и за CISCO CCNA курсовете, където въпреки че началните модули са представени от гледната точка на мрежи, мрежови топологии и други основни понятия, по-късните курсове наблягат на предимствата на конкретни CISCO технологии. В крайна сметка всеки дърпа чергата към себе си.

Но да се върнем на Sun Learning Connection.

Трето - за всеки завършен курс се “издава” сертификат, който при добро желание може да се свали и разпечата на старомоден хартиен носител на информация. Не съм сигурен тези сертификати дали имат някаква стойност, но пък курсовете са официални, обучителните материали също, така че в крайна сметка сертификатът показва, че курсистът е завършил официален онлайн курс по еди-каква-си технология.

Четвърто - курсовете са безплатни. Поне тези, до които аз имам достъп като SDN member prez Sun Learning Connection са безплатни. Има разбира се и платени такива, безплатните са за “зарибяване”.

Въпреки всички тези “красоти” обаче, истината е, че всички тези курсове могат да служат само като един вид допълнително самообразование. Нищо в курсовете не е сложно, а и има много сериозен начин да се “лъже” системата, така че за по-малко от три минути да завърша курс, за който са предвидени четири часа например. Това е една от причините всякакви подобни онлайн курсове и издадените към тях онлайн сертификати да нямат реална стойност.

Като цяло препоръчвам на всеки, който се занимава с технологии на Sun да разгледа какви курсове се предлагат на сайта на Sun Learning Connection, тъй като те обхващат доста широк спектър от продуктовата им линия. Определено стават за въведение и “навлизане” в материята по конкретна Sun технология.

Posted in Всичко, Размисли, Технологии | No Comments »

Да бъдеш или да не бъдеш… консултант по имплементацията на софтуер?

May 28th, 2008 Иван Давидов

Сагата ми с Tumbleweed за добро или за лошо приключи. Прекарах година и половина сред приятни хора на приятно място, но всяко хубаво нещо освен начало си има и край.

Работя като програмист на пълен работен ден от 2003-та година, иначе казано вече пет години. Смених няколко технологии, малко повече езика за програмиране, още няколко софтуерни фирми…

…и му дойде времето да си сменя изцяло типа на професията. Софтуерен консултант в HP - това звучи гордо! :)

Днес официално подписах трудов договор с HP и от началото на следващия месец започвам да навлизам в сферата на консултантската дейност. Заплата - доволно голяма като за начало, повече, отколкото съм взимал досега като програмист където и да е.

И сега става интересно - през последните пет години работих изцяло и единствено за каузата “code or die” или иначе казано виждах кариерата си през призмата на програмист.

Сега като консултант в HP пак ще пиша код, но не на пълен работен ден. А когато стане въпрос за писане на код - HP имат строги правила/принципи/методологии, които се спазват в целия процес на работа, т.е. няма хлабаво. Всичко е премерено и пипнато. Поне така изглежда отстрани, все още не съм се убедил лично. И все пак става дума за HP, същите онези хора, които са дали основата на платформата XETRA, на която се държат половината европейски борси, в това число нашата родна БФБ, която в момента вече мигрира към XETRA.

Какво друго… времето ще покаже!

Posted in Всичко, Размисли, Технологии | No Comments »

andLinux - Линукс под Windows без емулатор

May 23rd, 2008 Иван Давидов

Днес имах възможността (и времето) да експериментирам с една много интересна линукс дистрибуция - andLinux. Идеята е много проста - комбинираме линукс ядро, което е специално разработено за Windows - coLinux и заедно с него се предлага предварително подготвена за целта Ubuntu дистрибуция.

Резултатът е много интересен - линукс приложенията вървят под Windows в абсолютно native вид. Е, има и малко бъгове, но какво да се прави. Все пак повечето програми са мислени с идеята да вървят под линукс, не под Windows.

Конкретният бъг е, че hook-овете за  закачване към събитията за мишка и клавиатура всъщност не сработват много добре. Всъщност изобщо не сработват. По-точно не сработват на моята машина. Няколко игри, които разчитата на hook модела на Linux изобщо не могат да се играят с coLinux ядро.

Иначе за офис приложения, браузър, конзола и така нататък - всичко е ОК. Даже повече. Пълна съвместимост с правата на файлове под xNIX система по принцип е невъзможна, защото Windows не е и чувал за понятия като”user/group/other” например. Това е и едната слаба страна на дистрибуцията - всички linux файлове се записват във виртуален твърд диск, който представлявамно-о-ого голям файл (много == няколко гигабайта). Мислено е как да се достъпват файловете между двете системи, но въпреки това връзката е изкуствена. В това отношение много по-добре се спавя Cygwin,тъй като той си прави RooFS като структура от директории, а не като гигантски файл.

Но нека се върнем пак на andLinux. Впечатли ме най-вече това, че с много, ама наистина много лесна инсталация един абсолютно начинаещ потребител получава linux-like десктоп среда, която е напълно интегрирана в Windows. Какво по-хубаво от това, a (за мен по-хубавото е една конзола, но това също го има в andLinux)?

Интересното е, че на моята машина под andLinux Firefox се представя по-производително, отколкото нормалния ми Firefox под Windows. Специално обърнах внимание на версиите - еднакви са. Нямам база за сравнение по други показатели, но като цяло производителността ми се стори задоволително добра и определено беше по-добра, отколкото с емулация под VMware, чиито продукти все още са най-добрите от към performance на пазара. Това е факт, защото coLinux ядрото не представлява емулация, а портната модификация на оригиналното ядро за Windows платформа. Теоретично производителността на всички приложения, които вървят под andLinux би трябвало да е като на native инсталиран linux.

andLinux лесно се инсталира и още по-лесно се премахва, стига да се използва направения за целта uninstaller. Иначе може да се изтрие директно и директорията, в която е инсталиран, но има някои бози, които се записват в регистрите, така че не го препоръчвам.

Експериментът си заслужаваше! :)

Posted in Всичко, Размисли, Технологии | No Comments »

Защо не искам да съм системен администратор в България

May 19th, 2008 Иван Давидов

Вчера ми се случи една случка, която за пореден път ме накара да си спомян защо не желая да работя като системен администратор в България.

И така, един хотел (няма да споменавам имена, за да не се получи нито безплатна реклама, нито злословене от моя страна) снощи вечерта го беше закъсал много здраво, защото:

  1. Компютърът на рецепцията не работеше.
  2. Няма резервен компютър с работеща система.
  3. Няма на място кой да поддържа системата в случай на нужда.

Явно кармата ми е такава - да се занимавам с хотели. :) Преди години правих сайта на един голя-а-а-ам хотел в центъра на Плевен, а сега ми се наложи да се занимавам с IT инфраструктурата на хотел в София.

Ето какви са изводите от проведеното “лечение”:

  1. Няма денонощна поддръжка на IT инфраструктурата.В такива случаи е само въпрос на време да се стигне до ситуация като снощната.
  2. Липсваше документация за софтуерното обезпечение (казано по-просто указания как се работи с хотелската програма) .
  3. Липсваше документация за мрежовата топология.
  4. Компютърната грамотност на персонала не е на ниво.

Конкретният проблем беше, че заради некомпетентността на някой от персонала на хотела, с компютъра на рецепцията беше станало нещо толкова лошо, че дори не искаше да запали. Много лошо, тъй като явно този компютър е основния за софтуера (базата данни е на него, а всички клиенти очевидно не могат да се свържат, тъй като компютърът не искаше да запали).

Другите два компютъра, до които имах физически достъп бяха неизползваеми за моите цели, защото:

  1. Компютърът на шефа на хотела нямаше работещо оптично устройство. Дори да имаше такова, при него също липсва достъп до базата данни.
  2. Компютърът за връзка с интернет нямаше интернет(!!!). Нямаше отговор от телефонната поддръжка на БТК (22:00, неделя).

Сега е моментът да спомена, че компютърът на рецепцята също имаше оптично устройство, но и то не работеше. Някой много сериозно се бе постарал да нямам достъп до външната периферия на всички компютри.

Обобщение:

  1. Хотел, който не може да обслужва по компютърен път хотелските резервации и кой знае какво още.
  2. Никаква информация за начина на работа на софтуера (трябваше да правя reverse engineering, докато разбера къде е базата данни).
  3. Никаква информация за мрежовата топология (отново изгубих време докато разбера кое как е свързано, за да знам какви “фокуси” мога да си позволя да правя).
  4. Лошо стечение на обстоятелствата. В неделя вечерта нямаше телефонна поддръжка нито от страна на БТК, нито от страна на обслужващата IT инфраструктурата фирма.
  5. И още …

Главният проблем е , че чисто по български ми се наложи да навлизам в непозната за мен IT инфраструктура, като в същото време хората там разчитаха на мен да оправя проблеми, които са възникнали в следствие на неквалифицираността на персонала да ползват компютърна техника.

Как можеше да се избегне всичко това:

  1. Първото и най-важно нещо - квалифициран персонал. Никой не може да се защити от хардуерен проблем, но хората могат да се опитат да п”пазят” софтуера колкото се може повече. В случая: необходимо е да се обясни на хората, които имат достъп до основните компютри в хотела как точно да боравят с интернет и да проверяват сваленото съдържание за вируси, троянци и т.н.
  2. Абонаментна поддръжка. Тъй като повечето хора (понякога и аз) са мързеливи и не искат всеки път да проверяват за вируси това, което свалят от интернет, крайно наложително е да има абонаментна поддръжка на цялата IT инфраструктура.Хорат, които отговарят за тази поддръжка трябва да са наясно както със софтуера, който се използва, така и с хардуера и мрежовото оборудване (системни администратори).
  3. Документация, документация и пак - документация! Ако първите две точки не са спазени - тогава е крайно наложително да има адекватна документация, написана на грамотен технически език, която да описва хардуерната инфраструктура, както и документация, описваща работата на софтуера. Тези две документации са от най-съществено значение при възникнал кризисен момент.

Ето затова не искам да работя като системен администратор в България - просто са твърде малко местата, където нещата се правят както трябва. В повечето случаи всичко се прави бързо и без да се мисли за бъдеща поддръжка. Накрая е най-лесно да се повика някой като мен, който ако може да се оправи в цялата тази бъркотия - ОК, а ако не може - здраве.

Да, ама по принцип на системните администратори не им е работа да изучават нови мрежови топологии и софтуерно обезпечение за половин или един час, тяхната работа е да гарантират, че подобни проблеми на описания по-горе или няма да възникнат, или че ще бъдат решени в рамките на адекватно време…

В петък получих предложение да работя като системен администратор в полицейската школа в Симеоново. Тактично отказах, тъй като съм почти 100% сигурен, че и там ще се сблъскам със същия манталите - “по български”…

Posted in Всичко, Размисли, Технологии | No Comments »

Quake 2 за Java, или Jake2 (GPL 2)

May 5th, 2008 Иван Давидов

Тъй като многото почивни дни покрай великденските празници се отразяват негативно на програмистката ми душа, днес цял ден се оглеждах за ресурси, свързани с правенето на игри за Java и по-специално за 3D игри.

След не много лутане попаднах на един изключителен проект - Jake2. Това е порт на енджинът на Quake 2, само че написан изцяло на Java. Първоначално не се впечатлих кой знае колко, все пак аз започнах търсенето с цел да видя какви технологии са измислили хората, за да визуализират 3D обекти, а и първият ми сблъсък с Java 3D API от преди няколко години ми беше оставил болезнени спомени за производителността…

И така, свалих binary дистрибуцията и… още в самото начало се впечатлих. Енджинът засече, че нямам Quake 2 на компютъра си и учтиво ме попита дали искам да си дръпна демото, което е безплатно. Казах “да”, взехме се и заживяхме дълго и щастливо! :)

След като демото се изтегли, трябваше да почакам малко. Всъщност много. Ехидно се усмихнах, очаквайки минимална производителност от машината си, вероятно без звук, с не повече от 7-8 FPS…

Да, ама не! Играта тръгна от раз, не съм засичал FPS, но вървеше супер гладко, звукът беше на ниво, нямаше никакви насичания, а играта се играе така, сякаш играеш оригиналния Quake 2!

За пръв път в живота си останах с положително впечатление от Java в 3D света. И то не къде да е, ми в областта на игрите, където изискванията са на ниво!

Толкова много се впечатлих от това, че всичко тръгна от раз, че реших да си дръпна сорса на енджина.

Ето тук се впечатлих още повече, защото въпреки че проектът използва няколко много сериозни външни зависимости, всички те са включени в сорса. Освен това Jake 2 използва Ant скриптове, като Ant дистрибуцията идва заедно със сорсовете и на практика за да се build-не проектът е необходимо само да се стартира един .bat (или .sh) файл. Единствената външна зависимост, която не идва със сорсовете е JavaSE! :)

Като се позарових малко в сорсовете намерих няколко неща, които не ми харесаха много, но като се има предвид какъв е мащабът на проекта, моите забележки са повече от нищожни:

  1. В ant скриптовете има твърде много hard coded елементи. Оправих го за по-малко от 5 минути, така че не е болка за умиране. В рамките на същите тези 5 минути промених скриптовете така, че крайните дистрибуции да се създават в папка, различна от основната, тъй като по default всичко се генерира в основната директория на сорсовете, което води до “претрупване” на файлове и директории в основната директория.
  2. В сорсовете се използва таймера на Sun, който е част от недокументираните класове, които се намират в подпакетите “sun.*”. По време на изпълнение на програмата runtime се определя до кои таймери има достъп Jake 2 и ако използваме Java SE 5, тогава се взима таймерът за наносекунди, иначе се прави тест за Sun таймера и ако това също пропадне, тогава се взима класическия милисекунден таймер. Всичко това е много хубаво, обаче какво ще се получи, ако в JDK 7 например (В JDK 6 таймерът е наличен) Sun-ския таймер изчезне? Runtime няма да има проблеми, но проектът няма да може да се компилира.С изтриването на един файл и закоментаряването на няколко допълнителни реда тази зависимост също отпада, но след като направих промените, реших да върна нещата пак така, както си бяха преди.
  3. Като цяло портът на Quake 2 енджинът е повече от успешен, но четимостта на кода е сведена до почти абсолютната нула, тъй като идеята не е била да се направи 3D енджин, който да се ъпгрейдва, а по възможно най-бързия и безболезнен начин да се “мигрира” кода от “C/C++” на Java. Съответно в сорсовете на Jake2 “обитават странни същества (класове) с имена като “cvar_t.java”, “M.java” и “V.java”. Но лошо няма проектът все пак работи, а ако някой не разбира от “C/C++”, тогава според мен изобщо не бива да се захваща и с Java. Хубаво е да се знае от къде произлизат корените на всеки език за програмиране.

Тъй като се впечатлих страшно много от проекта, накрая реших да си дръпна сорсовете директно от CVS repository-то на Source Forge. Е… малко се разочаровах, проектът е изоставен от вече две години, но пък и то какво да иска човек от енджин, който веднъж вече е направен. Както вече казах, идеята не е била да се доразвие енджина на Quake 2, а да се направи порт на Java за него.

Понякога (рядко, но се случва) имам свободно време и ако сорсовете бяха малко по-четими и по-добре документирани, бих се заел да направя някои дребни корекции, но пък така интригата е по-голяма и е по-интересно.

Препоръчвам на всички Java маниаци, които се чудят дали има 3D игри, писани на Java, да хвърлят едно око на Jake2, определено си заслужава.

Posted in Всичко, Размисли, Технологии | No Comments »

Doom, Doom II и Heretic

April 25th, 2008 Иван Давидов

Първият и последен 3D shooter, който ме грабна беше Half-Life в комбинация с многобройните му single player модове.

Енджинът на Half-Life по същество представлява сериозно модифицирана версия на енджинът на Quake II, който от своя страна произлиза от енджинът на Quake, Който е базиран на Doom II, което пък е по-големият брат на Doom, който пък от своя страна е първият наследник на Wolfenstein 3D.

И така - навремето съм играл волфенщайн-а, преигравал съм няколко пъти Half-Life, освен това от време на време все още си пускам Quake III Arena, но досега никога не бях пускал Doom/Doom II.

Бях решил, че няма и смисъл. Защо да играя игра, чиито3D ngine съм го виждал в действие както в предишни, така и в следващи игри?

Да, ама ей така реших да си изтегля Doom Legacy и като се започна…

Doom донякъде много прилича на Wolfenstein 3D, с тази разлика, че вече имаме истинска 3D перспектива… няма да навлизам в подробности, все пак играта е на повече от 15 години и вече има изписано много за нея.

Ще кажа обаче, че вече разбирам защо Doom се води първоизточникът на всички съвременни 3D шутъри. Невероятно зарибяващ геймплей, страшно много и динамични нива, богат избор на оръжия (моторната резачка е направо бижу), интересни зомбита и… ами до ук толкова. Още не съм превъртял играта, за да кажа как свършва.

Много ми допадна и идеята всички “игри” на базата на Doom да се “пакетират” в WAD файлове. В интернет пространството намерих буквално хиляди преработки, много от които пълни конверсии на оригиналната игра.

В интерес на истината играл съм и Doom III, но ако трява да съм честен там геймплейът не ме грабна особено - старият и изтъркан сюжет от Half-Life: имаме як пич, който е въоръжен, имаме инцидент, имаме и зомбита за избиване.

Що се отнася до Heretic - там ме грабна това, че Doom енджинът е използван, за да се пресъздаде един магически свят, който вкарва героя в светът на приказките от времето на Конан Варварина. Просто красота…

Почти на 25 години съм, но все още пазя онази тръпка, която изпитва човек, когато с моторна резачка (крик, гаечен ключ, лост, …) пребиеш до смърт поредното зомби и преминеш към следващото ниво…

Posted in Всичко, Размисли, Технологии | No Comments »

Завръщането на Супермен - EJB 3.1 на хоризонта

March 24th, 2008 Иван Давидов

След идването на EJB 3.0 си помислих, че няма начин боравенето с EJB класове и обекти да бъде по-просто. Както най-често се случва - оказа се, че съм грешал.

Умните хора, които работят по спецификацията на EJB 3.1 (JSR 318) са решили да изненадат Java разработчиците с много интересни и най-вече полезни подобрения. Ще спомена само някои от тях, които на мен ми направиха много силно впечатление:

  1.  Пакетиране на EJB компоненти в WAR. В началото помислих, че имам нужда от очила. Как така EJB ще “живее” в WAR? Оказа се, че Web контейнерът няма да предоставя EJB API, а просто се дава възможност EJB компонентите да се пакетират в рамките на WAR. След това, по време на deploy процеса, EJB контейнерът поема управлението на EJB компонентите. Чисто и просто премахване на една изкуствена зависимост по време на пакетиране, която преди ни задължаваше WAR и EJB да бъдат пакетирани заедно в един общ EAR.
  2. Stateful EJB ще могат да  се expose-ват като WebService. По този начин с един куршум имаме два заека - пишем си бизнес методите както до сега, правим уеб услуга за минимално време (още една анотация) и освен това уеб услугата поддържа състояние, т.е. печелим от session management модела на Stateful EJB.
  3. Поддръжка на събития при пускане и спиране на приложението. Един workaround за това е да се направи SAR, в който изкуствено да се опише поведението, което желаем да постигнем при пускане на приложението. Хубаво е, че сега това “поведение” ще бъде конкретно описано и специфицирано и няма да има нужда хората да мислят какви ли не триковетрикове.
  4. Асинхронни методи в Stateful EJB. На теория ако един потребител достъпи Stateful EJB обект и извика метод, който се изпълнява много бавно, тогава клиентът не може да извика друг метод в рамките на същия Stateful EJB обект, тъй като Thread Lock обекта още не е пуснат и ще се освободи чак след свършване на изпълнението на предишния метод. С дефиниране на асинхронни методи за изпълнение в рамките на Stateful EJB обектите вече имаме компромис, койт опозволява да се мисли още по-продуктивно и маха някои бариери.

Естествено, има още много подобрения спрямо предходната EJB спецификация, но както казах - това, което написах са подобренията, които мен ме впечатлиха най-много. Наистина страхотни улеснения! Който все още не е мигрирал към EJB 3.x е крайно време да се замисли! :)

Posted in Всичко, Размисли, Технологии | No Comments »