[18] Inu, přemýšlel, ale tady na primitivním, chudém a divokém severu o něco takového asi hned tak nezakopnu. :-)
[23] Já nevím, jestli něco dělám nenormálně, nebo jestli prostě mám "smůlu". Uvedu příklad. Potřeboval jsem cosi provést s pár stovkami obrázků, a řekl jsem si, že si zkusím knihovnu IM, co se dá používat z Lua a co vypadala, že je docela malá, rychlá a šikovná. Potřeboval jsem vyříznout z každého obrázku dva výřezy (v zásadě šlo o rozdělení gray JPEG skenů dvojlistů na stránky a nějaké to zpracování - zjistit histogram, utnout kontrast, uložit do TIFF G4 - asi poměrně stupidní, ale to PDFko pak vypadá líp :-))
Inu, jak udělám výřez z obrázku? Nu asi potřebuju funkci im.ProcessCropNew, která vezme starý obrázek, souřadnice xmin, xmax, ymin a ymax a vrátí výřez. A jéje, proč to vrací obrázky s tak divnou velikostí? To jsem přeci nechtěl. Po hodině a půl hledání chyby ve vlastním kódu a v dokumentaci ("takovou blbost by přeci nikdo neudělal, a přeci nejsem první, kdo něco takového zkouší?") mě napadne podívat se do funkce im.ProcessCropNew a zjišťuji, že nový obrázek (jako datová struktura) pro výřez se alokuje s rozměry (xmax - xmin) x (xmax - ymin).
WTF? To jsem fakt první, kdo to používá? Ono se ukázalo, že im.ProcessCropNew je psaná v "pure Lua" - API téhle jinak moc pěkné knihovny se mírně liší v C a v Lua (v C API knihovny IM člověk musí dělat explicitní alokace cílových obrázků a všechny processing funkce přijímají argument "již alokovaný cílový obrázek") a možná jsem skutečně první, kdo v IM ořezává obrázek z Lua, ale vždyť číslo verze je 3.4.1...?
No, mohl bych jim už konečně poslat ten patch. A zaptat se jich ještě, jestli *opravdu* chtějí, aby crop nedovoloval ořezávání pouze v jedné dimenzi (jestli si dobře pamatuju, protestovalo to, že cílový obrázek musí být menší v obou rozměrech, takže rozdělit něco pouze svisle na dvě půlky není tak jednoduché).
No a dnes jsem třeba našel cosi shnilého v deserializaci regexpů v Ruby 1.9.1:
hgr@lamarck:~$ cat testcase.rb
#!/usr/bin/env ruby
# coding: utf-8
s = "kukačka"
r1 = Regexp.compile s
r2 = Marshal.load(Marshal.dump r1)
p r1, r2
p r1.encoding, r2.encoding
p r1 == r2
p r1.match s
p r2.match s
hagaer@laplace:~$ ruby testcase.rb
/kukačka/
/kukačka/
#<Encoding:UTF-8>
#<Encoding:UTF-8>
true
#<MatchData "kukačka">
testcase.rb:10:in `match': incompatible encoding regexp match (ASCII-8BIT regexp with UTF-8 string) (Encoding::CompatibilityError)
from testcase.rb:10:in `<main>'
hgr@lamarck:~$
Opět jsem asi první, kdo se pokouší používat deserializovaný regulární výraz v UTF-8. :-) Vždyť ten r2 o kus výše tvrdí, že je v UTF-8? Ale na tohle se budu muset zanořit hlouběji, abych tu chybku našel.
1986–1990 ZX Spectrum
1990–1994 SHARP MZ-800
1998 > PC
CP/M> MS DOS> Win3.11> Win95> WinNT> Win2000> WinXP+Linux> WinVista+Linux
Přečteno 10 326×
Přečteno 10 015×
Přečteno 9 556×
Přečteno 8 540×
Přečteno 8 109×