<?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>danield.ro &#187; Programare</title>
	<atom:link href="http://www.danield.ro/category/programare/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.danield.ro</link>
	<description>Bum</description>
	<lastBuildDate>Wed, 13 Jan 2010 16:20:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Reducerea unui fisier javascript in Perl</title>
		<link>http://www.danield.ro/2010/01/13/reducerea-unui-fisier-javascript-in-perl/</link>
		<comments>http://www.danield.ro/2010/01/13/reducerea-unui-fisier-javascript-in-perl/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 16:19:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programare]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jsmin]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://www.danield.ro/?p=591</guid>
		<description><![CDATA[Una dintre regulile legate de performanta site-urilor tine de micosrarea fisierelor javascrips si css incluse in document. Exista cateva unelte foarte bune pentru asta, JSMIN fiind si cea mai buna si mai folosita, pe care o si recomand mai departe. Dar, pentru ca imi place sa experimentez, m-am gandit sa fac propria mea versiune a [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Best Practices for Speeding Up Your Website" href="http://developer.yahoo.com/performance/rules.html#minify">Una dintre regulile</a> legate de performanta site-urilor tine de micosrarea fisierelor javascrips si css incluse in document. Exista cateva unelte foarte bune pentru asta, JSMIN fiind si cea mai buna si mai folosita, pe care o si recomand mai departe. Dar, pentru ca imi place sa experimentez, m-am gandit sa fac propria mea versiune a unui &#8220;minificator&#8221; javascript, mai ales ca cele existente citesc fisierele caracter cu caracter.</p>
<p><span id="more-591"></span>Asadar, folosind Perl si numai expresii regulate am facut <a title="StripJs" href="http://www.danield.ro/wp-content/uploads/2010/01/sjs.zip">un script</a> de cateva randuri care incearca sa reduca marimea unui fisier javascript. Scriptul recunosc ca nu e cel mai bun, in unele cazuri modifica si ceea ce nu trebuie, in special in interiorul unor stringuri (dar nu sunt chestii foarte grave ce pot afecta codul).</p>
<pre>use strict;
use warnings;

my ($filename) = @ARGV;
my @trace;
print $filename;
$filename =~ /^(.+)\.js$/;

my $filename_min = $1.".min.js";
open(FM, "&gt; $filename_min") or die "Could not open: $!";

while(&lt;&gt;) {
 chomp;
 s/^\s*//; s/\s*$//; s/\/\/(.+)//;
 if (/\/\*/) { push @trace, 1; s/\/\*(.*)//;}
 if ((@trace &gt; 0)&amp;&amp;(/(.*)\*\//)) { s/(.*)\*\///; pop @trace;}
 else { if (@trace &gt; 0) { s/(.*)//;} }
 s/(?&lt;=[-\$\+\(\)=\:&amp;\?\{\}\]\[\|;&lt;&gt;])\ (?=([\w\d]))//g;
 s/(?&lt;=([\w\d]))\ (?=[-\$\+\(\)=\:&amp;\?\{\}\]\[\|;!&lt;&gt;])//g;
 s/(?&lt;=["'\$\-\+\(\),=\:!&amp;\?\{\}\]\[\|;])\ (?=["'\$\-\+\(\),=\:!&amp;\?\{\}\]\[\|;])//g;

 print FM $_;
}

close(FM) or die "Could not close: $!";</pre>
<p>Nu sunt exper in Perl, asa ca e posibil sa nu fie cel mai frumos cod, dar isi face cat de cat treaba. Dar ce face mai exact? Citeste fisierul javascript de la linia de comanda, il deschide, face noul fisier la care ii adauga denumirea .min, si apoi preia rand cu rand continutul din fisierul original. Fiecare rand e curatat de spatiu inutil, comentarii si alte lucruri de acest gen, iar apoi scoate spatiile dintre caracterele <em>- $ + ( ) = : &amp; ? { } ] [ | ; &lt; &gt;</em> si caracterele alfanumerice, precum si spatiile dintre caracterele <em>" ' $ - + ( ) , = : ! &amp; ? { } ] [ | ;.<br />
</em></p>
<p>Nu am facut nicio verficare, pentru ca s-ar presupune ca corect scris codul <img src='http://www.danield.ro/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  si nu e cazul. Daca cineva crede ca ii e folositor sciptul, foarte bine, daca poate sa il inbunatateasca si mai bine. Dar daca vreti sa curatati fisierele javascript pentru un proiect, mai bine folositi <a title="JSMIN" href="http://www.crockford.com/javascript/jsmin.html">JSMIN</a>.</p>
<p>PS: E misto sa faci un script fie folosind Perl, fie folosind direct JSMIN prin care automat micsorezi toate fisierele js ce le ai intr-un folder, le unesti si voila, nu mai trebuie sa faci asta manual plus ca mai bifezi <a title="Best Practices for Speeding Up Your Website" href="http://developer.yahoo.com/performance/rules.html#num_http">un punct</a> din lista de Best Practices de la Yahoo Developer Network.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2010/01/13/reducerea-unui-fisier-javascript-in-perl/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Ș si ț in linkurile Wordpress</title>
		<link>http://www.danield.ro/2009/04/16/s-si-t-in-linkurile-wordpress/</link>
		<comments>http://www.danield.ro/2009/04/16/s-si-t-in-linkurile-wordpress/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 11:02:16 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[diacritice]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.danield.ro/?p=285</guid>
		<description><![CDATA[Datorita unui mesaj de pe Twitter mi-am adus azi aminte de problema aparitiei caracterelor Șș si Țț in linkurile posturilor, categoriilor si tagurilor din Wordpress.
Probabil pentru ca nu prea au fost folosite in trecut, cei de la Wordpress probabil au uitat de ele, astfel, cei ce folosesc caracterele corecte pentru s si t (cele cu [...]]]></description>
			<content:encoded><![CDATA[<p>Datorita unui mesaj de pe Twitter mi-am adus azi aminte de problema aparitiei caracterelor Șș si Țț in linkurile posturilor, categoriilor si tagurilor din Wordpress.</p>
<p>Probabil pentru ca nu prea au fost folosite in trecut, cei de la Wordpress probabil au uitat de ele, astfel, cei ce folosesc caracterele corecte pentru s si t (cele cu virgula sub) pot avea unele probleme.</p>
<p>Am incercat sa fac un plugin, dar nu am reusit sa-l fac sa mearga si pentru slug-urile de la categorii si taguri, asadar postez aici o solute mult mai simpla:</p>
<ul>
<li>deschideti wp-includes/formatting.php</li>
<li>cautati &#8220;<strong>/Euro sign</strong>&#8221; sau functia &#8220;<strong>remove accents</strong>&#8221; (in ultima versiune de Wordpress, randul 277)</li>
<li>adaugati cele 2 linii de cod deasupra &#8220;/Euro sign&#8221;:</li>
</ul>
<pre class="brush: php">chr(200).chr(152) =&gt; 'S', chr(200).chr(153) =&gt; 's',
chr(200).chr(154) =&gt; 'T', chr(200).chr(155) =&gt; 't',</pre>
<p>Acum nu ar mai trebui sa aveti probleme cu ș si ț.</p>
<p><strong>Edit: Nu folositi aceasta metoda daca aveti deja posturi, categorii si taguri ce contin caracterele ș si ț (asta daca nu vreti sa le editati pe toate), o solutie: <a href="http://scribu.net/util/link-uri-fara-diacritice-in-wordpress.html" target="_blank">aici</a>.</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2009/04/16/s-si-t-in-linkurile-wordpress/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Simple PHP Cache</title>
		<link>http://www.danield.ro/2009/03/26/simple-php-cache/</link>
		<comments>http://www.danield.ro/2009/03/26/simple-php-cache/#comments</comments>
		<pubDate>Wed, 25 Mar 2009 23:14:37 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programare]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.danield.ro/?p=259</guid>
		<description><![CDATA[Avand in vedere ca  nu am mai avut chef sa lucrez in seara asta, m-am gandit sa postez despre o chestie la care am lucrat in trecut si care, cel putin in cazul meu, mi-a fost de folos.
Este vorba de o solutie simpla si home-made de a face cache la anumite date in PHP. Cel [...]]]></description>
			<content:encoded><![CDATA[<p>Avand in vedere ca  nu am mai avut chef sa lucrez in seara asta, m-am gandit sa postez despre o chestie la care am lucrat in trecut si care, cel putin in cazul meu, mi-a fost de folos.</p>
<p>Este vorba de o solutie simpla si home-made de a face cache la anumite date in PHP. Cel mai simplu exemplu ar fi urmatorul: ai o pagina cu un articol, pagina respectiva se modifica destul de rar, dar e accesata destul de des. Ce rost ar avea sa preiei/procesezi din nou informatiile de fiecare data cand e accesata pagina, cand ai putea sa salvezi datele si sa le trimiti direct catre partea ce se ocupa cu afisarea lor. Sper sa nu gresesc, dar daca am vorbi despre o arhitectura <a title="MVC" href="http://en.wikipedia.org/wiki/Model-view-controller">Model-View-Controller</a> in PHP, practic sari in mare parte peste Model.</p>
<p><span id="more-259"></span>Stiu ca exista solutii gata facute pentru cache, majoritatea framework-urilor au asa ceva, exista un pachet PEAR pentru cache, dar cred ca e mai fun sa incerci sa faci unele chestii de unul singur, poti invata multe lucruri noi si poti sa controlezi fiecare aspect a ceea ce vrei sa realizezi.</p>
<p>Revenind acum la subiectul principal. Deoarece am avut nevoie de o solutie simpla de a face cache la anumite pagini, am facut cu ceva timp in urma o clasa destul de simpla ce permite sa stochez informatiile pe care le afisez, fara a le mai mesteca inca o data.</p>
<blockquote><p>(1. Vreau pagina x) -&gt; (2.1. Macina datele primite -&gt; 2.2 Returneaza datele) -&gt; (3. Afiseaza continutul)</p></blockquote>
<p>Schema de mai sus putem spune ca e ceea ce se intampla in mod normal. Punctul 2. este de obicei cel care consuma si foloseste cele mai multe resurse. Cred ca deja se poate vedea directia pe care vreau sa merg. De ce nu am incerca sa scoatem punctul 2.1? Nu are rost ca acelasi proces sa se repete de foarte multe ori, mai ales cand datele returnate sunt aceleasi. Ce facem mai departe? Luam datele &#8220;macinate&#8221;, le salvam, iar data viitoare cand vom mai avea nevoie de ele, le luam direct din cache, fara a mai repeta inca o data procesul cel mai greoi.</p>
<p style="text-align: left;">Solutia a fost destul de eficienta pentru mine. Nu am testat chiar atat de serios si nu am testat eficienta decat pe un computer de test, dar rezultatul a fost destul de satisfacator.<img class="size-full wp-image-263 aligncenter" title="Grafic performanta" src="http://www.danield.ro/wp-content/uploads/2009/03/imagine.png" alt="Grafic performanta" width="450" height="320" /></p>
<p style="text-align: left;">Primele doua valori din grafic nu sunt reprezentative, deoarece am testat la rece sistemul, nici varful acela de la seria fara cache. Cu toate acestea, este clar ca la prima accesare, in cazul de fata, momentul in care s-au salvat datele in cache, timul de procesare si afisare a paginii a fost mai ridicat, dar pe parcurs, facandu-se media, se poate vedea ca solutia a fost eficienta.</p>
<p style="text-align: left;">Clasa are 3 metode principale: constructorul, get si set, care sunt prezentate pe scurt mai jos.</p>
<p>In <strong>constructor</strong>, in cazul in care exista date de configurare (directorul, timeout si active), luam datele si le salvam, apoi se verifica daca putem scrie in directorul in care salvam fisierele, daca nu se poate, nu se poate. <img src='http://www.danield.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<pre class="brush: php">public function __construct($config = array()) {
		if (count($config)) {
			foreach($config as $var =&gt; $value)
				if (in_array($var, $this-&gt;config))
					$this-&gt;$var = $value;
		}

		if (!is_writable($this-&gt;dir)) {
			throw new Exception('Cache directory not writable.');
			$this-&gt;active = false;
		}
	}</pre>
<p><strong>set()</strong> e folosita pentru a salva datele. Se verifica daca id-ul este ok, mai verificam directorul in care scriem, verificam si daca putem sa scriem fisierul si salvam datele. Nimic mai simplu.</p>
<pre class="brush: php">public function set($id, $data) {
		if (!$this-&gt;active)
			return false;

		$this-&gt;data = $data;

		if (preg_match("/(^[a-zA-Z0-9_-]{3,64}$)/", $id)) {
			$cache_file = $this-&gt;dir.$id;
		} else {
			throw new Exception('Invalid cache ID');
			return false;
		}

		if (!is_dir($this-&gt;dir)) {
			throw new Exception('Cache directory not available');
			return false;
		}
		else {
			if (!$handle = fopen($cache_file, 'w')) {
				throw new Exception('Cannot open file');
				return false;
			}
			else {
				if (fwrite($handle, serialize($this-&gt;data))===false) {
					throw new Exception('Cannot write to file');
					return false;
				}
				fclose($handle);
			}
		}

		return true;
	}</pre>
<p><strong>get()</strong> e folosita pentru a prelua datele de cache. Facem din nou niste verificari, daca fisierul exista si e valid (din punct de vedere al timeout-ului), preluam datele si le returnam.</p>
<pre class="brush: php">public function get($id) {
		if (!$this-&gt;active)
			return false;

		if (preg_match("/(^[a-zA-Z0-9_-]{3,64}$)/", $id)) {
			$cache_file=$this-&gt;dir.$id;
		} else {
			throw new Exception('Invalid cache ID');
			return false;
		}
		if (($this-&gt;active)&amp;&amp;(file_exists($cache_file))) {
			if ((time()-filemtime($cache_file))&gt;($this-&gt;timeout*60)) {
				unlink($cache_file);
				return false;
			}

			$this-&gt;data = unserialize(@file_get_contents($cache_file));
			$this-&gt;hit++;
			return $this-&gt;data;
		}
	}</pre>
<p>Am sa postez si un mic exemplu, care poate parea cam greoi, ca si cum ai omora o musca cu pusca, dar nu mi-a venit pe moment o idee de un exemplu mai complex.</p>
<pre class="brush: php">function salut() {
	$mesaj = "Salut, uite ora la care m-au executat :". date("Y-m-d H:i:s");

	return $mesaj;
}

try {
	$cache = new Cache();

	if (!$mesaj = $cache-&gt;get("f-salut")) {
		$mesaj = salut();
		$cache-&gt;set("f-salut", $mesaj);
	}

	echo $mesaj;
} catch (Exception $e) {
    echo 'Ceva n-a mers: '. $e-&gt;getMessage();
}</pre>
<p>Clasa, impreuna cu un exemplu, poate fi downloadata de aici: <a title="Cache" href="http://greentempo.com/funbox/simplecache/Cache.zip">PHP Simple Cache</a>. Un exemplu live poate fi gasit <a title="Cache" href="http://greentempo.com/funbox/simplecache/">aici</a>, dar e cu doua ore in urma pentru ca am uitat sa setez fusul orar <img src='http://www.danield.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . In exemplul respectiv se poate vedea data la care a fost geneerat fisierul de cache, data se actualizeaza la fiecare 15 minute, adica la durata de viata setata in acest moment pentru cache.</p>
<p>In cazul in care cineva are sugestii, critici sau orice fel de comentarii, le primesc pe toate cu placere. <img src='http://www.danield.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2009/03/26/simple-php-cache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Linkuri curate</title>
		<link>http://www.danield.ro/2009/01/28/pretul-bananelor-a-explodat/</link>
		<comments>http://www.danield.ro/2009/01/28/pretul-bananelor-a-explodat/#comments</comments>
		<pubDate>Wed, 28 Jan 2009 15:32:51 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[banane]]></category>
		<category><![CDATA[link]]></category>
		<category><![CDATA[seo]]></category>

		<guid isPermaLink="false">http://www.danield.ro/2009/01/28/linkuri-curate/</guid>
		<description><![CDATA[In urma cu cativa ani circulau tot felul de linkuri catre articole in care puteai sa introduci numele cuiva, facand din respectiva persoana personajul principal intr-o stire jenanta (violator de oi, campion mondial la masturbare etc).
Ce legatura are asta cu titlul postului si ceea ce va urma mai jos? Nimic mai simplu. Majoritatea site-urilor din [...]]]></description>
			<content:encoded><![CDATA[<p>In urma cu cativa ani circulau tot felul de linkuri catre articole in care puteai sa introduci numele cuiva, facand din respectiva persoana personajul principal intr-o stire jenanta (violator de oi, campion mondial la masturbare etc).</p>
<p>Ce legatura are asta cu titlul postului si ceea ce va urma mai jos? Nimic mai simplu. Majoritatea site-urilor din ziua de azi folosesc o structura a linkurilor cat mai sugestiva, in mare parte din cauza considerentelor legate de SEO, astfel, un link catre un articol despre cultivarea bananelor in America de Sud poate sa se prezinte in felul urmator:</p>
<p><span id="more-253"></span></p>
<blockquote><p><a href="http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud/">http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud/</a></p></blockquote>
<p>Avantajele principale sunt date de faptul ca linkul pare foarte curat si usor de inteles pentru oameni si poate sa te ajute in cazul motoarelor de cautare. Pe langa exemplul general pe care l-am dat mai sus, pot sa existe multe alte versiuni si posibilitati de a folosi aceasta tehnica, in unele cazuri este des intalnit si un id numeric al articolului, linkul devenind:</p>
<blockquote><p><a href="http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud-127538/">http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud-127538/</a></p></blockquote>
<p>De ce se intampla asta? In momentul in care trebuie sa preiei elementul din locul in care il ai stocat, ai nevoie de un identificator unic al acestuia. In cazul in care sunt folosite baze de date, totul e relativ simplu si te folosesti de sistemul prin care ai o cheie unica ce se autoincrementeaza la fiecare element nou. In cazul in care se foloseste doar un id de acest gen poti da de linkuri de genul:</p>
<blockquote><p><a href="http://www.example.com/articol/218793/">http://www.example.com/articol/218793/</a></p>
<p><a href="http://www.example.com/articol?96735">http://www.example.com/articol?96735</a></p></blockquote>
<p>Linkurile sunt mai scurte, dar nu foarte sugestive pentru un om pentru ca nu are de unde sa stie despre ce e vorba in pagina respectiva. Aceasta metoda, chiar daca este cea mai simpla si cea mai usor de implementat, din punctul meu de vedere lasa de dorit.</p>
<p>Revenind la cel de-al doilea exemplu, care e un compromis relativ bun intre celelalte doua variante, aceste, daca nu este implementat corect, poate duce la unele situatii comice si neplacute pentru unele site-uri.</p>
<blockquote><p><a href="http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud-127538/">http://www.example.com/articol/cultivarea-bananelor-in-america-de-sud-127538/</a></p></blockquote>
<p>Revenind la exemplul prezentat mai sus, de multe ori cand se foloseste atat titlul curatat al articolului, cat si un id, nu se mai verifica ce apare in titlu, care este pus acolo doar din motive de forma, nu si de fond, astfel, o pagina despre eventualul imprumut FMI acordat Romaniei poate sa dea impresia ca e despre pretul bananelor, dupa cum arata si exemplele de mai jos:</p>
<blockquote><p><a title="http://economie.hotnews.ro/stiri-finante_banci-5367467-pretul-bananelor-a-scazut-in-raport-cu-valoarea-leului.htm" href="http://economie.hotnews.ro/stiri-finante_banci-5367467-pretul-bananelor-a-scazut-in-raport-cu-valoarea-leului.htm">http://economie.hotnews.ro/stiri-finante_banci-5367467-pretul-bananelor-a-scazut-in-raport-cu-valoarea-leului.htm</a></p>
<p><a title="http://www.evz.ro/articole/detalii-articol/837528/Criza-producatorilor-de-odorizante-wc/" href="http://www.evz.ro/articole/detalii-articol/837528/Criza-producatorilor-de-odorizante-wc/">http://www.evz.ro/articole/detalii-articol/837528/Criza-producatorilor-de-odorizante-wc/</a></p>
<p><a title="http://www.gandul.info/actualitatea/basescu-urmareste-cu-interes-fluctuatiile-de-pe-piata-bananelor.html?3927;3812675" href="http://www.gandul.info/actualitatea/basescu-urmareste-cu-interes-fluctuatiile-de-pe-piata-bananelor.html?3927;3812675">http://www.gandul.info/actualitatea/basescu-urmareste-cu-interes-fluctuatiile-de-pe-piata-bananelor.html?3927;3812675</a></p>
<p><a title="http://www.realitatea.net/sindicalistii-din-domeniul-bananifer-in-greva_445547.html" href="http://www.realitatea.net/sindicalistii-din-domeniul-bananifer-in-greva_445547.html">http://www.realitatea.net/sindicalistii-din-domeniul-bananifer-in-greva_445547.html</a></p></blockquote>
<p>Pe langa faptul ca poti schimba acel parametru dupa cum doresti, site-urile returneaza in mod normal pagina corect, chiar daca acela nu mai este un link-ul normal al respectivei pagini. Nu stiu daca acest lucru poate avea un impact in cazul unui google bombing, dar nu este  normal sa ai un numar nelimitat de linkuri incorecte catre o singura pagina.</p>
<p>Solutia in cazul de fata este sa se faca o verificare atat a titlului cat si a id-ului. Cei de la GSP, de exemplu, fac acest lucru iar in cazul in care schimbi titlul din link, te redirectioneaza catre pagina normala.</p>
<p>Metoda cea mai eleganta este, insa, folosirea doar a titlului curatat al paginii respective. Acest lucru este putin mai greu de realizat deoarece trebuie parcursi urmatorii pasi:</p>
<ol>
<li>inlocuirea/scoaterea caracterelor neprietenoase (diacritice, caractere speciale, spatiu etc)</li>
<li>generarea unui titlu unic pentru fiecare element in parte (acest lucru se poate rezolva relativ usor cu o expresie regulata si una sau doua verificari)</li>
</ol>
<p>Beneficiile acestei metode sunt relative la prima vedere, dar cu timpul isi vor face simtita prezenta:</p>
<ol>
<li>daca folosesti un sistem unitar de organizare, poti crea o structura foarte simpla si usor de citit a intregului site</li>
<li>persoanele interesate pot afla dinainte despre ce e vorba in respectiva pagina</li>
<li>in cazul browserelor, introducand un cuvant din titlu sau link in bara de adresa, poti cauta foarte simplu prin istoria paginilor vizitate, gasind mult mai repede o pagina interesanta vizitata in trecut</li>
</ol>
<p>Pe final, un lucru destul de important este acela ca in momentul in care si o singura litera sau cifra din link este schimbata, linkul in sine schimbandu-se intr-un link ce duce catre o pagina inexistenta, este foarte bine ca pagina sa returneze un mesaj de eroare 404.</p>
<p>Am insistat pe aspectul unor linkuri curate si usor de citit pentru ca mi-a ramas in minte ceea ce a spus un profesor in facultate: cu timpul, masinile (in cazul de fata, computerele) trebuie sa inteleaga si sa invete sa comunice in limbajul natural, nu omul sa invete sa stapaneasca limbajul masina.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2009/01/28/pretul-bananelor-a-explodat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Care e problema cu PHP?</title>
		<link>http://www.danield.ro/2008/05/07/caree-problema-cu-php/</link>
		<comments>http://www.danield.ro/2008/05/07/caree-problema-cu-php/#comments</comments>
		<pubDate>Tue, 06 May 2008 21:56:04 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[La intamplare]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[script]]></category>

		<guid isPermaLink="false">http://www.blogverde.info/?p=223</guid>
		<description><![CDATA[Tine minte cineva &#8220;Familia Bundy&#8221; sau &#8220;Married with children&#8221;, in engleza? Mi-am adus aminte de o gluma din acest serial. Tot timpul cand cineva o intreba pe Peggy cu ce se ocupa sotul ei, ea prefera sa zica ca Al e gunoier.
Cam asa e in ziua de azi cu noi, cei ce ne castigam existenta [...]]]></description>
			<content:encoded><![CDATA[<p>Tine minte cineva &#8220;Familia Bundy&#8221; sau &#8220;Married with children&#8221;, in engleza? Mi-am adus aminte de o gluma din acest serial. Tot timpul cand cineva o intreba pe Peggy cu ce se ocupa sotul ei, ea prefera sa zica ca Al e gunoier.</p>
<p>Cam asa e in ziua de azi cu noi, cei ce ne castigam existenta din PHP. Cred ca de multe ori scapi mai usor daca spui cuiva ca pur si simplu lucrezi in Word sau Excel decat sa recunosti ca ai o relatie mai apropiata cu PHP-ul. Citind bloguri ce tin de programare si sectiunea dedicata programarii de pe reddit, iti dai seama ca pentru foarte multa lume PHP nu e altceva decat o gluma sau un motiv de a face misto.</p>
<p><span id="more-223"></span></p>
<p><strong>De ce nu ia lumea PHP-ul in serios?</strong></p>
<p>In primul rand trebuie sa lamurim un lucru. PHP nu e chiar un limbaj de programare, ci e un limbaj de &#8220;<a title="Scripting language" href="http://en.wikipedia.org/wiki/Scripting_language">scripting</a>&#8221; care e foarte usor de invatat si de cele mai multe ori te ajuta sa faci foarte multe lucruri foarte usor si intr-un timp destul de scurt.</p>
<p>Tocmai de aici vine problema principala. Oricine poate scrie un script PHP, toata lumea ofera pachete de gazduire ieftine sau chiar gratuite ce contine PHP+MySQL. PHP este astfel un limbaj extrem de accesibil si atragator chiar si pentru cei ce nu au experienta cu programarea. Nu vreau sa spun ca e ceva in neregula cu simplitatea si accesibilitatea PHP-ului, dimpotriva, e chiar foarte bine ca a ajuns sa fie chiar atat de raspandit.</p>
<p>Partea proasta la PHP e ca nu e un limbaj prea organizat, si intr-un fel iti cere si te implora sa scrii cod complet dezorganizat (nu exista un standard in denumirea functiilor, ordinea parametrilor la unele functii din aceeasi categorie e diferita de la o functie la alta samd) in care imbini partea de logica sau procesare cu partea de prezentare iar in goana de a rezolva problemele cat mai repede nimeni nu se mai uita la fond, pentru ca tot ceea ce conteaza e sa ai o aplicatie ce functioneaza.</p>
<p><strong>Ce e de facut?</strong></p>
<p>Dupa cum spuneam si mai sus, pentru ca este un limbaj destul de usor de stapanit, nimeni nu mai incearca sa citeasca carti despre PHP si, de obicei, nimeni nu citeste documentatia oficiala. <strong>PHP are una dintrele cele mai bune <a title="Documentatie PHP" href="http://www.php.net/docs.php">documentatii</a></strong> pe care le-am vazut pana acum. Cred ca fiecare aspect al acestui limbaj e documentat si discutat pe site-ul oficial.</p>
<p>Citind documentatia, citind carti si articole vei reusi foarte usor sa evoluezi incetul cu incetul in a scrie cod din ce in ce mai bun. Daca ma gandesc bine, mie mi-e si groaza sa ma uit in trecut la ce scriam acum 3-4 ani. Si acum mai am foarte multe de invatat iar daca deschid un fisier la care am lucrat acum o luna, stau si imi zic: &#8220;problema asta asta putea fi rezolvata mult mai bine asa&#8230;&#8221;. In programare tot timpul cred ca este loc de mai bine si in fiecare zi poti sa inveti si sa te perfectionezi.</p>
<p><strong>Concluzia</strong></p>
<p>Chiar daca este vazut ca un Visual Basic al internetului, PHP-ul cred ca e doar putin neinteles si nefolosit corespunzator. In orice limbaj poti sa scrii cod bun si in orice limbaj poti sa scrii cod mai putin bun. Eu trebuie sa recunosc, dupa ce am lucrat in C si Java, PHP-ul a fost un pas inapoi, cel putin cand vine vorba de &#8220;curatenia&#8221; codului. Incetul cu incetul poti sa ajungi la un nivel destul de ridicat si in PHP, trebuie doar munca si pasiune. Si daca (acum urmeaza lista clasica a aparatorilor PHP) Yahoo, Wikipedia, Facebook, Flickr, Digg, Wordpress etc. au reusit sa faca niste aplicatii solide, scalabile, la un asemenea nivel, noi de ce nu am reusi acelasi lucru, la un nivel mult mai mic, bineinteles.</p>
<p><strong>Linkuri</strong></p>
<p><a title="PHP Best Practices" href="http://www.odi.ch/prog/design/php/guide.php">PHP Best Practices</a> &#8211; un ghid foarte bun despre cum se poate trece peste unele dintre problemele de design ale PHP-ului</p>
<p><a title="Documentatie PHP" href="http://www.php.net/docs.php">Documentatia oficiala</a> &#8211; stiu, am mai pus o data linkul in acest post, dar aici chiar chiar veti gasi tot ce vreti sa stiti despre PHP, de la exemple foarte bune pana la functii si instructiuni foarte detaliate.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2008/05/07/caree-problema-cu-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Multi nervi cu Wordpress si PHP</title>
		<link>http://www.danield.ro/2008/05/05/multi-nervi-cu-wordpress-si-php/</link>
		<comments>http://www.danield.ro/2008/05/05/multi-nervi-cu-wordpress-si-php/#comments</comments>
		<pubDate>Mon, 05 May 2008 00:32:41 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[feed]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.blogverde.info/?p=222</guid>
		<description><![CDATA[Am stat astazi cateva ore, asta daca nu pun la socoteaza si orele pierdute in primavara la munca pe cand lucram la Boomr.ro, sa-mi dau seama de ce nu merge sa parsezi anumite feeduri XML (RSS si Atom) din PHP. Acum in sfarsit mi-am dat seama care era problema, dar chestia e ca nu o [...]]]></description>
			<content:encoded><![CDATA[<p>Am stat astazi cateva ore, asta daca nu pun la socoteaza si orele pierdute in primavara la munca pe cand lucram la Boomr.ro, sa-mi dau seama de ce nu merge sa parsezi anumite feeduri XML (RSS si Atom) din PHP. Acum in sfarsit mi-am dat seama care era problema, dar chestia e ca nu o pot rezolva.</p>
<p>Concluzia: nu poti parsa feedurile generate de Wordpress 2.1.3 (posibil si alte versiuni 2.1.*) din PHP. Dupa ce am facut upgrade la un Wordpress pe care testam, totul a mers perfect.</p>
<p><strong>Edit:</strong></p>
<p>N-a mers nici cu Python, folosind urllib si minidom. E ciudat ca feedurile cu probleme in PHP cu fopen sau file sunt deschise in 10-15 secunde, dar daca folosesti un socket, trimiti un request  HTTP, iei pagina, totul e mai rapid (si pentru feeduirle fara probleme) singura problema fiind ca, cel putin eu nu reusesc, nu merge sa parsezi datele xml primite.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2008/05/05/multi-nervi-cu-wordpress-si-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reinventand roata</title>
		<link>http://www.danield.ro/2008/01/11/reinventand-roata/</link>
		<comments>http://www.danield.ro/2008/01/11/reinventand-roata/#comments</comments>
		<pubDate>Fri, 11 Jan 2008 19:53:37 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programare]]></category>
		<category><![CDATA[Facultate]]></category>
		<category><![CDATA[licenta]]></category>

		<guid isPermaLink="false">http://www.blogverde.info/2008/01/11/reinventand-roata/</guid>
		<description><![CDATA[Am apucat sa-o fac si pe asta. Dupa mai multe incercari nereusite de a ma apuca de lucrarea de licenta, luni am pornit la drum. Pana acum aveam 2 idei intre care oscilam, una chiar daca ar fi fost mai potrivita, nu ma atragea chiar atat de mult ca un proiect pe care tot am [...]]]></description>
			<content:encoded><![CDATA[<p>Am apucat sa-o fac si pe asta. Dupa mai multe incercari nereusite de a ma apuca de lucrarea de licenta, luni am pornit la drum. Pana acum aveam 2 idei intre care oscilam, una chiar daca ar fi fost mai potrivita, nu ma atragea chiar atat de mult ca un proiect pe care tot am vrut sa-l incep, dar nu am avut timpul necesar.</p>
<p>Problema mea a fost intotdeauna faptul ca daca incep sa lucrez la ceva, automat imi va sari gandul la inca 2 sau 3 probleme ce tin de respectivul proiect. Bineinteles ca ma voi apuca in acest caz sa dezvolt ideile si intr-un final ajung sa lucrez la 3 chestii fara sa termin la timp niciuna din ele.</p>
<p><span id="more-200"></span></p>
<p>Fiind la inceput de drum, m-am gandit ca as avea nevoie de un Project Manager pentr a-mi organiza munca cat mai bine. Chiar daca online se gasesc o multime de site-uri ce te ajuta sa-ti organizezi fisierele, timpul si intregul proiect, eu m-am gandit: ce-ar fi sa-mi fac un project manager. Dezastrul ra pe cale sa se intample, nici n-am inceput bine proiectul si deja aveam planuri de cu totul altceva, ceva ce mi-ar fi luat cel putin o luna.</p>
<p>Unul dintre lucrurile pe care le-am invatat in ultimul an, lucrand, a fost faptul ca de multe ori trebuie pur si simplu sa treci peste pornirile mult prea creative si sa te concentrezi pe ceea ce faci. Nu spun ca trebuie sa privesti doar inainte si sa nu te gandesti decat la destinatie, dar uneori putin autocontrol nu strica.</p>
<p>Ah, daca sunteti si voi in cautare de un manager online bun, incercati <a title="Assembla" href="http://www.assembla.com/">Assembla</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2008/01/11/reinventand-roata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDF in PHP</title>
		<link>http://www.danield.ro/2007/03/20/pdf-in-php/</link>
		<comments>http://www.danield.ro/2007/03/20/pdf-in-php/#comments</comments>
		<pubDate>Tue, 20 Mar 2007 19:30:48 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Programare]]></category>
		<category><![CDATA[pdf]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.blogverde.info/2007/03/20/pdf-in-php/</guid>
		<description><![CDATA[In ultimele saptamani am avut destul de mult de lucru cu generarea fisierelor PDF din PHP. In cazul in care nu stiati, functiile PDF din PHP folosesc PDFlib, librarie care nu este gratuita iar in varianta lite nu poate sa fie folosita decat respectand anumite conditii (sa o folositi doar in interes personal).
In cazul in [...]]]></description>
			<content:encoded><![CDATA[<p>In ultimele saptamani am avut destul de mult de lucru cu generarea fisierelor PDF din PHP. In cazul in care nu stiati, functiile PDF din PHP folosesc PDFlib, librarie care nu este gratuita iar in varianta lite nu poate sa fie folosita decat respectand anumite conditii (sa o folositi doar in interes personal).</p>
<p>In cazul in care aveti lucruri mai serioase de facut si nu aveti bani de licenta PDFlib, va recomand o clasa foarte simpla si foarte usor de folosit: <a href="http://www.fpdf.org/">FPDF</a>. Singura problema este ca nu stie sa lucreze cu ÅŸ,Å£,Äƒ,Ã® si Ã¢. Se poate rezolva important un set nou de fonturi, din pacate procesul e destul de greoi.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2007/03/20/pdf-in-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>S-a terminat vacanta, incepe un nou an</title>
		<link>http://www.danield.ro/2007/01/07/s-a-terminat-vacanta-incepe-un-nou-an/</link>
		<comments>http://www.danield.ro/2007/01/07/s-a-terminat-vacanta-incepe-un-nou-an/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 15:53:09 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Facultate]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[La intamplare]]></category>
		<category><![CDATA[Programare]]></category>

		<guid isPermaLink="false">http://www.blogverde.info/2007/01/07/s-a-terminat-vacanta-incepe-un-nou-an/</guid>
		<description><![CDATA[Gata vacanta, de maine incepe oficial noul an, cel putin pentru mine, si se pare ca va fi un an destul de greu. Urmeaza 6 saptamani de colocvii si examene, si va fi probabil cea mai grea sesiune de cand sunt la facultatea actuala. Partea ce mai proasta e ca desi avem materii foarte interesante [...]]]></description>
			<content:encoded><![CDATA[<p>Gata vacanta, de maine incepe oficial noul an, cel putin pentru mine, si se pare ca va fi un an destul de greu. Urmeaza 6 saptamani de colocvii si examene, si va fi probabil cea mai grea sesiune de cand sunt la facultatea actuala. Partea ce mai proasta e ca desi avem materii foarte interesante si actuale, profesorii sunt niste nepasatori ce nu au nici o treaba cu materiile pe care le predau.</p>
<p><span id="more-137"></span></p>
<p>Miercuri e primul colocviu, la Programare Orientata pe Obiecte, C++ fiind limbajul studiat. Exista doar o singura problema, nimeni nu s-a deranjat sa ne predea, la laboratoare am stat si n-am facut nimic legat de programarea pe obiecte si acum trebuie sa dam un test sau sa facem un proiect. Experiente neplacute am avut cu proiectele inca de anul trecut, tot la POO, dar de data asta la Java. Eu m-am chinutit 3 luni sa fac proiectul care ne-a fost cerut (un compilator), totul a fost ok, mergea pentru toate cazurile posibile si m-am trezit ca toti am primit aceeasi nota, eu fiind singurul care am facut proiectul complet si la subiect. Semestrul asta n-am mai facut nimic, sper sa ma descurc in cele 2 zile ramase. Chiar nu vad de ce mi-as bate capul la un proiect serios pentru scoala, mai ales cand nimeni nu iti apreciaza munca.</p>
<p>Noul an a inceput si cu o mica dilema. Sa reincep sa lucrez ca programator la firma la care am lucrat si anul trecut, sau sa incerc sa-mi canalizez forta de munca spre FifaRomania si inca 2 proiecte personale. In primul caz e vorba de un castig destul de bun si sigur, dar timpul pe care il voi acorda proiectelor personale va scadea foarte mult. In cel de-al doilea caz e vorba de posibile castiguri mult mai bune dar si foarte nesigure, pe langa asta voi face ce-mi place, nu ca nu mi-ar placea sa lucrez, dar e un alt sentiment cand lucrezi pentru tine.</p>
<p>Bafta tuturor in noul an! <img src='http://www.danield.ro/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2007/01/07/s-a-terminat-vacanta-incepe-un-nou-an/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cum sa generezi un feed RSS?</title>
		<link>http://www.danield.ro/2006/11/17/cum-sa-generezi-un-feed-rss/</link>
		<comments>http://www.danield.ro/2006/11/17/cum-sa-generezi-un-feed-rss/#comments</comments>
		<pubDate>Thu, 16 Nov 2006 22:00:13 +0000</pubDate>
		<dc:creator>Daniel</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Programare]]></category>
		<category><![CDATA[feed]]></category>

		<guid isPermaLink="false">http://mns.fifaromania.net/2006/11/17/cum-sa-generezi-un-feed-rss/</guid>
		<description><![CDATA[In ultima vreme nu prea am avut timp de munca, cu toate astea, o intrebare tot m-a macinat. Care e cea mai simpla si &#8220;light&#8221; metoda de a genera un feed RSS? In momentul de fata, eu nu stiu decat 2 metode:

Metoda folosita de WordPress si de alte moduri si pluginuri pentru diferite forumuri. Aceasta [...]]]></description>
			<content:encoded><![CDATA[<p>In ultima vreme nu prea am avut timp de munca, cu toate astea, o intrebare tot m-a macinat. Care e cea mai simpla si &#8220;light&#8221; metoda de a genera un feed RSS? In momentul de fata, eu nu stiu decat 2 metode:</p>
<ol>
<li>Metoda folosita de WordPress si de alte moduri si pluginuri pentru diferite forumuri. Aceasta consta in generarea fisierului feed-ului in momentul in care userul il acceseaza. Sa luam un exemplu: ai fisierul rss.php, in interiorul lui pui headerul &#8220;Content-type: text/xml;&#8230;&#8221; si generezi continutul. Problema la aceasta varianta e ca de fiecare data cand un user iti acceseaza feed-ul, trebuie sa faci o interogare, asta in cazul in care iei datele dintr-o baza de date. In cazul in care ai 100 de abonati, fiecare face in medie 5 refreshuri pe zi, asta inseamna 500 de interogari in plus. Stiu ca nu e prea mult si ca in ziua de azi nu prea conteaza, dar ceva parca tot nu suna bine. Singurul lucru bun, dupa mine, e faptul ca ai un control mai bun asupra feed-ului, fisierul fiind genrat dinamic, poti face o statistica a accesarilor (iar mie imi place statistica) samd</li>
<li>Metoda folosita de unele forumuri mai cunoscute. Ce se intampla aici? Sincer nu stiu exact pentru ca nu m-am documentat preea bine, eu pana acum am folosit doar prima metoda. Ce cred ca se intampla? Se creeaza &#8220;fizic&#8221; un fisier xml ce e updatat la un anumit interval de timp, sau si mai bine, e updatat doar in momentul in care au fost adaugate noi obiecte ce vor fi preluate de feed. Diferenta fata de prima metoda? In cazul in care faci 6 updateuri pe zi ai doar 6 interogari.</li>
</ol>
<p>Concluzia? Nu am inca una, astept saptamana viitoare sa mi se mai elibereze programul, sa am timp sa optimizez ambele variante si apoi sa le pun in practica pe FifaRomania.</p>
<p>LE: Am gasit si metoda 3, e o combinatie dintre cele doua de mai sus. Folosesti un fisier de cache ce contine feed-ul propriu zis, fisier pe care il updatezi doar cand ai facut un update la site, iar in fisierul rss.php poti sa faci statistici frumoase si alte nebunii iar apoi cand ti-ai terminat treaba, dai drumul si la feed.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.danield.ro/2006/11/17/cum-sa-generezi-un-feed-rss/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
