czwartek, listopada 18, 2010

<value /> - tag niezgody ;-)

Ostatnio okazało się, że klika rozszerzeń do OpenOffice.org, w tym OOo2GD nie działa na niektórych systemach z najnowszą wersją OpenOffice.org 3.3 [chyba RC5 ale głowy nie dam].
Śledztwo użytkowników wykazało, że to dlatego iż w najnowszej wersji OO.org wprowadzono poprawkę, która sprawiła, że OO.org zaczęło działać tak jak zadeklarowano to 4 lata temu ;-)

O co chodzi?

Problem występował w takich instalacjach OO.org, które działały w systemach w których domyślnym językiem był język inny niż któryś z tych które były wspierane przez rozszerzenie.
W przypadku OOo2GD działo się to np. na komputerach w Szwecji.

Analiza ludzi z OO.org wykazała, że to dlatego, że po wprowadzeniu poprawki do OO.org zaczął on szukać napisów do menu czy podpisów dla ikon bazując na dość rozsądnym algorytmie, czyli najpierw sprawdź czy jest coś w języku systemowym [oczywiście z gradacją "dokładności" od najbardziej dokładnego, czyli np. en-US, przez ogólny czyli en, kończąc na najlepiej pasującym czyli dowolnym en-*, np. en-CA], jeśli to się nie udawało OO.org miał szukać tekstu dla domyślnego języka, czyli takiego tekstu, który nie został przypisany do żadnego języka, jeżeli zaś to się nie udało miał wyświetlać tekst dla pierwszego zadeklarowanego języka, jeśli to się nie uda to miał nic nie wyświetlać.
Dość rozsądne.
Jeden problem jest taki, że np. w przypadku OOo2GD gdy docierał do kroku, w którym stwierdzał, że szuka dla domyślnego języka to znajdował pusty tekst, a że był pusty to go nie wyświetlał ;-)


<prop name="Title" type="xs:string">
<value />
<value lang="en">Google Docs &amp; Zoho</value>
<value lang="pl">Google Docs &amp; Zoho</value>
<value lang="de">Google Text und Tabellen &amp; Zoho</value>
<value lang="es">Google Docs &amp; Zoho</value>
<value lang="it">Google Docs &amp; Zoho</value>
<value lang="cs">Dokumenty Google &amp; Zoho </value>
</prop>


Problemem był ten tag <value />, który wyraźnie mówił, że dla języka domyślnego wartość napisu jest pusta ;-)

A czemu tak było [i nadal jest] w OOo2GD i pewnej liczbie innych rozszerzeń?

Bo takie coś wrzucała i wrzuca tam wtyczka do NetBeans, która pozwala tworzyć rozszerzenia do OO.org właśnie w NetBeans :-)

Inną sprawą jest czy rozsądnym jest poprawianie "błędu" w API, który tam jest już od 4 lat.
Wg. mnie po takim czasie to się staje elementem API i to, że dokumentacja mówi inaczej dowodzi tylko błędu w dokumentacji.

Wcześniejsze działanie, czyli takie, że w razie string był pusty to OO.org na siłę szukało tekstu dla języka angielskiego, był sensowny. Niezgodny z dokumentacją, ale raczej nikomu nie przeszkadzał. W najgorszym przypadku po prostu użytkownik widział napis po angielsku, bo na 99% nikt z developerów nie chciałby ukrywać w taki sposób swojego rozszerzenia.

Jak mnie kiedyś pouczono w Motoroli. Jeżeli kod mówi jedno, a dokumentacja drugie to zwykle dokumentacja jest błędna. Wtedy wydawało mi się to dziwne, ale teraz uważam, że to prawda.
Kod przechodzi weryfikację zawsze, dokumentacja niekoniecznie ;-)

A cała sprawa skończyła się tym, że jak rozumiem poprawka zostanie wycofana i OO.org nadal w razie niepowodzenia w znalezieniu lokali będzie próbował szukać lokali dla angielskiego :-)


Podobne postybeta
[Updated] Czytanie Pocketa ;-)
Robimy widget do Windows 7 :-)
Lepszy test mniejszy i dokładniejszy, niż większy i ogólniejszy ;-)
Plug-in master ;-)
Najkrótsza droga do przyszłości - Polymer ;-)