luni, 18 august 2014

Fundațiile și oamenii

„Fundația. Fundația și Imperiul” și „A Doua Fundație” (de Isaac Asimov) le-am citit dintr-o răsuflare. Am fost cucerit de fundamentarea logică a gîndurilor și acțiunilor personajelor, care în consecință au contribuit la deznodăminte neașteptate și uimitoare. Nu am fost surprins cînd mai tîrziu am aflat că autorul a fost biochimist.

După o perioadă am descoperit și celelalte fundații: „Preludiul Fundației”, „Fundația Renăscută” „Marginea Fundației” și „Fundația și Pămîntul”. Am fost iarăsi încîntat de lectură. Impresionat de eroii care și-au sacrificat viața pentru ca omenirea să iasă din impas. Printre aceștia un robot care timp de 20 de milenii și-a îndreptat toată silința sa (pozitronică și telepatică) doar pentru bunăstarea omenirii.

Însă... cu toate că în aceste romane omenirea explorează universul, colonizează și tera-formează planete, calătorește prin hiperspațiu, adică în ciuda super dezvoltării tehnologice, oamenii au rămas aceiași (nedezvoltați, primitivi): lacomi, meschini și plini de prejudecăți.

joi, 14 august 2014

MODX și lista țărilor, a teritoriilor și a monedelor

Astăzi am finalizat de tradus denumirile țarilor (din engleză în română) utilizate în sistemul MODX. În timpul acestui lucru am descoperit un document care intuiesc că-mi va fi util pe viitor. Ce anume conține acest document!? Este o anexă care conține Lista țărilor, a teritoriilor și a monedelor. Eu m-am folosit doar de primele două coloane ale tabelului și anume: denumirea scurtă și denumirea completă a țărilor. Apropo nu știam că denumirea completă a Coreei de Nord este „Republica Populară Democrată Coreeană”.

marți, 14 ianuarie 2014

Tehnomitologie (sau Lupul păru-și schimbă, dar năravul ba)

Mă confrunt de multe ori cu faptul că unii obișnuiesc să exagereze posibilitățile calculatorului. În viziunea acestora calculatorul poate rezolva orice problemă, trebuie doar de știut pe care butoane de apăsat.

Îmi aduc aminte multe cazuri...

1. Cazul unui director de școală (sau poate adjunct, nu mai țin minte) care vroia de la un profesor de informatică ca acesta, fiindu-i puse la dispoziție informația despre clase și obiectele din programul școlar, să-i genereze cu ajutorul calculatorului în cîteva minute orarul optim.

2. Cazurile cu descărcarea de cîntece, cărți, modele de documente din internet. Atenție la verb, nu „găsește” acest cîntec pe net ci „scoate” acest cîntec de pe net.

Interesant prin ce se deosebesc acești oameni de strămoșii noștri care considerau că fulgerele sînt trimise de zei drept pedeapsă pentru nesupunere? Răspund: prin multe. Dar e cert că au în comun aceeași problemă: cunoștințe superficiale privind mecanismele interne ale sistemelor observate.

3. Cazul cu tehnologiile informației în educație. Aud deseori exclamați de genul „O! Da! calculatorul în educație va schimba lucrurile spre bine” sau „Elearning... uau!” mai degrabă, atenție poate să muște! Tehnologiile informaționale rezolvă anumite probleme, dar au și ele problemele lor. Și în final... ajungem să folosim tehnologiile doar de dragul tehnologiilor.

P.S. Ar fi bine să conștientizăm frontiera între ce poate cu adevărat calculatorul și ce credm noi că poate.

vineri, 27 decembrie 2013

Aforisme personale

Nu-i obligatoriu să fii femeie pentru ca să poți fi violat, e suficient să fii sincer cu oameni nepotriviți.

Dragostea este sentimentul puternic care leagă două persoane, împreună cu neputința de a explica acest sentiment.

duminică, 22 decembrie 2013

Despre un subiect întotdeauna deschis: Dragostea

Revizuind propriile trăiri... succese și greșeli... de atunci (din ziua cînd am primit buletinul :-D) pînă acum, am ajuns la concluzia că pentru mine de multe ori dragostea era simțită drept un transfer parțial a propriei identități (eu) asupra altei identități (ea). Un fel de lărgire (extindere) a mulțimii lucrurilor materiale și imateriale care formează pilonii identități mele. Iar întrucît în centrul unei identități sănătoase trebuie să fie egoismul, noua identitate se dorește a fi controlată. Dorință (aproape imposibil de realizat) care poate pune începutul unui război (cu tine, cu ea, cu toată lumea...) din start pierdut... și din cauza căreia dragostea devine o condiție suficientă a nebuniei și a contopirii.

vineri, 20 decembrie 2013

Utilizarea vectorilor în PHP (sau Care este prețul ascuns al libertății?)


PHP (PHP: Hypertext Preprocessor) este un limbaj slab tipizat. Mai mult, interpretatorul PHP nici nu suportă specificarea tipului la declararea variabilelor. Acest fapt oferă programatorului libertatea de a „jongla” cu tipurile datelor în funcție de necesități, lăsînd pe seama interpretatorului recunoașterea tipului variabilelor. Dar „Libertatea înseamnă răspundere...”[1]. O situație de care m-am „poticnit” recent demostrează acest lucru.

[Ne]cazul cu vectorii

La prima vedere s-ar părea că în PHP vectorii sînt de două feluri: vectori obișnuiți (structuri liniare în memorie) și vectori asociativi (perechi de chei și valori). Fals! În PHP orice vector este vector asociativ ordonat. Acest fapt generează o mulțime de avantaje (flexibilitate și spațiu de manevră limitat doar de fantezia programatorului), dar... cere mai multă atenție, responsabilitate...

Fie un vector, indexat numeric, doar că că construit nu într-o ordine nefirească.
<?php
$a = array();
$a[1] = 'Valoarea1';
$a[2] = 'Valoarea2';
$a[0] = 'Valoarea0';
 
afiseaza_tablou($a);
?>

Știind că funcția afiseaza_tablou parcurge vectorul și sfișează fiecare element;  ce va afișa funcția? Mai exact, mă intereseaza ordinea în care vor fi afișate elemntele.

Răspuns: depinde de tipul structurii repetitive utilizate pentru parcurgerea vectorului. Fară a pierde din generalitate putem evidenția două cazuri:

(1) Este folosită structura for(;;); de exemplu:

<?php
function afisare_tablou($tablou) {
 for($i=0; $i<count($tablou); $i++)
  echo "a[$i]=$a[$i]\n";
}
?>

Atunci rezultatul afișarii va fi:

a[0]='Valoarea0'
a[1]='Valoarea1'
a[2]='Valoarea2'

(2) Dacă însă este folosită structura foreach ( as ) (de care m-am molipsit de cînd programam în Java); de exemplu:

<?php
function afisare_tablou($tablou) { 
 foreach($tablou as $i=>$v) 
 echo "a[$i]=$v\n"; }
?>
Atunci se va afișa:

a[1]='Valoarea1'
a[2]='Valoarea2'
a[0]='Valoarea0'

Ordinea afișarii este diferită. Deoarece vectorii sînt întotdeauna ordonați, iar valoarea cu indexul 0 a fost adăugată în ultimul rînd.

Soulții.

(1) Specificarea numarului de elemente ale vectorului.

<?php
$a = array(3);
?>

(2) Reindexarea vectorului folosind funcția array_values.


<?php
$a = array_values($a);
?>

(3) Sortarea vectorului folosind  funcția ksort.

<?php
ksort($a);
?>

[1] „Libertatea înseamnă răspundere, de aceea majoritatea oamenilor se tem de ea.” (Bernard Shaw)

duminică, 8 decembrie 2013

Note personale privind Yii

Yii este un cadru de programare [en. framework] pentru dezvoltarea aplicațiilor web folosind limbajul PHP. O caracteristică importantă a Yii este filosofia simplă din spatele cadrului ceea ce implică ușurința (rapiditatea) de asmilare (învățare) a acestuia.

Numele Yii este o prescurtare de la „Yes it is!”.

În cele ce urmează prezint notele mele privind soluțiile la problemele cu care m-am ciocnit la prima încercare de a folosi Yii.

Adrese „prietenoase”. 
Implicit o aplicaţie web creată cu Yii nu foloseşte facilităţile de rescriere a adreselor oferite Apache sau Nginx. Activarea acestei opţiuni nu este un lucru complicat. Ansamblul de acţiuni pentru activare este descris mai jos.
  1. In fișierul protected/config/main.php trebuie de scos comentariile de la  blocul care începe cu 'urlManager'=>array(.
  2. Pentru a exclude șirul index.php din adresele generate în blocul decomentat mai sus trebuie de modificat sau de adăugat, în caz că nu există, rîndul: 'showScriptName'=>false,.
  3. În final, dacă în calitate de web server se folosește Apache, în dosarul rădăcină a aplicației trebuie de creat fișierul .htaccess cu următorul conținut:
RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Algoritmul de mai sus va avea efectul scontat doar dacă aplicația se află într-un dosar pe nivelul I al serverului Apache. În celelate cazuri trebuie de făcut o schimbare în continutul fișierului .htaccess. În cazul meu aplicația era disponibilă la adresa http://localhost/~vundicind/app/, iar conținului fișierului .htacces a trebuit să fie:

RewriteEngine on

RewriteBase /~vundicind/app/

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

Și ultima, în configurarea Apache, dosarul în care stau fișierele aplicației trebuie să aibă AllowOverride FileInfo.