2009. december 15., kedd

Sybase Adaptive Server page-elés

Egyik ügyfelünk Sybase Adaptive Server-t használt. Ha egy adathalmazt page-elve szeretnénk megjeleníteni vagy feldolgozni, akkor ahelyett, hogy a teljes adathalmazt letöltenénk, más SQL szerverekben "gyári" támogatást is kapunk, sőt, a Sybase másik 2 termékében (Sybase SQL Anywhere és Sybase IQ) is van támogatás.

Ha pl. a felhasználó a 6. lapot szeretné látni, és ezért az 50. sortól kezdve 10 sor letöltése szükséges, akkor az így kapható meg:

MySQL:
SELECT * FROM tbl ORDER BY col_1 LIMIT 10,50

Oracle:
SELECT * FROM (SELECT * FROM tbl ORDER BY col_1) WHERE ROWNUM >= 50 and ROWNUM < 60

MS SQL 2005+
SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY col_1) AS RowNum, * FROM tbl) AS MyDerivedTable
WHERE MyDerivedTable.RowNum >= 50 AND MyDerivedTable.RowNum <60

Sybase SQL Anywhere:
SELECT TOP 10 START AT 50 * FROM tbl order by col_1

Sybase IQ:
select * FROM tbl WHERE ROWID(tbl) >= 50 and ROWID(tbl) < 60 ORDER BY col_1

Sybase Adaptive Server: univerzális megoldás sajnos nincs...

1. Ha nem túl nagy a tábla, pl. csak pár száz soros, akkor a fentiekkel azonos funkcionalitású ez a megoldás:

select top 10 * from tbl A where 50 < (select count(*) from tbl X where X.col_1 <= A.col_1) order by col_1

2. Ha a tábla nagy, de nem követelmény, hogy pl. a 6. lapra lehessen ugrani az elsőről, hanem elegendő letöltögetni a részhalmazokat egymás után, akkor valami hasonlót lehet csinálni:

- letöltjük az első 10 sort:
select top 10 * from tbl order by col_1
- a kliens oldalon elmentjük a 10 sor közül az utolsónak az értékét
- letöltjük a következő 10 sort az "utolsó" érték után:
select top 10 from tbl where col_1 > @utolso_ertek order by col_1

2009. december 12., szombat

Eclipse

Azzal szembesültem, hogy nem működik az a Java alapú project-em (konkrétan GWT + EJB), ami előző nap még tökéletesen működött. A GWT indulásakor meghívott service-ek elszálltak exception-nel. Pontosabban nem is a service-ek, hanem maguknak a service-eknek a lekérése JNDI-ből. A szokásos javax.naming.NamingException dobódott, azaz hogy az EJB-s service nincs bound-olva. Furcsa...

Több hibalehetőséget is kizártam: a legutóbbi SVN update-kor volt conflict az egyik config file-nál, amit az SVN-ben levő verzió felhasználásával oldottam fel. Lehet, hogy az vágott oda valaminek, de nem...
Megnéztem az appserver (JBoss) JMX-console-ját, hogy tényleg nincsenek ott JNDI-ben a service-ek. Persze nem voltak.
Egy kevés log bogarászás után kiderült, hogy valami miatt az egész EAR nem deployolódik.
Aprólékosan összehasonlítottam a még működő és a már nem működő deploy log-ját, de továbbra sem volt semmi nyoma, hogy miért nem történik meg a deploy.
A sokadik appserver újraindítás, eltávolítás, hozzáadás után sem volt változás.

Végül újraindítottam az Eclipse-et, hátha... Server indít, JNDI megnéz: láss csodát, a service-ek jelen vannak!

A tanulság amit már többször levontam, de néha mégis figyelmen kívül hagyok elsőre: ha valami rossz, nem jól működik, akkor az első dolog, amit tenni kell egy Clean, aztán ha még mindig nem, akkor a második teendő az Eclipse restart. Végül most is megoldotta ezt az idegesítő problémát ez a "módszer".

Zs.Sz.

2009. december 10., csütörtök

PHP fejlesztőt keresünk

Egyik csapatunk bővítéséhez PHP fejlesztőt keresünk! A PHP mellett Java tudás előny!

2009. december 9., szerda

Java fejlesztőket keresünk

Egyik csapatunk bővítéséhez Java fejlesztőket keresünk! Több pozícióba különböző jártasságú munkatársakat várunk.

2009. december 4., péntek

Amazon EC2 most már EBS-ről is

Egyik projektünk a production szervereihez az Amazon Elastic Computing Cloudot (EC2) használja, amelyben a megnövekedett igény szerint indíthatunk el új virtuális gép példányokat. Az Amazon EC2 szolgáltatását és a kapcsolódó szolgáltatásait kényelmesnek és könnyen használhatónak találjuk, ezért figyelemmel kísérjük annak fejlesztését is:

Az Amazon a mai naptól támogatja az EC2 példányok indítását Elastic Block Storage-ról (azaz EBS) is. Ezzel megszünteti azt a nagy hiányosságát az EC2-nek, hogy a virtuális gépek nem tartották meg állapotukat a gépek kikapcsolása és hiba miatti leállása esetén. Az EBS-en tárolt imagek lehetővé teszik, hogy az adatok perzisztensen megmaradjanak az imagen, illetve sokkal gyorsabb EC2 instance indulást eredményeznek, hiszen az imageket nem kell bundle-be szervezni (nincsenek letömörítve) és nem az S3 hálózatból kell letölteni őket. Az indulási sebességen kívül a imagek méretkorlátja is megnőtt, ha EBS imageket használunk. Az S3-on tárolt AMI-k méretkorlátja 10 GB, míg EBS változatoké eléri az 1TB-ot.

Lesz hely bőven játszani :)

K.B.

2009. december 3., csütörtök

Irodai képek

Az iroda épülete:



Esti látkép az iroda egyik ablakából:



Nyári látkép a másik oldalon:



És télen...

2009. december 2., szerda

PHP Symfony: Egy jól komponált keretrendszer, 2. rész

A srácok a Sensio Labsnál nem csak a Symfony további javításán és kiegészítésén törik a fejüket, de a PHP-s közösség számára elérhetővé tették a Symfony néhány alkotóelemét, többek közt a zseniális templating rendszerét, és a dependency injection containerét is.

A rendszer ajánlható mindenkinek, akinek egy jó, robosztus, széleskörűen támogatott, nagy közösséggel bíró környezetben akarja készíteni mindennapi kódját.

A napokban jött ki az 1.3-as, és az 1.4-es verzió. A kettő között a különbség az 1.4-es verzió backward compatibility opciójának hiánya az 1.0-s verzió felé. Ez egyben azt is jelzi, hogy az 1.4 LTS verziónak lett tervezve, így aki új projectbe kezd, annak érdemes ezt a verziót választania.

Ízelítőnek érdemes megnézni azt a néhány screencastot ami néhány alapvető szolgáltatást hivatott bemutatni:

http://www.symfony-project.org/screencast/cart
http://www.symfony-project.org/screencast/admin-generator

Aztán ha megjött az étvágy, irány a tutorial, illetve az install guide...

További infó:
http://www.symfony-project.org/
http://components.symfony-project.org/

Az EPAM debreceni iroda fejlesztői számára élmény ezzel a frameworkkel dolgozni!

Zs.Sz.

PHP Symfony: Egy jól komponált keretrendszer, 1. rész

Az előző projectjeink egyikén, mely PHP-Java hibrid volt (PHP frontend, Java Webservice backend) Symfony-t használtunk PHP keretrendszernek. Konkrétan 1.0-ás verziót, ami bár már lassan három éves, még mindig jól tartja magát a többi framework között.

Az alap filozófia azóta is vajmi keveset változott: adott egy nagyon jól használható MVC framework, AJAX supporttal, admin felület generálással (a'la Ruby on Rails, Groovy on Grails, etc.), és sok-sok pluginnel, amelyekkel a legtöbb dolgot pikk-pakk össze lehet pakolni.

Az 1.0-ás verzió alapból Propel-t használt ORM réteg gyanánt, annak is az 1.2-es verzióját, aminek a Creole-os alapja kis performancia-veszteséget okozott, de egyrészt a Symfony 1.2-es verziója óta a Propel-t update-elték 1.3-asra (ami már PDO-t használ adatbázis absztrakcióra), másrészt (sokak örömére) out-of-the-box tartalmaz Doctrine-t is, ráadásul alapértelmezettként. Persze a Doctrine hiánya korábban sem volt akadály a Symfony-t használni akaróknak, pluginként azt is könnyen összepászító a keretrendszerrel.

A Prototype Javascript framework is megtalálható a Symfony-ban már kezdetek óta (a rendszer Javascript helperei is ezen alapulnak), de ha éppen nem ezzel szimpatizálunk, akkor (mondani sem kell) a pluginok között találhatunk jQuery, YUI, Ext, Dojo librarykat segítő kiegészítőket is.

Zs.Sz.

2009. november 29., vasárnap

Térkép

Az iroda címe: Debrecen, Füredi út 18.


View Larger Map

2009. november 26., csütörtök

Kocka mánia

Nagyon népszerűek az irodában a Rubik kocka különböző variánsai. Ízelítőül a legújabb szerzemények:

http://www.dealextreme.com/details.dx/sku.16334
http://www.dealextreme.com/details.dx/sku.16332
http://www.dealextreme.com/details.dx/sku.16330
http://www.dealextreme.com/details.dx/sku.25028
http://www.dealextreme.com/details.dx/sku.26651
http://www.dealextreme.com/details.dx/sku.26682

Reklámok a keresőkben: PHP és NuSOAP

Egyik csapatunk olyan alkalmazást fejleszt, amely az ügyfél PHP-s rendszerét univerzális kereső reklám (Search Engine Advertising) motorral egészíti ki. Ezen motor segítségével kanonikus alakra hozott adatok alapján bármilyen SOAP XML generálható és az adott szolgáltatónak (Google - AdWords, MSN - AdCenter, Yahoo - EWS) elküldhető.

A feladat szépsége az, hogy csak egyetlen UI felületet kell felparaméterezni, mindig csak ugyanazokat az inputokat megadva, majd a motor ezeket az adatot felhasználva egy saját formátumot hoz létre, amiket egy rekurzív algoritmus XML-lé alakít.

Minden szolgáltatónak definiáltuk az XML struktúráit: milyen XML-t fogad és ad vissza, amit a PHP környezetben inkább ismert YML formátumú fájlokban írtuk le. A motor ezt a leírót felhasználva állítja elő a megfelelő XML-eket az input adatokból.

Az ügyfél ezután pár kattintással célzott reklám kampányokat generálhat a hírdetési piac minden nagy szereplőjének a rendszerébe.

M.I.

2009. november 25., szerda

XML, Smooks és a Java

Egyik ügyfelünknek, akinek egy online zeneáruházat és közösségi portált fejlesztettünk, szüksége volt arra, hogy zeneszolgáltatóktól (EMI, The Orchard, eRecords, stb.) videószolgáltatóktól (Getty Images, Meet the Author, Lionsgate, Fhm, stb.) illetve újságoktól (Guardian, Blues And Souls, Clash, stb.) érkező adatokat tároljunk le az adatbázisban úgy, hogy az input adatok a szolgáltatónként eltérnek.

A megoldáshoz egy thirdparty alkalmazást használtunk, amely neve Smooks. A Smooks segítségével képesek voltunk különböző formátumú XML-ek (statikus XML vagy dinamikus RSS) és CSV formátumú fájlokat egy kanonikus sémára alakítani - természetesen a tartalom típusának megfelelően. Ezeket a kanonikus adatokat már csak egy egyszerűen megírt Java Spring/Hibernate backend alkalmazás letárolta. Az adatok mennyiségének szemléltetésére: az egyik szolgáltató 8Tb, a másik 6Tb zenét küldött.

Az alkalmazás 30 különböző szolgáltató adatait volt képes egyszerűen és gyorsan kezelni. Mivel nem minden adat volt tartalmilag is megfelelő, szükség volt egy karbantartó felületre is, amely a már említett Spring / Java-s backendet kiegészítve egy Google GWT / EXT-es alkalmazással valósítottunk meg. Első ránézésre igen komoly feladatnak tűnik, de kis gyakorlattal nagyon gyorsan lehet haladni ezeket az eszközöket használva.

M.I.

Selenium

Egyre nagyobb az igény a már meglévő webes alkalmazások automatikus tesztelésére, és az új fejlesztéseknél szinte kötelező ilyen módon bizonyítani a megfelelőséget.

A Selenium az egyik vezető megoldás ezen a területen. Sokféle módon és sokféle nyelven használható: .NET, Perl, Java, PHP, Python, Ruby. De van IDE is, amely segítségével szinte kódolás nélkül készíthetők egyszerűbb tesztek. Bonyolultabb esetekben pedig akár saját JavaScript funkciókat is futtathatunk a háttérben.

Nálunk a Java programozók szinten napok alatt elsajátították a használatát, és azóta is gyakran kérdeznek mások az itteni tapasztalatokról.

2009. november 21., szombat

Sybase

Egyik ügyfelünk Sybase Adaptive Server Enterprise SQL szervert használ, így aztán az ezen a projekten dolgozó csapat egy Sybase specialistával bővült. A Microsoft SQL Server-hez, Oracle-höz, de még a MySQL-hez szokott fejlesztők is meglepődtek, mennyi kényelmi funkció hiányzik még mindig a Sybase-ből...

2009. november 20., péntek

Olajipar

A norvégiai projekt indító után nálunk, a debreceni irodában folytatódik az egyik fejlesztés régi ügyfelünk számára.

A fejlesztés nagyobb részt C++ / OpenGL, kisebb részt .NET / C#

A kolléga ígért fotókat is :)

Ruby on Rails

Ha nem is szédítő ütemben növekvő, de azért létező igény van Ruby on Rails fejlesztésre és így programozókra is. Egyik kollégánk már lezárt egy ilyen projektet és újabb érdeklődő ügyfél bukkant fel...

2009. november 18., szerda

H1N1

Több helyen is leközölték (pl. itt) azt a kutatási eredményt, amely szerint a felsőfokú végzettségűek sokkal nagyobb arányban oltatják be magukat H1N1 ellen, mint a többiek.

Nálunk természetesen diplomás minden szoftverfejlesztő, és az oltási arány eléri az 50%-ot. Ezt csak részben magyarázza az a tény, hogy az EPAM ingyen biztosítja az oltást minden dolgozónak és családtagjainak, hiszen az iskolásoknak is ingyen adja az oltást az állam, mégis sokkal kisebb arányban kértek oltást.

2009. november 17., kedd

Olasz meló

Kollégánk pár napot Rómában töltött az egyik ügyfél kérésére. A munka Java és PHP kódolás, egyelőre a PHP oldal erősítése van tervezve, akár lehet jelentkezni is!

Szerencsére jutott idő néhány fényképet is készíteni:

A Colosseum éjjel és nappal:




A Vatikán múzeum és a Szent Péter bazilika:




Úgy látszik hazafelé már sietős volt az út: