Linux şi aplicaţii Web în 24 de ore  
introducere în Linux şi iniţiere în dezvoltarea de aplicaţii Web

Linux şi aplicaţii Web în 24 de ore

Întrebări conjuncturale

«  Aplicaţie Web tipică angajând PHP şi MySQL   ::   Contents

Întrebări conjuncturale

“cmmdc” folosind Python

Ubuntu include şi un interpretor de Python (şi chiar instalarea decurge prin execuţia unor scripturi scrise în Python).
Putem defini într-un fişier “euclid.py”, o funcţie care să returneze “cmmdc” a două numere astfel:
def cmmdc(a, b):
    while b:
        a, b = b, a % b
    return a
(evident - mult mai elegant decât “cmmdc” redat în Exemple de scripturi Bash)
Python prevede indentarea pentru delimitarea blocurilor de cod (un block de cod începe cu o linie încheiată prin caracterul ”:” şi conţine toate liniile următoare acesteia care sunt indentate (la fel, sau mai “adânc”) faţă de prima linie a blocului). În “atribuirea multiplă” a, b = b, a % b, se evaluează membrul drept (de la stânga spre dreapta) şi apoi rezultatele sunt “puse” respectiv în a şi b (astfel “a, b = b, a” va interschimba valorile lui a şi b).

Lansăm interpretorul, importăm modulul creat mai sus, apelăm funcţia “cmmdc()” conţinută de modulul nostru şi printăm rezultatul (dar cu un modul Python se poate opera şi în alte moduri, decât cel tocmai descris):

vb@vb:~/CCD-VS/web-lamp$ python

>>> import euclid
>>> gcd = euclid.cmmdc(120, 180)
>>> print gcd
60
>>>

Iar dacă vrem “cmmdc” pentru mai multe numere:

>>> d = reduce(euclid.cmmdc, [120, 180, 6000, 180000000, 6666660])
>>> print d
60
>>>

reduce(funcţie, listă) aplică funcţia indicată - care este de fapt un “pointer”: print euclid.cmmdc afişează <function cmmdc at 0xb770e454> - primei perechi de elemente, apoi continuă să o aplice rezultatului obţinut şi următorului item al listei, ş.a.m.d.


cum intru în mysql fără -u şi -p

Dacă avem acces la MySQL folosind user = ‘ccdvs’ şi password = ‘ilovevs’, atunci putem deschide shell-ul mysql tastând în linia de comandă a unui terminal:

mysql -u ccdvs -p

urmând să tastăm şi parola după apariţia mesajului “Enter the password”.

Dacă dorim să putem deschide mysql fără a mai folosi -u şi -p, putem proceda astfel: creem un fişier “ascuns” (numele începe cu caracterul punct) de configurare denumit .my.cnf, în rădăcina directorului propriu din /home:

touch ~/.my.cnf

Folosind un editor de text, înscriem în .my.cnf parola şi numele de user MySQL astfel:

[client]
user=ccdvs
password=ilovevs

După ce salvăm acest fişier, putem intra în mysql tastând simplu mysql (fără -u şi -p). Desigur, procedeul descris (şi ideea de a evita -u şi -p) “merge” pe calculatorul propriu, dar trebuie evitat în cazul serverului.

Pentru lămuriri puteţi vedeţi comentariile din fişierul /etc/mysql/my.cnf.


cum obţin HELP pentru comenzi MySQL

Dacă deschidem shell-ul mysql ca user ‘root’ (tastând pe linia de comandă a unui Terminal: mysql -u root -p) şi la promptul “mysql>” tastăm comanda show databases;, vedem că există o bază de date numită `mysql` (ea a fost creată automat, la instalarea MySQL). Folosind apoi use mysql; vedem ce tabele conţine (între ele - tabelul `user`). De regulă - de la instalare, deja - printre tabelele din baza de date `mysql` se găsesc 4 tabele relaţionate între ele denumite cu prefixul “help_”:

mysql> show tables like 'help%';
+-------------------------+
| Tables_in_mysql (help%) |
+-------------------------+
| help_category           |
| help_keyword            |
| help_relation           |
| help_topic              |
+-------------------------+

Aceste tabele sunt folosite de comanda HELP (probaţi help select;).

Dacă am vrea să obţinem un fişier de documentare pentru mai multe comenzi, putem proceda astfel: creem un fişier help.sql conţinând de exemplu:

help select;help join;

şi îl furnizăm spre execuţie shell-ului mysql, tastând pe linia de comandă a unui terminal:

mysql < help.sql > SQL.help

mysql va executa comenzile din fişierul sursă help.sql şi va înscrie rezultatele în fişierul SQL.help.


Auto-completare în shell-ul mysql

Bash permite “TAB-completion”: tastând pe linia de comandă de exemplu dpk şi apoi tasta TAB, linia se completează dpkg iar dacă acum tastăm TAB şi încă odată TAB - obţinem lista comenzilor care au prefixul “dpkg”; adăugând acum dpkg-r şi TAB, se completează dpkg-reconfigure.

În /etc/bash_completion.d/ se găsesc scripturi de configurare a facilităţii de auto-completare prin TAB pentru numeroase programe (şi le putem lua ca model pentru a adăuga eventual, un script propriu); există şi pentru mysqladmin, dar nu pentru mysql.

Explicaţia poate fi şi numai una de principiu: “mysqladmin” este un program pentru administrarea serverului MySQL şi deci, destinat liniei de comandă (astfel că sunt de dorit facilităţile de “TAB-completion”); dar “mysql” este destinat operării cu baze de date - operaţii care în mediul Web firesc nu se fac de la consolă, ci sunt angajate automat, din interiorul aplicaţiei Web curent executate.

Pe de altă parte, mysql însuşi permite să optăm sau nu, pentru “TAB-completion”: în /etc/mysql/my.cnf găsim:

[mysql]
no-auto-rehash   # faster start of mysql but no tab completition

Dacă linia nu are la început “#” (caracterul de comentariu), atunci opţiunea “TAB-completion” este dezactivată (şi mysql va starta mai repede); în acest caz (“no-completion mode”), putem forţa citirea informaţiei de completare a numelor bazelor de date, a numelor tabelelor şi a numelor coloanelor tastând la promptul mysql> comanda rehash - după care vom beneficia de “TAB completion” în sesiunea de lucru curentă (dar numai pentru numele bazelor de date, tabelelor şi coloanelor, nu şi pentru comenzile MySQL).

Probabil că ne amintim ce frumos se face auto-completarea (inclusiv pentru comenzi) în fereastra “Command Window” din Microsoft Visual FoxPro… dar MySQL este destinat Internetului, nu Desktopului local şi este firesc ca facilităţile de acest tip să fie reduse la minimum (fiind totuşi posibil de creat prin scripturi proprii, ca în cazul oricărui produs “open-source”).


ce fişiere fac parte dintr-un pachet instalat

dpkg --listfiles mysql-server-5.1

«  Aplicaţie Web tipică angajând PHP şi MySQL   ::   Contents