2010-10-30

(ro) Diacriticele și internetul

În articolul „Browsere Moderne” am testat comportamentul browserelor (Internet Explorer, Mozilla Firefox, Google Chrome, Opera, Apple Safari) la afișarea paginilor web care conțin caractere (ș și ț cu virgulă) neexistente în fonturile din sistemul de operare Windows XP.

Internet Explorer 6 a afișat pătrățele. Celelalte browsere au substituit fontul care nu conținea caracterele dorite cu alt font care conținea caracterele, dar această substituție se observă ușor și nu arată foarte bine.

În articolul „Browsere Moderne II” am folosit o altă abordare, am încercat să afișez pagina cu alte fonturi decât cele existente în sistemul de operare Windows XP.

Toate browserele (inclusiv Internet Explorer 6) au afișat corect paginile web. Dezavantajul la această abordare este gama foarte restrânsă de fonturi ce pot fi utilizate în acest fel și care să conțină diacriticele românești, la care se adaugă și timpul de descărcat fonturile de pe internet.

Se spune că a treia încercare este cu noroc, în acest articol voi prezenta o modalitate de afișare a paginilor web cu diacriticele corecte, având posibilitatea de a afișa diacriticele cu sedilă pe sistemele de operare fără fonturi actualizate.

Soluția este simplă, la încărcarea paginii se detectează dacă șirul "șȘțȚ" are aceeași lățime cu șirul "sStT", dacă au aceeași lățime nu se face nicio modificare a paginii, dacă nu atunci se înlocuiesc toate diacriticele cu virgulă cu diacriticele cu sedilă. Diferența de lățime vine de la faptul că șirul cu diacritice este înlocuit fie cu pătrățele (Internet Explorer 6), fie este substituit cu alt font (restul browserelor).

Această soluție funcționează pentru fonturile cu lățime variabilă, fonturile cu lățime fixă (ex. Courier New) nu pot fi folosite deoarece fiecare caracter are aceeași lățime.

Pentru ca o pagină web să poată folosi acest sistem de siguranță sunt necesari următorii pași:

  • pagina web trebuie să fie codificată unicode utf-8
  • diacriticele folosite trebuie să fie cu virgulă
  • adăugarea unei singure linii de cod în secțiunea <head>, linia de cod indică calea la scriptul Javascript care face toată magia

Exemplu (aici diacriticele au fost trecute sub formă de cod hexazecimal):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="diacritice.js"></script>
</head>
<body>
    <p>Muzicolog&#x103; &#xee;n bej, v&#xe2;nd whisky &#x219;i tequila, 
     pre&#x21b; fix</p>
</body>
</html>

Pagină de test: http://goo.gl/AwMKY, codul sursă al paginii web, și al scriptului Javascript. Mai jos am pus capturi de ecran ale unui sistem Windows XP: fără script, cu script dar fără fonturi actualizate și cu script și cu fonturi actualizate:

Fără scriptul diacritice.js
Cu scriptul diacritice.js dar fără fonturile actualizate
Cu scriptul diacritice.js și fonturile actualizate
Un alt exemplu ar fi chiar acest blog. Configurarea am făcut-o astfel: în interfața Blogger am mers la "Design", apoi la "Edit HTML", unde conținutul scriptului diacritice.js (în locul celor trei puncte) l-am pus deasupra lui </head> sub forma:

<script type="text/javascript">
//<![CDATA[
...
//]]>
</script>

Am testat cu sucess soluția pe următoarele browsere:

  • Internet Explorer 6.0, 7.0, 8.0
  • Mozilla Firefox 3.6.12
  • Opera 10.53
  • Apple Safari 5.02
  • Google Chrome 7.0
Soluția prezentată este ușor de folosit, beneficiază de suportul adus pentru limba română de sistemele de operare Windows Vista și Windows 7 și menține în același timp compatibilitatea cu veteranul Windows XP.

P.S.

Am făcut o serie de teste și pe Ubuntu 10.10 Maverick Meerkat pe următoarele browsere:

  • Mozilla Firefox 3.6.12
  • Opera 10.53
  • Google Chrome 7.0
Mozilla Firefox și Opera au afișat pagina cu diacriticele corecte, Google Chrome a afișat pagina cu diacriticele cu sedile.

Aceasta se datorează faptului că Google Chrome folosește fontul „Times New Roman” ca font implicit pe Linux, font care nu face parte dintr-o distribuție de Linux. Am raportat problema la Google aici - Issue 61366.

În atenția utilizatorilor care instalează pe Linux pachetul de fonturi corefonts pentru a avea o experiență asemănătoare cu cea oferită de sistemul de operare Windows.

Toate fonturile din pachetul corefonts nu conțin diacriticele corecte, fapt care va face din sistemul Linux (Ubuntu 10.10 este nou nouț la data scrierii acestui articol) un Windows 98 și soluția din acest articol va converti toate diacriticele cu virgulă în diacritice cu sedilă!

P.P.S.

Am actualizat scriptul pentru cazul în care avem de-a face cu fonturi care au parțial diacriticele corecte: ș cu virgulă, dar fără ț cu virgulă, dar ț-ul cu sedilă fiind implementat ca ț cu virgulă. În acest caz numai ț este schimbat în varianta cu sedilă.

Android folosește familia de fonturi Droid care intră în categoria de fonturi descrisă mai sus.

Droid nu este singura familie de fonturi care suferă de această „anomalie”, la Google Font Directory am mai întâlnit familiile de fonturi: GFS Didot, GFS Neohellenic, Josefin Sans Std Light și Reenie Beanie.

2010-10-27

MSDN Subscription Donation

I would like to thank Mozilla for buying me a MSDN Subscription license, with this license I will have access to a lot of Microsoft software.

Activating a MSDN subscription is harder than one might think especially when you try to activate it on a different continent than the one where the subscription was bought.

Thank you Mozilla!

2010-10-22

Menus

After playing a bit with Firefox 4.0b6 I have noticed that something was different in the new Firefox, and that was caused by the font rendering used in the UI.

I know that Firefox is using Direct2D to render the UI on Windows 7, but in this area is not necessarily a step forward, and I hope that there is something to be done in this aspect (I have already given feedback using the build in feedback system)

I have made screen shots of Firefox 3.6 vs Firefox 4.0b6:


I have also done screen shots of Internet Explorer 8 vs Internet Explorer 9beta:


Notice that Internet Explorer 9 doesn't seem very different than Internet Explorer 8. I'm not sure that they did a better job at using Direct 2D than Firefox because they might not use Direct2D for menus all together.

This reminds me how broken was text rendering in WPF applications, but Microsoft seems to have fixed that in WPF4, see this blog entry about Visual Studio 2010

Also worth mentioning is that I have used the latest NVidia drivers for my graphics card:



Edit: This behavior was reported as bug #594325

2010-10-17

SSL, Certum SSL

For the past year we at Xiph have been using a SSL certificate for the following subdomains: svn, git, and trac.

The SSL certificate was kindly given to us by Certum at no cost.

Usually users do not notice that the SSL certificate is in place, unless the SSL certificate is not recognized by the web browser, which will complain that the web site is not safe to browse.

I would like to thank Certum for allowing us to have non scary user experience while browsing our web servers.

Edit 25.10.2010 The offer was valid for one year, this year we did not get the
renewal.