środa, 26 listopada 2008

Uwaga: będą unowocześniać polskie bibiloteki

,,Gazeta Wyborcza'' pod bombastycznym tytułem Bill Gates unowocześni polskie biblioteki sprzedaje takie oto przesłanie: rząd Tuska ze współzałożycielem Microsoftu Billem Gatesem chcą zmienić umierające biblioteki w centra kultury na miarę XXI wieku. No brawo można by powiedzieć... [Uwaga na boku: jak czytam, że Rząd Tuska z Gatesem, to przypomina mi się stary żydowski dowcip: -- rozmawiałem z gubernatorem, -- i co, i co ci powiedział?, -- paszoł won jewrej; tu jest inna wersja). Koniec uwagi].

Wracając ad rem. Primo co niby ma oznaczać centra kultury na miarę XXI wieku? Tyle, że kupią i wstawią komputery z niesławną Vistą? Po drugie zaś primo fundacja Mr. Gatesa stawia sprawę jasno: We're funding pilot programs and grants to purchase hardware. Our partner, Microsoft, donates software if the country requests it. (cytat ze strony fundacji dot. programów bibliotecznych)

Tekst z GW, który napisała niejaka Renata Grochal (dziennikarz na miarę XXI w. z gazety na miarę XXI w.?) został oczywiście powielony za gazeta.pl na różnych onetach, wirtualnych-polskach itp. ,,serwisach''. BTW kiedyś żeby ,kłamstwo powtarzane wielokrotnie stało się prawdą'' potrzeba było ministerstwa propagandy i ,,trzymania za twarz'' mediów (żeby powtarzały). Dziś każda bzdura pojawia się wszędzie powielona miliony razy. Reichsminister byłby zachwycony możliwościami Internetu-:(

Kończąc mam nadzieję, że omawiana propozycja rządowa skończy podobnie jak poprzednie, tj. wybory przez Internet, rozliczenia podatków osobistych przez Internet czy rozdawanie dzieciom laptopów.

wtorek, 25 listopada 2008

Super/subskrypt w CSS

Poniższe nastawy powodują złożenie fragmentu tekstu odpowiednio w superskrypcie i subskrypcie.


.superscript{font-size:xx-small; vertical-align:top;}
.subscript{font-size:xx-small; vertical-align:bottom;}

Nowe odnośniki do innych blogów, umieszczone po lewej stronie (w wersji ,,statycznej'' bloga umieszczone są w pliku index.html), zawarte wewnątrz <span>, np:


<span class='new_blog_entry'><a href="http://norman.walsh.name/">N. Walsh</a></span> |

mają być wyświetlane krojem pochyłym (kursywą) oraz po linku ma być umieszczany w superskrypcie napis [new] (tak to sobie wymyśliłem). Do osiągnięcia powyższego służy następujący fragment arkusza CSS:


.new_blog_entry { font-style: italic }
.new_blog_entry:after { content : "[new]" ; font-size:xx-small; vertical-align:top; }

Dopisane 26 listopada 2008: Nie jest chyba specjalnym zaskoczeniem, że w przeglądarce IE f-m MS (wersja 7) powyższe nie działa. Żałosne...

poniedziałek, 24 listopada 2008

Poprawianie plików PDF w edytorze Emacs

Opisany wcześniej skrypt uruchamiam ,,spod'' Emacsa działającego w trybie BibTeX. Konkretniej poniższa funkcja bibtex-adjust-pdf-filename pobiera wartości pól author, title, year oraz tp:keywords, a następnie przekazuje te wartości w postaci argumentów ww. skryptu uruchamianego jako polecenie systemowe. Mam nadzieję dzięki temu mieć większy porządek w przechowywanych dokumentach pobranych z różnych archiwów elektronicznych.


(defun bibtex-adjust-pdf-filename (file)
"Dla bieżącego rekordu bibtexa modyfikuje plik zawierający relewantny dokument PDF
(dodaje co trzeba do słownika Info oraz modyfikuje nazwę). Oryginalna nazwa pliku
PDF jest podana z minibufora. Modyfikacja jest dokonywana przez zewnętrzny skrypt.
Cała ta procedura jest po to żeby można łatwiej później odszukać plik na dysku...."
(interactive "fNazwa pliku: ")
(save-excursion
(bibtex-beginning-of-entry)
(let* ( (author (bibtex-text-in-field "author"))
(year (bibtex-text-in-field "year"))
(keywords (bibtex-text-in-field "tp:keywords"))
(title (bibtex-text-in-field "title"))
(command (format "%s -rename -f \"%s\" -t \"%s\" -a \"%s\" -k \"%s\" -y \"%s\""
(executable-find "pdf_set_info.pl") ;; script name
(expand-file-name file) title author keywords year)) )
(progn (shell-command command)
(previous-line)
(beginning-of-line)
(insert (concat "%% patched with pdf_set_info.pl %%" ))))))

Przy okazji namiar na bloga anonimowego użytkownika Emacsa zawierającego parę ciekawych rzeczy.

niedziela, 23 listopada 2008

Pdftk

PdfTk nie ma w zasobach fc8. W nowszych dystrybucjach też nie ma z uwagi na restrykcyjną licencję (znalazłem -- podobno działajacy -- rpm dla fc9 na stronie Gregory R. Kriehna, ale ja używam ciągle fc8). Nie idzie też tego skompilować: błąd zgłaszany przez gcj. Z opisu wynika, że sprawa jest trudna, bo pdftk jest źle zakodowany (I think all of us were amazed that it ever worked. That it did was by accident.:-)

Głupia sprawa... bo to przydatna aplikacja. Potrzebowałem akurat narzędzia do zmiany wpisów w słowniku Info plików PDF (pola Title, Author itp.). Znalazłem inne rozwiązanie wykorzystujące perlowy pakiet PDF::API2.

Najpierw instalacja (był dostępny w repozytoriach yuma):


yum install yum install perl-PDF-API2

Skrypt jest banalny:


#!/usr/bin/perl
use PDF::API2;
use Getopt::Long;

my $USAGE = "*** pdf_set_info -t title -k keywords -a author -f file ***\n";

GetOptions( 't=s' => \$title, 'a=s' => \$author, 'k=s' => \$keywords,
'f=s' => \$file, );

unless ($file) { print STDERR $USAGE; exit }

$pdf = PDF::API2->new;
$pdf = PDF::API2->open($file) || die "*** Problems opening $file ****";

%H = $pdf->info;
if ( $H{'Title'} ) {
print STDERR "**** Original title: $H{'Title'} ****\n";
if ($title) { $title .= " ($H{'Title'})" ; }
}

## Modyfikacja:
if ($title) { $H{'Title'} = $title }
if ($author) { $H{'Author'} = $author }
if ($keywords) { $H{'Keywords'} = $keywords }

unless ($title || $author || $keywords) { print STDERR $USAGE; exit }
%H = $pdf->info( %H );
$pdf->update;

Uruchomienie:


./pdf_set_info.pl -t tytuł -a autor -f słowa-kluczowe -f plik.pdf

Tytuł jest dodawany do tego co już jest w pliku PDF. Nie jest nadpisywany. Autor/Słowa kluczowe są nadpisywane. Uwaga: pakiet PDF::API2 nie jest mi bliżej znany, zatem trzeba uważać czy po zmianie Info plik PDF dalej da się oglądać.

piątek, 21 listopada 2008

Nowy rower MTB

Kupiłem rower MTB mając w tym temacie niewielkie doświadczenie, bo dotąd jeździłem wyłącznie rowerami szosowymi. Dzięki uprzejmości kol. kol. Bogusia L. i Daniela M. mogłem popróbować jazdy i przymierzyć się do roweru MTB. Jeden rower miał 21 calową ramę, był dość wiekowy i miał sztywny widelec. Drugi model jest nowszy -- ma amortyzator ale bez blokady skoku. Po kilku jazdach stwierdzam, że amortyzator mi niepotrzebny--wręcz przeszkadza.

Kupiłem rower 30 października w sklepie M. Szerszyńskiego w Sopocie. Zdecydowałem się na Authora Traction; zamiast amortyzatora miał być widelec sztywny. Nie chciałem ojca uczyć dzieci robić, więc nie uzgadniałem dalej co-i-jak. Rezultat nie był najlepszy: rower został wyposażony w zwykły widelec Cro-Mo, niedopasowany zupełnie do ramy.

Istnieje mianowicie coś takiego jak skok amortyzatora (ang. travel fork). Jak rozumiem jest to odległość pomiędzy amortyzatorem maksymalnie dociśniętym, a pozycją normalną. Skoki w rowerach MTB zaczynają się od 80mm. Z tego powodu koło przednie w rowerze MTB z amortyzatorem jest znacznie niżej, tj. odległość między górną krawędzią widelca a kołem jest większa niż w typowym rowerze z widelcem sztywnym. Jest większa bo się zmienia -- w maksymalnym docisku pewnie jest taka sama.

Oryginalnie Traction ma amortyzator ze skokiem 100mm i kształt ramy jest do tego dopasowany. Wstawienie zwykłego widelca o krótkich widełkach (ang. blades) dało wynik hmmm... dziwny. Rower ,,opadł'' do przodu, co zostało skompensowane monstrualną liczbą podkładek pod kierownicę. Rower wyglądał jak na pierwszym zdjęciu obok. Po pierwszej jeździe wróciłem jakbym skończył Paryż-Roubaix.

Teraz sprawy potoczyły się szybko. Wykonałem kwerendę w google, allegro i ebay na okoliczność widelcy sztywnych MTB ze szczególnym uwzględnieniem karbonowych (A co!). Widelcy metalowych o jasno podanej specyfikacji określającej długość widełek jakoś nie znalazłem. Natomiast karbonowe jak najbardziej. Klasycznie wyglądające są drogie, często tylko dla hamulców dyskowych (disc only) i także często mniejsze. Np. znalazłem na Allegro widelec Token o długości od dolnej krawędzi korony do środka piasty 415mm. Fakt, że lekki 465 g. Inny znaleziony to na Allegro f-my Boplight: długość widelca 42cm (do końca nie wiadomo co to oznacza), waga 960 g, cena 600 PLN. Mógłby ew. się nadać...

Są też widelce wyglądające jak amortyzatory: tj. duża korona i widełki przypominające golenie. Z karbonu są tylko golenie. W sklepie sugerowano taki widelec Accenta o długości 445 mm, ale ponieważ miał gołe te golenie, to do hamulców V-break należało dokupić odpowiednie adaptery. Całość 750 PLN...

Znalazłem na ebay tego typu widelce firmy eXotic. Ponieważ to jest widelec więc lepiej nie kupować byle czego ale są na blogach relacje usatysfakcjonowanych klientów (np. tu albo tutaj), na flickr.com też są zdjęcia od ludzi, którzy na tym jeżdżą. Można wybrać długość widelca w zależności od geometrii ramy -- dla ram z amortyzatorem o skoku 100mm sugerowany jest widelec o długości 445 mm (od od dolnej krawędzi korony do środka piasty). Kupiłem taki 445 mm za około 400 PLN, z dostawą z UK zapłaciłem nieco poniżej 500 PLN.

Kupiłem w środę wieczorem 5 listopada, paczka przyszła 12-tego. Pewnie byłoby jeszcze szybciej ale 11 było święto a 10 wigilia-święta-po-niedzieli więc kto by w ten dzień pracował. Kolejne zdjęcie obok pokazuje różnicę pomiędzy widelcem ,,zwykłym'' a widelcem eXotic 44,5. W piątek z pomocą kol. Rysia wymieniliśmy widelce a rower z nowym widelcem widać na trzecim zdjęciu obok. Od razu lepiej--nie ma tego frajerskiego komina podkładek pod kierownicą... (A poniżej jeszcze parę fotek dotyczących tematu.)

Po zamianie widelca rower waży 12,2 kg (z błotnikiem). Według specyfikacji Traction dla ramy 19" (ja mam 21") ma ważyć 13,2 kg. Author Modus kol. Pawła, też według specyfikacji ma ważyć 11,8 kg. Trzeba będzie przy okazji sprawdzić.

Aha, zamierzam jeszcze zmienić kierownicę na lekko giętą, ale to już bez pośpiechu.

Author Traction with stiff carbon fork
Poprawiony Traction -- widok z boku

Author Traction with stiff carbon fork
Poprawiony Traction -- widok z przodu

Dopisane 26 listopada 2008: Kierownica do tego roweru ma średnicę 25,4 mm a sztyca 31,6 mm. Trzon widelca 28,6 mm. To tak pro memoria, na wypadek gdybym chciał zmieniać a nie mógł znaleźć suwmiarki (dziś mi się to udało po dłuższych poszukiwaniach).

Dopisane 20 grudnia 2008: Tak jak zamierzałem, kierownicę wymieniłem na lekko (20mm) giętą Ritchey WCS Rizer (120 PLN z wysyłką) i mostek na Easton EA50 110mm (używany z Allegro, 43,50 PLN). Kierownica, która oryginalnie miała 66 cm została obcięta na szerokość 60 cm. Nie lubię szerokich kierownic. Wysokość kierownicy podniosła się trochę (20 mm), a mostek skrócił rower o 1cm. Teraz jest dużo lepiej...

Dokupiłem też pedały PD-M540 (110 PLN z wysyłką); stare było funkcjonalnie OK, tj. trzymały, ale łożyska były niemiłosiernie luźnie i dzwoniły przeraźliwie. Nb. nowe pedały ważą 350 g a stare były ciut cięższe: 410 g.

Będąc od zawsze użytkownikiem liczników Cateye dokupiłem też Cateye Enduro 8 (97 PLN z wysyłką).To nie koniec modyfikacji: na allego kupiłem używaną korbę XT, kasetę/łańcuch XT oraz całkiem fajne koła na obręczach Mavica 317 z piastami LX. Korby/kół jeszcze nie założyłem W sumie z oryginalnego Author Traction niewiele już zostało:-), ale nie strachu--co odpada z mojego pójdzie do roweru Miśka (koła, korba itp).

środa, 12 listopada 2008

130 tysięcy przebiegu

Z powodu awarii wynikłej z działalności MSNBota z pewnym opóźnieniem odnotowuję historyczne wydarzenie, a mianowicie, że łączny udokumentowany dystans przejechany na rowerze przeze mnie to 130,000 km. Było to dokładnie 7 listopada br.

MSNbot

Administrator gnu.univ.gda.pl, czyli kol. Wanted Sochacki zablokował dostęp do http://gnu.univ.gda.pl/~tomasz/wblog z powodu obciążenia systemu spowodowanego indeksowaniem zawartości przez MSNbota. Zwrócił też uwagę, że dla tego bota nazbyt trudne mogą być URLe generowane w zestawieniu tagów (lewy/górny róg strony, pod zdjęciem) oraz pod każdym wpisem po słowie tagi:.

Oryginalnie linki te są tworzone tak, że kliknięcie w link taga zwracało dokument, w którym tenże tag był dodany do każdego linka w zestawienia tagów i do każdego linka pod każdym wpisem. Wyglądało to jakoś tak:


http://gnu.univ.gda.pl/~tomasz/cgi-bin/blosxom.cgi?-tags=docbook,mplayer,kolibki

Co oznaczało, że wyświetlone mają być dokumenty zawierające albo docbook albo mplayer albo kolibki. W następnym kliku można było dodać następnego taga itd... Reset listy tagów w URLu następował po wybraniu taga już znajdującego się na liście. IMHO ww. sposób działania niewątpliwie generuje dużo, i w znakomitej większości zbędnych linków. [Ale -- dalej IMHO -- nie generuje nieskończonej liczby URLi ani nie tworzy pętli.]

Najbardziej oczywiste dla mnie rozwiązanie, tj. zarąbać szkodliwego a bezużytecznego intruza (parafrazując Knutha, [TeXBook, s. 299]: If you have been so devious as to use MSN, [...] you will deserve no sympathy (w oryginale chodziło o komunikat o błędzie w systemie TeX:-), nie o MSN):


# msn search bot
User-agent: msnbot
Disallow: /

z niejasnych dla mnie przesłanek zostało określone przez Kol. Wanteda jako pochopny krok. Skoro tak, to nie było innego wyjścia jak zmodyfikować sposób działania blosxom.cgi.

Żeby link do taga zwracał dokumenty zawierające ten tag, bez modyfikowania linków innych tagów zmieniłem kod wtyczki tagging w następujący sposób:

$global_tag_list .=  qq|                '' : ''). ##!!! bez ,,rekursji'' !!!
]]>

Wydaje się, że działa

sobota, 1 listopada 2008

Stójka

Stójka na rowerze. Żeby się nie przewrócić trzeba ustawić korby poziomo i skręcić kierownicę w stronę nogi wysuniętej do przodu. No i trzeba wstać z siodła, bo wtedy można balansować ciałem. Wystarczy wpisać na flickr.com track stand i można zobaczyć przykłady (jeden jest reprodukowany obok).

Formatowanie elementu optional (w Docbook XML)

W nazwiązaniu do poprzedniego wpisu. W dokumencie o XPath pojawia się taki oto fragment:

oś::test<optional>[predykat]*</optional>

Co ma oznaczać, że wyrażenie ścieżkowe XPath składa się z  osi i testu oraz opcjonalnego predykatu, który może być powtórzony wielokrotnie (stąd *). Teraz standardowo szablony XSL Docbook (aka XSLDB) zamieniają ww. fragment XML na coś takiego:

oś::test[[predykat]*]

Niezręczność polega na tym, że nawiasy kwadratowe raz są używane do oznaczania części opcjonalnej a raz oznaczają, że należy je wstawić literalnie. W XSLDB znaki wstawiane wokół elementu optional są sparametryzowane -- są to mianowicie: arg.choice.opt.open.str oraz arg.choice.opt.close.str. Zamiast `[' i `]' zdecydowałem się na U+27E8 (Mathematical left angle bracket) oraz U+27E9 (Mathematical right angle bracket) Teraz próba uruchomienia:

xsltproc --stringparam arg.choice.opt.open.str "&#x27e8;" \
--stringparam arg.choice.opt.close.str" select="&#x27e9;" ...

Kończy się błędem basha... Ciekawe czemu? Można podać ww. znaki binarnie -- wtedy wszystko działa. Ale UTF-8 w Makefile? Miałem opory, dodałem więc do arkusza uruchamiającego transformację XML → XHTML:

<xsl:param name="arg.choice.opt.open.str" select="'&#x27e8;'" />
<xsl:param name="arg.choice.opt.close.str" select="'&#x27e9;'" />

Teraz omawiany fragment wygląda mniej dwuznacznie:

oś::test⟨[predykat]*⟩

BTW w trybie nxml wpisanie &#x27e8; powoduje, że automagicznie kształt znaku pojawia się za średnikiem (ale nie jest wstawiany do tekstu -- po prostu jest to podpowiedź Emacsa, jak wygląda kształt znaku.) Dodatkowo po najechaniu myszą na encję wyświetlana jest nazwa znaku (w oknie podpowiedzi zwanym tooltip). Te ułatwienia są fajne w środowisku jednobajtowym--a ja póki co używam jako domyślnego kodowania ISO-8859-2.

Przy okazji użyteczne zestawienie znaków Unicode -- odpowiedników różnych TeXowych symboli matematycznych. Wystarczy zaznaczyć myszą i wkleić do Emacsa a następnie C-x = (what-cursor-position) wyświetli co zacz, w tym numer znaku.

SVG, Docbook i Firefox

Zaczęło się od tego, że chciałem wstawić ilustrację w formacie SVG do dokumentu redagowanego w Docbooku. Jakoś tak:

<figure id='r1' >
<title>Osie (środkowy węzeł <literal>p</literal> jest węzłem kontekstowym)</title>
<mediaobject >
<imageobject>
<imagedata width='90%' format="SVG" fileref="document-axes.svg" />
</imageobject>
</mediaobject>
</figure>

W pliku PDF wygenerowanym FOPem ilustracja wygląda OK. W dokumencie HTML oglądanym w FF 2.0.0.16 wygląda dziwnie: wyświetlany jest tylko fragment rysunku a z boku pojawia się pasek do przewijania (scrollbar). I nie idzie tego się pozbyć...

Zaktualizowałem zatem Firefoxa do wersji 3.0.3. Teraz rysunek jest wyświetlany prawidłowo. Opera 9.27 nie pokazuje go wcale, ale jeżeli pominie się atrybut width, to rysunek jest wyświetlany prawidłowo. Skoro tak to wymyśliłem sobie coś takiego:

<figure id='r1' >
<title>Osie (środkowy węzeł <literal>p</literal> jest węzłem kontekstowym)</title>
<mediaobject >
<imageobject>
<imagedata width='90%' format="SVG" fileref="document-axes.svg" />
</imageobject>
<caption condition='html'><para>Na wypadek gdyby powyższy rysunek
był niewidoczny tu jest wersja <ulink url="document-axes.png">w formacie PNG</ulink>
</para></caption>
</mediaobject>
</figure>

Powyższa uwaga w pliku PDF jest bez sensu. Na szczęście łatwo się go pozbyć, bo w Docbooku zaimplementowano warunkowe przetwarzanie dokumentu (profiling). Następujące kilkanaście atrybutów może być używanych do tego celu:

Nazwa atrybutu Opis Parameter XSL
arch Computer or chip architecture, such as i386. profile.arch
audience Intended audience of the content, such as instructor. profile.audience
condition General purpose conditional attribute, with no preassigned semantics. profile.condition
conformance Standards conformance, such as lsb (Linux Standards Base). profile.conformance
lang Language code, such as de_DE. profile.lang
os Operating system. profile.os
revision Editorial revision, such as v2.1. profile.revision
revisionflag Revision status of the element, such as changed. This attribute has a fixed set of values to choose from. profile.revisionflag
role General purpose attribute, with no preassigned semantics. Use with caution for profiling. profile.role
security Security level, such as high. profile.security
status Editorial or publication status, such as InDevelopment or draft. profile.status
userlevel Level of user experience, such as beginner. profile.userlevel
vendor Product vendor, such as apache. profile.vendor
wordsize Word size (width in bits) of the computer architecture, such as 64bit. Added in DocBook version 4.4. profile.wordsize

Teraz po wpisaniu <caption condition='html'> ... </caption> do dokumentu należy uruchomić procesor XSLT z odpowiednią wartością parametru (podanego w trzeciej kolumnie tabeli). Mówiąc konkretnie:


## Transformacja za pomocą xsltproc xml2xhtml
xsltproc --stringparam chunker.output.doctype-public "-//W3C//DTD XHTML 1.0 Strict//EN" \
--stringparam chunker.output.doctype-system http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" \
--stringparam profile.condition "html" -o plik.xhtml szablon.xsl plik.xml

## albo za pomocą procesora saxon:
saxon -o plik.fo plik.xml szablon.xsl profile.condition="pdf"

Do tego zamiast standardowego arkusza XSL-ROOT/xhtml/chunk.xsl (XSL-ROOT oznacza katalog główny dystrybucji arkuszy XSL Docbook) należy w przypadku zamiany na XHTML uruchomić XSL-ROOT/xhtml/profile-chunk.xsl. Podobnie zamieniając XML na FO/PDF należy uruchomić XSL-ROOT/fo/profile-docbook.xsl zamiast XSL-ROOT/fo/docbook.xsl. Oczywiście ww. arkusze są uruchamiane pośrednio, poprzez arkusz dopasowujący nastawy XSL Docbook do moich potrzeb. Początek tego arkusza wygląda zatem następująco:

<xsl:stylesheet 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
version="1.0" >
<xsl:import href="/usr/local/sgml/stylesheets/xmldocbook/1.72.0/xhtml/profile-docbook.xsl"/>
<!-- itd ... -->

Teraz jest tak: plik PDF jest OK. Plik XHTML nie do końca--nie widać wpisu Na wypadek gdyby powyższy rysunek.... Zasłania go rysunek; co ciekawe identycznie wygląda to w Firefoksie i Operze (tzn. identycznie nic nie widać). Relewantny fragment pliku XHTML wygląda następująco:

<div class="figure">
<a id="r1"></a> <p class="title">
<b>Rysunek 1. Osie (środkowy węzeł <code class="literal">p</code> jest węzłem kontekstowym)</b> </p>
<div class="figure-contents">
<div class="mediaobject">
<object data="document-axes.svg" type="image/svg+xml" width="90%"/>
<div class="caption">
<p>Na wypadek gdyby powyższy rysunek był niewidoczny tu jest wersja
<a href="document-axes.jpg">w formacie JPG</a> </p>
</div> </div> </div> </div>

Jeżeli się wstawi element object do elementu p, to tekst się pojawia... Ale żeby object był wewnątrz akapitu to trzeba zmienić relewantne szablony XSL Docbook; w tym przypadku nie aż tak trywialne zadanie... Poddałem się i uwagę dodałem w formie akapitu pod pod rysunkiem. Ostatecznie wygląda to tak.

Dopisane 2 listopada 2008: Wzmiankowany dokument wyświetla się w programie Exploder czy jakoś tak, tzw. czołowej firmy zupełnie kuriozalnie, mianowicie do połowy (tj. do rysunku). W związku z tym nawet ostrzeżenie: Na wypadek gdyby powyższy rysunek był niewidoczny tu jest wersja... nie jest wyświetlane, ani link do pliku PNG, ani nic po rysunku. Ci to zawsze potrafią zaskoczyć.

Firma owa uparła się bowiem ignorować standardy a wciskać na siłę swoje szajsowe rozwiązania typu VML czy jakiś EMF. Ich sprawa...