Tema 3 nu e chiar simpla :)
Read more...
Noutati despre interfete web si interfete evoluate
Din pacate pentru colegii mei, nu am idei care sa fie legate in mod direct de interfetele web. Insa...
Astazi am avut niste probleme de layout intr-o aplicatie. Cautand pe net sa vad care-i problema, am dat peste o chestie interesanta, de care simt nevoia sa spun si altora.
Toata lumea stie ca browserele afiseaza in mod diferit aceeasi pagina. Motivul se datoreaza faptului ca fiecare browser are un motor diferit (afirmatie oarecum valabila deoarece exista motoare care se regasesc in mai multe browsere - ex. Gecko se gaseste in Firefox, Camino, Netscape si Thunderbird (stiu ca asta nu e browser)). Evident, fiecare motor e mai mult sau putin compliant cu standardele asa ca apar diferente.
Insa, ceea ce nu stiam este faptul ca exista un test care iti poate arata cat de compliant este un browser cu standardul CSS3. Pe scurt, va duceti la URL-ul: http://www.webstandards.org/files/acid2/test.html, si faceti testul.
Mai multe detalii gasiti aici: http://en.wikipedia.org/wiki/Acid2
Ionut
UPDATE: Cristi a semnalat printr-un comentariu faptul ca am facut o greseala in articol: ACID2 este pentru CSS2, nu CSS3... Mea culpa...
Am sa incep cu un disclaimer: acest post nu reprezinta o insiruire a unor idei personale. Mai degraba, am gasit niste lucruri pe net despre care consider ca ar putea fi utile si altor persoane, asa ca m-am gandit sa le public aici.
Azi am aflat ca a aparut un nou beta al browser-ului Firefox 3.1. Ca un programator curios, m-am dus si io pe site-ul lor ca sa vad ce lucruri noi aduce aceasta versiune. Printre chestiile insiruite se afla si informatii despre acesti "Web Workers". In fapt, un web worker este un "thread" (pun ghilimele deoarece notiunea de thread nu este neaparat identica cu ce se intelege prin thread intr-un sistem de operare) care executa cod Javascript.
In acest articol exista mai multe informatii despre partea cu Web Workers in Firefox 3.1. Partea cea mai interesanta o reprezinta acel cod Javascript a carui executie, chiar dureaza ceva timp...
Detalii suplimentare despre Web Workers gasiti pe site-ul: http://www.whatwg.org/specs/web-workers/current-work/
Ca observatie Web Worker-ii nu sunt specifici Firefox. http://www.whatwg.org/ sunt cei care se ocupa de intretinerea HTML.
Ionut
La cererea expresa a lui Florin si contrar vointei acestuia, subiectul primului meu post pentru proiectul de la cursul Interfete Evoluate va fi despre un lucru aparent banal: concatenarea a doua siruri in Java.
Operatia de adunare (concatenare) a doua siruri este una foarte raspandita in aplicatiile Java normale. Insa aceasta creaza probleme din cauza faptului ca obiectul String este imutabil. Practic, din adunarea a doua obiecte de tip String, va rezulta o noua instanta, complet diferita de primele doua. In codul compilat (adica in fisierul .class), acest lucru se face prin instantierea clasei StringBuilder si apelarea metodei append. Mai exact, daca vom scrie intr-o functie urmatoarea secventa de cod:
String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
Ea va fi compilata in:
String s1 = "a";
String s2 = "b";
String s3 = (new StringBuilder(String.valueOf(s1))).append(s2).toString();
Ca observatie, StringBuilder-ul este folosit doar de la Java 1.5. In versiunile mai vechi (care, din pacate inca se mai intalnesc...) se utilizeaza StringBuffer.
Este evident faptul ca apelul String.valueOf este inutil deoarece s1 este nenul (valueOf cu parametru de tip Object, intoarce sirul "null" daca parametrul este nul sau apeleaza functia toString() a obiectului daca acesta este nenul). De asemenea, in cazul in care o asemenea operatie se face des, cum ar fi intr-un ciclu, atunci este mai bine sa se reutilizeze instanta StringBuilder. Mai exact, daca avem urmatoarea secventa de cod:
for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
String s3 = s1 + s2;
}
ea va fi compilata in:
for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
String s3 = new StringBuilder(String.valueOf(s1)).append(s2).toString();
}
Evident, acest cod poate fi optimizat in felul urmator (facem abstractie de modul in care functioneaza instantierea obiectelor in Java):
StringBuilder buffer = new StringBuilder();
for (int i=0; i<100; i++) {
String s1 = "a";
String s2 = "b";
buffer.setLength(0);
String s3 = buffer.append(s1).append(s2).toString();
}
Ca incheiere, vreau sa mai adaug doar ca incepand cu Java 1.5, StringBuilder si StringBuffer au un parinte comun, AbstractStringBuilder (aici ma refer la JDK-ul de la Sun). Practic, in clasa abstracta sunt implementate toate operatiile, iar StringBuilder si StringBuffer actioneaza doar ca niste wrapper-e. Diferenta dintre cele doua clase este data de faptul ca StringBuffer este thread-safe deoarece apelurile sale sunt marcate ca synchronized.
Ionut