<?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>Internet Solutions &#187; Tehnologija</title>
	<atom:link href="http://www.internet-solutions.si/category/technologies/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.internet-solutions.si</link>
	<description>Web development na sto in en način</description>
	<lastBuildDate>Tue, 07 Sep 2010 13:17:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Objavljena nova verzija 0.3.9 KjeSeRoka</title>
		<link>http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/</link>
		<comments>http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 08:21:45 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Internet Solutions]]></category>
		<category><![CDATA[Tehnologija]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=226</guid>
		<description><![CDATA[Med vikendom sem objavil novo različico KjeSeRoka 0.3.9 na Android Marketu. Posodobljena različica sedaj omogoča pošiljanje e-pošte izbranemu prizorišču neposredno iz aplikacije. Trenutno se ukvarjam z funkcionalnostjo, ki bo omogočala dnevni prikaz dogodkov &#8211; Kam Danes?
Na mojem blogu, ki ga pišem v angleškem jeziku, pa lahko preberete še prispevek o tem kako sem sploh začel [...]]]></description>
			<content:encoded><![CDATA[<p>Med vikendom sem objavil novo različico KjeSeRoka 0.3.9 na <a href="http://www.android.com/market/" class="zem_slink" title="Google" rel="homepage">Android</a> Marketu. Posodobljena različica sedaj omogoča pošiljanje e-pošte izbranemu prizorišču neposredno iz aplikacije. Trenutno se ukvarjam z funkcionalnostjo, ki bo omogočala dnevni prikaz dogodkov &#8211; Kam Danes?</p>
<p>Na mojem blogu, ki ga pišem v angleškem jeziku, pa lahko preberete še prispevek o tem <a href="http://www.celavi.org/2010/06/19/how-i-taught-myself-android-application-development/" class="liexternal">kako sem sploh začel razvijat za Android platformo</a>.</p>
<p><strong><a href="/kjeseroka/" class="liinternal">Prenesi</a></strong></p>
<p><strong>Screenshots</strong><br />

<a href='http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/send_mail_01/' title='KjeSeRoka - pošiljanje e-pošte prizorišču'><img width="150" height="150" src="http://www.internet-solutions.si/wp-content/uploads/2010/06/send_mail_01-150x150.png" class="attachment-thumbnail" alt="" title="KjeSeRoka - pošiljanje e-pošte prizorišču" /></a>
<a href='http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/send_mail_02/' title='KjeSeRoka - sestavljanje e-pošte'><img width="150" height="150" src="http://www.internet-solutions.si/wp-content/uploads/2010/06/send_mail_02-150x150.png" class="attachment-thumbnail" alt="" title="KjeSeRoka - sestavljanje e-pošte" /></a>
<a href='http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/send_mail_03/' title='KjeSeRoka - pošiljanje e-pošte z privzeto aplikacijo'><img width="150" height="150" src="http://www.internet-solutions.si/wp-content/uploads/2010/06/send_mail_03-150x150.png" class="attachment-thumbnail" alt="" title="KjeSeRoka - pošiljanje e-pošte z privzeto aplikacijo" /></a>
</p>
<div class="zemanta-pixie"><img class="zemanta-pixie-img" src="http://img.zemanta.com/pixy.gif?x-id=b86cc0f1-ab62-4fb2-892b-d7aa85b7ecbd" alt="" /><span class="zem-script more-related pretty-attribution"><script src="http://static.zemanta.com/readside/loader.js" type="text/javascript"></script></span></div>
]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2010/06/21/objavljena-nova-verzija-0-3-9-kjeseroka/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mala šola testiranja z PHPUnit in Selenium</title>
		<link>http://www.internet-solutions.si/2010/06/16/mala-sola-testiranja-z-phpunit-in-selenium/</link>
		<comments>http://www.internet-solutions.si/2010/06/16/mala-sola-testiranja-z-phpunit-in-selenium/#comments</comments>
		<pubDate>Wed, 16 Jun 2010 12:40:07 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Modrüvanje]]></category>
		<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpunit]]></category>
		<category><![CDATA[selenium]]></category>
		<category><![CDATA[tdd]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=81</guid>
		<description><![CDATA[Debugging Sucks! Testing Rocks!
Tale članek sem se spravil pisat že dobro leto nazaj. Vmes sem tudi sformatiral disk in so šle stvari v tri &#8230; Kljub temu da je članek še vedno nedokončan sem se odločil da ga objavim, saj bo marsikomu v pomoč pri prvih korakih TDD-ja.
Prvi odziv programerjev ob omembi Test-Driven Developmenta je [...]]]></description>
			<content:encoded><![CDATA[<h2>Debugging Sucks! Testing Rocks!</h2>
<p><em><strong>Tale članek sem se spravil pisat že dobro leto nazaj. Vmes sem tudi sformatiral disk in so šle stvari v tri &#8230; Kljub temu da je članek še vedno nedokončan sem se odločil da ga objavim, saj bo marsikomu v pomoč pri prvih korakih TDD-ja.</strong></em></p>
<p>Prvi odziv programerjev ob omembi <a href="http://en.wikipedia.org/wiki/Test-driven_development" rel="nofollow" class="liwikipedia">Test-Driven Developmenta</a> je ponavadi negativen, saj pomislijo le na eno: &#8220;<strong>Tole mi bo pa vzelo dodatnih 50% več časa pri razvoju aplikacij.</strong>&#8221; Podoben odziv sem pred kratkim doživel pri &#8220;naših&#8221; programerjih, ko sem jim kazal kako naredimo &#8220;<a href="http://en.wikipedia.org/wiki/Acceptance_test" rel="nofollow" class="liwikipedia">Acceptance Test</a>&#8221; z uporabo <a href="http://selenium.openqa.org/" class="liexternal">Selenium RC</a>-ja.<sup>[1]</sup><br />
Zgornja trditev bi načeloma veljala samo če bi se življenski cikel aplikacije zaključil z prvo produkcijsko verzijo, ter ob klasičnem razvoju Dizajn-Implementacija-Testiranje<sup>[2]</sup>. To zgodbo najverjetneje vsi poznamo:<br />
&#8220;Imamo dva programerja, ki vsak zase nadgrajujeta svoj del že žive aplikacije. Ob združitvi kode, zgleda kot, da je vse ok. Čez čas dobita klic<sup>[3]</sup>, da določene stvari ne delajo, čeprav so prej delale. Vsak posebej za iskanje in razhroščevanje kode porabita polovico dneva.&#8221;<br />
Take in podobne zgodbe so lahko preteklost. Rešitev je <strong>TDD</strong>.</p>
<h3>Kaj je TDD</h3>
<p>Test-Triven Development (TDD) je razvojna tehnika za softver. Z TDD tehniko stvari postavimo malce na &#8220;glavo&#8221;. <strong>Teste pišemo preden začnemo pisat implementacijsko kodo!</strong>. Test pelje oziroma diktira kodo ki se razvija.<sup>[4]</sup><br />
TDD cikel pri razvoju aplikacij izgleda nekako takole:</p>
<ul>
<li>Dizajn: Pogruntamo kaj želimo narediti</li>
<li>Test: Napišemo test, ki izraža naš dizajn.
<ul>
<li>Test ne bi smel uspeti   &#8211; <font color="red">FAIL</font></li>
</ul>
</li>
<li>Implementacija: Napišemo kodo</li>
<li>Test: ponovno
<ul>
<li>Test bi moral uspeti &#8211; <font color="green">PASS</font></li>
</ul>
</li>
<li>Refactoring po potrebi</li>
<li>Ponavljaj</li>
</ul>
<p>Še vedno vas je strah da bo več dela. Malce pa res. :)<br />
Tri različne študije (Microsoft, IBM, John Deere / Ericsson) so pokazale:</p>
<ul>
<li>TDD projekti imajo dva krat večjo kvaliteto kode.</li>
<li>Pisanje testov vzame le 15% več časa &#8211; dolgoročno gledano.</li>
<li>Število hroščev in defektov je manjše za 40%.</li>
<li>Skupinska produktivnost se poveča za 16%.</li>
</ul>
<h3>Testiranje</h3>
<p><strong>Kaj potrebuje testiranje?</strong><br />
<strong>- Backend</strong>: programska logika in ponovno uporabljene komponente<br />
<strong>- Frontend</strong>: procesiranje form, templatov, bogata vsebina z uporabo &#8220;AJAX-a#, JSON, RSS Feed, Web Servisi</p>
<p><strong>Kako testiramo?</strong><br />
<strong>- Backend</strong>: test funkcionalnosti programske logike z <a href="http://en.wikipedia.org/wiki/Unit_testing" rel="nofollow" class="liwikipedia">Unit Testi</a><br />
<strong>- Frontend</strong>: &#8220;<a href="http://en.wikipedia.org/wiki/Acceptance_test" rel="nofollow" class="liwikipedia">Acceptance</a>&#8221; in <a href="http://en.wikipedia.org/wiki/System_testing" rel="nofollow" class="liwikipedia">Sistemski testi</a>, ki se izvajajo na brskalniku, Testiranje RSS Feedov, Web servisov z Unit Testi, Kompatibilnostni testi &#8230;<br/><br />
</p>
<h2>Acceptance testing</h2>
<p>je testiranje na določenem sistemu po principu &#8220;<a href="http://en.wikipedia.org/wiki/Black-box_testing" rel="nofollow" class="liwikipedia">črne škatle</a>&#8220;. Acceptance test zagotavlja da koda počna to kar želi &#8220;stranka&#8221;<sup>[5]</sup>, ne pa pričakovanj razvijalca! Temu testiranja bi lahko preprosto rekli tudi testiranje funkcionalnosti. Pa poglejmo kako implementirati Acceptance Test z &#8220;ubijalsko kombinacijo&#8221; PHPUnit in Selenium.<br />
</p>
<h3>Priprave na testiranje</h3>
<p><strong>Zahteve</strong>:</p>
<ul>
<li>PHPUnit <a href="http://www.phpunit.de" class="liexternal">http://www.phpunit.de</a></li>
<li>Testing_Selenium <a href="http://pear.php.net/package/Testing_Selenium" class="liexternal">http://pear.php.net/package/Testing_Selenium</a></li>
<li>Java 5 (1.5.0) je potrebna za Selenium RC <a href="http://java.sun.com" class="liexternal">http://java.sun.com</a></li>
<li>Selenium Remote Control (RC) <a href="http://selenium.openqa.org/" class="liexternal">http://selenium.openqa.org/</a></li>
<li>Xdebug<sup>[6]</sup> če želimo informacije o &#8220;Code Coverage&#8221; <a href="http://www.xdebug.org" class="liexternal">http://www.xdebug.org</a></li>
</ul>
<p>V tem članku uporabljamo PHPUnit, kateri od verzije 3.0 naprej, vsebuje PHPUnit_Extensions_SeleniumTestCase razred, katerega lahko uporabljamo za definicijo Acceptance testov. Sam razred pa za opravljanje testov potrebuje Selenium Core. Zelo pomembno je, da ne pozabimo da to <strong>NI Unit testiranje</strong>. PHPUnit je knjižnica za &#8220;Unit Testing&#8221;, med drugim pa je framework prav tako uporaben za <a href="http://en.wikipedia.org/wiki/Integration_testing" rel="nofollow" class="liwikipedia">integracijske</a> ter acceptance teste.</p>
<p><strong>Inštalacija PHPUnit</strong>:<br />
<a href="http://www.phpunit.de/manual/3.3/en/installation.html" class="liexternal">Priročnik PHPUnit-a</a> priporoča inštalacijo frameworka z uporabo<a href="http://pear.php.net/" class="liexternal"> PEAR Installer-ja</a>. PEAR kanal (pear.phpunit.de), kateri se uporablja za distribucijo PHPUnit-a bora biti registriran z lokalnim PEAR okoljem.<sup>[7]</sup> Ko to enkrat naredimo, uporabimo PEAR za inštalacijo paketa od PHPUnit kanala.<br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/09/phpunit_install.gif" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2010/06/phpunit_install-150x150.gif" alt="Inštalacija PHPUnita" title="Inštalacija PHPUnita" width="150" height="150" class="alignleft size-thumbnail wp-image-82" /></a><br />
Inštalacija PHPUnita<br />
PHPUnit dokumentacijo za Selenium najdete na <a href="http://www.phpunit.de/pocket_guide/3.2/en/selenium.html" class="liexternal">http://www.phpunit.de/pocket_guide/3.2/en/selenium.html</a>. Sedaj nam preostane še da iz PEAR kanala inštaliramo Testing_Selenium paket, ki ga potrebuje PHPUnit Selenium podaljšek.<br />
<br clear="all" /><br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/09/testing_selenium.gif" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2010/06/testing_selenium-150x150.gif" alt="Inštalacija paketa Testing_Selenium" title="Inštalacija paketa Testing_Selenium" width="150" height="150" class="alignleft size-thumbnail wp-image-83" /></a><br />
Inštalacija paketa Testing_Selenium</p>
<p><strong><a href="http://selenium.openqa.org/" class="liexternal">Selenium</a></strong>:<br />
je paket orodij za avtomatsko testiranje spletnih aplikacij. Vsebuje kar nekaj paketov, med drugim Selenium Core, Selenium RC, Selenium IDE, &#8230; Selenium Core opravlja aktivnosti uporabnika, izvaja test in obvešča o rezultatih testa. Selenium RC je dodatni serverski proces, ki ga rabimo, če želimo izvajati teste z PHPUnit podaljškom za Selenium. Njegov glavni namen je da omogoča izbranemu programskemu jeziku interakcijo z Selenium Core ki laufa na brskalniku z uporabo preprostega HTTP GET klica do RC strežnika. Komplicirano?!<br />
Najnovejši Selenium RC dobite na <a href="http://selenium-rc.openqa.org/download.html" class="liexternal">http://selenium-rc.openqa.org/download.html</a>. Po tem ko raspakiramo paket v njem najdemo kar nekaj map.  V eni izmed njih je Selenium server, ostali so client driverji za različne programske jezike. Mi smo ga za PHP že inštalirali preko PEAR instalerja. Selenium RC zaženemo preprosto iz command lina:</p>
<pre class="brush: bash;">
java -jar selenium-server.jar -interactive
</pre>
<p>Še prej pa smo seveda inštalirali Javo. :)</p>
<p><strong>Inštalacija Xdebug-a</strong>:<br />
Xdebug je podaljšek za PHP, ki primarno služi za &#8220;debugging&#8221; &#8211; razhroščevanje kode, pri čemer je sposoben navrčt celo paleto koristnih informacij. Zna pa še narediti profil &#8211; &#8220;profiling&#8221; skripte in analizo pokritosti kode &#8211; &#8220;code coverage analysis&#8221;. Prav slednjo zadevo bomo pokazali v našem članku. Velja si zapomniti, da Xdebug <strong>ni potreben</strong> za izvajanje testov in da ga ne morete imeti naloženega skupaj z <a href="http://www.internet-solutions.si/2008/07/01/zend-studio-601-installer-na-ubuntu-ju-804-ga-biksa/" class="liexternal">Zend Debuggerjem</a>.<br />
Najlažje je Xdebug inštalirati preko PEAR/PECL kanala.</p>
<pre class="brush: bash;">
pecl install xdebug
</pre>
<p>V php.ini dodamo tole klobaso<sup>[8]</sup> za temeljit izpis informacij, remote debugging ter profiling na triger:</p>
<pre class="brush: bash;">
[Xdebug]
zend_extension=&amp;quot;/opt/local/lib/php/extensions/no-debug-non-zts-20060613/xdebug.so&amp;quot;
;General
xdebug.default_enable=On
xdebug.show_exception_trace=Off
xdebug.show_local_vars=1
xdebug.max_nesting_level=50
xdebug.var_display_max_data=3072
xdebug.var_display_max_depth=12
xdebug.dump_once=On
xdebug.dump_globals=On
xdebug.dump_undefined=On
xdebug.dump.REQUEST=*
xdebug.dump.SERVER=REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
xdebug.collect_params=4
xdebug.collect_includes=On
xdebug.collect_return=On
xdebug.show_mem_delta=On

;Remote debugging
xdebug.remote_enable=On
xdebug.remote_host=&amp;quot;localhost&amp;quot;
xdebug.remote_port=9000
xdebug.remote_handler=&amp;quot;dbgp&amp;quot;

;Profiling
; Turns it off by default
xdebug.profiler_enable=0
; Turns xdebug on when ?XDEBUG_PROFILE=true is in GET or POST
xdebug.profiler_enable_trigger=1
; Your output directory - you'll eventually point webgrind at this
xdebug.profiler_output_dir=&amp;quot;/tmp&amp;quot;
</pre>
<p>O samem orodju podrobno kdaj drugič. Gremo nazaj na testiranje.</p>
<h2>Pisanje in zagon acceptance testov</h2>
<p>Osnovna forma za acceptance test z PHPUnit in Selenium RC je zelo preprosta.</p>
<pre class="brush: php;">
/** PHPUnit_Extensions_SeleniumTestCase */
require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class MonetaOrderTest extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        /**
         * '*firefox' =&amp;gt; Firefox 1 or 2
         * '*iexplore' =&amp;gt; Internet Explorer (all)
         * '*custom /path/to/browser/binary =&amp;gt; Other browsers (incl. Firefox on Linux)
         * '*iehta' =&amp;gt; Experimental Embedded IE
         * '*chrome' =&amp;gt; Experimental Firefox profile
         */
        $this-&amp;gt;setBrowser(*firefox /Applications/Firefox2.app/Contents/MacOS/firefox-bin);
        $this-&amp;gt;setBrowserUrl(http://gateway.home.internet-solutions.si);
    }

    /**
     * Test if
     * label First Name exists
     * element firstName exists
     *
     */
    public function testFirstNameExists()
    {
        //open test/moneta
  	$this-&amp;gt;open(http://gateway.home.internet-solutions.si/test/moneta');
  	/** First Name */
  	//label exist
        try {
            $this-&amp;gt;assertEquals(&amp;quot;First Name&amp;quot;, $this-&amp;gt;getText(&amp;quot;//form[@id='moneta']/dl/dt[1]/label&amp;quot;));
        } catch (PHPUnit_Framework_AssertionFailedError $e) {
            array_push($this-&amp;gt;verificationErrors, $e-&amp;gt;toString());
        }
        //element present
        $this-&amp;gt;assertTrue($this-&amp;gt;isElementPresent(&amp;quot;firstName&amp;quot;));
    }
}
</pre>
<p>Metoda setUp() se uporablja za &#8220;zagon&#8221; testa. Tukaj definiramo kateri brskalnik se naj koristi. Firefox je le ena od možnih opcij. V primeru da Selenium RC ne vsebuje privzete reference za vaš priljubljeni brskalnik<sup>[9]</sup> lahko uporabite prefix &#8220;*custom&#8221; pri kateremu določite pot do vašega izbranega brskalnika. Metoda setBrowserUrl() nastavi URL iz katerega potekajo vsi testi.</p>
<div align="center">
﻿﻿﻿﻿﻿<p><a href="http://www.internet-solutions.si/2010/06/16/mala-sola-testiranja-z-phpunit-in-selenium/"><em>Click here to view the embedded video.</em></a></p>
</div>
<div align="center">
﻿﻿﻿﻿﻿<p><a href="http://www.internet-solutions.si/2010/06/16/mala-sola-testiranja-z-phpunit-in-selenium/"><em>Click here to view the embedded video.</em></a></p>
</div>
<p>Če vas zanima še kaj o test driven developmentu me <a href="/contact/" class="liinternal">kontaktirajte</a>.</p>
<p>Happy blogging(coding)!</p>
<ol class="footnotes"><li id="footnote_0_81" class="footnote">podrobno bom predtavil testiranje z Selenium RC v današnjem članku</li><li id="footnote_1_81" class="footnote">če je sploh kaj testiranja pred produkcijo</li><li id="footnote_2_81" class="footnote">ponavadi od stranke, katero pa opozorijo uporabniki</li><li id="footnote_3_81" class="footnote">Sedaj vemo od kod ime Test-Driven Development</li><li id="footnote_4_81" class="footnote">uporabnik, brskalnik</li><li id="footnote_5_81" class="footnote">opcijsko &#8211; ni pogoj za izvajanje testov</li><li id="footnote_6_81" class="footnote">predvidevajmo da imate PEAR že inštaliran</li><li id="footnote_7_81" class="footnote">v njej prilagodite pot do podaljška</li><li id="footnote_8_81" class="footnote">v kar dvomim ;)</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2010/06/16/mala-sola-testiranja-z-phpunit-in-selenium/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Enostavno je težje</title>
		<link>http://www.internet-solutions.si/2008/09/16/enostavno-je-tezje/</link>
		<comments>http://www.internet-solutions.si/2008/09/16/enostavno-je-tezje/#comments</comments>
		<pubDate>Tue, 16 Sep 2008 10:24:38 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Tanači]]></category>
		<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[performance]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[scalability]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=84</guid>
		<description><![CDATA[Simple Is Hard
Med pucanjem pošte sem naletel na link, ki me je pripeljal do slidov Rasmusa Lerdorfa. Prezentacija je iz avgustovske Drupal konference, ki je potekala pri naših sosedih.
Programerji smo baje čudna bitja. :) Odvisni smo od kompleksnosti in dostikrat ne znamo poiskati enostavno in očitno rešitev danega problema. To potem škodi performansi, skalabilnosti in [...]]]></description>
			<content:encoded><![CDATA[<h2>Simple Is Hard</h2>
<p>Med pucanjem pošte sem naletel na <a href="http://talks.php.net/show/drupal08/0" class="liexternal">link</a>, ki me je pripeljal do slidov <a href="http://lerdorf.com/" class="liexternal">Rasmusa Lerdorfa</a>. Prezentacija je iz avgustovske <a href="http://szeged2008.drupalcon.org/" class="liexternal">Drupal konference</a>, ki je potekala pri naših sosedih.<br />
Programerji smo baje čudna bitja. :) Odvisni smo od kompleksnosti in dostikrat ne znamo poiskati enostavno in očitno rešitev danega problema. To potem škodi performansi, skalabilnosti in varnosti aplikacij.<sup>[1]</sup></p>
<p>Avtor nam na primeru <a href="http://laconi.ca/trac/" class="liexternal">Laconice</a><sup>[2]</sup> nazorno pokaže kako z enostavnimi, preprostimi prijemi izboljšamo performans aplikacije.<br />
<span id="more-84"></span><br />
<embed src="http://www.archive.org/flow/FlowPlayerLight.swf?config=%7Bembedded%3Atrue%2CshowFullScreenButton%3Atrue%2CshowMuteVolumeButton%3Atrue%2CshowMenu%3Atrue%2CautoBuffering%3Atrue%2CautoPlay%3Afalse%2CinitialScale%3A%27fit%27%2CmenuItems%3A%5Bfalse%2Cfalse%2Cfalse%2Cfalse%2Ctrue%2Ctrue%2Cfalse%5D%2CusePlayOverlay%3Afalse%2CshowPlayListButtons%3Atrue%2CplayList%3A%5B%7Burl%3A%27simple%5Fis%5Fhard%2FDrupalcon%5F2008%5FSzeged%5Faug%5F27%5F3%5FAcquia%5F512kb%2Emp4%27%7D%5D%2CcontrolBarGloss%3A%27high%27%2CshowVolumeSlider%3Atrue%2CbaseURL%3A%27http%3A%2F%2Fwww%2Earchive%2Eorg%2Fdownload%2F%27%2Cloop%3Afalse%2CcontrolBarBackgroundColor%3A%270x000000%27%7D" width="500" height="450" scale="noscale" bgcolor="111111" type="application/x-shockwave-flash" allowFullScreen="true" allowScriptAccess="always" allowNetworking="all" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed><br />
<br />
<a href="http://www.archive.org/details/simple_is_hard" class="liexternal">Internet Archive: Details: Drupalcon 2008 Szeged: Simple is hard</a></p>
<p>A must see vsakega developerja.</p>
<p> Happy blogging(coding)! </p>
<ol class="footnotes"><li id="footnote_0_84" class="footnote">največ pa živcem nadrejenih</li><li id="footnote_1_84" class="footnote">odprto kodna platforma za mikrobloging</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2008/09/16/enostavno-je-tezje/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zgodila se je prva slovenska PHP konferenca</title>
		<link>http://www.internet-solutions.si/2008/07/09/zgodila-se-je-prva-slovenska-php-konferenca/</link>
		<comments>http://www.internet-solutions.si/2008/07/09/zgodila-se-je-prva-slovenska-php-konferenca/#comments</comments>
		<pubDate>Wed, 09 Jul 2008 10:59:03 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Razno]]></category>
		<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[konferenca]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=75</guid>
		<description><![CDATA[Dan D
Skoraj 10 let je od tega odkar sem napisal svojo prvo &#8220;aplikacijo&#8221; v PHP-ju. Skriptica je bila napisana v verziji 3[1]. Brala je novice iz tekstovne datoteke in jih prikazovala na spletni strani, Amerika ;)
Prav toliko let je minilo da sem jo le dočakal &#8230; Koga pa?
Prvo slovensko PHP konferenco, ki se je pripetila [...]]]></description>
			<content:encoded><![CDATA[<h2>Dan D</h2>
<p>Skoraj 10 let je od tega odkar sem napisal svojo prvo &#8220;aplikacijo&#8221; v PHP-ju. Skriptica je bila napisana v verziji 3<sup>[1]</sup>. Brala je novice iz tekstovne datoteke in jih prikazovala na spletni strani, Amerika ;)<br />
Prav toliko let je minilo da sem jo le dočakal &#8230; Koga pa?<br />
Prvo <a href="http://phpkonferenca.si/" class="liexternal">slovensko PHP konferenco</a>, ki se je pripetila 5 julija 2008 v prostorih Instituta Jožef Stefan v Ljubljani. Glavni krivec za njeno splavitev je <a href="http://phpkonferenca.si/o-konferenci/" class="liexternal">Anže Žnidaršič</a>, vodja tima razvijalcev na PRO PLUS d.o.o. (POP TV / Kanal A). Posebna zahvala gre še podjetju <a href="http://www.domenca.si/" class="liexternal">Domenci</a>, partnerju in glavnemu pokrovitelju konference.<br />
Glavni namen konference je bil vsekakor deliti znanje<sup>[2]</sup> ter nabirati nova spoznanstva. To je bil vsekakor dober povod za udeležbo, čeprav ste mogoče že stari maček v znanju PHP-ja. Vedno je zanimivo slišati videnja ter način razmišljanja prekaljenih PHP razvojnikov.<br />
Kljub temu, da sem bil z samo vsebino predavanj (<a href="http://www.eclipse.org/" class="liexternal">Eclipse</a>, <a href="http://subversion.tigris.org/" class="liexternal">Subversion</a>, <a href="http://en.wikipedia.org/wiki/List_of_web_application_frameworks#PHP" rel="nofollow" class="liwikipedia">PHP frameworki</a>, <a href="http://en.wikipedia.org/wiki/Template_engine_(web)" rel="nofollow" class="liwikipedia">Template sistemi</a>, <a href="http://mootools.net/" class="liexternal">Mootools</a>, <a href="http://www.phpunit.de/" class="liexternal">Unit</a> in <a href="http://selenium.openqa.org/" class="liexternal">sistemsko</a> testiranje kode, optimizacijo PHP kode &#8230;) že precej seznanjen<sup>[3]</sup>, sem pridno in pozorno poslušal predavatelje :)<br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/07/me_php_konferenca.jpg" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/07/me_php_konferenca-150x150.jpg" alt="Zatopljen v predavanja ..." title="Zatopljen v predavanja ..." width="150" height="150" class="alignnone size-thumbnail wp-image-76" /></a><br />
Zatopljen v predavanja &#8230;</p>
<p><span id="more-75"></span> </p>
<h2>Predavanja</h2>
<p>Še beseda, dve o samih predavanjih.<br />
Konferenco je otvoril Anže in v nekaj stavkih obrazložil odkod sama ideja o PHP konferenci ter se obenem zahvalil vsem, ki so omogočili, da je do dogodka sploh prišlo. Slava jim!<br />
Sledila je kratka predstavitev Institut Jožef Stefan, ter posebej še <a href="http://ct3.ijs.si/" class="liexternal">&#8220;Centra za prenos znanja na področju informacijskih tehnologij&#8221;</a>.<br />
Sebastjan Mislej nam je razkril enega izmed njihovih projektov/servisov z imenom <a href="http://videolectures.net/" class="liexternal">VideoLectures</a>. Vsa predavanja so se snemala in bodo kmalu na voljo za občo javnost. Sam center se med drugim ukvarja tudi z analizo podatkov. Počekirajte prototip iskalca z imenom <a href="http://searchpoint.ijs.si/" class="liexternal">SearchPoint</a>.<br />
Nato se je začelo zares &#8230;</p>
<h3><a href="http://www.stamcar.com/" class="liexternal">Marko Štamcar</a>, Najdi.si d.o.o</h3>
<p>Tema Markovega predavanja je bila razvoj aplikacij v okolju <a href="http://www.eclipse.org/" class="liexternal">Eclipse</a> ter uporaba <a href="http://subversion.tigris.org/" class="liexternal">Subversna</a> &#8211; sistema za nadzor različic<sup>[4]</sup>.<br />
Eclipse kot IDE postane močan šele ko ga &#8220;našopamo&#8221; z plugini:</p>
<ul>
<li>za razvoj PHP-ja <a href="http://www.phpeclipse.de/" class="liexternal">PHPEclipse</a></li>
<li>dodatki za konteks menu <a href="http://www.eclipseplugincentral.com/modules.php?op=modload&#038;name=Web_Links&#038;file=index&#038;req=viewlink&#038;cid=123" class="liexternal">AnyEdit Tools</a></li>
<li>SQL klient &#8211; <a href="http://eclipsesql.sourceforge.net/" class="liexternal">Eclipse SQL Explorer</a></li>
<li>orodje za regular expression <a href="http://myregexp.com/eclipsePlugin.html" class="liexternal">Regex Util</a></li>
<li>klienta za Subversion<sup>[5]</sup> <a href="http://www.polarion.org/index.php?page=overview&#038;project=subversive" class="liexternal">Subversive</a> in <a href="http://subclipse.tigris.org/" class="liexternal">Subclipse</a></li>
</ul>
<p><b><a href="http://shrani.si/f/4/ip/AcMnxSf/eclipse-in-subversion.pdf" class="lipdf">Prenesite si</a> prosojnice od predavanja!</b></p>
<h3>Gaj Capuder &#8211; <a href="http://www.spletna-postaja.com/" class="liexternal">spletnaPOSTAJA d.o.o.</a></h3>
<p>Gaj je razglabljal o prednostih in slabostih uporabe Open Source Frameworkov. Če smo bolj natančni je v ožji izbor za primerjavo uvrstil 3 <a href="http://en.wikipedia.org/wiki/Content_management_system" rel="nofollow" class="liwikipedia">CMS</a>-je in 3 <a href="http://en.wikipedia.org/wiki/PHP_frameworks#PHP" rel="nofollow" class="liwikipedia">PHP Frameworke</a>. Ali upoprabiti <a href="http://en.wikipedia.org/wiki/Open_source" rel="nofollow" class="liwikipedia">OS</a> produkte, je stvar posameznika. Dejstvo je, da če želimo razvijati aplikacije po <a href="http://en.wikipedia.org/wiki/Rapid_application_development" rel="nofollow" class="liwikipedia">RAD</a> princupu, nam za lasten razvoj ostane bolj malo časa. Vprašajmo se zakaj bi izumljali toplo vodo vedno znova in znova?</p>
<h3><a href="http://scene-si.org/" class="liexternal">Tit Petrič</a> &#8211; Monotek d.o.o.</h3>
<p>Tit se je spraševal kateri Template sistem je pravi. A je to nam vsem znani <a href="http://www.smarty.net/" class="liexternal">Smarty</a> ali kateri od novejših (<a href="http://www.phpguru.org/static/template.html" class="liexternal">Heyes Template</a>, <a href="http://www.phpguru.org/template/" class="liexternal">Bob Template</a>). Na koncu nam je predstavil <a href="http://scene-si.org/minitpl/" class="liexternal">Mini TPL</a>, templating sistem lastnega razvoja, ki je bil prikazan prvič prav za čas PHP konference.<br />
Med udeleženci se je porodilo vprašanje ali sploh obstaja potreba po učenju dodatnega template jezika kot je npr. Smarty saj današnji fleksibilni <a href="http://en.wikipedia.org/wiki/Model-view-controller" rel="nofollow" class="liwikipedia">MVC</a> frameworki (<a href="http://framework.zend.com/" class="liexternal">Zend Framework</a>, <a href="http://cakephp.org/" class="liexternal">CakePHP</a>, <a href="http://www.symfony-project.org/" class="liexternal">Symfony</a> &#8230;) počnejo točno to, kar smo počeli 5 let nazaj z Smarty-jem; ločevali aplikativni del kode od prikaza. Ali se nam &#8220;splača&#8221; v &#8220;View&#8221; komponento od frameworka vključiti template jezik? <br />
Na spletu se odvijajo prave vojne okrog tega. Eno je povzročil sam pisec knjige o Smarty-ju <a href="http://hasin.wordpress.com/2008/01/05/once-upon-a-time-there-was-smarty/" class="liexternal">Hasin Hayder</a>. Jaz pa pravim kakor vam drago :)</p>
<p><b><a href="http://scene-si.org/minitpl/files/php08-abstrakcija-logike-in-prikaza.ppt" class="liexternal">Prenesite si</a> prosojnice od predavanja!</b></p>
<h3><a href="http://balantic.si/" class="liexternal">Matej Balantič</a>, PRO PLUS, d.o.o. (POP TV / Kanal A)</h3>
<p>Matej je ljudstvu predstavil <a href="http://mootools.net/" class="liexternal">Mootools</a>, kompakten in modularno objketno orentiran Javascript framework. Meni osebno sta bolj poznana <a href="http://developer.yahoo.com/yui/" class="liexternal">YUI</a> ter <a href="http://www.extjs.com/" class="liexternal">ExtJs</a><sup>[6]</sup>. Je pa vedno dobrodošlo spoznati še kakšno &#8220;orodje&#8221;, saj nikoli ne veš kdaj ti bo prišlo prav :)</p>
<h3><a href="http://www.ljudmila.org/~vuk/" class="liexternal">Vuk Ćosić</a></h3>
<p>Vukovo predavanje sem skoraj v celoti zamudil<sup>[7]</sup>, saj sva z <a href="http://www.wicked.si/" class="liexternal">Vinijem</a> po n-letih z malinovcem zalila najino ponovno snidenje :)</p>
<h3><a href="http://www.orangeandnuts.com/" class="liexternal">Jugoslav Petković</a> &#8211; Domenca d.o.o.</h3>
<p>Direktor podjetja Domenca nam je povedal svojo zgodbo o uspehu podjetja. Poleg tega se je Domenca kot partner in glavni pokrovitelj zelo izkazala: kosilo, pijača, kava, majice ter za grande finale ob samem koncu konference še podelitev <a href="http://www.mimovrste.com/artikel/2750095432/prenosnik-apple-macbook-24ghz-133-bel-7029" class="liexternal">MacBook</a>-a.<br />
Nekaj zanimivosti o samem podjetju:</p>
<ul>
<li>za razvoj aplikacij uporabljajo Zend Framework. Domenca je že četrto podjetje za katero vem, da so prešaltali na razvoj v tem Open Source frameworku. Ostala so <a href="http://www.kabi.si/" class="liexternal">Kabi</a>, <a href="http://www.3line.si/" class="liexternal">3line</a> ter <a href="http://www.creatoorweb.si/" class="liexternal">Creatoor</a></li>
<li>zaposleni imajo možnost neomejenega nakupa strokovne literature</li>
<li>zaposleni se lahko zastonj izobražujejo po celemu svetu</li>
<li>dodatni dan dopusta ob vstopu otroka v vrtec in osnovno šolo</li>
<li>Domenca se bo kmalu predstavljala z novo identiteto in podobo</li>
<li>vsi v <a href="http://www.koornk.com/" class="liexternal">Koornk</a><sup>[8]</sup></li>
</ul>
<h3><a href="http://anze.info/" class="liexternal">Anže Žnidaršič</a> &#8211; PRO PLUS, d.o.o.</h3>
<p>Vsi vemo, da ni kode brez hroščev, za testiranje pa si v večini primerov vzamemo premalo časa. Pojav hiperprodukcije pri slovenskih podjetjih ni nič novega, saj vsem primanjkuje programerjev. Še dobro se en projekt ne zaključi, že je tu nov. Anže nam je predstavil tehniko imenovano <a href="http://en.wikipedia.org/wiki/Test-driven_development" rel="nofollow" class="liwikipedia">test driven development</a>, pri kateri program testira program in to zna početi kar sam, brez naše pomoči.<br />
Sam sem se z <a href="http://en.wikipedia.org/wiki/Unit_testing" rel="nofollow" class="liwikipedia">unit</a> ter <a href="http://en.wikipedia.org/wiki/System_testing" rel="nofollow" class="liwikipedia">sistemskim</a> testiranjem srečal v začetku leta 2007, ko sem si na domači disk pretočil <strong>Zend Framework 0.7</strong><sup>[9]</sup>. Po razpakiranju sem odkril mapo <b>test</b> kmalu zatem pa še maherja <a href="http://sebastian-bergmann.de/" class="liexternal">Sebastian Bergmann</a>-a ter njegov <a href="http://www.phpunit.de/" class="liexternal">PHPUnit</a>. Več ali manj je vse ostalo pri raziskovanju &#8230;<br />
Povzetek predavanja:</p>
<p><strong>Testiranje naj bi bilo avtomatsko</strong><br />
Glavni problem ko spreminjamo kodo v aplikaciji, je ta, da jo s tem lahko pokvarimo. Spremembe so lahko nedolžne, pa vse do take, ko uporabnik naredi &#8220;totalno štalo&#8221; ko naleti na njo. Da pa ne bi vedno ročno ponavljali use case in teste, obstajajo zelo močne avtomatske rešitve &#8211; &#8220;unit testing frameworks&#8221;</p>
<p><strong>Program naj testira program</strong><br />
Ideja je vedno enaka:</p>
<ul>
<li>napišemo drug program, da potestira našo aplikacijo</li>
<li>program ne rabi iterakcije z uporabnikom da bi se zagnal</li>
<li>v času izvajanja kreira log ali report kako so se testi obnesli</li>
<li>program zaženemo takrat ko želimo testirat aplikacijo</li>
</ul>
<p><strong>Teste pišemo prej</strong><br />
Pisanje testov pred dejanskim pisanjem aplikacije zagotavlja hiter odziv po vsaki spremembi. Test driven development je metoda kako razvijati softver, ne samo metoda testiranja.</p>
<p>Tukaj sem navrgel več kot dve, tri besede ;) Gre za temo ki je zadnje leto, dve precej aktulna in ni open source projekta, ki ne bi razvoj testiral z Unit testi. Res vse pohvale Anžetu za tako dobro predstavitev.</p>
<h3>Denis Arh, <a href="http://www.domenca.com/" class="liexternal">Domenca d.o.o.</a></h3>
<p>Poleg Anžetovega, je bilo Denisovo predavanje eno izmed najbolj zanimivih.<sup>[10]</sup> Vsi ki pišemo kodo želimo, da bi le ta tekla brez zapletov, da se izvaja čim hitreje, skratka da iz nje potegnemo maksimum. Predavatelj nam je razkril &#8220;male skrivnosti&#8221; velikih mojstrov :)<br />
Ni samo pomemba optimizacija kode kot same, poskrbeti je potrebno tudi za <a href="http://developer.yahoo.com/performance/" class="liexternal">brskalnike</a> (minizacija script, content encoding &#8230;), web strežnik (optimizacija compilerja, uporaba reverse proxy-ja, zmanjševanje &#8220;file deskriptorjev&#8221; &#8211; o tem sem že sam pred kratkim <a href="http://www.internet-solutions.si/2008/06/12/locevanje-apache-log-datotek-z-uporabo-vlogger-ja/" class="liexternal">modruval</a>, &#8230;), ter podatkovni strežnik (r/w connection -> MASTER/SLAVE &#8230;) .<br />
Opisal je še nekaj trikov in nasvetov kako testirati oz obremeniti web/podatkovni streznik in kako doseči čim krajši odzivni čas oziroma doseči čim večjo število requestov na sekundo.<br />
Na koncu predavanja se je zastavilo zanimivo vprašanje in sicer ali je vertikalen <a href="http://en.wikipedia.org/wiki/Scalability" rel="nofollow" class="liwikipedia">scalability</a> sploh potreben, glede na to, da je hardver poceni v primerjavi z delom programerja. Odgovor je sila preprost &#8211; common sense ;) </p>
<h3>Miha Ceglar, <a href="http://www.renderspace.si/" class="liexternal">Renderspace d.o.o.</a></h3>
<p>Miha nam je pojasnil kako zagotoviti čim boljšo uporabniško izkušnjo. Predavanje od katerega sem odnesel najmanj, je pa tudi že utrujenost naredila svoje in je bila zbranost na dnu. Sama tema je bila  prikazana mogoče malce preveč abstraktno in analitično. Najverjetneje smo programerji bitja, ki imamo radi bolj konkretne, otipljive stvari.</p>
<h2>Epilog</h2>
<p>Bravo, bravo in še enkrat bravo. Čestitke Anžetu, Domenci, Institutu Jožef Stefan, vsem predavateljem za odlična predavanja ter vsem PHP razvijalcem in entuziastom, ki smo prišli v tako velikem številu. Čestitke tudi Aleš-u srečnemu dobitniku MacBook-a, saj bo končno lahko razvijal na ta pravi <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/macosx.jpg" rel="lightbox" title="Mac OS X 10.5.2" class="liexternal">mašini</a> :)</p>
<p><strong>ocena:</strong> sedi 5<br />
<strong>minus:</strong> pogrešal uporabo DocBlock-a v PHP kodi oziroma psevdokodi pri podanih primerih<br />
<strong>želje:</strong> še več podobnih dogodkov v prihodnje, interaktivne delavnice</p>
<p>Lahko samo rečem še PHP konferenca je uspela in Happy blogging(coding)!</p>
<ol class="footnotes"><li id="footnote_0_75" class="footnote">4 je bila še v zametkih</li><li id="footnote_1_75" class="footnote">podobno kot se jaz trudim na blogu &#8211; za narodov blagor ;)</li><li id="footnote_2_75" class="footnote">trenutno uporabljam, jo uporabljal v preteklosti ali vsaj testiral</li><li id="footnote_3_75" class="footnote">po domače revision control system ;)</li><li id="footnote_4_75" class="footnote">izbira je vaša</li><li id="footnote_5_75" class="footnote">za desktop aplikacije</li><li id="footnote_6_75" class="footnote">kriv sem priznam :)</li><li id="footnote_7_75" class="footnote">več ne smem povedat</li><li id="footnote_8_75" class="footnote">od takrat naprej ga budno spremljam</li><li id="footnote_9_75" class="footnote">osebno meni</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2008/07/09/zgodila-se-je-prva-slovenska-php-konferenca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zend Studio 6.0.1 installer na Ubuntu-ju 8.04 ga biksa</title>
		<link>http://www.internet-solutions.si/2008/07/01/zend-studio-601-installer-na-ubuntu-ju-804-ga-biksa/</link>
		<comments>http://www.internet-solutions.si/2008/07/01/zend-studio-601-installer-na-ubuntu-ju-804-ga-biksa/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 21:18:10 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Modrüvanje]]></category>
		<category><![CDATA[Tanači]]></category>
		<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[Zend Debugger]]></category>
		<category><![CDATA[Zend Studio]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=66</guid>
		<description><![CDATA[Zend Studio
Pred nekaj dnevi sem želel preizkusiti nov Zend Studio For Eclipse 6.0.1. O samem PHP IDE-ju ne bi preveč razglabljal. Profesionalno orodje za bolj zahtevne uporabnike. Meni osebno je najbolj  všeč Code Assist, integriran Debuging, Source Control z lokalno zgodovino, ter podpora za PHPUnit testing. 
Beseda, dve o debugerju. Zend Studio omogoča lokalno [...]]]></description>
			<content:encoded><![CDATA[<h2>Zend Studio</h2>
<p>Pred nekaj dnevi sem želel preizkusiti nov <a href="http://www.zend.com/en/products/studio/" class="liexternal">Zend Studio For Eclipse 6.0.1</a>. O samem PHP <a href="http://en.wikipedia.org/wiki/Integrated_Development_Environment" rel="nofollow" class="liwikipedia">IDE-ju</a> ne bi preveč razglabljal. Profesionalno orodje za bolj zahtevne uporabnike. Meni osebno je najbolj  všeč <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/zse-code-assist.gif" rel="lightbox" title="Code Assist" class="liexternal">Code Assist</a>, integriran <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/zse-debug.gif" rel="lightbox" title="Debugging" class="liexternal">Debuging</a>, <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/zse-source-control.gif" rel="lightbox" title="Source Control" class="liexternal">Source Control</a> z lokalno zgodovino, ter podpora za <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/zse-unit-testing-code-coverage.gif" rel="lightbox" title="PHPUnit Testing" class="liexternal">PHPUnit</a> testing. <br />
Beseda, dve o debugerju. Zend Studio omogoča lokalno in oddaljeno (na serverju) debugiranje. Za remote debugging rabite &#8220;Web Server Debugger&#8221;, kar je za <a href="http://en.wikipedia.org/wiki/Client-server" rel="nofollow" class="liwikipedia">Server-Client</a> arhitekturo nekaj samoumevnega. Obstajata dva načina za to:</p>
<ul>
<li>inštalirate si <a href="http://www.zend.com/en/products/platform/" class="liexternal">Zend Platformo</a> ali</li>
<li>uporabite <a href="http://downloads.zend.com/pdt/server-debugger/" class="liexternal">&#8220;Zend Debugger extension&#8221; za PHP</a></li>
</ul>
<p>Inštalacija slednjega je elegantnejša in manj boleča za Apache in PHP :)</p>
<p><span id="more-66"></span> </p>
<h3>Inštalacija in konfiguracija Zend Debugerja</h3>
<p>Izberite ustrezen debuger (Windows<sup>[1]</sup>, Mac OS X, Linux<sup>[2]</sup>) ter verzijo PHP-ja (4.3.x, 4.4.x, 5.1.x ali 5.2.x) ter ga skopirajte v  php direktorij kjer imate PHP podaljške<sup>[3]</sup> :D<br />
Dodajte naslednje vrstice v php.ini:</p>
<pre class="brush: plain;">
[Zend Debugger]
zend_extension=/usr/lib/php5/20060613/ZendDebugger.so #replace with your path
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always
</pre>
<p>Skopirajte priloženo datoteko dummy.php v dokument root direktorij od Apache-ja. Ne pozabite reštartat web strežnik.<br />
Če ste vse pravilno naredili vam bo to razkril phpinfo().<a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/zend_debugger.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/06/zend_debugger-150x150.png" alt="phpinfo() output about Zend Debugger " title="phpinfo() output about Zend Debugger" width="150" height="150" class="alignleft size-thumbnail wp-image-71" /></a><br />
Da se vrnem nazaj na sam Zend Studio. ;)</p>
<h3>!?*#?!</h3>
<p>Po tem ko sem uspešno pretočil in razpakiral najnovejšo verzijo Zend Studia,  zaženem installer. Po nekaj sekundah se le ta ustavi in izpiše da je prišlo do notranje napake v aplikaciji. Stack Trace navrže: java.lang.IllegalArgumentException: <strong>Malformed \uxxx encoding</strong><br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/07/installer_error.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/07/installer_error-150x150.png" alt="Mallformed encoding" title="Mallformed encoding" width="150" height="150" class="alignleft size-thumbnail wp-image-72" /></a><br />Po tem ko je že kazalo, da ne bo iz mojega testiranja nič, sem le pogruntal, kaj ga tare&#8230;<sup>[4]</sup> Če imamo v katerih od  <a href="http://en.wikipedia.org/wiki/Environment_variable" rel="nofollow" class="liwikipedia">env</a> spremenljivkah string &#8216;\u&#8217;, ki prikazuje trenutno prijavljenega uporabnika, ga bo installer zamešal za unicode znak in sam inštalacijski postopek se bo prekinil :D <br />
Pri meni je šlo za PS1 spremenljivko, saj rad upurabljam ta. &#8220;fancy prompt&#8221;:</p>
<pre class="brush: plain;">
[...]
NM=&quot;\[&#92;&#48;33[0;38m\]&quot; #means no background and white lines
HI=&quot;\[&#92;&#48;33[0;37m\]&quot; #change this for letter colors
HII=&quot;\[&#92;&#48;33[0;31m\]&quot; #change this for letter colors
SI=&quot;\[&#92;&#48;33[0;33m\]&quot; #this is for the current directory
IN=&quot;\[&#92;&#48;33[0m\]&quot;

export PS1=&quot;$NM[ $HI\$(date +%H:%M:%S)$NM ]$IN$NM[ $HII\u@\h $SI\w$NM ]$ $IN&quot;
[...]
</pre>
<p><a href="http://www.internet-solutions.si/wp-content/uploads/2008/07/fancy_prompt.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/07/fancy_prompt-150x150.png" alt="Fancy prompt" title="Fancy prompt" width="150" height="150" class="alignleft size-thumbnail wp-image-73" /></a><br />
Fancy prompt</p>
<p>Sedaj mi je samo ostalo, da zakomentiram PS1 spremenljivko v .profile datoteki in problem je bil odpravljen. Installer dela kot namazan:<br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/07/installer_passes_ok.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/07/installer_passes_ok-150x150.png" alt="After some hard time installer will work" title="After some hard time installer will work" width="150" height="150" class="alignleft size-thumbnail wp-image-74" /></a></p>
<p>Da še ne pozabim. Tale problem mi je uspelo reproducirati na Linux <a href="http://www.ubuntu.com/" class="liexternal">Ubuntu</a> 8.0.4 platformi.</p>
<p>Happy blogging(coding)!</p>
<ol class="footnotes"><li id="footnote_0_66" class="footnote">ZendDebugger.dll</li><li id="footnote_1_66" class="footnote">ZendDebugger.so</li><li id="footnote_2_66" class="footnote">extensions</li><li id="footnote_3_66" class="footnote">Stric Google mi je malce pomagal</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2008/07/01/zend-studio-601-installer-na-ubuntu-ju-804-ga-biksa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Ločevanje Apache log datotek z uporabo vlogger-ja</title>
		<link>http://www.internet-solutions.si/2008/06/12/locevanje-apache-log-datotek-z-uporabo-vlogger-ja/</link>
		<comments>http://www.internet-solutions.si/2008/06/12/locevanje-apache-log-datotek-z-uporabo-vlogger-ja/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 12:01:12 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Tanači]]></category>
		<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[Tutorials]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[logfile]]></category>
		<category><![CDATA[rotater/parser]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/?p=59</guid>
		<description><![CDATA[Long time no see
Po dolgem času spet nekaj za narodov blagor. Od zadnje objave je minilo kar nekaj časa. Delavniki so še vedno enaki: sestanki, ideje, realizacija, skratka ena velika &#8220;gužva&#8221; :)
Doma in v službi sem dokončno prešaltal na linux. Svojemu profilu na LinkedIn lahko počasi dodam napredno znanje in administracija Debian/Ubuntu based linux distribucij.
Še [...]]]></description>
			<content:encoded><![CDATA[<h2>Long time no see</h2>
<p>Po dolgem času spet nekaj za narodov blagor. Od zadnje objave je minilo kar nekaj časa. Delavniki so še vedno enaki: sestanki, ideje, realizacija, skratka ena velika &#8220;gužva&#8221; :)<br />
Doma in v službi sem dokončno prešaltal na linux. Svojemu profilu na <a href="http://www.linkedin.com/in/alesl" class="liexternal">LinkedIn</a> lahko počasi dodam napredno znanje in administracija Debian/Ubuntu based linux distribucij.<br />
Še vedno veliko raziskujem in testiram. Med zadnjimi uspešnimi eksperimenti je inštalacija <a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/macosx.jpg" rel="lightbox" title="Mac Os X 10.5.2" class="liexternal">Leoparda (Mac Os X 10.5.2)</a> na zunanjem USB disku na dve leti starem PC-ju z AMD Athlon 64 procesorjem. Kako mi je to uspelo, vam ne morem razkriti, saj je celotna stvar namenjena testiranju in ni ravno legalna ;) Koga zanima kaj več si naj ogleda <strong><a href="http://www.osx86project.org/" class="liexternal">OSx86 Project</a></strong>. Vsekakor je <a href="http://www.apple.com/macpro/" class="liexternal">Mac Pro</a> moj developer dream machine, saj mi kljub n-odprtim aplikacijam:</p>
<ul>
<li>Firefox z cca 50 odprtimi tabi</li>
<li>Opera z cca 20 odprtimi tabi</li>
<li>Safari z cca 10 odprtimi tabi</li>
<li>Zend Studio for Eclipse</li>
<li>Aptana Studio</li>
<li>in še eno 20 raznoraznih programčkov</li>
</ul>
<p>na PC-ju ni uspelo preobremenit procesor in s tem OS X, da bi ta vsaj malo počepnil. Kako celotna zadeva deluje na originalnem Macu pa si lahko le zamišljam.<br />
<br/><br />
<span id="more-59"></span></p>
<h2>Vlogger</h2>
<p><a href="http://n0rp.chemlab.org/vlogger/" class="liexternal">Vlogger</a> je majhen programček napisan v perlu s katerim zapisujemo Apache log datoteke razbite na mape virtual hostov. V posameznih mapah se nahajajo dostopi (access.log) po dnevih. Z malenkostnim popravkom skripte pa lahko v istih mapah shranjujemo tudi napake (error.log). Zadeva je zelo podobna <a href="http://www.cronolog.org/" class="liexternal">cronolog-u</a>, le da ne rabimo za vsak virtual host pisat svojo<br />
direktivo, kar posledično zmanjša število dostop in s tem &#8220;file handlov&#8221;. Zakaj je to pomembo?<br />
Recimo da ima vsak Virtual Host svoje log datoteke in nimamo nobene posebnosti pri zapisovanju logov (ne uporabljamo rotatorja/parserja ampak pustimo da Apache sam skrbi za log datoteke) bomo pri nekaj več sto Virtualnih Hostov kmalu naleteli na težave. Apache-ju bo kaj kmalu zmanjkalo tako imenovanih &#8220;<a href="http://httpd.apache.org/docs/2.0/vhosts/fd-limits.html" class="liexternal">file deskriptorjev</a>&#8220;, ki jih ima na voljo.<br />
Tukaj pridejo na pomoč razni &#8220;virtual web logfile rotater/parser&#8221; programčki. Med njimi je tudi vlogger. Sam sem stestiral vlogger na Debian/Ubuntu linuxu, Mac Os X ter FreeBSD-ju. Na vseh sistemih sem pred tem Apache2 že inštaliral in vlogger je na vseh deloval kot namazan.</p>
<h3>Inštalacija</h3>
<p> <b>Linux:</b></p>
<pre class="brush: bash;">sudo apt-get install vlogger</pre>
<p><b>Mac Os X, FreeBSD:</b><br />
Prenesi datoteko <a href="http://n0rp.chemlab.org/vlogger/vlogger-1.3.tar.gz" class="lizip">vlogger-1.3</a>, odpakiraj in prekopiraj vlogger v /usr/sbin/ direktorij.</p>
<h3>Konfiguracija</h3>
<p>Vse kar moremo narediti, da bo vlogger špilal je da v globalno konfiguracijsko datoteko od Apache strežnika postavimo eno &#8220;CustomLog&#8221; direktivo in ta bo zapisoval dostopne loge za vsak Virtual Host in dan posebej.<br />
Še prej pa popravimo &#8220;LogFormat&#8221; vrstico (tisto z imenom combined). Dodamo string %v na začetek le te. Odprimo apache konfiguracijsko datoteko<sup>[1]</sup>:</p>
<pre class="brush: bash;">
[...]
#LogFormat &quot;%h %V/%v %l %u %t \&quot;%r\&quot; %&gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined
LogFormat &quot;%v %h %l %u %t \&quot;%r\&quot; %&gt;s %b \&quot;%{Referer}i\&quot; \&quot;%{User-Agent}i\&quot;&quot; combined
[...]
</pre>
<p>Popravimo še &#8220;CustomLog&#8221; vrstico</p>
<pre class="brush: bash;">
[...]
#CustomLog /var/log/apache2/access.log combined
CustomLog &quot;| /usr/sbin/vlogger -t \&quot;access.log.%Y-%m-%d\&quot; -s access.log /var/log/apache2&quot; combined
[...]
</pre>
<p>Tako bomo zapisovali vse log datoteke v poddirektorije<sup>[2]</sup>  v &#8220;/var/log/apache2&#8243; z imenom access.log.yyyy-mm-dd z simbolicnim linkom &#8220;access.log&#8221;<br />
Kot sem že omenil potrebujemo samo eno &#8220;CustomLog&#8221; direktivo za celotno konfiguracijo Apache-ja.<br/><br />
<span style="color:red;">NE POZABITE izključit ostale &#8220;CustomLog&#8221; direktive, še posebej v Virtual Host konfiguracijah!</span><br/><br />
Dodatna prednost v eni sami dostopni datoteki, poleg že omenjenega limita &#8220;file deskriptorjev&#8221;, je seveda zmanjšanje server loada še posebej na straneh z veliko prometa.<br />
<a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/access_log.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/06/access_log-150x150.png" alt="Vlogger access.log na Ubuntu 6.06" title="Vlogger access.log na Ubuntu 6.06" width="150" height="150" class="alignleft size-thumbnail wp-image-61" /></a><br />
Primer zapisa access logov na Ubuntu 6.06</p>
<h3>ErrorLog mode</h3>
<p>Z vlogger-jem lahko parsamo tudi napake. V tem modu je parsanje host-a izključeno in datoteka se zapiše z uporabo template datoteke v podani LOGDIR<sup>[3]</sup>.</p>
<pre class="brush: bash;">
[...]
#ErrorLog &quot;/var/logs/apache2/error.log&quot;
ErrorLog  &quot;| /usr/sbin/vlogger -e -t \&quot;error.log.%Y-%m-%d\&quot; -s error.log /var/log/apache2/errors&quot;
[...]
</pre>
<p>Prav tako nastavimo level napak, ki se naj shranjujejo v ErrorLog. Za produkcijo je priporočljiv vsaj level <a href="http://httpd.apache.org/docs/2.0/mod/core.html#loglevel" class="liexternal">Critital Conditions</a>.</p>
<pre class="brush: bash;">
[...]
#
# LogLevel: Control the number of messages logged to the error_log.
# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
#
LogLevel crit
[...]
</pre>
<p>Če želimo v error log ujeti še PHP napake v php.ini-ju nastavimo naslednje:</p>
<pre class="brush: bash;">
[...]
;Log errors into a log file (server-specific log, stderr, or error_log (below))
; As stated above, you're strongly advised to use error logging in place of
; error displaying on production web sites.
log_errors = On
[...]
</pre>
<p><a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/error_log.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/06/error_log-150x150.png" alt="Vlogger error.log na Ubuntu 6.06" title="Vlogger error.log na Ubuntu 6.06" width="150" height="150" class="alignleft size-thumbnail wp-image-62" /></a><br/><br />
Primer zapisa error loga na Ubuntu 6.06</p>
<h3>Tip</h3>
<p>Z malim popravkom vlogger skripte lahko error.log datoteke zapisujete v Virtual Host mape, kjer se že nahajajo access.log datoteke. <b>Ne priporočam tega v produkciji, saj lahko spet naletimo na problem limita &#8220;file deskriptorjev&#8221;</b><br />
Gre bolj za pomoč programerjem, saj opažam da nemalokateri razvijalec kliče na pomoč ob prvi napaki.<br />
Odprimo vlogger skripto in spremenimo<sup>[4]</sup>:</p>
<pre class="brush: perl;">
#!/usr/bin/perl - T v
#!/usr/bin/perl
[...]
        mkdir(&quot;$ARGV[0]&quot;);
        #print STDERR
        #  &quot;[vlogger] target directory $ARGV[0] does not exist - exiting.\n\n&quot;;
        #exit;
[...]
</pre>
<p>S tem najprej disablom da bi perl preverjal tako imenovane &#8220;tainting checks&#8221;, ter kreiramo mapo za error.log če ta ne obstaja. Ker se target direktorij za error log preverja takoj ob zagonu Apache-ja, bi se v nasprotnem primeru skripta ustavila in bi se zapisoval samo access.log.<br />
<br />
Sedaj samo še dodamo direktivo v Virtual Host konfiguracijo</p>
<pre class="brush: bash;">
[...]
&lt;VirtualHost *&gt;
    DocumentRoot &quot;/opt/local/apache2/htdocs/virtualhost&quot;
    ServerName virtualhost
    ErrorLog  &quot;| /usr/sbin/vlogger -e -t \&quot;error.log.%Y-%m-%d\&quot; -s error.log /var/log/apache2/virtualhost&quot;
&lt;/VirtualHost&gt;
[...]
</pre>
<p><a href="http://www.internet-solutions.si/wp-content/uploads/2008/06/access_error.png" rel="lightbox"><img src="http://www.internet-solutions.si/wp-content/uploads/2008/06/access_error-150x150.png" alt="Access in Error Log v isti mapi od Virtual Hosta" title="Access in Error Log v isti mapi od Virtual Hosta" width="150" height="150" class="alignleft size-thumbnail wp-image-63" /></a><br/><br />
Access in Error Log v isti mapi od Virtual Hosta.<br/><br />
<br />
Happy blogging(coding)!</p>
<ol class="footnotes"><li id="footnote_0_59" class="footnote">linux: /etc/apache2/apache2.conf; mac os x: /opt/local/apache2/conf/httpd.conf; freeBSD: /usr/local/etc/apache22/httpd.conf</li><li id="footnote_1_59" class="footnote">virtualhost.com, virtualhost1.com, &#8230;</li><li id="footnote_2_59" class="footnote">npr: kreiramo mapo /errors v /var/log/apache2</li><li id="footnote_3_59" class="footnote">v vrsticah 1 in 174 </li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2008/06/12/locevanje-apache-log-datotek-z-uporabo-vlogger-ja/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQL Server 2005 driver za PHP</title>
		<link>http://www.internet-solutions.si/2007/10/16/sql-server-2005-driver-za-php/</link>
		<comments>http://www.internet-solutions.si/2007/10/16/sql-server-2005-driver-za-php/#comments</comments>
		<pubDate>Tue, 16 Oct 2007 12:21:32 +0000</pubDate>
		<dc:creator>alesl</dc:creator>
				<category><![CDATA[Tehnologija]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[SQL Server 2005]]></category>

		<guid isPermaLink="false">http://www.internet-solutions.si/2007/10/16/sql-server-2005-driver-za-php/</guid>
		<description><![CDATA[Čudna so pota gospodova ;) 
Že nekaj časa je znano da sta Zend in Microsoft staknila skupaj glave. Slednjim je najbrž &#8220;kapnilo&#8221; kako velik je &#8220;PHP Community&#8221; in so si zaželeli svoj delež pogače. Rezultat je ganc[1] novi SQL Server 2005 (CTP) gonilnik za PHP. Res lepo darilo nam PHP developerjem.
SQL gonilnik za PHP  [...]]]></description>
			<content:encoded><![CDATA[<p>Čudna so pota gospodova ;)<br /> <br />
Že nekaj časa je znano da sta <a href="http://www.zend.com/" class="liexternal">Zend</a> in <a href="http://www.microsoft.com/" class="liexternal">Microsoft</a> staknila skupaj glave. Slednjim je najbrž &#8220;kapnilo&#8221; kako velik je &#8220;PHP Community&#8221; in so si zaželeli svoj delež pogače. Rezultat je ganc<sup>[1]</sup> novi SQL Server 2005 (<a href="http://en.wikipedia.org/wiki/Community_Technology_Preview" rel="nofollow" class="liwikipedia">CTP</a>) gonilnik za PHP. Res lepo darilo nam PHP developerjem.<br />
SQL gonilnik za PHP  bo s svojim <a href="http://en.wikipedia.org/wiki/Application_programming_interface" rel="nofollow" class="liwikipedia">API</a>-jem omogočal zanesljivo integracijo z SQL strežnikom za PHP aplikacije razvite na Windows platformi. Sam gonilnik je PHP 5 &#8220;extension&#8221;. Deluje na vseh izdajah SQL Server 2005 in SQL Server 2000<sup>[2]</sup>.<br />
<span id="more-43"></span><br />
Gonilnik bom testiral ob prvi priliki. Vseeno je to šele Community Technology Preview (CTP) izdaja in nikakor ni namenjena produkciji. Več o CTP in novemu SQL Server 2005 gonilniku za PHP preberite na <a href="http://blogs.msdn.com/sqlphp/" class="liexternal">PHP Team Blogu</a>.</p>
<p><strong><a href="http://download.microsoft.com/download/0/6/4/064031ae-2512-499a-b2b8-98019edf9928/sqlsrv-for-php_1.0.1045_enu.exe" class="liexternal">Dol potegnite</a> novi SQL Server 2005 Driver za PHP.</strong></p>
<ol class="footnotes"><li id="footnote_0_43" class="footnote">čisto</li><li id="footnote_1_43" class="footnote">tudi Express Edition</li></ol>]]></content:encoded>
			<wfw:commentRss>http://www.internet-solutions.si/2007/10/16/sql-server-2005-driver-za-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
