<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>CodePlay</title>
	<atom:link href="http://codeplay.hu/feed/" rel="self" type="application/rss+xml" />
	<link>http://codeplay.hu</link>
	<description>Kitaláljuk, lefejlesztjük, telepítjük</description>
	<lastBuildDate>Wed, 21 Dec 2011 14:48:53 +0000</lastBuildDate>
	<language>hu</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>PHP fejlesztői környezet OSX-en</title>
		<link>http://codeplay.hu/developer/2011/10/osx-php/</link>
		<comments>http://codeplay.hu/developer/2011/10/osx-php/#comments</comments>
		<pubDate>Sun, 23 Oct 2011 11:13:36 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[mcrypt]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[snow leopard]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=215</guid>
		<description><![CDATA[Ha jól emlékszem lassan három hónapja gyűröm a MacBook Pro-t, és próbálom elfelejteni az évek alatt beidegződött Windows-t több kevesebb bosszúság árán. Eljutottam addig a pontig, hogy már nem csak felhasználóként szeretném használni az OSX-et, hanem az új webtárhely oldalunkat a Tárhelypark-ot oldalt is szeretném ezen fejleszteni és tesztelni mielőtt éles üzembe kerül. Mivel egyelőre [...]]]></description>
			<content:encoded><![CDATA[<p>Ha jól emlékszem lassan három hónapja gyűröm a <a href="http://www.apple.com/hu/macbookpro/">MacBook Pro</a>-t, és próbálom elfelejteni az évek alatt beidegződött Windows-t több kevesebb bosszúság árán. Eljutottam addig a pontig, hogy már nem csak felhasználóként szeretném használni az <a href="http://www.apple.com/hu/macosx/">OSX</a>-et, hanem az új <a href="http://tarhelypark.hu">webtárhely</a> oldalunkat a <a href="http://tarhelypark.hu">Tárhelypark</a>-ot oldalt is szeretném ezen fejleszteni és tesztelni mielőtt éles üzembe kerül. Mivel egyelőre ezt <a href="http://wordpress.com/">WordPress</a>-el tervezzük, ezért szükségem van a Mac-en egy <a href="http://httpd.apache.org">Apache</a>/<a href="http://php.net">PHP</a>/<a href="http://www.mysql.com">MySQL</a> fejlesztői környezetre, amit most össze is rakok.</p>
<p><span id="more-215"></span></p>
<p>Állítólag a <a href="http://www.apple.com/hu/macbookpro/">Mac</a> már alap kiszerelésben is egy fejlesztői gép, ezért minden van rajta kezdve az <a href="http://httpd.apache.org">Apache</a>-tól a <a href="http://php.net">PHP</a>-n át a <a href="http://rubyonrails.org/">Ruby</a>-ig. Ez talán igaz is lehetne, ha nem derült volna ki azonnal, hogy azért egy kis tuningolás nem árt, mert egy alap <a href="http://wordpress.com/">WordPress</a> futtatásához hiányzik egy két dolog: a PHP telepítésből az mcrypt könyvtár, a <a href="http://www.mysql.com">MySQL</a> adatbázis kezelő, és némi Apache konfiguráció.</p>
<p>A konfiguráció amin dolgozom: Mac OS X 10.6.8 (10K549) &#8211; Snow Leopard</p>
<h2>OSX Apache konfiguráció</h2>
<p>Az OSX-ben már benne van az Apache, de nem fut, el kell indítani:</p>
<p><code>$ sudo apachectl start</code></p>
<p>leállítani vagy újraindítani így tudod:</p>
<p><code>$ sudo apachectl stop</code></p>
<p><code> </code></p>
<p><code>$ sudo apachectl restart</code></p>
<p>Ha fut a webszerver akkor a localhost-on már látnod is kell egy böngészőből:</p>
<p><code>http://localhost</code></p>
<h3>Apache Virtuális hosztok</h3>
<p>Én szeretem a virtuális hosztok használatát, mert így könnyebb megjegyezni az egyes alkalmazások elérését, és nem kell foglalkozni az elérési utakkal az URL-ben. Úgy terveztem, hogy a létrehozott oldalakat a saját Sites könyvtáramban fogom tárolni a /Users/user/Sites könyvtárban, mert ezt használja több program is alapértelmezésben.</p>
<p>Az Apache konfigurációs fájlban (/etc/apache2/httpd.conf) engedélyezni kell a virtuális hosztokat:</p>
<p><strong>/etc/apache2/httpd.conf</strong></p>
<p><code># Virtual hosts<br />
Include /private/etc/apache2/extra/httpd-vhosts.conf</code></p>
<p>A httpd.vhosts.conf konfigurációs fájlban felvettem a tarhelypark.local domain-hez tartozó hosztot.</p>
<p><strong>httpd-vhosts.conf</strong></p>
<p><code>ServerAdmin xyz@codeplay.hu<br />
DocumentRoot "/Users/kepes/Sites/tarhelypark-wp"<br />
ServerName tarhelypark.local<br />
ServerAlias *.tarhelypark.local<br />
ErrorLog "/private/var/log/apache2/tarhelypark.local-error_log"<br />
CustomLog "/private/var/log/apache2/tarhelypark.local-access_log" common</code></p>
<p><strong>Hosts fájl az OSX-en</strong></p>
<p>Ahhoz, hogy a virtuális hosztok működjelenk, még fel kell venni a megfelelő nevűt a /etc/hosts fájlba. A ServerName paraméterben megadott nevet kell hozzákapcsolni a localhost Ip címéhez.</p>
<p><code>$sudo nano /etc/hosts</code></p>
<p><code>127.0.0.1       localhost<br />
255.255.255.255 broadcasthost<br />
::1             localhost<br />
fe80::1%lo0     localhost<br />
127.0.0.1       tarhelypark.local<br />
127.0.0.1       myadmin.local<br />
127.0.0.1       blog.tarhelypark.local</code></p>
<p>Miután ezt felvettük, és az Apache újraindult, a böngészőből el lehet érni a szervert a tarhelypark.local beírásával.</p>
<h2>Symbolic link not allowed or link target not accessible</h2>
<p>Jól használhatók még a szimbolikus linkek is, amiket trükkös engedélyezni. Nem a fő konfigurációs fájlban kell beállítani a FollowSymlinks paramétert mert egy inkludált konfig fájl felülírja azt.</p>
<p><strong>/etc/apache2/users/username.conf</strong></p>
<p><code>Options Indexes MultiViews FollowSymlinks<br />
AllowOverride All<br />
Order allow,deny<br />
Allow from all<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php-source .phps</code></p>
<p>Amiért még ilyen hibaüzenetet kaphatunk, az a könyvtár jogosultsága amire a szimbolikus link mutat. Ha a konfiguráció után még mindíg jelentkezik a probléma, akkor jól nézd át a jogokat és tulajdonosokat!</p>
<h2>PHP konfiguráció</h2>
<p>Eredetileg nincsen php.ini fájl, létre kell hozni a /etc könyvtárban</p>
<p><code>$ sudo cp /etc/php.ini.default /etc/php.ini</code></p>
<h2>PHP és mcrypt</h2>
<p>A PHP alap konfigurációból hiányzik az mcrypt könyvtár, ami számos programhoz, például a PHPMyAdmin-hez is szükséges. Ezt most pótolni fogjuk.</p>
<p>Először is nézzük meg milyen php verzió fut a gépen:</p>
<p><code>$ php -v</code></p>
<p><code>PHP 5.3.4 (cli) (built: Dec 15 2010 12:15:07)</code></p>
<p><code>Copyright (c) 1997-2010 The PHP Group</code></p>
<p><code> </code></p>
<p><code>Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies</code></p>
<p>Nálam a PHP 5.3.4. Ahhoz, hogy az mcrypt-et hozzá tudjuk kapcsolni a PHP-hez szükségünk van a következő három dologra:</p>
<ul>
<li><a href="http://developer.apple.com/technologies/mac/" target="_blank">Xcode 3</a>, amihez Apple Developer-é kell válnunk. Ez egy kicsit macerás, az xcode telepítve 9 Gb</li>
<li><a href="http://sourceforge.net/projects/mcrypt/files/Libmcrypt/" target="_blank">mcrypt könyvtár (libmcrypt)</a></li>
<li><a href="http://www.php.net/releases/" target="_blank">PHP forráskód</a>, a megfelelő verzióval</li>
</ul>
<p>Az xcode telepítése után csomagold ki a libmcrypt és php letöltéseket. A libmcrypt fordítása:</p>
<p><code>$ ./configure</code></p>
<p><code>$ make</code></p>
<p><code> </code></p>
<p><code>$ make install</code></p>
<p>A PHP-ből nincsen szükség a teljes csomag lefordítására, csak az mcrypt kiegészítő szükséges:</p>
<p><code>$ cd php-/ext/mcrypt/</code></p>
<p><code>$ sudo phpize</code></p>
<p><code>$ sudo ./configure</code></p>
<p><code>$ sudo make</code></p>
<p><code> </code></p>
<p><code>$ sudo make install</code></p>
<p>Ezek után létre kell jöjjön egy .so fájl a /usr/lib/php/extensions/no-debug-non-zts-20090626 könyvtárban.</p>
<p>Az <strong>/etc/php.ini</strong> fájlban szerepelnie kell a következő két sornak:</p>
<p><code>extension_dir=/usr/lib/php/extensions/no-debug-non-zts-20090626<br />
extension=mcrypt.so</code></p>
<p>Az Apache újraindításával a phpinfo-ban meg kell jelennie az mcrypt könyvtárban.</p>
<p><a href="http://codeplay.hu/wp-content/uploads/2011/09/php-mcrypt.png"><img class="aligncenter size-medium wp-image-222" title="PHP mcrypt" src="http://codeplay.hu/wp-content/uploads/2011/09/php-mcrypt-300x149.png" alt="" width="300" height="149" /></a></p>
<h2>MySQL</h2>
<p>A MySQL letöltés és telepítése egyszerű, ezt nem részletezem. Miután a telepítés befejeződött szükség van a my.cnf konfigurációs fájl létrehozására a /etc könyvtárban. Én a fejlesztéshez a legkisebb példa konfigurációt, a my-small.cnf fájlt választottam.</p>
<p><code>$ sudo cp /usr/local/mysql/support-files/my-small.cnf /etc/my.cnf</code></p>
<p>Alapértelmezés szerint a PHP rossz helyen keresi a sock fájlt, ezért meg kell változtatni a /etc/php.ini fájlban a mysql.default_socket bejegyzést:</p>
<p><code>mysql.default_socket = /tmp/mysql.sock</code></p>
<p><code>$ sudo /Library/StartupItems/MySQLCOM/MySQLCOM start</code></p>
<p>Érdemes belerakni a MySql-t a path -ba</p>
<p><code>$ nano ~/.profile<br />
export PATH=$PATH:/usr/local/mysql/bin</code></p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/developer/2011/10/osx-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Facebook alkalmazás &#8211; Küldj egy lapot</title>
		<link>http://codeplay.hu/news/2011/08/facebook-alkalmazas-kuldj-egy-lapot/</link>
		<comments>http://codeplay.hu/news/2011/08/facebook-alkalmazas-kuldj-egy-lapot/#comments</comments>
		<pubDate>Fri, 26 Aug 2011 09:10:15 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Hírek]]></category>
		<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[alkalmazás]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=202</guid>
		<description><![CDATA[Elindult az Allianz Biztosító megrendelésére készített Facebook alkalmazásunk a Küldj egy lapot. A játékban a felhasználók négy szituáció közül választhatnak, melybe ismerőseik arcát &#8220;behúzva&#8221; vicces képeket tudnak készíteni egy-egy képzeletbeli nyaralásról. A résztvevők között az Allianz egy darab két személyes Wellness hétvégét sorsol ki a játék végén. A fejlesztés során az ilyen jellegű játékokban megszokott [...]]]></description>
			<content:encoded><![CDATA[<p><p>Elindult az <a href="https://www.allianz.hu">Allianz Biztosító</a> megrendelésére készített <a href="http://codeplay.hu/facebook">Facebook alkalmazásunk</a> a <a href="http://www.kuldjegylapot.hu/">Küldj egy lapot</a>. A játékban a felhasználók négy szituáció közül választhatnak, melybe ismerőseik arcát &#8220;behúzva&#8221; vicces képeket tudnak készíteni egy-egy képzeletbeli nyaralásról. A résztvevők között az Allianz egy darab két személyes Wellness hétvégét sorsol ki a játék végén. A fejlesztés során az ilyen jellegű játékokban megszokott Flash animáció helyett <a href="http://jquery.com/">JQuery-t</a> használtunk, a szerver oldalon <a href="http://rubyonrails.org/">Ruby on Rails</a> dolgozik. A nagy látogatószám kiszolgálására képes szervert a <a href="http://tarhelypark.hu">Tárhelypark.hu</a> biztosítja.</p>
<p><span id="more-202"></span><br />
<a href="http://codeplay.hu/wp-content/uploads/2011/08/kuldjegylapot.jpg"><img src="http://codeplay.hu/wp-content/uploads/2011/08/kuldjegylapot-300x195.jpg" alt="Küldj egy lapot nyitó képernyő" title="Küldj egy lapot" width="300" height="195" class="aligncenter size-medium wp-image-207" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/news/2011/08/facebook-alkalmazas-kuldj-egy-lapot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook alkalmazás &#8211; Soproni nem nyertem</title>
		<link>http://codeplay.hu/news/2011/08/facebook-alkalmazas-soproni-nem-nyertem/</link>
		<comments>http://codeplay.hu/news/2011/08/facebook-alkalmazas-soproni-nem-nyertem/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 09:27:45 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Hírek]]></category>
		<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[alkalmazás]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=209</guid>
		<description><![CDATA[A Soproni és a Port.hu közös promóciója a rengeteg TV spottal megtámogatott &#8220;Nem nyertem&#8221; reklámhadjárat, melyben a Hol söröz oldalról indulva egy nem nyertes Soproni kuponnal bárki meghívhatja öt barátját egy sörözésre, az első kört a Soproni állja. A Facebook alkalmazás érdekessége, hogy több rendszert kötöttünk össze, melyben részt vett a Port.hu fejlesztőcsapata is. A [...]]]></description>
			<content:encoded><![CDATA[<p>A <a href="http://soproni.hu/">Soproni</a> és a <a href="http://port.hu/">Port.hu</a> közös promóciója a rengeteg <a href="http://soproni.hu/letoltesek.html">TV spottal megtámogatott</a> &#8220;Nem nyertem&#8221; reklámhadjárat, melyben a <a href="http://port.hu/pls/w/holsorozz.index2">Hol söröz</a> oldalról indulva egy nem nyertes Soproni kuponnal bárki meghívhatja öt barátját egy sörözésre, az első kört a Soproni állja. A Facebook alkalmazás érdekessége, hogy több rendszert kötöttünk össze, melyben részt vett a Port.hu fejlesztőcsapata is. A felhasználó a <a href="http://port.hu/">Port.hu</a>-ról vagy a <a href="http://port.hu/pls/w/holsorozz.index2">Hol söröz</a>-ről indulva jut el a Facebook alkalmazásig, ahol meghívhatja ismerőseit, összeállítva a meghívotti listát. Az ismerősök értesítést kapnak a meghívásról, majd bekerülnek a Port.hu rendszerébe is.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/news/2011/08/facebook-alkalmazas-soproni-nem-nyertem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook alkalmazás &#8211; Üzemanyagár tippelő</title>
		<link>http://codeplay.hu/news/2011/04/facebook-alkalmazas-uzemanyag/</link>
		<comments>http://codeplay.hu/news/2011/04/facebook-alkalmazas-uzemanyag/#comments</comments>
		<pubDate>Tue, 26 Apr 2011 09:14:00 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Hírek]]></category>
		<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[alkalmazás]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=195</guid>
		<description><![CDATA[A múlt héten került éles üzembe új Facebook alkalmazásunk a Genertel Biztosító megrendelésére. Az Üzemanyagár Figyelő játékban a felhasználók a következő heti benzin és dízel üzemanyagárat tippelhetik meg. A helyes tippelők között minden héten 50-50 liter üzemanyag kerül kisorsolásra, ami véleményem szerint elég jó nyereménynek számít a Facebook játékok között, tekintve, hogy egy folyamatos játékról [...]]]></description>
			<content:encoded><![CDATA[<p>A múlt héten került éles üzembe új <a href="http://codeplay.hu/facebook/">Facebook alkalmazásunk</a> a <a title="Genertel honlap" href="https://www.genertel.hu/">Genertel Biztosító</a> megrendelésére. Az <a title="Üzemanyagár figyelő alkalmazás" href="http://apps.facebook.com/uzemanyagar-figyelo/">Üzemanyagár Figyelő</a> játékban a felhasználók a következő heti benzin és dízel üzemanyagárat tippelhetik meg. A helyes tippelők között minden héten 50-50 liter üzemanyag kerül kisorsolásra, ami véleményem szerint elég jó nyereménynek számít a Facebook játékok között, tekintve, hogy egy folyamatos játékról beszélünk, nem pedig egy egyszeri sorsolásról. A játék érdekessége fejlesztési szempontból, hogy a nyertesek sorsolását is elvégzi az adminisztrátori felületről, ahonnan az aktuális árak is feltölthetők.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/news/2011/04/facebook-alkalmazas-uzemanyag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Fájlrendszerek (ext3, ext4, xfs) és RAID összehasonlítás</title>
		<link>http://codeplay.hu/administration/2011/02/filesystems-ext3-ext4-xfs-raid/</link>
		<comments>http://codeplay.hu/administration/2011/02/filesystems-ext3-ext4-xfs-raid/#comments</comments>
		<pubDate>Sun, 20 Feb 2011 11:52:59 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Adminisztráció]]></category>
		<category><![CDATA[szerver]]></category>
		<category><![CDATA[tárhelypark]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=166</guid>
		<description><![CDATA[Új Tárhelypark szerverünk telepítésekor nagy dilemma volt milyen fájlrendszert válasszunk, illetve maradjunk a már bevált hardveres SATA1 RAID vezérlőnél, vagy versenybe szállhat az alaplapi SATA2 RAID vezérlő is. Aránylag olcsó megoldást szerettünk volna, így most hardveres SATA2 raidvezérlőre nem gondoltunk.  Az Internetet böngészve számos forrást találtunk mindkét fő kérdésben pro és kontra egyaránt, és további [...]]]></description>
			<content:encoded><![CDATA[<p>Új <a title="Új tárhely és vps szerver" href="http://tarhelypark.hu/news/2011/02/szerver/">Tárhelypark szerverünk</a> telepítésekor nagy dilemma volt milyen fájlrendszert válasszunk, illetve maradjunk a már bevált hardveres SATA1 RAID vezérlőnél, vagy versenybe szállhat az alaplapi SATA2 RAID vezérlő is. Aránylag olcsó megoldást szerettünk volna, így most hardveres SATA2 raidvezérlőre nem gondoltunk.  Az Internetet böngészve számos forrást találtunk mindkét fő kérdésben pro és kontra egyaránt, és további problémát okozott a döntésben, hogy<a title="Fájlrendszer összehasonlítás" href="http://www.debian-administration.org/articles/388"> egyes cikkek igen régiek</a>, ez által elavultak lehetnek. Az eredményeket egy <a title="Bonnie EXT3, EXT4, XFS és RAID" href="https://spreadsheets.google.com/ccc?key=0AtsBSKyfERa0dFcyTDk2VkdHb0VjOFZQY3BKcHMtLXc">Google Docs táblázatban összefoglaltam</a>, ezt fogom egy picit elemezgetni.</p>
<p><span id="more-166"></span></p>
<h3>A teszt környezet</h3>
<p>A teszt szerver konfigurációja a következő volt. Egyedül a Hardwer RAID és Szoftver RAID teszteléséhez volt különbség a konfigurációban, ahol a RAID kártyát értelemszerűen csak a tesztek egyik részénél használtuk.</p>
<table style="width: 100%;" border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>Processzor</td>
<td><a href="http://ark.intel.com/Product.aspx?id=48496">Intel Core i5 760</a></td>
</tr>
<tr>
<td>Memória</td>
<td>16 GB Kingston DDR3-1333</td>
</tr>
<tr>
<td>Alaplap</td>
<td>Intle LGA 1156 Platform Intel H55 Express chipset</td>
</tr>
<tr>
<td>Merevlemez</td>
<td>4db Seagate ST31000528AS</td>
</tr>
<tr>
<td>RAID kártya</td>
<td>Adaptec 2410SA 64Mb cache (write-thrught)</td>
</tr>
<tr>
<td>Alaplapi HDD vezérlő</td>
<td>
<div id="_mcePaste">Intel® H55 Express Chipset built-in 6 xSATA 3.0 Gb/s ports</div>
</td>
</tr>
<tr>
<td>Operációs rendszer</td>
<td>CentOs 5.5</td>
</tr>
<tr>
<td>Kernel</td>
<td>Linux version 2.6.18</td>
</tr>
<tr>
<td>RAID level</td>
<td><a title="RAID levels" href="http://hu.wikipedia.org/wiki/RAID">RAID10</a></td>
</tr>
</tbody>
</table>
<p>A szoftveres RAID-hez a Linux-ban támogatott Multiple Device Drivert (Linux Software Raid &#8211; md parancs) használtuk.</p>
<h3>Teszt szoftver</h3>
<p>A teszt végrehajtásához a <a href="http://www.coker.com.au/bonnie++/">bonnie++ 1.96</a>-os verzióját használtuk. Ebben több tesztet is összeállítottam, melyek lényegét az alábbi táblázat tartalmazza.</p>
<table style="width: 100%;" border="1px" cellspacing="0" cellpadding="5px">
<tbody>
<tr>
<td width="200px">Bonnie test for IO performance</td>
<td>Csak az adatátvitel tesztelésére, nem történik fájl létrehozás</td>
</tr>
<tr>
<td>Testing with zero size files in directories</td>
<td>Üres fájlok kezelése könyvtárakba rendezve</td>
</tr>
<tr>
<td>Testing with tiny files</td>
<td>Kicsi, 10 bájtos fájlok kezelése könyvtárakba rendezve</td>
</tr>
<tr>
<td>Testing with max 100Kb files with directorie</td>
<td>Maximum 100kb méretű (véletlen méret) fájlok kezelése. Véleményem szerint ez hasonlít a legjobban egy web szerver működésére, főleg tárhely szolgáltatásra <a href="http://www.cpanel.net/">cPanel</a>-el</td>
</tr>
<tr>
<td>Testing with 100Kb to 1Mb files with directories</td>
<td>Fájlok kezelése könyvtárakban 100kb és 1Mb közötti méretben véletlenszerűen. Ez a teszt szerintem jó közelítés MySQL adatbázis kezelő szerverhez.</td>
</tr>
<tr>
<td>Testing with 16Mb size files</td>
<td>16Mb méretű fájlok kezelése. Archiváló szerver működésének szimulálására</td>
</tr>
</tbody>
</table>
<p>Minden tesztelt kikapcsolt és bekapcsolt gyorsítótárral (buffer) is lefuttattam, bár normál működésnél a buffer mindíg be van kapcsolva, így valójában csak ez az érdekes. A tesztek az összes fájlrendszeren lefutottak, mind szoftver mind pedig hardver RAID-et használva.</p>
<p>Az érdekesség kedvéért teszteltem az ext2-es fájlrendszert is, bár ezt éles környezetben nem szeretnénk használni, hiszen nem naplózó fájlrendszer.</p>
<h3>A teszt szkript</h3>
<p><code><br />
MOUNT=/var/lib/vz<br />
SIZE=32042<br />
LOG=bonnie.log<br />
SYSTEM=soft_raid_ext4<br />
date >> $LOG<br />
echo "Bonnie test for IO performance" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 0 -u 0 -r 4092 -s $SIZE -f -b -d $MOUNT >> $LOG<br />
echo "Testing with zero size files in directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 50:0:0:50 -u 0 -r 4092 -s 0 -b -d $MOUNT >> $LOG<br />
echo "Testing with tiny files" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 50:10:1:20 -u 0 -r 4092 -s 0 -b -d $MOUNT >> $LOG<br />
echo "Testing with max 100Kb files with directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 30:100000:0:30 -u 0 -r 4092 -s 0 -b -d $MOUNT >> $LOG<br />
echo "Testing with 100Kb to 1Mb files with directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 30:1000000:100000:30 -u 0 -r 4092 -s 0 -b -d $MOUNT >> $LOG<br />
echo "Testing with 16Mb size files" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 1:17000000:17000000:10 -u 0 -r 4092 -s 0 -b -d $MOUNT >> $LOG<br />
echo "--- Testing with buffer ---" >> $LOG<br />
echo "Bonnie test for IO performance" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 0 -u 0 -r 4092 -s $SIZE -f -d $MOUNT >> $LOG<br />
echo "Testing with zero size files in directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 50:0:0:50 -u 0 -r 4092 -s 0 -d $MOUNT >> $LOG<br />
echo "Testing with tiny files" >> $LOG<br />
echo "Testing with max 100Kb files with directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 30:100000:0:30 -u 0 -r 4092 -s 0 -d $MOUNT >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 50:10:1:20 -u 0 -r 4092 -s 0 -d $MOUNT >> $LOG<br />
echo "Testing with 100Kb to 1Mb files with directories" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 30:1000000:100000:30 -u 0 -r 4092 -s 0 -d $MOUNT >> $LOG<br />
echo "Testing with 16Mb size files" >> $LOG<br />
sync; time bonnie++ -m $SYSTEM -n 1:17000000:17000000:10 -u 0 -r 4092 -s 0 -d $MOUNT >> $LOG<br />
echo "--- end ---" >> $LOG<br /></code></p>
<p><br class="spacer_" /></p>
<h3>Mit vártunk a teszttől</h3>
<p>Az Internetes információk begyűjtése közben a következő lényeges észrevételeket és kérdéseket tettük, melyekre választ kerestünk:</p>
<ul>
<li>Melyik fájlrendszer mire alkalmas, melyik a legmegfelelőbb webszerver, mail szerver, MySQL szerver futtatására vagy adatmentésre.</li>
<li>Igaz-e a legenda, hogy mindegy a fájlrendszernek, hogy SATA1 vagy SATA2 a vezérlő, mivel a merevlemez fizikai sebessége a korlát, nem az átviteli sebesség</li>
<li>Melyik megoldás mennyire biztonságos, igaz-e, hogy a hardware RAID biztonságosabb például merevlemez kiesése vagy áramkimaradás esetén?</li>
</ul>
<h3>HW és SW RAID biztonság</h3>
<p>Az Adaptec hardver RAID kártya biztonságosságához nem fér kétség, hotplug tehát a merevlemezek menet közben cserélhetők, áramkimaradás esetén garantált az adatkonzisztencia, HA és itt egy nagy HA, nincsen bekapcsolva a kártyán levő gyorsítótár, mert ilyet biztonsági elem nélkül ne tegyünk. Backup battery hiányában ugyanis áramszünet esetén a teljes, visszaállíthatatlan adatvesztés esélye igen nagy. A 2410SA-hoz nem vásárolható backup battery sajnos, azonban a teszteket mégis bekapcsolt cache-el végeztem, mert kikapcsolva már az elején siralmas eredményeket kaptam.</p>
<p>Meglepetés volt a szoftver RAID, amiről eddig nem tudtam, hogy hotplug, és lehet nem is minden esetben igaz amit most írok. Biztonsági próba képp működő terhelt állapotban húztam le az egyik merevlemezről a tápkábelt. Az oprendszer üzent mail-ben, logban, és szépen futott tovább a teszt. Ugyanezzel a mozdulattal a tápot visszadugva, a Linux érzékelte az új lemezt, amit utána hozzáadhattam a RAID kötethez ahonnan kiesett. Így már csak az áramszünet okozhat problémát, de itt az adatvesztés esélye nem nagyobb mint a hardver raid esetében kikapcsolt cache-el.</p>
<h3>Eredmény</h3>
<p>A <a href="https://spreadsheets.google.com/ccc?key=0AtsBSKyfERa0dFcyTDk2VkdHb0VjOFZQY3BKcHMtLXc">táblázatban</a> megjelöltem zölddel a legjobb, pirossal a legrosszabb eredményeket. A &#8220;+++&#8221;-al jelölt értékek nem mérhetőek,mert a Bonnie++ dokumentációja szerint olyan gyorsan lefut a teszt, hogy az nem mérhető értelmesen. Ezeket az értékeket én nagyon jónak ítélem. Az elemzésbe kizárólag a bufferelt értékeket néztem.</p>
<p>Az egyes tesztekből az alábbi következtetéseket vontam le</p>
<table style="width: 100%;" border="1px" cellspacing="0" cellpadding="5px">
<tbody>
<tr>
<td width="200px">Bonnie test for IO performance</td>
<td>Az átviteli tesztben a SATA1 egyértelműen lemaradt a SATA2 mögött. Mivel itt a fájlrendszernek nincsen különösebb jelentősége, ezért az egyes fájlrendszerek közeli eredményeket produkáltak.</td>
</tr>
<tr>
<td>Testing with zero size files in directories</td>
<td>Üres fájlok létrehozásával az ext4 és ext3 szoftver raid boldogul a legjobban. Az xfs nem képes értelmes sebességgel fájlokat létrehozni és törölni (bár ehhez nem is használ CPU-t, de ez nem számít). A hardver raid lemaradt egy picit.</td>
</tr>
<tr>
<td>Testing with tiny files</td>
<td>Az XFS szoftver raid veri a mezőnyt, de az EXT4 szoftver raid sem teljesít rosszul a tesztben. A hardver raid itt még próbálja tartani a lépést bár már feleannyi fájlt tud létrehozni mint a SATA2-es szoftver raid</td>
</tr>
<tr>
<td>Testing with max 100Kb files with directorie</td>
<td>Az EXT4 szoftver raid a nyertes, a hardver raid még nagyobb lemaradása mellett. Érthetetlen, hogy az XFS miért marad le ennyire a fájlok törlésében. Gyanús, hogy valami bug van vagy elkonfigurálást követem el</td>
</tr>
<tr>
<td>Testing with 100Kb to 1Mb files with directories</td>
<td>A nagyobb fájloknál a SATA1-es hardver raid egyértelműen lemarad, a mezőnyt az EXT4 vezeti</td>
</tr>
<tr>
<td>Testing with 16Mb size files</td>
<td>Egyértelműen látszik, hogy a SATA1 sebessége nagymértékben befolyásolja a nagyobb fájlok kezelését. EXT4 nyer a fájlrendszerek közül.</td>
</tr>
</tbody>
</table>
<h3>A nyertes</h3>
<p>A tesztekből egyértelmű, hogy a SATA1 sebessége jóval alulmúlja a SATA2 sebességét, nem igaz, hogy nem ez a szűk keresztmetszet. Minél nagyobb fájlokkal dolgozunk, annál szembeötlőbb a különbség.</p>
<p>A fájlrendszerek közül az XFS használja a legkevesebb processzort, de ez mit sem ér, mert nagyságrendekkel lassabb is egyes esetekben. Kizárólag igen kis fájlok esetében használható, aminek most nem látom gyakorlati hasznát. Az ext3 csak néhol és csak kis mértékben kerekedik felül az ext4-en, amit akár tesztelési hibának is tekinthetünk.</p>
<p>A nyertes az ext4 fájlrendszer a szoftveres SATA2 Raid10 konfigurációval. Ezt a fájlrendszert érdemes használni, persze csak abban az esetben ha nem fektetünk be egy hardveres SATA2-es raid vezérlőre.</p></p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/administration/2011/02/filesystems-ext3-ext4-xfs-raid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ruby on Rails kezdetek</title>
		<link>http://codeplay.hu/developer/2011/01/ruby-on-rails/</link>
		<comments>http://codeplay.hu/developer/2011/01/ruby-on-rails/#comments</comments>
		<pubDate>Sun, 16 Jan 2011 17:30:34 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=127</guid>
		<description><![CDATA[Előző bejegyzésében Almi kifejtette, nem sok jót jósolunk a Java technológiának sajnos, így kénytelenek voltunk más fele is nyitni érdeklődésünket. Az iPhone és Android mobil fejlesztések mellett választanunk kell egy Web-es MVC keretrendszert, ami egyszerű, támogatott, és a fejlesztés menete ha lehet gyorsabb minta a Java-s technológiákkal. Én eddig a PHP/Zend Framework párost támogattam, mert [...]]]></description>
			<content:encoded><![CDATA[<p>Előző <a href="http://codeplay.hu/developer/2010/11/mi-lesz-veled-java/">bejegyzésében</a> Almi kifejtette, nem sok jót jósolunk a Java technológiának sajnos, így kénytelenek voltunk más fele is nyitni érdeklődésünket. Az iPhone és Android mobil fejlesztések mellett választanunk kell egy Web-es MVC keretrendszert, ami egyszerű, támogatott, és a fejlesztés menete ha lehet gyorsabb minta a Java-s technológiákkal. Én eddig a <a href="http://zendframework.com/">PHP/Zend Framework</a> párost támogattam, mert PHP-t már láttam előtte, de ennek alternatívája a <a href="http://rubyonrails.org/">Ruby On Rails</a>. Ma megpróbáltam egy minimális &#8220;Hello World&#8221; alkalmazást létrehozni Rails-ben, ennek buktatóit szedtem össze.</p>
<p><span id="more-127"></span></p>
<p>Minél egyszerűbben szerettem volna eljutni addig, hogy böngészőmben megjelenjen az első MVC-s weboldal, tényleg minimális igényekkel, csak azt akartam látni, menyire bonyolult a dolog, nem érdekelt maga a nyelv. Windows 7 alatt próbálkoztam, így egy icsit specifikus az írás, és valószínűleg a problémák is, de könnyen adaptálható más oprendzserre.</p>
<p>Tehát Felmentem a <a href="http://rubyonrails.org/">Ruby On Rails</a> oldalára, és kiválasztottam a <a href="http://rubyonrails.org/download">Letöltés menüpontot</a>, és letöltöttem az éppen aktuális 1.9.2-es verziót. Az oldalon meglehetősen jól nem csak az van leírva, hogy honnan töltsük le a dolgokat, hanem, hogy hogyan indítsuk el a Rails-t. Ez kicsit kevés a Hello World-höz, de jó kiindulás.</p>
<p>A letöltés után a Ruby /doc könyvtárában van egy pdf, ami alapján elkezdtem az első alkalmazás fejlesztését (334. oldal) de ez annyira régi, hogy nem bizonyult megfelelőnek. A parancsok megváltoztak azóta mióta ezt írták, és az 1.9.2 parancsosora másképp működik. Azért a nyelv elsajátítására még jó lehet majd később, elég részletesnek látszik.</p>
<p>A könyv után a <a href="http://guides.rubyonrails.org/getting_started.html">Getting Started</a> leírással próbálkoztam, ami már jóval naprakészebb információkat tartalmazott. Elsőként el kell érni a Ruby-t ami Windows alatt elég egyszerű, mert a telepítő a Start menübe telepít egy &#8221;Start Ruby Command Prompt&#8221; nevű ikont, de más oprendszerben is csak annyi a trükk, hogy a /bin könyvtár legyen a PATH-ben. Próba képpen érdemes lefuttatni a ruby parancsot magéban, ami megjeleníti a paranacs helpjét. Ha megy akkor a Rails telepítéséhez a következő parancs szükséges:</p>
<p><code>gem install rails</code></p>
<p>Érdemes tudni kis háttér információt a fenti parancshoz, mégpedig, hogy a Ruby alaprendszer mellé kis csomagokként telepíthetők kiegészítések, ezek a gem-ek. Ilyen kiegészítő például a Rails is, ami nem a Ruby nyelv része.</p>
<p>Mivel elvileg a keret adott a fejlesztéshez, létrehoztam a projekt könyvtáramat. Ez tetszőleges helyen lehet, és a D: meghajtóra tettem egy ruby_workspace könyvtárba, követve az eddig jól bevált Eclipse-es névkonvenciót. Amint megvan a könyvtár lépjünk is bele &#8211; itt lesznek majd a projektjeink &#8211; majd a <code>rails new helloworld</code> parancsal létrehoztam a helloworld projektet</p>
<p><code> mkdir ruby_workspace<br />
 cd ruby_workspace<br />
 rails new helloworld<br />
 </code></p>
<p>A Rails projekt futtatásához számos gem-et kell telepíteni majd, de ezt a Ruby megoldja, és egy leíróban tárolja minden projekthez, mire van szüksége. Ezek szintén nincsenek még letöltve, ezért letöltöm őket a következő paranccsal:</p>
<p><code>bundle install</code></p>
<p>Elvileg olyan stádiumba került a projekt, hogy akár futtatható lenne egy szerveren, ezért megpróbáltam elindítani:</p>
<p><code>rails server</code></p>
<h3>sqliste3.dll is missing from your computer</h3>
<p>A fenti hibaüzenet jelent meg egy kis ablakban, ami kicsit flusztráló, mert úgy éreztem mindent a Rails leírás szerint csináltam eddig. Kis Google és mindjárt megvan az eredmény, szükségem van az <a href="http://www.sqlite.org">SQLite adatbáziskezelőre</a>, mert az eléréséhez szükséges dolgokat a Ruby telepíti ugyan, de magát az adatbáziskezelőt nem. Gyorsan letöltöttem innen az <a href="http://www.sqlite.org/download.html">SQLite Letöltés oldaláról</a> a DLL verziót, és bemásoltam a Ruby /bin könyvtárába. Sok helyen írják, hogy másoljuk a System32-be de ez utoljára Windows 3.1 alatt volt megengedhető, ezért NE tegyük!</p>
<p>Újra megpróbáltam elindítani a szervert:</p>
<p><code>rails server</code></p>
<h3>bind(2) (Errno::EADDRINUSE)</h3>
<p>Megint egy kis idegesítő szálka a tervem közepén, miszerint 2 perc alatt megvan a Hello World. Nem jöttem rá miért, de valami a Windows 7 alatt rátelepedett a 3000-es portra, amit szegény Rails szerver próbál használni, és így nem tud. Megoldásként át kell rakni a szervert egyel nagyobb portra:</p>
<p><code>rails server -p 3001</code></p>
<p>Csodák csodája, elindult végre:</p>
<p><code> => Booting WEBrick<br />
 => Rails 3.0.3 application starting in development on http://0.0.0.0:3001<br />
 => Call with -d to detach<br />
 => Ctrl-C to shutdown server<br />
 [2011-01-16 13:40:39] INFO  WEBrick 1.3.1<br />
 [2011-01-16 13:40:39] INFO  ruby 1.9.2 (2010-12-25) [i386-mingw32]<br />
 [2011-01-16 13:40:39] INFO  WEBrick::HTTPServer#start: pid=9676 port=3001<br />
 [2011-01-16 13:41:03] INFO  going to shutdown ...<br />
 [2011-01-16 13:41:03] INFO  WEBrick::HTTPServer#start done.</code></p>
<div>A futó szerver tesztelhető a következő linken: <code>http://localhost:3001</code></div>
<h3>Hello Ruby MVC</h3>
<p>Eljutottam oda, hogy végre kiírhatom a böngészőbe az áhított üdvözlést. Először létre kell hozni hozzá egy Controller és egy View osztályt. Szerencsére a Rails generálni tudja ezeket:</p>
<p><code>rails generate controller home index</code></p>
<p>A paranccsal annyit mondtunk, hogy szükségünk van egy home nevű kontrollerre, aminek van egy index akciója. A parancs futása közben a képernyőn megjelenik milyen fájlokat hoz létre, érdemes egyesével átnézni őket tanulás végett, de ezzel most én nem foglalkozom. Gyorsan megmódosítom a /app/views/home/index.html.erb template fájlt, hogy benne legyen a &#8220;Hello Ruby&#8221; és kipróbálom az új kontrolleremet a következő linken: <code>http://localhost:3001/home/index</code></p>
<h3>routes.rb</h3>
<p>Még egy kívánságom van a Ruby isteneitől, hogy az index megjelenéséhez ne kelljen beírni a teljes útvonalat. Ehhez törölni kell a /public/index.html fájlt és konfigurálni kell a rendszert a /conf/routes.rb fájlban.</p>
<p><code>root :to => "home#index"</code></p></p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/developer/2011/01/ruby-on-rails/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mi lesz veled Java?</title>
		<link>http://codeplay.hu/developer/2010/11/mi-lesz-veled-java/</link>
		<comments>http://codeplay.hu/developer/2010/11/mi-lesz-veled-java/#comments</comments>
		<pubDate>Fri, 05 Nov 2010 10:39:35 +0000</pubDate>
		<dc:creator>almergabor</dc:creator>
				<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[sun]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=116</guid>
		<description><![CDATA[Az utóbbi idők fontosabb Java történései: Oracle megvette a Sun-t, így a Java-t is James Gosling a Java szülőatyja otthagyta Sun-t (vagyis már az Oracle-t) Oracle perli a Google-t az Android-os Java miatt (hogy pontosan miért, az számomra elég zavaros) Apple bejelentette, hogy a Mac-es Java-t nem fejlesztik tovább És egyáltalán kevesebbet hallani a Java-ról [...]]]></description>
			<content:encoded><![CDATA[<p>Az utóbbi idők fontosabb Java történései:</p>
<ol>
<li>Oracle megvette a Sun-t, így a Java-t is</li>
<li>James Gosling a Java szülőatyja otthagyta Sun-t (vagyis már az Oracle-t)</li>
<li>Oracle perli a Google-t az Android-os Java miatt (hogy pontosan miért, az számomra elég zavaros)</li>
<li>Apple bejelentette, hogy a Mac-es Java-t nem fejlesztik tovább</li>
<li>És egyáltalán kevesebbet hallani a Java-ról</li>
</ol>
<p>Ezt a témát jártam körbe kicsit részletesebben.</p>
<p><span id="more-116"></span></p>
<p><strong>1.</strong> Ezzel talán az a gond, hogy az Oracle miután megvette a Bea-t, már akkor is gondban volt, hogy mit csináljon azokkal a termékeivel, amikből kettő lett neki, és ez helyzet csak romlott a Sun megvételével, ahol megint csak hasonló termékek voltak. Mintha maga az Oracle sem tudná, hogy például, akkor most Weblogic, vagy Glassfish, vagy IAS. (Na jó, az IAS, csak vicc volt <img src='http://codeplay.hu/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<ul>
<li>Tavaly az Oracle fejlesztői konferencián az előadónak csak záporoztak a kérdések, hogy akkor most IAS-t kell-e használni, vagy Weblogic-ot. A vicc az egészben az volt, hogy pont azokban a napokban látott napvilágot az Sun felvásárlásának a híre, és valaki még a GlassFish-re is rákérdezett, persze az előadó csak az IAS és Weblogic témára tudott mit mondani, mégpedig, hogy Weblogic-ot érdemes használni, az IAS már csak egy ideig lesz támogatva.</li>
<li>A nagy cégekre általában azt mondják, hogy maga az ördög. Ez most sincs másként, mivel az Oracle, így már egy nagyon-nagyon nagy cég lett.</li>
<li>Az ilyen cégek lépéseit mindenki nagyon kritikusan figyeli. Legyen szó akár a Google-ről, az Apple-ről, vagy éppen az Oracle-ről.</li>
<li>Az Oracle adatbázis licenszekről tudjuk, hogy elég drágák, és nem lapul mindenkinek a fiókjában pár darab, így ha lehet, minden informatikai vezető kétszer is meggondolja, hogy kell-e neki Oracle, vagy használjon valami mást, mondjuk MySQL-t.</li>
<li>Mivel még korábban a Sun megvette a MySQL-t, ami így megint csak az Oracle kezében landolt, a lehetőségek tovább szűkültek, mivel  az Oracle ebből is jó kis pénzt szeretne behúzni.</li>
<li>Elég csak megnézni a jelenlegi MySQL árakat: <a href="http://mysql.com/products/">http://mysql.com/products/</a></li>
<li>Egy Clusteres MySQL kb. évi 2 millió forint.</li>
<li>Hogy az emberek mennyire ugranak mindenre amit az Oracle változtat, mutatja a napokban felkapott hír, miszerint a MySQL Classic Edition már nem tartalmazza az InnoDB storage engine-t: <a href="http://www.infoq.com/news/2010/11/MySQL-Classic-InnoDB">http://www.infoq.com/news/2010/11/MySQL-Classic-InnoDB</a></li>
<li>Már több helyen olvastam, hogy ha új projektet indítasz, akkor inkább PostgreSQL-t használj, vagy valamilyen NoSQL terméket.</li>
</ul>
<p><br class="spacer_" /></p>
<p><strong>2.</strong> Hogy James Gosling (http://en.wikipedia.org/wiki/James_Gosling) otthagyta az Oracle-t, inkább csak szimbolikus jelentőséggel bír, de mindenképpen érdekes dolog. A Java fejlesztők körében (persze csak akik egyáltalán tudtak róla), így nem lett sokkal népszerűbb az Oracle.</p>
<p><br class="spacer_" /></p>
<p><strong>3.</strong> A Google felhasznált valamilyen kódrészleteket a Java forrásából. Ezért perel az Oracle: <a href="http://www.infoq.com/news/2010/08/oracle_sues_google">http://www.infoq.com/news/2010/08/oracle_sues_google</a></p>
<p>Az ügy egyébként elég bonyolultnak tűnik, viszont egy érdekes felvetést olvastam valahol: az egész azért van, hogy a Google megvegye a Java-t az Oracle-től, mivel az nem tud vele mit kezdeni, a Google pedig az Android miatt picit felkavarná a Java körüli állóvizet. Nem tudom mennyi igaz belőle, mindenesetre érdekes.</p>
<p><br class="spacer_" /></p>
<p><strong>4. </strong>Mivel egyre több Java fejlesztő használ Mac-et, így sokaknak fájó az a bejelentés, hogy az új Mac OS X Lion operációs rendszerben, már nem lesz alapból megtalálható a Java. Mivel az Apple fejleszti a Mac-es Java-t, és gondolom az Oracle megint csak kicsit pénzéhesen sokat kért, amire Steve Jobs beintett.</p>
<p><br class="spacer_" /></p>
<p><strong>5.</strong> Egyre kevesebbet lehet hallani a Java-ról. Régebben, alig bírtam a Google Reader-em Java-s híreivel, manapság jó ha kéthetente van egy-egy érdekes hír. Mintha már mindenki mindent leírt volna amit tudott a Java-ról. Nincs miről írni, mert nem történik semmi Érdemes megnézni, hogy például az  O&#8217;Reilly kiadónál nincs előkészületben egyetlen Java-s könyv se: <a href="http://oreilly.com/java/index.html">http://oreilly.com/java/index.html</a></p>
<p>Ami még érdekes, hogy maga a Java nyelv és a körülötte lévő technológiák jóval bonyolultabbak, mint kellene.</p>
<p>Ha valaki manapság egy átlag Java-s web-es projektbe belecsöppen, akkor körülbelül a következő dolgokkal találkozhat, amikről tudnia kell:</p>
<ul>
<li>Java</li>
<li>Spring</li>
<li>Hibernate</li>
<li>Struts2</li>
<li>Maven</li>
</ul>
<p>Az előbb felsorolt technológiák mindegyikéről külön könyvek jelentek meg, mindegyik technológia megtanulása hónapokba telik.</p>
<p>Betanulási idő, és legtöbbször sajnos fejlesztési idő szempontjából a PHP, Python vagy akár a Ruby, még mindig sokkal jobb választásnak tűnik, mint a Java (leszámítva a nagyvállalati környezetet).</p>
<p>Bruce Tate könyve elég érdekesen írja le ezt az egész folyamatot, igaz ő a Ruby szempontjából közelíti meg a dolgot, de próbál objektív maradni: <a href="http://pragprog.com/titles/fr_j2r/from-java-to-ruby">http://pragprog.com/titles/fr_j2r/from-java-to-ruby</a></p>
<p>Azt mondja, hogy a feladatok nagy részére sokkal ésszerűbb mást használni, esetében Ruby-t, mind Java-t.</p>
<p><br class="spacer_" /></p>
<p>Most, hogy ezeket így leírtam, azon gondolkodom, hogy mindezt csak önigazolásként gyűjtöttem-e össze. Azért, mert nem látom a jövőmet a Java-ban.</p>
<p>Nem tudom.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/developer/2010/11/mi-lesz-veled-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook alkalmazás iPhone4 nyereményjátékhoz</title>
		<link>http://codeplay.hu/news/2010/11/facebook-alkalmazas-iphone4-nyeremenyjatekhoz/</link>
		<comments>http://codeplay.hu/news/2010/11/facebook-alkalmazas-iphone4-nyeremenyjatekhoz/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 19:00:23 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Hírek]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[social]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=106</guid>
		<description><![CDATA[Most állítottam éles üzembe egy rövid fejlesztésünket, amit a Genertel biztosító rendelt meg. A program a biztosító új nyereményjátékát reprezentáló, meglehetősen egyszerű Facebook alkalmazás, ahol egy 10 kérdéses tesztet kell kitöltenie minden játékosnak a KRESZ-szel kapcsolatban. A játék a helyes válaszok és az idő alapján értékeli a játékosokat, és még &#8220;jogsit&#8221; is generál a játékos [...]]]></description>
			<content:encoded><![CDATA[<p>Most állítottam éles üzembe egy rövid fejlesztésünket, amit a <a href="http://genertel.hu">Genertel </a>biztosító rendelt meg. A program a biztosító új <a href="http://bit.ly/9KxvIW">nyereményjátékát</a> reprezentáló, meglehetősen egyszerű Facebook alkalmazás, ahol egy 10 kérdéses tesztet kell kitöltenie minden játékosnak a KRESZ-szel kapcsolatban. A játék a helyes válaszok és az idő alapján értékeli a játékosokat, és még &#8220;jogsit&#8221; is generál a játékos saját fényképével. Valódi célja azonban, hogy a minden játékos tisztában legyen a Genertel nevével, a Genertel megjelenjen a Facebookon. A fejlesztésen túl a Facebook alkalmazást <a href="http://tarhelypark.hu/">Tárhelypark </a>üzletágunk hosztolja egy elég nagy teljesítményű <a href="http://tarhelypark.hu/szolgaltatasok/vps/">VPS szerveren</a>. A design részben a mi munkánk, főleg a honosítással kapcsolatban voltak vele feladatok. És most pár technikai részlet&#8230;</p>
<p><span id="more-106"></span></p>
<p>A fejlesztéshez a projekt méretét és a Facebook API-t figyelembe véve PHP5-öt választottunk, az adatokat az egyszerűség kedvéért pár MySQL tábla tárolja. Azért, hogy ne a nulláról induljunk, felhasználtuk a <a href="http://framework.zend.com/">Zend Framework</a> legújabb verzióját, így az <a href="http://en.wikipedia.org/wiki/Model%E2%80%93View%E2%80%93Controller">MVC </a>is könnyedén megvalósításra került. A Facebook eléréséhez a legújabb, <a href="http://developers.facebook.com/docs/api">Graph API</a>-t használtuk, ami azért hozott pár meglepetést a Zend-el együtt, de erről majd egy-két későbbi cikkben is megemlékezem. Megjelenítéshez a már bevált <a href="http://jquery.com/">JQuery</a> van az applikáció mögött, bár ez talán csak a kérdések közti &#8220;áttűnésben&#8221; látszik meg.</p>
<p>A projekt talán legnagyobb feladata a jogosítvány generálása volt, úgyhogy remélem sokan generálnak majd jogsit a saját profilképükkel és pontjukkal. A jogsival megszenvedett a grafikus, és a PHP-Facebook-Képkezelés trió is pár órányi guglizást eredményezett. Nevezetesen, hogy a feltöltött képeket Facebook konvertálja (JPG), az applikációban megjelenő egyes képeket pedig cache-eli. Ennek eredményeképp, az a kis, icipici lekerekítés a jogsi sarkainál, ahol az &#8220;átlátszóság&#8221; van, nem volt mindig átlátszó. Aztán még rá kellett illeszteni a jogsi háttérre a profil képet is, ami néha JPG, néha GIF, kideríteni nem egyszerű, mert a Facebook egy redirect-en keresztül adja.</p>
<p>De aztán sikerült, most pedig kíváncsian várom, milyen gyorsasággal terjed el az alkalmazás úgy, hogy a megrendelő elmondása szerint egyáltalán nem lesz hirdetve a nyereményjáték sem a Facebook-on, sem pedig a Genertel saját oldalán. Számítok egy nagy és hirtelen felhasználószám növekedésre, de majd meglátjuk. Remélem a VPS bírja majd. Ha nem, akkor kap még egy-két procit.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/news/2010/11/facebook-alkalmazas-iphone4-nyeremenyjatekhoz/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Jelszavak kezelése cégen belül</title>
		<link>http://codeplay.hu/administration/2010/10/jelszavak-kezelese-cegen-belul/</link>
		<comments>http://codeplay.hu/administration/2010/10/jelszavak-kezelese-cegen-belul/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 09:05:04 +0000</pubDate>
		<dc:creator>almergabor</dc:creator>
				<category><![CDATA[Adminisztráció]]></category>
		<category><![CDATA[dropbox]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[tool]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=97</guid>
		<description><![CDATA[Már régóta probléma cégen belül a jelszavak kezelése. Szolgáltatásokhoz amilyen jelszót megadtunk, felírtuk, elraktuk, elhagytuk, jelszó emlékeztetőt kértünk. Ha ez sem segített újat regisztráltunk. Szerverek esetében természetesen a probléma kicsit bonyolultabb. Persze kulcsozunk, de ezen felül még jelszavakat is adunk. Ezt már jó ha valahol tároljuk. Ötlet volt, hogy írjuk fel egy papírra és be [...]]]></description>
			<content:encoded><![CDATA[<p>Már régóta probléma cégen belül a jelszavak kezelése. Szolgáltatásokhoz amilyen jelszót megadtunk, felírtuk, elraktuk, elhagytuk, jelszó emlékeztetőt kértünk. Ha ez sem segített újat regisztráltunk.</p>
<p><span id="more-97"></span></p>
<p>Szerverek esetében természetesen a probléma kicsit bonyolultabb. Persze kulcsozunk, de ezen felül még jelszavakat is adunk. Ezt már jó ha valahol tároljuk.</p>
<p>Ötlet volt, hogy írjuk fel egy papírra és be a széfbe, de persze nekem általában otthon este tíz körül jut eszembe, hogy ezt vagy azt még el kellene intézni, így ez az ötlet nem jó.</p>
<p>Amikor elkezdtünk alternatívákat keresni, tudtuk, hogy nem lesz tökéletes megoldás, és azt is, hogy a paranoiánkon néha kicsit felül kell kell kerekednünk. Persze tudatában vagyunk annak, ha valaki fel akar valamit törni, akkor fel is töri, de kérdés mennyi idő alatt.</p>
<p>Amit most mi használunk, az a <a href="http://github.com/zdia/gorilla/wiki">Password Gorilla</a> + <a href="http://www.dropbox.com">Dropbox</a> kombó.</p>
<p>A Password Gorilla egy fő jelszót használó alkalmazás ami egy fájlban tárolja a jelszavakat, így csak egy jelszót kell megjegyezzünk.</p>
<p>A Dropbox -ot pedig arra használjuk, hogy ezt a fájlt mindenki elérje.</p>
<p>(Aki nem ismerné a Dropbox-ot az regisztráljon most azonnal itt: <a href="http://www.dropbox.com/referrals/NTI1NDE3NDQ5">http://www.dropbox.com/referrals/NTI1NDE3NDQ5</a> Ez nekem azért jó, mert kapok minden ezen a linken keresztül regisztráló felhasználó után 250MB ingyen tárhelyet. Bocsi, köszi.)</p>
<p>Szóval a Dropbox egy online mentési hely, ahova pakolhatod a fájljaidat, szinkronizálhatod azt a gépeddel és meg is oszthatod azt a Interneten az arra érdemesnek tartott emberekkel.</p>
<p>Mi az egészet úgy használjuk, hogy mindenkinek van Dropbox-a, az egyikünk megosztott egy mappát a többiekkel. Feltelepítettük a Password Gorilla-t, egyikünk létrehozott egy új jelszó fájlt, amit a Dropbox-os mappájába mentett.</p>
<p>Ennyi.</p>
<p>Innentől bárki nyitja meg a fájlt és módosítja a többieknél szinte azonnal ott a változás.</p>
<p>Fontos volt számunkra az is, hogy Mac, Linux és Windows platformon is fusson a dolog, mert mindenki mást használ természetesen.</p>
<p>A következő lépés, hogy mindezt iPhone és Android telefonokon is tudjuk használni. (Bár erre éppen még nem volt szükség, de ki tudja.)</p>
<p>Ti mit használtok?</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/administration/2010/10/jelszavak-kezelese-cegen-belul/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android onItemClick probléma ListView és Button használatakor</title>
		<link>http://codeplay.hu/developer/2010/07/android-onitemclick-problema-listview-es-button-hasznalatakor/</link>
		<comments>http://codeplay.hu/developer/2010/07/android-onitemclick-problema-listview-es-button-hasznalatakor/#comments</comments>
		<pubDate>Tue, 27 Jul 2010 23:16:26 +0000</pubDate>
		<dc:creator>kepes</dc:creator>
				<category><![CDATA[Szoftverfejlesztés]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[fejlesztés]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[Mobil]]></category>

		<guid isPermaLink="false">http://codeplay.hu/?p=40</guid>
		<description><![CDATA[Népszerű és mindenképp használatra javasolt komponens Androidon a ListView. Gyakorlatilag a legtöbbet használt UI elem, bárhmely programot használunk, rendszeresen feltűnik különböző formákban. Lényege, hogy a képernyőn megjelenő elemeket egy listába rendezzük, és ezt a listát görgethetjük le-fel ha nem fér ki minden elem a képernyőre. Használata relative egyszerű, amíg nem akarunk egyedi megjelenést, például Button vagyCheckbox komponenseket [...]]]></description>
			<content:encoded><![CDATA[<p>Népszerű és mindenképp használatra javasolt komponens Androidon a <code>ListView</code>. Gyakorlatilag a legtöbbet használt UI elem, bárhmely programot használunk, rendszeresen feltűnik különböző formákban. Lényege, hogy a képernyőn megjelenő elemeket egy listába rendezzük, és ezt a listát görgethetjük le-fel ha nem fér ki minden elem a képernyőre. Használata relative egyszerű, amíg nem akarunk egyedi megjelenést, például <code>Button</code> vagy<code>Checkbox</code> komponenseket belerakni, mert ekkor azonnal beleütközünk a problémába, a <code>ListView onItemClick</code>event handler nem hívódik meg kattintáskor.</p>
<p><span id="more-40"></span>Az Internet tele van a problémával, de teljes egészében leírt megoldást ritkán találni. Általában utalások vannak rá, hogy tároljunk ID-t a Tag mezőben, vagy írjuk át az <code>Adapter</code>-t, de mik is ezek az utalások tulajdonképpen?</p>
<p>A feladat amit kitaláltam egy olyan <code>ListView</code> megjelenítés, ami a <code>SimpleAdaptert</code>-t használja adatforrásnak, így a layout betölthető XML-ből egyszrűen. A layout tartalmaz egy gombot, amit megnyomva az Activity onClick metódusa hívódik meg. A probléma itt következik: az <code>onClick</code> az <code>onItemClick</code>-el ellentétben nem kapja meg melyik soron kattintottunk. Valahonnan pedig illene tudni, hiszen nem minden soron ugyanazt szeretnénk végrehajtani.</p>
<p>Az ötelt a fent amlített netes leírások alapján adja magát, tároljuk le az onClick-et meghívó View Tag-jében (<code>View.setTag(Object o)</code>) a szükséges azonosítót, így az onClick-ben a paraméterként megkapott View-tól le tudjuk kérdezni.</p>
<p>Minden ListView a lista elemeit egy Adapter osztálytól kapja (<code>ListView.setAdapter()</code>) a <code>getView()</code> metóduson keresztül. Az adapter kis átírásával megoldható, hogy a lista elemeibe bekerüljön a az Id a megfelelő Tag property-be, amikor a ListView meghívja a <code>getView()</code>-t. Leszármaztattam hát a <code>SimpleAdaptert</code>-t:</p>
<pre class="brush: java">public class ClickableButtonListAdapter extends SimpleAdapter {	

	private static final String HASHMAP_ID = "_id";

	public ClickableButtonListAdapter(Context context,
			List&lt;? extends Map&lt;String, ?&gt;&gt; data, int resource, String[] from,
			int[] to) {
		super(context, data, resource, from, to);

	}

	@SuppressWarnings("unchecked")
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View view = super.getView(position, convertView, parent);
		setViewTag(view, ((HashMap&lt;String,String&gt;) getItem(position)).get(HASHMAP_ID) );
		return view;
	}

	private void setViewTag(View view, Object tag) {
		view.setTag(tag);
		if (view instanceof ViewGroup) {
			for (int i=0; i &lt; ((ViewGroup) view).getChildCount(); i++) {
				setViewTag(((ViewGroup) view).getChildAt(i), tag);
			}
		}
	}
}
</pre>
<p>A példában a lista elemei HashMap-ek, így ebből szedem ki az Id-t. A <code>HahMap</code>-ben az Id mező az &#8220;_id&#8221; elemben van, így ezt keresem ki, és rakom a Tag-be. A <code>setViewTag()</code> rekurzív metódus végigmegy az összes megjelenítendő View elemen és beállítja a Tag-et, így bármelyikre definiálhatjuk majd az onClick-et, mindig megkapjuk a Tag-ben a kiválasztott sor Id-ját.</p>
<p>Az <code>Activity</code>-ben az <code>onClick()</code> igen egyszerű:</p>
<pre class="brush: java">public void onClick(View v) {
         Toast.makeText(this, "onClick id: " + v.getTag(), Toast.LENGTH_SHORT).show();
}</pre>
<p>Nem mondom, hogy szép megoldás, de használható. Jobban tetszene, ha az Android megfelelően támogatná az egyedi ListView létrehozását esetleg azzal, hogy az onItemClick meghívódna, és eldönthetném, hogy mit akarok kezdeni az eseménnyel.</p>
]]></content:encoded>
			<wfw:commentRss>http://codeplay.hu/developer/2010/07/android-onitemclick-problema-listview-es-button-hasznalatakor/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>

