vineri, 27 decembrie 2013

Aforisme personale

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.

sâmbătă, 7 decembrie 2013

Long Live The TeX Live (or How to install TeX Live on Ubuntu?)


What is the most common encountered error message when you try to compile a latex document which wasn't made by you?... Exactly:

! LaTeX Error: File `<somefilename>.sty' not found.

What is the solution? There are at least three solutions:
  1. You could download the package files from the Comprehensive TeX Archive Network and install manually in your system.
  2. If you use a GNU/Linux distribution, Ubuntu for example, then you could google the name of the Ubuntu package (or Debian package) which in turn, contains the latex package that you need and install the first via the apt-get command.
  3. If you use MS Windows then you could launch the Package Manager program from MiKTeX software and install the package via one-two clicks of mouse.
After N years of solving this problem I can say with certitude that I'm tired of solution 1 and 2. I like the solution 3, but it's only available on Windows... Is there a way to move the solution 3 to GNU/Linux context? Yes! It is called TeX Live (2013). And the steps for implementing the solutions are presented bellow.

1. Get rid of all texlive Ubuntu packages

sudo apt-get remove texlive-base

2. Download the TeX Live (2013) installation files form http://tug.org/texlive/acquire.html and install it.

wget http://mirror.ctan.org/systems/texlive/tlnet/install-tl-unx.tar.gz
tar -xf install-tl-unx.tar.gz
cd install-tl-20131125
sudo ./install-tl

type I for the question and wait about two - three hours for installation process to finish.

3. Install the dependencies for the graphic interface of the TeX Live (2013) programs. 

sudo apt-get install tk
sudo apt-get install perl-tk

4. Clone key files from TeX Live located in /usr/local/ to /usr/ 

Run: sudo /usr/local/texlive/2013/bin/x86_64-linux/tlmgr --gui

From the Actions menu (Fig. 1) select Handle symlinks in system dirs... item and in the dialog that will show (Fig. 2) click on Update symbolic links button, then on OK.



Figure 1. TeX Live Manager 2013 GUI




 Figure 2. Handle symlinks in system dirs dialog

This step is necessary because it seems that some executable from tlmgr do not use internaly relative paths, but absloute paths like /usr/bin/tex

5. Install the necessary package

sudo tlmgr install <somepackagename>

Voilà.