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.