Cresteti viteza aplicatiilor web prin modificarea configurarii php

Acest articol doreste sa va ajute sa mariti viteza aplicatiilor php pe care le scrieti prin tweaking la configurarile php default. Timpul castigat prin aceste modificari poate nu va fi asa vizibil din partea de user, dar poate usura un pic munca server-ului, deasemenea unele vor avea si un impact in partea de securitate a aplicatiei.

Daca esti pe un server shared si nu stii cum se schimba configurarea php ar fi poate mai bine sa citesti acest articol inainte.

Dar destul cu palavrageala hai sa vedem exact despre ce e vorba. Voi scrie numele configurari, setarea pe care o recomand si motivatia pentru aceasta configurare.

short_open_tag = Off

Aceasta va anula short tags ( <? .... ?> ) care nu sunt atat de recomandat de folosit si in plus engine-ul php va avea o problema in plus pe care sa il rezolve.

asp_tags = Off

Aceasi explicatie ... nu folosi taguri : <% echo “hello world”; %>

memory_limit = 32M

Aceasta configurare va fi una pe care o vei modifica de cateva ori. Dar e mai bine ca pentru inceput sa o setezi la o valoare mai mica pentru a urmari care scripturi folosesc mai multa memorie si a urmari din ce cauza se inampla aces lucru.
Un articol despre consumul de memorie in php poti gasi aici .

register_long_array = Off

Aceasta configurare spune engine-ului PHP sa nu mai declare variabilele de tip $HTTP_*_VARS care sunt de mult timp nefolosite. Valoarea default e On. Din cauza ca nimeni nu prea le foloseste ( doar daca nu aveti nevoie pentru compatibilitate cu vreun script mai vechi ) e recomandat sa le aveti off, pentru motive de performanta. In locul lor este recomandat sa folosti matricile superglobale $_GET, $_POST etc.

register_argc_argv = Off

Aceasta setare e mai mult sau mai putin la fel ca cea de sus register_long_arrays ( daca credeti ca ma insel, certati-ma intr-un comentariu ) asa ca o vom seta tot off.

auto_globals_jit = On

Aceasta setare va opri php sa genereze variabilele SERVER si ENV la inceputul scriptului ( asa cum face in configuratia default ), in schimb generandule pe masura ce ele sunt necesare (Just In Time). Aceasta ar trebui sa ajute la performanta prin reducerea cantitatii de memorie folosita de scriptul php.
Pentru ca aceasta setare sa functioneze este nevoie ca register_globals, register_long_arrays, si register_argc_argv sa fie disabled.
Ca un inside info : am incercat pe unul din servere aceasta configuratie si nu a mers, variabilele SERVER si ENV fiind nule, dar cred ca era ceva in neregula pentru ca am incercat pe alt server si a mers :D.

magic_quotes_gpc

Aceasta setare s-a dovedit a fi o adevarata durere de cap cateodata. Cand este on , toate ' (ghilimele simple), " (ghilimele duble), \ (backslash) si valori NUL's sunt "anulate" cu un backslash automat. De ce este asa rau ? Pentru ca nu detineti dumneavoastra controlul asupra acestui lucru. De exemplu daca folositi un mysql wrapper pentru interactiunea cu baza de date care are deja o functie de escape ( probabil si mai mult decat atat, una de clean pentru coduri sql ), ceea ce va face ca valorile introduse sa fie de doua ori "escaped" si dupa cateva edit-uri sa zicem valoarea va fi plina de backslash-uri. Asa ca mai bine o setezi off si iti faci propriul escape, si poate si o functie de clean pentru valorile folosite in interogarile SQL pentru a preveni SQL Injection.

always_populate_raw_post_data = Off

Raw Post data este o setare mai avansata, asa ca daca nu stii despre ce e vorba inseamna ca nu o folosesti asa ca mai bine o setezii off si ii mai iei o grija din lista de treburi facute de engine-ul php

Cam atat pentru acum .... daca v-am fost util s-au vreti sa ma certati ca am batut campii ... folositi cu incredere formularul de comentarii


Validare CUI/CIF folosind php

CIF - codul de identificare fiscala este un cod numeric constituind codul unic de identificare a unui comerciant.Acesta se mai numeste si cod fiscal sau cod unic de identificare. Pana la 1 ianuarie 2007 s-a numit Cod Unic de Inregistrare (CUI).

Conform legii nr. 359 din 8 septembrie 2004, privind simplificarea formalitatilor la inregistrarea in registrul comertului a persoanelor fizice, asociatiilor familiale si persoanelor juridice, inregistrarea fiscala a acestora, precum si la autorizarea functionarii persoanelor juridice:
Solicitarea inregistrarii fiscale a unui comerciant se face prin depunerea cererii de inregistrare la biroul unic din cadrul oficiului registrului comertului de pe langa tribunal, iar atribuirea codului unic de inregistrare de catre Ministerul Finantelor Publice este conditionata de admiterea cererii de inregistrare in registrul comertului de catre judecatorul-delegat.

* Pentru asociatiile familiale, precum si pentru persoanele juridice prevazute la art. 2 structura codului unic de inregistrare se stabileste de Ministerul Finantelor Publice, Ministerul Muncii, Solidaritatii Sociale si Familiei, Ministerul Sanatatii, Ministerul Administratiei si Internelor si Ministerul Justitiei.

* Pentru persoanele fizice codul unic de inregistrare coincide cu codul numeric personal atribuit de Ministerul Administratiei si Internelor sau, dupa caz, cu numarul de identificare fiscala atribuit de Ministerul Finantelor Publice.

Atributul fiscal atasat codului unic de inregistrare este un cod alfanumeric având semnificatia categoriei de platitor de taxe si impozite la bugetul de stat.Daca atributul fiscal are valoarea "RO", acesta atesta ca persoana juridica a fost luata in evidenta organului fiscal ca platitor de T.V.A.

Un CIF este alcatuit astfel :
[ |ZZZZZZZZZ| ] |C|
|_________| |_|
: :
: --> Cifra ce control
:
--> Numarul de ordine (maxim 9 caractere)

Algoritmul de validare al unui cod CIF

Pas preliminar: Se testeaza daca codul respecta formatul unui cod CIF. Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice.

Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului CIF precum si a cheii de testare.

Pas 2: Se ignora prima cifra din codul CIF inversat (aceasta este cifra de control) si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata.

Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si produsul este impartit la 11. Cifra obtinuta, in urma operatiei MODULO 11 reprezita cifra de verificare. Daca in urma impartirii s-a obtinut restul 10 atunci cifra de verificare va fi 0.

Pas 4: Pentru un CIF valid cifra de verificare va trebui sa corespunda cu cifra de control a codului CIF initial.

(sursa www.validari.ro)

Validarea CIF folosind php

Acum pentru codul php:

[php]

function checkCIF($cif){
if (!is_numeric($cif)) return false;
if ( strlen($cif)>10 ) return false;

$cifra_control=substr($cif, -1);
$cif=substr($cif, 0, -1);
while (strlen($cif)!=9){
$cif='0'.$cif;
}
$suma=$cif[0] * 7 + $cif[1] * 5 + $cif[2] * 3 + $cif[3] * 2 + $cif[4] * 1 + $cif[5] * 7 + $cif[6] * 5 + $cif[7] * 3 + $cif[8] * 2;
$suma=$suma*10;
$rest=fmod($suma, 11);
if ( $rest==10 ) $rest=0;

if ($rest==$cifra_control) return true;
else return false;
}
[/php]


Taie cod HTML fara sa strici tagurile HTML

In cadrul unui proiect recent a trebuit sa dezvolt o functie care sa ia sursa HTMl a unei pagini si sa o sparga in mai multe parti, fara ca sa taie in mijlocul unui tag HTML. Dupa ce m-am chinuit o perioada sa scriu acest cod am decis sa apelez la coderi mai inspirati si sa caut pe google o solutie :D. Dupa o vreme de cautat si incercat diverse coduri am dat de codul de mai jos. Este o metoda dintr-o clasa a cakephp framework si isi face treaba perfect.

Sper sa aveti noroc si daca cautati acesta functie sa gasiti acest articol si sa salvati niste timp.
Cheers
[php]
/**
* Truncates text.
*
* Cuts a string to the length of $length and replaces the last characters
* with the ending if the text is longer than length.
*
* @param string $text String to truncate.
* @param integer $length Length of returned string, including ellipsis.
* @param string $ending Ending to be appended to the trimmed string.
* @param boolean $exact If false, $text will not be cut mid-word
* @param boolean $considerHtml If true, HTML tags would be handled correctly
* @return string Trimmed string.
*/
function truncate($text, $length = 100, $ending = '...', $exact = true, $considerHtml = false) {
if ($considerHtml) {
// if the plain text is shorter than the maximum length, return the whole text
if (strlen(preg_replace('/<.*?>/', '', $text)) <= $length) { return $text; } // splits all html-tags to scanable lines preg_match_all('/(<.+?>)?([^<>]*)/s', $text, $lines, PREG_SET_ORDER);
$total_length = strlen($ending);
$open_tags = array();
$truncate = '';
foreach ($lines as $line_matchings) {
// if there is any html-tag in this line, handle it and add it (uncounted) to the output
if (!empty($line_matchings[1])) {
// if it's an "empty element" with or without xhtml-conform closing slash (f.e.
)
if (preg_match('/^<(\s*.+?\/\s*|\s*(img|br|input|hr|area|base|basefont|col|frame|isindex|link|meta|param)(\s.+?)?)>$/is', $line_matchings[1])) {
// do nothing
// if tag is a closing tag (f.e. )
} else if (preg_match('/^<\s*\/([^\s]+?)\s*>$/s', $line_matchings[1], $tag_matchings)) {
// delete tag from $open_tags list
$pos = array_search($tag_matchings[1], $open_tags);
if ($pos !== false) {
unset($open_tags[$pos]);
}
// if tag is an opening tag (f.e. )
} else if (preg_match('/^<\s*([^\s>!]+).*?>$/s', $line_matchings[1], $tag_matchings)) {
// add tag to the beginning of $open_tags list
array_unshift($open_tags, strtolower($tag_matchings[1]));
}
// add html-tag to $truncate'd text
$truncate .= $line_matchings[1];
}
// calculate the length of the plain text part of the line; handle entities as one character
$content_length = strlen(preg_replace('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', ' ', $line_matchings[2]));
if ($total_length+$content_length> $length) {
// the number of characters which are left
$left = $length - $total_length;
$entities_length = 0;
// search for html entities
if (preg_match_all('/&[0-9a-z]{2,8};|&#[0-9]{1,7};|[0-9a-f]{1,6};/i', $line_matchings[2], $entities, PREG_OFFSET_CAPTURE)) {
// calculate the real length of all entities in the legal range
foreach ($entities[0] as $entity) {
if ($entity[1]+1-$entities_length <= $left) { $left--; $entities_length += strlen($entity[0]); } else { // no more characters left break; } } } $truncate .= substr($line_matchings[2], 0, $left+$entities_length); // maximum lenght is reached, so get off the loop break; } else { $truncate .= $line_matchings[2]; $total_length += $content_length; } // if the maximum length is reached, get off the loop if($total_length>= $length) {
break;
}
}
} else {
if (strlen($text) <= $length) { return $text; } else { $truncate = substr($text, 0, $length - strlen($ending)); } } // if the words shouldn't be cut in the middle... if (!$exact) { // ...search the last occurance of a space... $spacepos = strrpos($truncate, ' '); if (isset($spacepos)) { // ...and cut the text in this position $truncate = substr($truncate, 0, $spacepos); } } // add the defined ending to the text $truncate .= $ending; if($considerHtml) { // close all unclosed html-tags foreach ($open_tags as $tag) { $truncate .= '';
}
}
return $truncate;
}
[/php]


Cum se poate schimba configurarea php pe un server shared ?

Cateodata in aplicatiile pe care le creati veti fi nevoiti sa modificati o anumita configurare a php-ului de la valoarea default la valoare necesara pentru a putea dezvolta aplicatia. Cea mai intalnita modificare este aceea legata de flag-ul global_registers si anume setarea lui off ( nu am nici cea mai mica idee de ce unele servere inca mai au global_registers on ).

Daca este vorba de un server local pe care il rulazi pe calculatorul tau, sau de un server la care ai acces de root, solutia este foarte simpla : trebuie doar sa modifici ce doresti in fisierul de configurare (php.ini) ce ai nevoie, restart la server ... si voila job done.

Dar ce se intampla daca esti pe un hosting shared. Nu poti sa ceri echipei de suport a serverului sa modifice configurarea pentru tine ( nu prea ar putea nici daca ar vrea, deoarece ar afecta toate site-urile de pe server si ar fi cativa oameni nervosi pe chatul de suport in cateva minute de la schimbare :D ). Din fericire persoanele care au construit software-ul rulat de server ( apache in cele mai multe cazuri ) s-au gandit la tine si la situatia asta si au adaugat 2 posibilitati ca tu sa poti schimba local configurarile php fara a afecta celelalte domenii hostate pe server.

1. Crearea unui fisier PHP.ini local

Pur si simplu creezi un nou fisier php.ini in root-ul domeniului si adaugi configurarile de care ai nevoie in aceast fisier ca si cum el ar fi cel din directorul de instalare al php-ului. Aceasta va face ca acele setari sa fie suprascrise de la cele globale doar pentru domeniul tau. Revenind la situatia noastra de a seta register_globals off ar tb sa adaugi urumatoarea linie :

“register_globals = off”

2. Modificarea configurarii cu fisierul .htaccess

A doua metoda ar fi sa te folosesti de fisierul .htaccess ( cunoscut de uni doar pentru partea de url_rewrite ). Pentru aceasta trebuie sa stii o anumit sintaxa:

# pentru a modifica un atribut flag
php_flag [name] [value]

# pentru a modifica un atribut valoare
php_value [name] [value]

Revenind la exemplul nostru : php_flag register_globals off

Pentru a testa daca modificarile facute au fost efectuate, poti folosi functia phpinfo(). Noile setari ar trebui sa apara in coloana LOCAL.
Ar trebui sa stii ca nu toate serverele suporta aceste 2 metode, unele suporta doar una dintre ele, asa ca ar fi indicat sa intrebi baieti de la suport care din aceste metode este suportata de server, nu de alta dar sa nu te chinui degeaba si sa spui ca ti-am spus eu prostii.

Si inca o nota, nu toate setarile php pot fi modificate local. O lista cu toate setarile si cum pot fi ele modificate se gaseste pe site-ul oficial php :
http://www.php.net/manual/en/ini.php#ini.list
Setarile care pot fi suprascrise local au PHP_INI_PERDIR sau PHP_INI_ALL in coloana Changeable. Cele care au PHP_INI_SYSTEM pot fi modificate doar din fisierul php.ini din folderul de instalare al php-ului.

Cam asta a fost. Sper ca v-a redus googling time-ul putin.
Cheers.


Infostud.ro Pragul de 1000 de vizite

Astazi am un motiv in plus sa fiu bucuros un proiect de suflet al meu a atins pragul de trafic de 1000 de vizite pe zi. Este vorba de infostud.ro. Aceasta crestere se datoreaza desigur elevilor in cautare pe ultima suta de metri de referate pentru scoala ( 93% din trafic venind de pe motoare de cautare ) , dar never the less eu sunt bucuros. As fi fost mult mai bucuros daca traficul s-ar fi materializat si in cateva note in catalog profesorilor, principalul motiv pentru care site-ul a fost creat, dar asta e.


complete life turnaround

Toata viata mea am putut sa am o imagine, macar generala, asupra urmatorei miscari din viata mea. Nu am avut un bol de cristal, si nici nu am citit horoscopul pentru asta, dar pur si simplu am reusit intotdeauna sa imi pun un target si in functie de el sa hotarasc ce aveam de facut, sau ce drum sa aleg. Nu inseamna ca nu am luat si decizii gresite, insa avand anumite target-uri mai mari, ma foloseam de ele ca un fel de far ca sa imi dau seama daca drumul pe care am luat-o ma duce acolo ... sau din contra ma indepartez pe el.

Pana nu demult acesta metoda a mers destul de bine, dar decurand la orizont a inceput sa lumineze un nou far :)).

Dar sa incetez cu filozofismele si sa vorbim concret. Pana nu demult "my 5 years plan" era destul de bine stabilit, urma sa termin facultatea de inginerie la bacau si sa ma pun serios a lucra la dezvolatarea firmei de webdevelopment pe care am deschis-o acum cateva luni, de care pana acum cu regret nu prea am avut timp sa ma ocup serios, si deocamdata e functionala doar cu numele si are un singur angajat cu jumate de norma in functie de referent ( nici eu nu stiu ce e aia ... dar am inteles ca asta e postul pe care il pui cand nu stii ce sa scrii un fel de default al formularului ).

Acum insa incet-incet a inceput sa apara si o alta idee in planul de 5 ani, una care e un pic cam opusa celei precedente. Am inceput sa ma gandesc sa ma mut in bucuresti. Ideea a aparut din motive mai mult personale decat profesionale, dar incet am inceput sa ma gandesc mai serios la asta, si sa gasesc motive destul de importante de ce aceasta schimbare de plan ar putea fi benefica pentru mine.

Primul ar fi acela ca as putea sa fac un master in Web Development, lucru pe care ma gandesc mai de mult sa il fac, insa pana acum era ideea sa il fac la ID ( invatamant la distanta ), insa cu aceasta mutare as putea sa il fac la zi ( da sunt unul din putini care inca mai cred in invatamantul romanesc la zi ). Cred ca urmarea acestui master la zii ar fi destul de benefica in ceea ce priveste imbogatirea pachetului de cunostiinte din acest domeniu. Din cate am cautat nu prea sunt multe locuri unde se pot face aceste cursuri, dar in Bucuresti sunt 2 facultati care au astfel de cursuri ( mai sunt si in Cluj ).

Un al doilea motiv ar fi unul personal. In 2006 si 2007 am fost plecat vara cu programul Work&Travel, lucru pe care il recomand oricui are ocazia, indiferent de cat de rau va fi poate cateodata va fi o experienta pe care nu o vei uita si cu siguranta nu o vei regreta, ca sa nu mai spun ca te va maturiza mai mult decat iti vei inchipui. But any-how, in aceste 2 excursii am descoperit ca sunt mult mai motivat atunci cand sunt singur, adica cand trebuie sa ma descurc singur fara a avea plasa de siguranta a parintilor. In ultima vreme lucrand ca freelancer acasa, am o stare de .... lene cred ca e cel mai bun cuvant. Si ma gandesc ca mutandu-ma in bucuresti unde va trebuie sa am griji de genul plata chirie, food, taking care of everything around the house etc.

Acum ultimul si cel mai problematic motiv

Manager, Angajat sau freelancer ?

Asta e intrebarea cruciala :)). Daca e sa raman in bacau as lucra probabil la firma pe care am deschis-o si in paralel as continua poate si anumite relatii pe care le am din activitatea de freelancer. Insa cel putin inca un an probabil ele se vor face tot in "sediul social" din apartament. Stiu ca multe persoane isi doresc sa lucreze acasa si vad asta ca pe un fel de mecca, insa eu dupa un an si ceva de freelancing am ajuns la un punct unde am cum am spus o "lene". Asta cred ca se datoreaza faptului ca psihologic creierul tau este foarte confuz, nu mai stie unde e acasa sau la servici. Desi nu pot sa ma plang, perioada asta de freelancing a avut si multe avantaje ( bani au fost ok, program flexibil ) insa cred ca la un moment dat ajungi sa te saturi de atata libertate.

A lucra ca angajat intr-o firma are si avantajele ei. In primul rand cred ca ajungi sa evoluezi profesional mult mai mult ca angajat decat ca freelancer, deoarece lucrezi pe proiecte variate, interactionezi cu alti programatori de la care cu siguranta ajungi sa inveti cate ceva. Nu in ultimul rand inveti sa lucrezi in echipa, ceea ce ca freelancer nu prea o faci. Pe langa avantajele profesionale, sunt si unele benefici sociale, ajungi sa cunosti persoane in carne si oase, nu doar nick-uri pe ferestre de IM.
In plus in multe firme de WebDevelopment ofera angajatilor acum destul de multa libertate, ei putand sa isi aleaga singuri orele de program, si chiar oferindu-le posibilitatea de a lucra pana la 20-30% din ore remotly de acasa sau din orice alta parte.

Asta e defapt marea mea dilema, sa incerc in continuare sa dezvolt firma pe care am deschis-o sau sa imi asum gradul de "simplu" angajat la o firma. Aceasta dilema defapt mai are o intrebare atasata, oare am calitatile necesare unui manager ?

Pentru prima data in viata mea nu am nici cea mai mica idee unde voi fii in urmatoarele 3 luni, si ce cale sa aleg. Deocamdata ambele sunt la egalitate, dar presupun ca intr-un final voi lua o decizie, mai buna sau mai rea timpul o va arata.

Cheers.


PHP Fatal error: Allowed memory size of 33554432 bytes exhausted

PHP Fatal error: Allowed memory size of 33554432 bytes exhausted

Aceasta este o eroare care pare sa puna la incercare multi coderi php incepatori, asa ca dupa ce am raspuns de mai multe ori la aceasta intrebare pe forumuri m-am gandit sa scriu acest post pentru ca data viitoare sa dau acest link fara sa mai scriu aceasi explicatie din nou, sau poate doamne ajuta o sa caute pe google si o sa gaseasca aceasta pagina.

Mai intai sa intelegem de ce aparea aceasta eroare, daca nu v-ati dat seama din titlu, ea apare fiindca scriptul tau foloseste mai multa memorie decat e alocat in mod normal unui script php. Aceasta se intampla din cateva motive pe care le voi enumera acum :

  • Output-ul scriptului tau ( HTML ) este prea mare ( se intampla destul de rar )
  • scriptul foloseste memoria peste limita datorita varaibilelor folosite sau cererilor facute ( variabile POST FILES etc. - cea mai frecventa cauza )
  • Exista un bug in scriptul tau care face ca scriptul sa consume asa de multa memorie

Acum nu trebuie sa te sperii, nu este o eroare asa de grava si poate fi remediata chiar foarte usor deobicei. Pentru a rezolva problema poti incerca ormatoarele :

  • sa optimizezi scriptul ca sa nu mai manance atata memorie ( destul de logic nu ? )
  • sa cauti eventualele bug-uri care ar putea cauza folosirea excesiva a memoriei
  • sa minimizezi output-ul scriptului
  • sa maresti varaibila de configurare php memory_limit fie in php.ini ( daca ai acces ) sau chiar in scriptul php folosind functia ini_set() ( ex: ini_set('memory_limit','32MB'); )

Limita default de 8MB a fost implementata in php pentru a opri scripturile de a rula atunci cand incep sa consume o cantitate de memorie prea mare din memoria totala a serverului, lucru care daca ar fi lasat sa continue ar putea cauza caderea serverului. Metoda cea mai buna de a corecta aceasta eroare ar fi de a optimiza scriptul php si a cauta eventulele bug-uri, decat de a mari limita de memorie metoda intradevar mai usoara si adoptata de foarte multi coderi ( desigur sunt si cazuri cand aceasta este singura solutie ) .

Sper ca acest articol v-a fost de ajutor si astept comentariile voastre.


O poveste ...

Era odata un baiat nascut cu o grava maladie. O maladie pentru care nu exista un leac. Avea 17 ani, dar putea muri in orice moment. Traia in casa lui sub asistenta permanenta a mamei sale.

Obosit de stat in casa, a decis sa iasa macar o data. Ceruse permisiunea mamei sale.Ea a acceptat.
Mergand prin cartierul sau,se uita pe la magazine. Trecand pe langa un magazin de muzica ,privi prin vitrina ,si observa prezenta unei tinere fete, de varsta lui. A fost dragoste la prima vedere.

Deschise usa si intra ,privind la nimic altceva decat la fata. Apropiindu-se incet,sosi la tejgheaua unde era fata. Ea il privi si ii spuse surazand:

"Pot sa te ajut?"

In timpul acesta el gandea ca acela era cel mai frumos zambet pe care l-a vazut in viata sa. Simte a impulsul de a o saruta. Balbaindu-se ii spuse:

" Da ........hmmmmmmm........... ummmmmm. Mi-ar placea sa cumpar un CD."

Fara sa se gandeasca,prinde primul CD pe care il vede si ii da banii.

"Vrei sa ti-l impachetez ?"

-intreaba fata zambind din nou. El ii raspunse ca da.
Incetisor, ea merse in magazie, si se intoarse cu pachetul si i-l da baiatului. El il ia si iese din magazin.

Se intoarse acasa, si din acea zi, mergea la acel magazin in fiecare zi sa cumpere un CD. Fata il impacheta mereu, iar el se intorcea acasa si il baga in sertar. El era prea timid pentru a o invita in oras si de cate ori incerca ,nu reusea niciodata.

Mama lui a aflat de aceasta situatie si il incuraja sa incerce........ asadar in ziua urmatoare el isi luase curaj si se duse la magazin. Ca in toate celelalte zile......isi cumpara un CD, si ca intotdeauana ea il impacheta .El a luat CD -ul si in momentul in care fata era distrata, a pus repede o foaie cu numarul lui de telefon pe tejghea, apoi a iesit in fuga din magazin.

Dringggggggg.

Mama lui raspunde la telefon. "Alo?????". Era fata, ce intreba de fiul ei. Mama indurerata a inceput sa planga in timp ce zicea:

"Nu stii ? .... a murit ieri".

A fost o tacere indelungata intrerupta de plansul mamei. Mai tarziu mama lui a intrat in camera fiului pentru a si-l aminti.Decise de a incepe sa se uite prin lucrurile lui. Deschise sertarul si cu mare suprindere gasise un munte se CD-uri impachetate. Nu era nici macar unul deschis. A cuprins-o curiozitatea, vazand atatea si nu putu rezista: a luat un CD si s-a asezat pe pat, uitandu-se.

Cand un bilet iese din pachetul din plastic......... Mama l-a luat pentru a-l citi; scria:

"Esti frumos ! Ai vrea sa iesi cu mine? Te iubesc ............ Sofia."

Mama emotionata deschise si alte CD uri si gasise si alte bilete; pe toate scria acelasi lucru.

MORALA:

Asta e viata. Nu astepta prea mult pentru a-i spune cuiva special ceea ce simti. Spune- i astazi. Maine va putea fi prea tarziu.
Acest mesaj a fost scris pentru a te face sa se reflectezi asupra acestor lucruri.


Experimentand sistemul medical romanesc

Astazi am avut nefericirea de a experimenta "reformele" din sistemul medical romanesc.

Imi incepusem ziua destul de bine, insa la un moment dat surori mele mai mari i sa facut foarte rau si a lesinat pierdandu-si cunostiinta pentru aproape un minut. In timp ce mama mea incerca sa o readuca la cunostiinta cu niste palme bine aplicate :)), eu in inconstienta mea uitand in ce tara traiesc, am reactionat zic eu normal. Am zis sa apelez la serviciul mult prea laudat de urgenta al romanilor ... si am sunat 112. Acolo raspunde o duduie cu :

- Buna ziua, ce urgenta aveti ?.
Am zis gata sunt ca in filme: Sora mea a lesinat si si-a pierdut cunostiinta.
- Numelele si prenumele dumneavoastra ?
- Solomon Gabriel. ( normal tb pt arhiva ma gandesc eu )
- Numele persoanei inconstiente ?
- Solomon Iuliana. ( mai, na ... tb sa isi faca si tanti treaba cat "doarme" sorelina )
- Numarul dumneavoastra de telefon ?

Poftim ? Sistem de nu stiu cate milioane de euro cu care s-au laudat luni in sir pe la buletine de stiri, dar tehnologia de CallerID e prea avansata pentru voi ?. Si ii raspund : Nu stiu doamna ca nu sun de pe mobilul meu si nu stiu numarul pe de rost.
Apoi vine replica : OK, o sa va transfer la Salvare.
Stai putin, asta nu era serviciul de urgenta unde nu mai tb sa sun eu la salvare, politie si pompieri sau mai stiu eu ce ? Cum toata aceasta campanie mediatica doar pentru un serviciu de centralista care sa ma transfere unde am nevoie ? Asta e.

- Buna ziua, ambulanta. Ce urgenta aveti ?
Incantat de cunostiinta dar nu am povetit deja cuiva ce urgenta am ?
- Sora mea a lesinat si si-a pierdut cunostiinta.
- Numele si prenumele dumneavoastra ?

Ce ??? iar tb sa spun povestea. Dupa ce trecem de formalitati, plus adresa, ca sa nu mai zic ca ma tinea in telefon sa ii explic unde e adresa ?????? ajungem si la intrebarea : Si-a revenit ? Pai dupa cat m-ati tinut in telefon, putea sa isi dea si duhul. Ii raspund ca si-a recapatat cunostiinta dar ii este foarte rau si acum vomita.
Raspunsul m-a dat pe spate si m-a adus foarte brusc la realitatea ca sunt in romania.

- Din pacate nu am nici o masina disponibila. Abia peste 20 de minute daca se intoarce o masina. Datii niste apa cu zahar si deschideti geamul.Daca nu isi revine, mai dati un telefon peste 15 minute si trimit ambulanta daca a venit.

Cum ??? si ai facut o scoala ca sa imi dai raspunsul asta de operator de la ambulanta ?
In fine, plin de "drag" de Romania, sun la un taxiu, care stia si unde e adresa si a venit si mai repede ca o ambulanta si plecam impreuna cu mama spre urgenta.

Ajungand la urgenta, mai erau si alte persoane care asteptau, in picioare pe coridor ( ca e scumpe niste scaune pentru sala de asteptare la urgenta, ca doar nu vrem sa faca hemoroizi cat asteapta ), dar cum sorelina nu prea putea sa se tine pe picioare, am intrat in sala de la urgente si am asezat-o pe unul din paturile libere. Fiindui foarte rau si cu o sezatie de voma, am cerut cos din plastic, moment in care am fost si noi bagati in seama ( eram prea invisibili ).

Prima intrebare ? Dati-mi un buletin. Normal ca doar nu putea incepe cu ce are, cum se simte, doamne fereste, vrei sa ramana in urma cu actele.

Dupa ce trece la caiet, ca sa tina evidenta cat de mult muncesc ei in fiecare zii pentru tara si popor, tratand atatea urgente medicale, vine si o doamna doctorita sa poata da un diagnostic pentru caiet.
In timp ce aceasta doamna o consulta, punand anumite intrebari : cum s-a intamplat ? unde te doare ?, un nenea cu halat alb si ecuson de asistent ( de ce fel nu stiu ca medical nu parea ) se da si el cu parerea ca tot romanul in timp ce se invartea pe un scaun parca era de 13 ani :

- O fii o cadere de calciu ? ( sa mori tu? ai vazut tu cadere de calciu unde sa vomiti si sa ai dureri abdominale ? )
- Poate nu a mancat bine ?
- Nu cumva e la vreo dieta, doamna ? ( catre mama mea )

Dupa consult, datorita istoriei medicale a sorelinei ( defect septal ventricular ) am fost trimisi catre sectia de cardiologie. Doctorita de la urgenta ii inmana documetele "copilului" in halat alb si ii spune sa ne conduca la cardiologie. Acesta vine la noi, si ne intreaba:

Da nu stiti unde e sectia de cardiologie, uitati ca e simplu .... mergeti in capatul holului luati liftul la etajul 5 si apoi pe dreapta la cabinetul sefului de sectie, mai intrebati o asistenta pe drum.

Cum ??? Tu ai probleme prea importante ... si nu ai timp de lucruri dinastea marunte, nu ? Trebuie sa dobori recordul la de cate ori te invarti in scaun fara sa pui piciorul jos. Moving on.

Mergem catre lift, care vine normal greu. Se deschid usile si in timp ce pasim in lift imi dau seama ca parca am trecut in alta lume. Desi eu stiam ca eram intr-un spital, in lift era o doamna care ne intreaba in timp ce manca seminte ca pe stadion la ce etaj mergem. Oare sa fii gresit liftul ? Asta normal tb sa fie liftul pentru pacienti, cel folosit si pentru transportul bolnavilor catre si dinpre blocul operator de exemple. Oare nu ar tb el sa resecte anumite reguli de igiena ? Oare inspectia sanitara e prea ocupata sa verifice si spitalul, o fi prea ocupata dand amenzi agentilor economici ca nu respecta nu stiu ce standard european, nu ma intelegeti gresit, stiu ca trebuie sa existe si acele reguli, dar oare nu ar tb sa exite o ordine a prioritatilor ?.
In uimirea mea ma mai uit odata in jur, poate nu am vazut eu bine. langa doamna cu pricina era de acum o tentativa la turnul babel formata din coji de seminte.

Iesim si din lift si ajungem la cardiologie, unde normal, trebuie sa mai asteptam pentru seful de sectie,acesta fiind prea ocupat sa stea la cabinetul lui. In final revine si ne invita in cabinet.

- Asa. Sa vedem ce avem aici. Dar de ce ati venit la cardiologie ?
- Pentru ca a fost operata cu inima. - raspunde mama.
- Ce probleme ?
- Suflu sistolic.
- Doamna suflu sistolic nu e boala, e o simptom. Ce boala a avut ? Documente ?
- poftim, ce documente ?
- Documente doamna, de la operatie.
- pai nu le avem la noi, dar va spun eu ce a avut.
- doamna nu intelegeti, imi trebuie documente.

Alooo domnu' ? Am gresit eu usa si suntem la interegatoriu ? Credeti ca in timp ce coboram grabiti la taxiu ( ca de ambulanta nu exista ) exact la asta nu m-am gandit sa iti aduc eu tie documentele de la o operatie de acum 9 ani. Si a continuat sa o tina pe a lui o vreme, in timp ce statea relaxat pe scaun ( doamne fereste sa consulte intai ) tinand o prelegere cum suflu sistolic nu e o boala, si ca o boala e defect septal ventricular and defect septal antricular, si cum am venit noi fara acte. In final am ajuns la un consens, sora mea confirmandui ca boala se numea defect septal ventricular, dupa cum isi amintea.

- Asa. Deci defect septal ventricular. In ce an a fost operatia ?
- 1999.
- La ce spital ?
- Spitalul militar, Bucuresti. ( Oare chiar am gresit eu usa ? )
- De cine ? Cum il chema pe medic ?
- dr Botosina. ( Clar. am gresit usa, am intrat la interogatoriu )

Abia dupa ce a trecut de aceste intrebari ajutatoare obligatorii s-a decis sa ajunga si la partea de consultatie, dand un verdict simplu si la obiect : Nu are nimic la inima. Trebuie sa mergeti inapoi la camera de urgenta. Am sa scriu aici sa va trimita la ginecologie din cauza durerilor abdominale.

Coborand din nou cu liftul de stadion la urgenta. Acolo primim o replica deja cunoscuta:
- Trebuie sa va trimitem la Sectia de Ginecologie ( in alta aripa a spitalului ). Dar din pacate nu exita o ambulanta sa va duca pana acolo. Dar dumneavoastra ati venit cu masina nu ?

Deja obisnuiti de acum, luam trimiterea si ne indreptam catre sectia de ginecologie. Acolo as putea sa spun ca a fost un pic mai bine, asistenta ne intreaba frumos ce s-a intamplat, ne conduce la un cabinet, cheama doctorul. Raman oarecum surprins, insa nu prea mult timp. Dupa ecografie si consultatie vine si verdictul medicului - nu mai retin numele exact, din ceea ce am inteles, o raceala puternica la uter ( sper sa fi inteles corect, daca nu imi cer scuze ). Si acum vine bomba :

- Vreti sa va internez ? - intreaba doctorul
- Daca e grav si trebuie sa ma internez, normal ca da. - raspunde mirata de intrebare sorelina
- Domnisoara, nu ne intelegem. Vreti sa va internez sau nu ?
- Pai nu stiu, nu dumneavoastra trebuie sa imi spuneti daca trebuie sa va internez.
- Domnisoara, vreti sa va internez sau nu ?
- Pai daca trebuie, da vreau.
- Nu ma intelegeti deloc. Eu va pot da si un tratament si acasa, si daca va simtiti rau in continuare puteti sa reveniti oricand la noi.
- Bine atunci nu ma internez.
- Bine domnisoara, daca refuzati sa va internati, va rog sa semnati hartia asta spunand ca nu doriti sa va internati.

No comment.

Concluzie

De data asta nu a fost o situatie extrem de grava, dar nu pot sa nu ma gandesc ce s-ar fi intamplat daca ar fi fost ? Daca era ce banuiam noi apenticita ? Oare toate aceste plimbari de colo-colo nu ar fi fost periculoase, si ar fi putut duce la peritonita ?

Probabil uni dintre voi s-ar putea sa se gandeasca ca asa ceva nu s-ar putea intampla fiindca doctorul de la urgenta si-ar fi dat seama. Pai, imi pare rau sa va dezamagesc, dar s-a intamplat. O nepoata a unui prieten de familie, o fetita de 6 ani a fost purtata prin spital pana cand situatia a devenit atat de grava incat medici au decis ca nu se pot descurca si au trimis-o cu ambulanta la Iasi. Din pacate nu a mai ajuns la timp acolo ( Dumnezeu sa o odihneasca in pace ) . Explicatia ? A fost adusa prea tarziu la spital.

Multumiri

As dori sa multumesc pentru acest articol, ministerului sanatatii in frunte cu ministrul sanatatii care ne scot ochi cu reformele si planning-ul pe urmatorii X ani din sistemul medical.
Nu as vrea sa il uit pe domnul primar care de 2 luni imi scoate ochii cu panouri publicitare in care imi spune cate strazi a asfaltat, cate scoli a modernizat, cum o sa am un nou spital, cate miliarde s-au cheltuit pentru binele meu, si ce bine o ducem fata de acum 4 ani ( ciudat eu nu o simt - poate tb sa folosesti bani de pe panouri in alta parte ;) ).

Nu am sa va pun particele la biserica, sau lumanari la morti sau mai stiu eu ce blesteme, tot ce va doresc e sa fiti simpli cetateni ai acesteti tari ... si sa simtiti sistemul pe care l-ati construit.

Traim in romania si asta ne ocupa tot timpul


Cum sa adaugati JavaScript in articolele din Joomla

Daca ai lucrat cu joomla cu siguranta te-ai lovit de situatia in care ai vrut sa adaugi cod javascript intr-o pagina din faimosul CMS, fie ca era vorba de un cod pentru reclame ( google adsense sau yahoo ) sau un widget de la un site.
Si pun pariu ca ai incercat sa faci un paste la cod in continut, dar dupa cum ai vazut editorul va transforma codul tau in coduri HTML ceea ce va face ca el sa apara pur si simplu scris in pagina fara sa fie rulat de browser. De exemplu < va fi transformat in &gt;.

Solutia ? Una simpla si low-tech, cel putin cea gasita de mine :)
Login ca admin
Mergi in Global Configuration si selectezi la WYSIWYG  Editor > No WYSIWYG Editor
Acum salvezi.

Acum ca ai facut dissable la editor poti pune codul tau javascript in paginile joomla.

Cum spuneam o solutie very low-tech. Partea proasta este ca apoi va trebui sa reactivezi editorul WYSIWYG, si ca va trebui sa repeti acest procedeu de fiecare data cand vei dori sa adaugi javascript in joomla, imi pare rau nu am gasit alta metoda. Daca tu ai gasit una, scrie si tu un comentariu si anuntane si pe noi astia mai nefericiti.

Cheers

[later edit]
Mai exista o posibilitate sa instalati un nou editor gen FCKeditor care are posibilitatea de editarea a sursei HTML.