luni, 11 iunie 2007

Combustia spontana

Aţi auzit de fenomenul de combustie spontană? Citez din ziarul Evenimentul: "Combustia umană spontană reprezintă aprinderea sau fumegarea corpului în absenţa unor surse externe de ardere. În combustia spontană clasică, arderea corpului este mai completă decît ar putea fi obţinută chiar şi în interiorul unui crematoriu.". Cum ar fi să te trezeşti din senin cuprins de flăcări :D? Cam nasol, nu? Mai multe informaţii găsiţi: aici sau aici!

Keep out of alcohol!

Evolutie sau creatie?

Ce părere aveţi despre teoria evoluţionistă a lui Darwin ? În ştiinţă a început tot mai mult să prindă ideea creaţionismului, al design-ului inteligent. Adică se adună din ce în ce mai multe dovezi împotriva teoriei evoluţioniste, sugerând posibilitatea ca Universul să fi fost creat de o Fiinţă Inteligentă. Voi ce părere aveţi ? Mie mi se pare mai logic să fi existat o Fiinţă Inteligentă la început, decât o grămadă de materie inertă, neînsufleţită, care printr-o explozie (aşa, dintr-o dată) să fi dat naştere Universului, în toată complexitatea lui, chiar şi în miliarde de ani. Mi se pare ilogic ca viaţa să apară din ceva mort. În acelaşi timp, trebuie să admitem că ceva a existat prima oară, o primă cauză, pentru că din nimic nu poate să apară nimic. Nimicul nu poate crea. Deci, dacă ceva a existat ca primă cauză, mi se pare mai uşor de acceptat ca această primă cauză să fi fost una inteligentă. E de neconceput pentru mine cum poate să existe materie fără cauză. Nu la fel de neconceput este să existe o cauză inteligentă, la rândul ei, fără de cauză... Mai mult, sunt unele animale care "sfidează" teoria evoluţiei, cum ar fi ciocănitoarea şi altele. Să presupunem că ea ar fi evoluat în timp. Ciocănitoarea are un înveliş elastic în jurul creierului, ca un burete, care amortizează şocurile. Dacă nu ar fi existat acolo acest înveliş de la început, în forma în care îl găsim astăzi, atunci ciocănitoarea şi-ar fi zdrobit creierii cand ar fi dat cu ciocul în copac în căutare de hrană şi ar fi murit. Aşa că astăzi n-ar trebui să existe ciocănitoare, pentru că o fiinţă moartă nu mai poate evolua, logic :). Şi totuşi există ciocănitoare şi nu-şi spulberă creierii prin copaci. Ăsta e doar un exemplu. Ele sunt multe. Vă sfătuiesc să vedeţi documentarul "Incredible creatures that defy evolution". Se găseşte şi pe eMule... Aştept părerile voastre în continuare...

marți, 5 iunie 2007

Firefox adauga TBODY automat la tabele

Azi am dat peste o chestie interesantă la muncă. Lucrând cu JavaScript şi DOM, am observat că Firefox adaugă automat tag-ul TBODY la orice tabel. De exemplu, dacă ai următorul cod:

<table><tr><td>test</td><td>x</td></tr></table>

Firefox îl vede în structura sa DOM ca fiind:

<table><tbody><tr><td>test</td><td>x</td></tr></tbody></table>

Asta îţi poate da ceva bătăi de cap până te prinzi de ce un cod js se comportă altfel în IE decât în FF.... Şi cine ştie ce alte şmecherii mai ştie Firefox :)

miercuri, 23 mai 2007

Tonic eficient pentru programatori :)

Îţi dezvălui reţeta mea contra oboseală (recomandat pentru programatori şi cei care stau mult în faţa calculatorului). Dacă vrei să te simţi mai odihnit, cumpără-ţi următoarele de la o farmacie:
1. Panax Ginseng (preferabil cu capsule de 700mg fiecare). Preţul ar trebui să fie de maxim 11 RON. Se iau două capsule pe zi (preferabil dimineaţa şi la prânz)

2. Spirulină de la OZONE (500mg per capsulă). Preţul e în jur de 9 RON. Se iau 4-8 capsule pe zi (recomandat 2 dimineata, 2 la pranz şi două seara).

3. Multiminerale, FARA vitamine (sunt făcute în SUA, găseşti pe la farmaciile naturiste). Preţul e în jur de 9 RON.


Panax Ginseng şi Spirulina sunt produse 100% naturale (extract de plante), aşa că don` worry, be happy :). După 2-3 zile de tratament ar trebui să te simţi mai odihnit. Iar dacă vrei ceva pentru ochi, îţi recomand Eridiarom (extract de afine) sau Vitavision (tot pe bază de afine).

Spor la treabă!

duminică, 20 mai 2007

Mate-Info sau Politehnică...pentru liceeni...

Pentru că şi eu eram nehotărât la vremea mea unde să ştudiez, la Mate-Info sau automatică, încerc să dau nişte sfaturi pentru absolvenţii de liceu.


În primul rând, gândeşte-te pe ce vrei să mergi (programare, hardware sau ambele). La Politehnică se pune mai mult accent pe parte de hardware, ai materii ca electrotehnica, chimia, fizica, mate la greu etc. Deci pentru "softişti" nu recomand Politehnica. Dacă te interesează hardware-ul sau vrei şi programare şi hardware, atunci mergi la Politehnică.


În al doilea rând, gândeşte-te ce vrei să faci pe timpul facultăţii. Dacă vrei să te axezi doar pe studiu, e ok să mergi la Poli, dar dacă ai planuri de angajare în timpul facultăţii, e exclus. N-o să ai timp şi de una şi de alta şi în mod sigur o să ai probleme cu restanţele...Programul e mult mai strict la Poli decât la Universitate, se ţine cont mai mult de prezenţe, ai mai mult de învăţat (şi, în mare parte, lucruri care nu-ţi vor folosi în viitor), pe când la Mate-Info programul e lejer, cursurile nu sunt obligatorii (eu nu merg nici la seminarii şi laboratoare, decât când e nevoie şi mă descurc aşa), deci poţi să ai şi un mic job. Despre cursurile de la Mate-Info, vă spun cam ce se face în primul an: algebră, analiză, geometrie analitică, programare procedurală ( C ), programare orientată pe obiecte ( C++ ), algoritmi şi structuri de date, algoritmica grafurilor, limbaje formale şi automate, logică matematică şi computaţională, arhitectura sistemelor de calcul (uite şi ceva hardware pentru doritori, facem şi ceva limbaj de asamblare aici).


Gândeşte-te bine!

PHP şi sănătatea...

Ţi s-a întâmplat vreodată să dai peste vreun bug tâmpit şi să te chinuieşti 5 ore să-l depistezi, după care îţi dai seama că ai uitat o literă pe undeva sau că IE are un bug? Ţi s-a întâmplat să vrei să arunci PC-ul pe geam? Să blestemi calculatorul cu tot neamul lui şi cu cine l-a inventat ? Să te întrebi la ce mai există Microsoft? Mi s-a întâmplat mie azi... Mi se întâmplă mai rar, dar bine :D... Aşa că, dragă cititor, PHP dăunează sănătăţii, te scoate din minţi uneori. Programarea, în general, cam dăunează. Mai bine învăţam să tricotez ciorăpei pentru bebeluşi :)... Ce frumos ar fi un birou cu salon de masaj în camera cealaltă, frigider plin de răcoritoare, muzică bună... (acum Eros citeşte şi începe să construiască un salon de masaj =))).

Clase sau funcţii, marea dilemă...

Dacă te întrebi la ce să te mai chinuieşti cu o clasă când poţi face un include cu o grămadă de funcţii, încerc să-ţi dau câteva motive în favoarea clasei:

  1. O clasă este o structură care poate încapsula uşor variabile (adică proprietăţi) şi funcţii (adică metode). Diferenţa dintre un fişier de include cu variabile şi proprietăţi este că nu poţi crea două "instanţe" ale funcţiilor şi metodelor. Mai precis, să zicem că am o clasă db, care se ocupă cu conectare şi operaţii asupra unei baze de date. În proiectul meu trebuie să lucrez la un moment dat cu două baze de date, mai precis am nevoie să fac o copie a unei tabele, aşa că dintr-o bază fac selecţii şi în cealaltă fac inserări ale rezultatelor. Având o clasă, chestia asta e foarte uşor de făcut. Doar creez două obiecte de tip db cu proprietăţile corespunzătoare fiecăruia (host, user, db, pass, conexiune persistentă sau nu etc.). Apoi pot să fac:

    $continutTabel=$db1->select("tblUseri","nVarsta, cUsername");
    $rezultate=$db1->arrayAsociativ($continutTabel);
    for($i=0;$i<count($rezultate);$i++)
    $db2->insert("tblUseri","nVarsta, cUsername", array($rezultate[$i]["nVarsta"], $rezultate[$i]["cUsername"]));


    Şi aşa am făcut o copie de conţinut de la o bază de date la alta. Treaba se schimbă dacă aş fi avut doar un include cu nişte funcţii şi variabile (însă nu devine prea complicat dacă transmiţi ca parametru la orice query link-ul corespunzător la baza de date). Exemplul nu e foarte concludent, dar sunt cazuri în care folosirea claselor e mult mai potrivită. O să mă mai gândesc la nişte exemple.

  2. Un motiv simplu: cod mai structurat şi mai lizibil. În plus, clasele au capacitatea de moştenire, ceea ce poate fi "handy" uneori. Deci, dacă am o clasă de bază, pot crea o altă clasă care să moştenească proprietăţile şi metodele clasei de bază şi să le extindă cu noi metode şi proprietăţi.

  3. Este mult mai simplu să transmiţi proprietăţile unui obiect oarecare prin sesiune decât să salvezi o grămadă de variabile pe sesiune. Folosind codul $_SESSION["myobject"]=serialize($obiect); unde $obiect e o instanţă a unei clase, proprietăţile acestui obiect la momentul dat sunt salvate în variabila de sesiune myobject. Apoi, având această variabilă, la o schimbare de pagină sau refresh, pot să fac $obiect=unserialize($_SESSION["myobject"]); ceea ce îmi reconstruieşte obiectul iniţial cu proprietăţile pe care le-am salvat. Acum, dacă în include-ul meu aveam 50 de variabile de care am nevoie, ar trebui să le salvez pe toate în sesiune, rând pe rând (doar dacă nu le am într-un array, dar atunci codul deja devine mai greoi şi mai ilizibil în include), ceea ce e muncă de sisif!

  4. Este mult mai uşor să grupezi funcţii şi metode sub un anumit nume. Să luăm iar exemplul cu clasa db. La fiecare apel de functie aş avea $db-> ca prefix. Asta mă ajută să înţeleg uşor despre ce fel de operaţie e vorba (o operaţie asupra bazei de date) atunci când citesc codul şi să ştiu în ce clasă să mă uit ca să găsesc codul. Pe când, dacă vreau să fac cod cât de cât lizibil într-un include, aş avea nume de metode gen db_select, db_insert etc. La clase nu mai trebuie să mă mai ocup eu de astea, pentru că nu e nevoie.


Pe scurt, uite care-s avantajele claselor: capacitatea de a crea mai multe instanţe, fiecare cu proprietăţile ei; capacitate de moştenire; cod mai lizibil şi mai structurat; capacitate de (de)serializare a obiectului; funcţia constructor care se apelează automat la crearea obiectului, fără să o mai apelezi matale (ştim noi că programatorii sunt mai leneşi).

Sper că ai înţeles acum :)

Băsescu preşedinte?

Alo, 322? Îmi vreau preşedintele înapoi! Ieri dimineaţă am fost să votez NU DA la referendum. Se pare că, citez, "conform Exit Poll-ului realizat de CURS, 78,1% din romanii care au votat au spus NU demiterii Presedintelui!", însă nu se ştie exact dacă s-a prezentat la vot cel puţin 50%+1 din populaţie. Dacă nu, votul celor care s-au prezentat nu mai contează. Hai Băse!

sâmbătă, 19 mai 2007

Clase în PHP 4

Azi am început să îmi creez un framework în PHP, în aşa fel încât să am cât mai multe module (clase) refolosibile, aşa că am început cu clasa db, care lucrează cu o bază de date mySQL. Bineînţeles că n-o să postez aici toată clasa, ci o să scriu un mic tutorial despre clase în PHP.

Ce este o clasă?
N-o să dau aici o definiţie clasică a unei clase, ci, mai degrabă, prefer să fac omul să înţeleagă despre ce e vorba, fără să citească cine ştie ce definiţie "pompoasă". Aşa că încerc prin analogie. Să luăm ca exemplu cuvântul "oameni". La ce se referă acest cuvânt? Da, ai ghicit, la o clasă. Cuvântul se referă la ceva general, nu la un om anume (un anume om fiind o instanţă a clasei "oameni", sau un obiect). Ce însuşiri (proprietăţi) are clasa "oameni"? Păi, avem, printre altele: înălţime, culoarea părului, culoarea ochilor, culoarea pielii, greutate, sex etc. Reţine că toate aceste proprietăţi sunt nedefinite, pentru că nu putem spune nimic despre greutatea clasei "oameni", ci doar despre greutatea unui anumit om din această clasă. Ce acţiuni (metode) are clasa? Păi oamenii pot să zâmbească, să plângă, să gândească, scrie,vorbească etc. Sper că ai înţeles cum stă treaba cu clasele şi obiectele. Clasa este ceva general, care cuprinde definiţii ale proprietăţilor şi metodelor acceptate de orice obiect al clasei, iar obiectul este ceva particular, un "individ" al clasei.

La ce bun ?
Dacă vrei să scri cod structurat, ordonat, lizibil şi reutilizabil, clasele sunt mai mult decât potrivite. De exemplu, poţi face o clasă care să îţi permită accesul la o bază de date (conectare, deconectare, selecţie, inserare, ştergere, modificare), o clasă care să se ocupe de operaţii cu fişiere şi directoare (e.g. returnare listă de fişiere dintr-un director etc.) ş.a.m.d.

Cum încep?
Cea mai bună metodă de învăţare, în programare, este exemplul. Aşa că, aruncă-ţi ochii oleacă peste exemplul de mai jos:

class Oameni{
var $varsta;
var $ocupatie;
var $insurat;
var $iq;
var $nume;
function Oameni($nume, $varsta, $ocupatie, $insurat, $iq){
$this->varsta=$varsta;
$this->ocupatie=$ocupatie;
$this->insurat=$insurat;
$this->iq=$iq;
}
function spuneSalut(){
echo "Bună, mă numesc ".$this->nume.", am ".$this->varsta." de ani, ".($this->insurat ? "":"nu")." sunt însurat, sunt ".$this->ocupatie." si am IQ ".$this->iq;
}
}
$gigi=new Oameni("Gigi",20,"măturător",false,50);
$gigi->spuneSalut();

Să luăm exemplul pas cu pas. Prima linie (class Oameni) declară o clasă cu numele Oameni. Liniile care încep cu var (variabile) sunt proprietăţile clasei, anume vârstă, nume, iq, însurat (true sau false) şi ocupaţie. Apoi urmează o metodă cu acelaşi nume pe care îl poartă clasa, adică Oameni. Aceasta este o metodă specială, numită constructor, care e apelată automat, la crearea unei instanţe a acestei clase. Această metodă primeşte ca parametri proprietăţile obiectului care va fi creat şi le salvează în acest obiect. Poate te întrebi ce mai e şi chestia aia numită $this. $this e un alt fel de a spune "obiectul curent". Practic, $this->varsta=$varsta înseamnă: setează proprietatea varsta a obiectului curent la valoarea $varsta. Atenţie, nu se scrie niciodata $this->$varsta sau $obiect->$proprietate, ci $this->varsta sau $obiect->proprietate. A doua metodă, numită spuneSalut, scrie un mesaj de salut bazat pe proprietăţile obiectului. Linia $gigi=new Oameni("Gigi",20,"maturator",false,50); crează un nou obiect de tip Oameni, $gigi, cu proprietăţile: nume Gigi, vârsta 20, ocupaţie măturător, neînsurat şi cu IQ 50 (mult sub medie). La crearea lui Gigi se va apela automat metoda constructor Oameni, care va salva proprietăţile transmise. Apoi linia următoare apelează metoda spuneSalut, care va afişa, pentru obiectul nostru, următorul mesaj: "Bună, mă numesc Gigi, am 20 de ani, nu sunt însurat, sunt măturător şi am IQ 50".

Notă: Exemplul de cod este scris pentru PHP 4. În PHP 4 nu există metodă destructor. În PHP 5, proprietăţile pot fi publice, private, protejate, există şi destructor, iar metoda constructor ia numele __constructor şi metoda destructor ia numele __destructor. PHP 5 e mai avansat ca limbaj OOP, dar majoritatea hosturilor au PHP 4, aşa că nu insist prea mult pe PHP 5 deocamdată.

Happy coding!

Isihie what?

Poate te-ntrebi ce mai înseamnă şi "isihia" asta şi la ce îşi mai deschide şi ăsta blog, că s-a umplut pământu`...
1. Cuvântul "isihie" vine din greacă ( esychia/isychia ) şi înseamnă "linişte". Bine, bine, dar ce legătură are blogul cu liniştea? Păi, când e prea multă linişte pe la mine prin casă şi n-am ce face, m-apuc să scriu ca să-mi treacă plictisul.
2. Sunt curios dacă citeşte cineva vreun post...