19 октобар 2010

Da li je Lazarus spreman za pisanje poslovnih aplikacija ?


(Ovo je jedno programersko iskustvo iz Blaise Pascal Newsletter, koje dokazuje da je Pascal multiPlatform/multiOS/multiCPU magija moguća, ali u Open Source svetu kroz Lazarus projekat, koje Vam objavljujem u slobodnom prevodu...- op.a.)

"Ovaj članak pokazuje ogroman napredak koji je Lazarus napravio zbog predanog rada jezgra razvojnog tima. On pokazuje da je danas Lazarus na mnoge načine u rangu s Delphijem, a u nekoliko ključnih područja i daleko ispred Delphija (32/64 bitni, multi-platforma i multi-OS, omogućava razvoj na mobilnim i ugrađenim sistemima).

Naravno, to nije isto kao i Delphi, ali je vrlo jeftino. Lazarus je pristupačan za svakoga i možete da započnete odmah sa realizacijom informatičkih zahteva. Možete stvoriti bilo koji program, koji ste ikada želeli, a broj dostupnih komponenata stalno raste.

Dakle, odgovor je DA. Savršeno za komercijalne svrhe!

Počeo sam svoj posao 2001. u hrvatskoj firmi, koja se zove Holobit. U to vreme Holobit je bio prilično mala firma, sa nekoliko desetina kupaca. Moj primarni zadatak je bio da set trenutnih C++ poslovnih aplikacija prevedem na Linux i Windows, pomoću Delphi, Kylix i Borland-a CLX tehnologije. Nakon godina, C/C++ kodiranje na Linux OOP je izgledalo vrlo jednostavno i dobro organizovano. Dva meseca kasnije sam zaključio da Borland daje odlične proizvode, i vreme kodiranja je puno kraće nego što je bilo sa C/C++ (gtk+, QT) pomoću vi editora. U svakom slučaju, u roku od 3 meseca naše poslovne aplikacije su pretvorene u CLX i firma je počela prodaju za Linux i Win32. Sve je učinjeno sa Kylix 2 i Delphi 6 (kasnije nadogradili na K3 i D7).

Izrada native Linux aplikacija je bila dobra odluka, tako da je broj kupaca počeo ubrzano da raste. Naši klijenti su bili sretni sa mogućnošću izbora između Linux i Windows klijent aplikacija za desktop PC, jer štede novac i stvaraju bolju i sigurniju okolinu. Drugo pitanje pretvaranja, koje je izgledalo prilično komplikovano - u to vreme - bilo je oko baza podataka. Kada sam počeo pretvaranje naših aplikacija, sve od njih su koristile FoxPro. Bio sam jako razočaranim s njim, jer sam tada već koristio PostgreSQL na Linuxu. Pogađate, preselili smo sve naše aplikacije na PostgreSQL.

U to vreme nisam znao za ThirdParty komponente, kao što su Zeos itd. .., pa sam napisao svoj PostgreSQL driver, koji se koristio još nekoliko godina. Kasnije, kada sam pronašao Zeos - ugodno iznenađenje - odmah sam ga počeo koristiti. Tako je došla 2004., bilo je glasina da je Kylix ugašen, nema vesti iz Borlanda - samo tišina ...

Da, bio je ugašen: sram vas Borland, ne zato što ste stavili Kylix u grob, već zato što ste varali svoje klijente. Tokom godina smo se borili sa Borland proizvodima. U međuvremenu, Kylix se nije mogao pokrenuti na bilo kojoj distribuciji, ako se ona temelji na glibc, većem od 2.4.X. Sve dok nisam video da je neko počeo qt-widgetset u Lazarus projektu, i taj tip je bio Felipe, a i zahvaljujući Den Jean za Qt C bindings (jer bez toga nismo mogli imati Qtwidgetset unutar Lazarusa).

Iako sam probao Lazarus samo nekoliko puta pre, nisam bio privučen ranije, jer podržava samo Gtk1 widgetset, koji je izgledao strašno, u poređenju sa Qt2, koji koristi Kylix. Sad sam bio motivisan za preuzimanje Lazarus builda, kako bih saznao za način rada sa Qt. (jer sam već ranije pokušao Gtk). Kao što je spomenuto, rad na Qt widgetset je tek počeo, a rezultat je pokazivao da je potrebno puno poboljšanja, tako to tada nije radilo.

Nakon brzog skeniranja Lazarus principa, biblioteke Lazarus komponenti (LCL) i widgetset veze LCL, počeo sam sa korekcijama, sa primarnim ciljem da Qt widgetset proradi. Moje prve zakrpe su zatim poslate Felipeu. Bunio se mojim standardima kodiranja (hej, hej), pa sam promenio moje standarde kodiranja prema Lazarus principima. U svakom slučaju, nakon nekih godinu dana, Qt widgetset je postao upotrebljiv. U međuvremenu, Lazarus programeri su mi odobrili SVN pristup - tako da nema više potrebe da čekam na Felipeovo odobrenje, i drugih da izvrše svoje zakrpe.

U isto vreme - poslovni problemi narastaju sa Kylix i Delphi programiranjem i uprava firme je razmatrala o tome da se aplikacije presele kompletno u Javu ili .Net. Kada je uprava donela odluku za tu promenu, brzo sam prigovorio.

Nisam bio jako sretan s tim. Ne zbog programa, nego zbog svih ThirdParty komponenata, koje se koriste u našim aplikacijama (ZeosLib, FastReports, TMS mreža, VirtualTrees itd). Rekao sam da ćemo trebati puno vremena i resursa, da se preseli naš kod u Javu ili .Net, a mogući rezultat te operacije nije bio ohrabrujuć. Bio sam uznemiren tom poslovnom odlukom (i već sam imao na umu da promenim posao), tako da sam jednog dana pitao šefa, ako bi se mogli dogovoriti, da mi da neko vreme za razvoj koda koristeći Lazarus. U sledećih nekoliko mjeseci, sam pokazao neke od naših aplikacija koje trče na Qt4.

Imao sam u početku trku sa vremenom, morao sam popraviti Qt-LCL i pretvoriti jedan od naših zahteva za LCL (samo mali jedan). To nije bio lak zadatak, jer qt-LCL još nije završen i puno stvari ne radi. Zeos za Lazarus je već postojao, ali za ove jednostavne aplikacije sam morao imati FastReports i TMS grid kontrole. Dakle, imao sam tri meseca da bi Qt pod Lazarusom bio upotrebljiv, i za pretvaranje FastReports i TMS kontrola (oba CLX licencirani) ...

Nakon stotina sati kodiranja, dan svođenja računa je došao. Morao sam pokazati svoj rad krajem Februara 2008. Napravio sam prezentaciju na Linuxu, 32-bitnom Windowsu i na Mac OSXu i uprava firme je bila zadovoljna. Naravno, bilo je tu još bugova i neprevedenih modula, ali su oni poštovali moj glavni argument : Ako se preselimo u Lazarus, bićemo u mogućnosti da radimo na drugim (čak i više) podržanim platformama, a i zbog toga što je Lazarus - Open Source projekat, ne bismo više bili na milosti i nemilosti odluka od strane drugih firmi (kao što je Borland), koji su nas osujetili u prošlosti.

To je postao najsretniji dan u poslednjih nekoliko godina mog radnog veka. Dobio sam budžet i vreme potrebno za selidbu naših aplikacija u Lazarus. Sada sam imao razuman rok (15 meseci) za poboljšanje Lazarusa i prekodiranje naših aplikacija za Lazarus (i pored drugih svakodnevnih poslova). Tokom 2008/2009, konvertovao sam sve ThirdParty komponente i sve naše aplikacije za FPC/Lazarus, što je takođe doprinelo sa puno zakrpa za sam Lazarus projekat.

Cilj je postignut - Lazarus je bolji sada nego Kylix 3 i počeli smo implementaciju LCL aplikacija za više od 3.500 korisnika. Njihovi utisci su pozitivni, jer naše aplikacije izgledaju prirodno na svim platformama. Nekoliko desetina Mac OSX korisnika su takođe bili zadovoljni, jer smo im dali native aplikacije po prvi put (pre su koristili Paralele + Linux VM).

WOW, kakav slavan dan. Mi više ne trebamo Borland proizvode.

Sada je naš kompletan asortiman softvera razvijen korišćenjem FPC/Lazarus i PostgreSQL RDBMS:

1. HoloERP - ERP sistem sa > 400 modula (obrasci)
2. Cafeman - Caffe barovi i restorani BackOffice i POS sistem
3. TSuS - male trgovine BackOffice i POS sistem
4. Kino - softver za bioskope (rezervacije, ulaznice i sl.)
5. ArhStudio - arhitektonska dokumentacija u bazi podataka.

Sve ove aplikacije koriste sledeće 3rd party komponente:

· ZeosLib
· FastReports (portovan CLX)
· TMS rešetki (portovan CLX, ali takođe smo licencirali najnovije VCL i to portovali)
· TMS Planner (portovan CLX, kasnije VCL)
· FlexCell (licencirani LCL, da postoji LCL verzija)
· Naše specifične komponente

Zaključak:

Zašto?

Lazarus je spreman za komercijalnu upotrebu, posebno za osobe sa ostavštinama u Kylix3 / Delphi7 kodu. Moje lično mišljenje je da je Lazarus/Qt puno bolji, nego K3/D7 u ovom trenutku (0.9.29 stablo), a programeri će biti zadovoljni sa novom 0.9.30 verzijom.

· Jedini OOP RAD koji podržava tolike platforme.
· Stalno razvijan od strane volontera, pa ne zavisi od komercijale odluke, tako da možete izbeći bankrot i sl.
· Troškovi su - gotovo ništa, osim energije i vremena.
· Ako nešto ne bi odgovaralo Vašim potrebama, možete promeniti i doprineti Lazarus projektu.
· Ako postoji bug - možete to popraviti i doprineti, ili barem možete otvoriti pitanje na Lazarus tracker ".

Autor ovog teksta je Lazarus forum član Željan (http://wiki.lazarus.freepascal.org/User:Zeljan), a softverski slučaj je iz http://www.holobit.net

18 октобар 2010

Application Lifecycle (Delphi vs Java vs Lazarus) - II deo


Zaokružena razvojna celina jedne aplikacije, Application Lifecycle baterija, je izgleda konačno pronađena u OpenSource svetu, kroz projekat Lazarus , i sadrži elemente :

+ RAD (gui layer) - lazarus
+ Database controls (database layer) - ZeosDBO
+ QuickReport (report layer) - LazReport

Ostaje mi da pronađem sledeće slojeve :
+ DevExpress VCL (advanced UI layer)
+ InnoSetuo (setup layer)

Glavna magija Lazarusa se ogleda u potpuno transparentnom multiplatformskom razvojnom okruženju za Windows/Linux/MacOSX, sa podrškom za 32/64 arhitekturu.

Lazarusov slogan i jeste : Write once, compile anywhere.

Sa verzijom 0.9.29 SVN od 17. Oktobra 2010., bugoviti form inheritance sada radi kao podmazan. I samo okruženje je izgleda preležalo dečije bolesti. Razvojni tim za verziju 0.9.30 najavljuje veliku stabilnost i dorađenost.

I dok čekam da Embarcadero stigne sa Delphi 2012 tamo, gde Lazarus već odavno plovi (multiplatform, multiprocessor development), mislim da više nema prepreka za slobodan i konkretan rad u ovom Open Source sjajnom alatu.

18 септембар 2010

pgtray - PostgreSQL Tray Monitor

U radu sa PostgreSQL serverom, smetalo mi je što nema Tray Monitora, kao kod mySQL servera. Pretražio sam Internet, ali takav projekat na pgFoundry je vrlo zastareo i na verziji 1.0. Rešio sam da napravim taj mali alat samostalno, i evo kako to izgleda ...



Možete ga preuzeti ovde.

13 септембар 2010

Application Lifecycle (Delphi vs Java) - I deo

Godinama aktivno pratim RAD scenu (Delphi, Java, VisualStudio) i sve posmatram kroz neku prizmu Application Lifecycle filozofije.
Java je zaista sve bolja, ali još uvek ne nazirem rešenje sledećeg problema :

Dakle, da li u Javi (NetBeans-Eclipse) postoji zaokružena celina razvoja jedne aplikacije, kao Delphi baterija tipa :
+ Delphi RAD (gui layer)
+ Database UniDAC controls (database layer)
+ QuickReport (report layer)
+ DevExpress VCL (advanced UI layer)
+ InnoSetuo (setup layer) ?!

I dalje tražim konkretnu Java platformu, za sve nivoe razvoja jedne kompletne aplikacije:
- baza
- gui
- report
- setup...

A dok čekam Delphi 2011 sa multiplatform-compiler glavnim novitetom, naravno zbog Linuxa, pitam se da li je Java zaista jedina solucija ...

04 јун 2010

Kako sam postao programer

Danas sam naišao na jedan svoj stari dokumenat, koji je napravljen 2001. godine. Lepo je setiti se programerskih početaka, a i sačuvati ga od zaborava kroz ovaj blog...

"Dakle, izradu aplikativnog softvera sam počeo svojim prvim projektom NET Galerija 1.0 za Galeriju Matice Srpske. Tog Maja 1995. godine, MS Windows je bio u ranoj fazi, pod verzijama 3.x. Razvojni alati su tek bili na pomolu, i trenutno jedini aktuelni alat za vizuelno programiranje, MS Visual Basic 3, se ukazao kao prirodno okruženje. Postavljen je projekat po principu : MS Access bazna osnova + MS Visual Basic korisnički interfejs.

Nažalost, tokom beta testiranja instalacije, kod korisnika su počeli da se progresivno javljaju problemi u perfomansama baze podataka, pa sam skoro već kompletiran projekat, prebacio u MS FoxPro 2.6 za Windows. Osnovni razlog je bio, tada superniorni Rushmore princip obrade baze, koja je davala impresivne brzinske rezultate, nad velikom količinom podataka.

Upravo će to biti i glavni razlog za nastavak izrade naredne 21 Windows aplikacije, u istom alatu. Iako je MS FoxPro 4 Windows 16-bitna razvojna platforma, sa nekim elementima vizuelnog programiranja, pojavom 32-bitnog MS Windowsa 95, softver razvijen u njemu je i dalje funkcionisao dosledno.

Svesni dobro postavljenog baznog projekta, kao preduslova uspešne aplikacije, spremne da odgovori specifičnim zahtevima jednog ili više korisnika, kroz neograničene izmene istog, mogli smo kroz MS FoxPro da podržimo u potpunosti, ali sa jednim nedostatkom - rečnikom podataka, kao centralnim mestom aplikacije, zbog čega se MS FoxPro i nije smatrao relacionom bazom podataka. Potreba za standardizacijom software-a , kroz jedan izvršni kod na svim instalacijama ukazao je potrebu za restruktuiranjem projekata.

Tada se rađa NETIS koncept (NET Informacioni Sistem – o.a.), određena interna dopuna Fox-ovog okruženja, koja je brinula o referencijalnom integritetu svih podaka, nezavisno od aplikacije ili korisnika. Ovakvu postavku vraćamo i na DOS platformu, kroz MS FoxPro 2.6 za DOS, gde je razvoj aplikacija nastavljen sa ovim bitnim pojačanjem. Ja u ovoj fazi programiram samo 4 DOS aplikacije, većinom iz averzije prema zastarelom operativnom sistemu.

Iako je tada, MS DOS platforma uveliko bila u silaznoj putanji, pred nadolazećim tehnologijama MS Windows-a (9x,NT – oa.a), u našim uslovima poslovanja, mnogim korisnicima se pokazala kao jefinije informaciono rešenje. Zbog toga je sektor nastavio sa paralelnim razvojem aplikacija kako za MS DOS tako i MS Windows, kroz identične verzije MS FoxPro-a 2.6. Treba napomenuti, da su migracije projekata sa jedne na drugu platformu bile potpuno transparentne.

Međutim, u jednom momentu, pojava MS Windows NT platforme, počinje da izaziva određene funcionalne probleme kroz nedosledan rad MS FoxPro 2.x aplikacija (izobličen preview podataka i sl. – o.a). Svesni 16-bitnog ograničenja razvojnog alata, krenuli smo da ispitujemo trenutnu ponudu RAD softvera. Microsoft je već izbacio Visual FoxPro 3, ali je očekivani nastavak rada u njemu podrazumevao reprojektovanje bazne osnove, redizajn korisničkog interfejsa, prekodiranje aplikacije, jednom rečju - reprogramiranje kompletnog projekta. MS FoxPro je postao objektno-orijentisana relaciona baza podataka, ali i dalje kao prevodilac pseudo koda.

Kada smo videli da će nas prelazak na 32-bitnu razvojnu platformu, koštati ponovnog postavljanja koncepata programiranja, odlučili smo se za Borland Delphi, tada i sada, neprikosnoveni Windows compiler, objektno-orijentisani RAD (Rapid Application Development – o.a.), sa ugrađenim mehanizmima relacione baze podataka (kroz Paradox format zapisa – o.a.). Otvorenost njegove arhitekture ka nezavisnim tipovima podataka (DBase, FoxPro, Access, Informix, SQL Server, Oracle i.t.d. – o.a.), kroz ODBC (Open DataBase Conect – o.a.) ili ADO (Advanced Data Objects – o.a.) koncept, bio je samo razlog više, da nas privoli ovom razvojnom okruženju. Nismo se pokajali, jer programiranje u njemu traje do današnjih dana.

U tom periodu ja kodiram 14 Client/Server aplikacija, što klasičnih knjigovodstvenih paketa (Kadrovi, Finansije i sl. – o.a.), što krojenih prema specifičnim zahtevima korisnika (Plan, Akcije, Informator i sl. – o.a.). Neograničene mogućnosti programiranja u Borland Delphi-ju, u smislu izbora najrazličitijih Windows tipova aplikacija, baznih ili ne, samo je učvrstilo njegovu poziciju, kao parametar kvalitetnog RAD alata, pre svega za programera, pa onda i za krajnjeg korisnika.

U ovom periodu postavlja se NETIS 2 koncept. On je sadržao punu upotrebu principa objektno-orijentisanog programiranja, kroz klase, nasleđivanja i instance. Rađaju se kalupi praznih aplikacija, spremnih za što bržu konkretizaciju u realnom projektu. Ovom revizijom NETIS standarda, akcenat se premestio sa bazne osnove i rečnika podataka na korisnički interfejs i klasne forme. Takođe smo se sa koncepta sigurnosti relacija unutar baze podataka (NETIS) pomerili ka bržem generisanju krajnjeg korisničkog interfejsa (NETIS2) nad istom.

Treba još napomenuti i postojeći trend u radu sa bazama podataka. Dosadašnji formati zapisa (FoxPro, Paradox, Access i sl. – o.a.) su se pokazali kao lokalne varijante ili za relativno manje mreže (do 5 računara – o.a.). Kod pravog Client/Server koncepta, pojavom jakih hardverskih konfiguracija (Pentium i sl. – o.a.) i stabilnih operativnih sistema (MS Windows 2000, XP – o.a.) perfomanse velikih baza podataka, poput MS SQL Server-a, postaju zadovoljavajuće za kvalitetnu upotrebu, nezavisno od broja klijenata u mreži. U tom segmentu je i započet razvoj nove generacije NETIS-a, pod specifikacijom : MS SQL Server – bazna osnova + Borland Delphi – korisnički interfejs. Razvoj ove aplikativne platforme je u toku, kroz postavljene, ali ne i dovršene projekte standardnih knjigovodstvenih aplikacija (Finansijsko, Robno i sl. – o.a.).

Pitanje nedovršenosti aplikacija tretiram kao neminovnost prirode posla koji sam obavljao na ovom radnom mestu. Jednostavno, uvek su postojali projekti koji su u začetku (npr. NETIS Kadrovi XP - o.a.), aplikacije čiji je razvoj uveliko u toku (npr. NETIS Finansijsko knjigovodstvo 2000 – o.a.), instalacije koje su u punoj implementaciji sa frekventnim korisničkim zahtevima (npr. NETIS Rampa 2001 – o.a.). Sve više se stiče utisak da je rad na jednom projektu završen kada korisnik prestane da se javlja.

Pojavom Internet-a, sektor proširuje svoje delovanje na izradu web prezentacija, i to kroz one statičke u HTML-u (umetnost.co.yu – o.a.) i dinamičke sa JavaScript pojačanjem (pkv.co.yu – o.a.). U tom smislu se i koriste dva alata : MS FrontPage i Macromedia Dreamveawer UltraDev (diktirani od strane Internet provajdera – o.a.). U ovom polju ja sam realizovao 2 Internet aplikacije, po navedenim strukturama. Ovaj segment aktivnosti, programiranje seli u dizajniranje, što predstavlja kreativan pomak u dosadašnjem radu. Ovakve aplikacije se lako održavaju, i retko dovode do problema u njihovoj eksploataciji, zbog čega ovo polje aplikativnih aktivnosti smatram jednim od strateških pravaca ..."

Danas radim u Privrednoj komori Vojvodine. Još uvek se družim sa Delphi programskim alatom, kada treba da napravim klasičnu MS Windows desktop aplikaciju.

Otkrio sam i svet otvorenog koda, Linuxa, php CMS sistema, koje intenzivno koristim održavajući korporativni portal na adresi www.pkv.rs. Takođe sam upućen i u Microsoft stranu iste CMS priče, kroz MS SharePoint Portal Server za naše Intranet potrebe.

U slobodno programersko vreme me fascinira Java Micro Edition, MS Visual Studio for Windows Phone, kao i nova sveža platforma Android, i sve što je vezano za SmartPhone koncept...