pondělí 17. května 2010

Video encoding for Nokia 5310

I needed to encode some video clip to be played on a Nokia 5310 cell phone. After some short research and tuning I have used mencoder. Mencoder is a part of the mplayer package. Mencoder is able to use target profiles for encoding. I have created following profile to create file for Nokia 5310.

[nokia]
profile-desc="MPEG4/AAC"
vf=scale=176:-3,harddup
ovc=lavc=yes
oac=lavc=yes
lavcopts=aglobal=1:vglobal=1:vcodec=mpeg4:vbitrate=65:acodec=libfaac
af=lavcresample=44100
ofps=15
of=lavf=yes
lavfopts=format=mp4

Unfortunately I was not able to run the encoding on Linux (Fedora 12) due to limited support for licensed codecs. Running the task on Windows did the magic. After creating the configuration following commandline did the work:
mencoder source.mp4 -profile nokia -o result.mp4
Video clip playable on Nokia phone was created.

For Windows port of mplayer searches the config in following location:
%MPLAYER_INSTALATION_DIR%\mplayer\mencoder.conf

úterý 16. března 2010

... stanu se automechanikem

... protože jsem se právě dozvěděl, že oprava téměř nepojízdného auta spočívala v přehrání software řídicí jednotky. Když umím přefleshovat domací router, umím přefleshovat i Skodovku.
... a zřejmě mi nahráli novou verzi software, protože mi auto začalo radit, kdy řadit.

pondělí 8. března 2010

... ochrana proti kopírování ad absurdum

... děti dostaly novou PC hru. Proběhla instalace a ... hra nefungovala. Dožadovala se originálního CD i přesto, že bylo v mechanice. Kluci se rozčilovali a několikrát to u mě reklamovali. Zasedl jsem tedy k PC připraven na boj s větrnými mlýny. Nejdřív jsem si nechal ukázat, že se opravdu hra chová prapodivně a nepozná, že má v mechanice originální CD. Odstranění virtuální mechaniky Daemon Tools nepomohlo. Zkusil jsem tedy hru odinstalovat a znovu nainstalovat a ejhle. Na instalační obrazovce se krom tlačítka pro spuštění instalace nachází rovněž tlačítko na "instalaci patche" pro práci s dodávaným CD. Naši hoši jsou totiž typická ukázka klikálků, jako i oni sami říkají. Zásadně nečtou, co je na obrazovce napsáno a klikají zřejmě dle pocitu.

Když jsem spustil instalaci patche, nevěřil jsem svým očím. Asi to tak není, ale patch se instaloval úplně stejně, jako crack, který se dá stáhnout z netu. A to prosím z originálního CD.

.. opět, dnes již podruhé ... legrační. Legálně koupená hra obsahuje patch, kterým je modifikována/odstraněna ochrana proti kopírování.

... nemohoucí word

.. legrační věc. Soubor ve formátu novějšího MS Wordu docx se nedaří otevřít ve MS Wordu starším, jehož nativním formátem je doc. Před mizérií vysvětlování původci dokumentu, že po něm vyžaduji jiný formát, mě zachránil OpenOffice. Jinak také konkurent MS Word. .... zvláštní

čtvrtek 21. ledna 2010

... jak se zrodil "enviromentalistický" Avatar

Film Avatar způosbil poprask. Lidé vyjeveně sledují prostředí Pandory a život na téhle fiktivní planetě, soužití domorodců s přírodou vyvrácený násilným příchodem lidské rasy. To vše dodané v úhledném 3D balíčku jako by bylo na dosah ruky. Mnozí po shlédnutí filmu upadají do depresí při pomyšlení na to, že harmonický svět Pandory je pouze virtuální a nedosažitelný.

Nejen těmto lidem by asi stálo zato připomenout, kde se vlastně lákavě harmonická Pandora zrodila. Celý křehký techniky prostý svět vznikl na zhruba 1000m2 napěchovaných nejmodernější vodou chlazenou počítačovou technologií (40 000 procesorů, 104TB RAM). Zvláštní.

úterý 19. ledna 2010

... energie

Nejde proud. Bez varování se ozvalo CVAK ... a pokoj potemněl. Vzhledem k tomu, že baterka v notebooku nevydrží věru mnoho, vypnul jsem svůj pracovní nástroj. Vyšší moc mi brání v práci. Přemýšlím, co dělat. Beru do ruky knížku, na kterou si nejsem "pod proudem" schopen udělat čas. Asi je to chyba. Určitě je to chyba.

Proud krade. Krade čas, kontakt s ostatními. Vlastně se o to všechno připravuji sám.
Jaké (by) byly večery bez proudu, bez televizí, bez počítačů. Jsem už ta generace, které večery naplnila televize. Další generaci ji naplní směs elektronických bavítek.
Já ještě umím sáhnout po knize. Budou to umět i naše děti? Určitě by mohly, pokud je to naučím. Jenže to jsem asi zanedbal. Vlastním příkladem, vlastní pohodlností jsem je uvrhl do závislosti na proudu. Proudu elektrickém, proudu TV zábavy, proudu internetových dat.

Ale chtěl jsem si zaznamenat něco úplně jiného. Po nějakém čase bez energie jsem si vzpomněl, že mám v konvičce čaj. Vzal jsem ji do ruky, abych nalil voňavý čaj do hrnečku. Byla příjemně teplá. A já si uvědomil, že dříve, o hodně dříve, bych musel nasbírat dřevo, rozdělat oheň, ohřát vodu ... Dnes nedočkavě přešlapuji u rychlovarné konvice, která je někdy na můj vkus pomalá. Vlastně ... pořád si tu píšu o tom samém ...

Možná je čas stát se záškodníkem. Možná by jednou týdně takové CVAK nevadilo. Možná to zkusím. Musím koupit sirky a svíčky ... Ani jednoho se mi ve slepé víře v civilizaci doma nedostává.

PS: Je to problém čistě můj, E. si umí udělat CVAK .... půjdu k ní na školení ;-)

pátek 15. ledna 2010

iReport 3.7.0 - add conditional style mini tutorial

It took me some time to discover how to add a conditional style to a report. As I was not able to find any tutorial covering this topic here it is.

Add a style to the report (Windows->Style Library) Right click to Add a new style. Style properties can be modified in the property window. Right click on the style in Style Library to Add style to report. Once added the style is displayed in the Report Inspector window. And there we are. Right clicking the style in the Style Inspector window an option to add a condition to the style is possible. Once added an expression can be edited. Each condition can have its own set of attributes.

pondělí 4. ledna 2010

... backing up on Amazon S3

During Christmas I successfully migrated my backup procedure to use Amazon AWS. Influenced by Linux/Unix backup solution duplicity I was looking for similar solution for Windows. There is a Windows clone called Duplicati. Duplicati is implemented using C#/.NET runtime. Duplicati is a very fresh product (v1.0) but very promissing. With minor drawbacks Duplicati works as expected. I'm looking forward to future improved releases. And of course it's opensource (I have sources on my disk). A breif summary follows:

  • wide range of back-ends supported (S3 is my choice)

  • incremental delta based backup - no merged view of backups

  • minor problems when connecting to S3 - default setup has to be used - custom settings fail



Using S3 for backups seems to me as a good solution. Initial backup (almost 7GB after packing) takes a lot of time to complete. In fact - the completion required several runs. Incremental backup is pretty fast.

Now I have my files encrypted and stored on Amazon AWS and it costs $0.17*7GB = $1.19 per month.

středa 30. prosince 2009

Install Fedora 12 on Dell Latitude D630 - wifi

Update: see update for Fedora 15

After short struggling wifi is now working well. I have used ndiswrapper and Dell driver (use service tag to find it). For me it was ftp://ftp.us.dell.com/network/R242906.exe. Open the downloaded file using file-roller (archive manager) and extract bcmwl4.inf and bcmwl5.sys.
After installing ndiswrapper packages following commands installed the card:

ndiswrapper -i bcmwl5.inf
ndiswrapper -m
ndiswrapper -l


The last command shall say something similar to:
bcmwl5 : driver installed
device (14E4:4328) present (alternate driver: ssb)


Now add line ndiswrapper to /etc/modules and a line
blacklist ssb
into /etc/modprobe.d/blacklist.conf.

Try modprobe ndiswrapper now and see whether NetworkManager will detect wifi networks in the range .

pondělí 28. prosince 2009

running Bluez 4.x without GUI

Recently I have tried to run bluetooth on my Fedora12 installation. It seems bluetooth works fine only if GUI is used. BlueZ (Linux bluetooth stack implementation) heavily relies on DBUS. Unfortunately there is no support for pairing devices (PIN entry) when no GUI is available. Every post on the internet regarding non GUI bluetooth setup is just useless as it references pre 4.x bluez setup. Bluez seems to have changed a lot in 4.x versions. There is almost no documentation.

The recommended way was to use the default passkey-agent. But it seems not to work anymore.

Finaly I was able to pair may device using sample agent found in bluez sources test/simple-agent which is configurable. I have modified the source slightly to pair using constant PIN. When started the code bellow will respond with constant PIN to every pairing request. The constant PIN is 1243.

Usage: store the following code into a file. Change attributes of the file to be runnable (chmod a+x filename). Then run the script. Then you will be able to pair devices using the default PIN 1243.

#!/usr/bin/python

import gobject

import sys
import dbus
import dbus.service
import dbus.mainloop.glib

class Rejected(dbus.DBusException):
_dbus_error_name = "org.bluez.Error.Rejected"

class Agent(dbus.service.Object):
exit_on_release = True

def set_exit_on_release(self, exit_on_release):
self.exit_on_release = exit_on_release

@dbus.service.method("org.bluez.Agent",
in_signature="", out_signature="")
def Release(self):
print "Release"
if self.exit_on_release:
mainloop.quit()

@dbus.service.method("org.bluez.Agent",
in_signature="os", out_signature="")
def Authorize(self, device, uuid):
print "Authorize"
return

@dbus.service.method("org.bluez.Agent",
in_signature="o", out_signature="s")
def RequestPinCode(self, device):
print "RequestPinCode"
return "1243"

@dbus.service.method("org.bluez.Agent",
in_signature="o", out_signature="u")
def RequestPasskey(self, device):
print "RequestPasskey"
return dbus.UInt32("1243")

@dbus.service.method("org.bluez.Agent",
in_signature="ou", out_signature="")
def DisplayPasskey(self, device, passkey):
print "DisplayPasskey"
return

@dbus.service.method("org.bluez.Agent",
in_signature="ou", out_signature="")
def RequestConfirmation(self, device, passkey):
print "RequestConfirmation"
return

@dbus.service.method("org.bluez.Agent",
in_signature="s", out_signature="")
def ConfirmModeChange(self, mode):
print "ConfirmModeChange (%s)" % (mode)

@dbus.service.method("org.bluez.Agent",
in_signature="", out_signature="")
def Cancel(self):
print "Cancel"

def create_device_reply(device):
print "New device (%s)" % (device)
mainloop.quit()

def create_device_error(error):
print "Creating device failed: %s" % (error)
mainloop.quit()

if __name__ == '__main__':
dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
print "Step 1"

bus = dbus.SystemBus()
print "System bus acquired"

manager = dbus.Interface(bus.get_object("org.bluez", "/"),
"org.bluez.Manager")
print "manager acquired"

path = manager.DefaultAdapter()
print "Manager path acquired"

adapter = dbus.Interface(bus.get_object("org.bluez", path),
"org.bluez.Adapter")
print "adapter acquired"

path = "/my/agent"
agent = Agent(bus, path)
print "Agent object created"

mainloop = gobject.MainLoop()
print "Main loop created"

adapter.RegisterAgent(path, "NoInputNoOutput")
print "Agent registered"

print "Starting loop"
mainloop.run()

#adapter.UnregisterAgent(path)
#print "Agent unregistered"

pondělí 21. prosince 2009

... boot from USB with non USB BIOS

Willing to boot an old computer with no BIOS support for USB boot and the only media you have is a flash thumb drive. If it happens and you face such problem take a look at PLoP.

You can install the boot loader in many different ways. My case: Windows were installed on the target PC. I installed bootloader using plpgenbtldr-0.7.zip according to its readme. Rebooted .... and ... computer is booting using USB flash.

středa 16. prosince 2009

Problém s ASUS 500g Premium

Dlouhou dobu využívám ASUS 500g Premium. Včera přestal fungovat. Seděl si u okna a z ničeho nic přestal reagovat. Zdálo se, že se z něj stala nepotřebná cihlička (brick). Všechny kontrolky všech síťových portů svítily, WAN a POWER kontrolka byly zhasnuté, krabička nereagovala. Mrtvo.

Začal jsem zkoušet, dokonce jsem se uchýlil k "PIN 9" triku, kterým se má zařízení zresetovat do továrního nastavení. Nic nepomohlo. Hledal jsem a hledal až jsem našel informaci o problémech se zdrojem, které se měly projevovat stejně jako ty mé.

A problém byl vyřešen. Mezi mnoha zdroji, které se mi doma potulují jsem objevil jeden, který vyhovoval jak elektricky (5V/2.5A), tak konektorem a huráááá.

Moje oblíbená krabička se rozeběhla. Následkem předchozích pokusů sice zcela vymazaná, ale zato teď běží se zbrusu novou verzi systému OpenWRT Kamikaze 8.09.2, která mimo jiné zřejmě vyřešila problematickou kvalitu signálu adoptované Atheros WiFi karty.

středa 2. prosince 2009

... italské minuty

Po příletu došlo k zásadnímu odhalení. Bylo mi vyjeveno, proč se prasečí chřipka jmenuje prasečí. Na Milánském letišti při čekání na zavazadlo se ukázalo, ze v ochranu před touto zákeřnou o to více však neškodnou nemocí lidé berou respirátory, které jim dávají vzhled čuněte s rypákem.

V zápětí, lehce rozčilen přeháněním hrozby chřipkou, mě italský taxi řidič vyškolil v oboru úcty k životu a zdraví, když mi názorně ukázal, jak značky omezující rychlost přeměnit ve zbytečné dekorace, jak nakouknout do kufru auta vpředu jedoucího a na závěr mistrovské dílo v několika reprízách s názvem: "Plná čára není zeď. A to ani tehdy, kdy za zatáčku fakt není vidět".

Dnes večer itálie vytála žolíka v podobě večeře ještě bohatší, než lze vyjádřit slovem opulentní:

  • pršut se zeleninou

  • brokolicový závin

  • "sekaná" s dušenou kapustou

  • zelenina smažená v těstíčku

  • polenta se sýrovou pěnou

  • taštičky s dýňovou náplní

  • rizoto

  • panenka pečená v listovém těstě

  • zákusky 3 druhů (čokoládový řez, banánový řez, kávové cosi)

  • espresso

  • a k tomu všemu dobré vínko



Uffff .. jdu trávit

úterý 17. listopadu 2009

... trable s licenčním ujednáním

Poklidnou hladinu světa IT tu a tam zčeří informace o bezpečnostní díře v tom kterém prgrámku, tu a tam šplouchne vlnka rozbrojů mezi zastánci různých platforem a v poslední době čím dál častějí hladinu povážlivě rozkymácí události spojené s duševním vlastnictvím, patentováním a kradením myšlenek a obecných postupů a v neposlední řadě i SW pirátství.
Jedna taková vlnka došplouchla až na mě skrze firemní správce více či méně úspěšně spouštějící kontroly SW čistoty na mém notebooku. Nepřipraveného mě zastihl dotaz kolegy, zda nevím, jestli na firemním notebooku může mít ovladače k domácí tiskárně a skeneru v jednom.

Odpověď jsem neznal, ale obecně zaujat touto oblastí jsem nahlédl do licenčního ujednání HP kteréžto firmy výrobek (PSC 1510) vlastním. Licenční ujednání v češtině, aby člověk pohledal. Pohledá li, neuspěje. S vděkem vzpomínaje na třídního učitele z gymnázia, angličtináře, jsem pročetl licenční ujednání. A ... světe div se! Zjistil jsem, že jsem SW pirát. Licenční ujednání k ovladačům pro toto zařízení (a všecha obdobná) obsahuje tuto větu:
HP grants you a license to Use one copy of the HP Software. V překladu: HP uděluje licenci k použití jedné kopie software HP. Mám dva počítače. Na obou mám instalovaný ovladač k mé tiskárně. Jsem pirát.

Na zákaznické lince HP mi bylo řečeno (po konzultaci s kolegou "co tomu rozumí"), že si klidně mohu SW instalovat na více počítačů, pokud ho nebudu prodávat.

Jak se zdá, ne vždy platí, že "Co je psáno, to je dáno". Tak takhle to právní povědomí nevybudujeme, soudr.... pánové. Sám autor SW vám radí, abyste se jeho licenčním ujednáním neřídili. Jak máme vědět, že jindy to ale opravdu myslí vážně. A nebo hůře. Co když jen říká: "Nech to být" a jednoho dne přijde a ukáže prstem. Těžko říci, co je horší...

... ale nejhorší jsou stejně trpaslíci, co všude vlezou

středa 11. listopadu 2009

... sleepless night full of programming and debugging

I didn't sleep last night. There is a nasty bug in the Java XML parser. Under certain circumstances (inherited default namespace with together with attributes present) the parser presents a rich imagination. In this case an element namespace properties are wrong. No namespace URI is assigned to the element and the null namespace is attached.
As a result when serialized extra namespace definition appears xmlns="" and as a result the element is not bound to any namespace. A colleague of mine performed an excellent analysis of the problem.

Here is a result of the sleepless night (traverseDom method walk the tree recursively calling processNode on each node:

traverseDom(doc.getDocumentElement(),
new NodeProcessor() {
public void processNode(Node n) {
//TODO watch this in case the java xml parser will get better in future versions
//TODO watch this for general purpose XML signature processing where such elements may be legal
//fix parser error - we can afford this as no element is unqualified
// in case there is a unqualified element with some attributes with default null namespace
// it is concidered as an error produced by buggy parser
if (n.getNodeType()==n.ELEMENT_NODE &&
n.getAttributes().getLength()!=0 &&
n.isDefaultNamespace(null) &&
n.getNamespaceURI()==null){
String prfx=n.lookupPrefix(n.getParentNode().getNamespaceURI())
n.getOwnerDocument().renameNode(n,
n.getParentNode().getNamespaceURI(), prfx+":"+n.getLocalName());
}
}
}, true);

pátek 30. října 2009

... zamrzlý statista

... určitě znáte scény z filmů a pohádek, kdy se zastaví čas. Svět je z ničeho nic plný zamrzlých statistů a jen pár vyvolených se mezi řadami nehybných postav prohání stojícímu času navzdory. V této sezóně poprvé na bruslích jsem tohle zažil v reálném životě. Mezi poklidně více či méně stabilně se klouzajícími bruslaři se jak vítr mezi stromy prohání pár bohem nadaných létajících kluků a holek. Oni poráží čas a snad i fyzikální zákony a létají křídel nemaje. No a hádejte, do které skupiny jsem patřil já ;-)

sobota 3. října 2009

Klábosilův noční přesun 2009

Poprvé jsem se téhle příjemné akce zúčastnil v roce 1993, jak prozradila startovní listina všech historických účastníků (cca 2000 osob) od prvního ročníku do letošního 16. Mezi těmito ročníky mám absenci.

Letos tedy po 16 letech další účast s rodinou. V půl deváté večer už pod rouškou tmy jsme byli naloženi do autobusu a dle pokynu si zavázali šátky na oči. Pak už se jelo levá zatáčka, pravá zatáčka, přejezd. Pátrání v paměti, kam že by nás to mohli vézt a pak už výsadek. Na křižovatce v lese jsme nasbírali indicie a podle nalezeného itineráře jsme se dali na pochod. Bylo 21:25.

Nebe se postupně vyjasňovalo a na volných prostranstvích zalitých světlem měsíce téměř v úplňku jsme si připadali málem jako na polední procházce. Baterek nebylo potřeba i stíny měsíc dokázal vykreslit.

Párkrát přišla ke slovu buzola a pochod napříč lesem podle azimutu, častěji se nám podařilo najít vyšlapanou nebo vyjetou cestičku, silnici nebo koleje. Postupně jsme si každý našel také svou vlastní louži, kam se nám noha zabořila až po kotník.

Před čtvrtou hodinou ranní nám patřily všechny kontroly a už před námi na stole voněl cílový gulášek. Před pátou už v posteli jsme litovali účastníky pochodu, kteří se ještě potulovali po trase.

Naše patnáctikilometrová trasa:

čtvrtek 1. října 2009

... naletěl jsem - nečekané pokračování

Nedávno jsem si tu poplakal, jak jsem v jedné nejmenované ČSOB rušil účet a naletěl jsem. Ta legrace mě stála 240Kč, které jsem vyhodil za zrušení účtu na pobočce. Bez varování a upozornění od osobní bankéřky. Za zrušení přes internet banking dáte 8x méně.

Již jsem si své závěry udělal a smířil jsem se s tím, že jsem hlupák. Když tu včera zazvonil telefon a já uslyšel hlas ze záhrobí. Osobní bankéřka. A že prý mi končí výpovědní lhůta za týden a že mi tedy bude zrušen účet... a..... Už jsem byl připraven jí slušně poděkovat za případné nabídky dalších služeb.

Jenže ona řekla něco, co mě přivedlo do varu: "Na vašem účtu je bohužel záporný zůstatek, takže se nedá zrušit."

Následoval zhruba takovýto hovor:

Já:"Já vím naprosto přesně, proč je na mém účtě záporný zůstatek. Překvapivě jste mi naúčtovali 6xzrušení souhlasu s inkasem po 40 korunách. Rušil jsem účet osobně na pobočce a přijde mi silně neetické, že jste mě neupozornila, že jedním podpisem, který já jsem považoval za formalitu, přijdu o více jak 200 korun. V každém obchodě musí mít cedulku s cenou i u obyčejného rohlíku, jen v bance ne."

OB (osobní bankéřka): "Nepovažovala jsem za nutné vás s tím seznamovat. Někteří klienti tohle neřeší."

Já: "Mě tedy více jak 200 korun nepřijde jako zanedbatelná částka, kterou bych nechtěl řešit. Moje chyba byla, že jsem neznal sazebník, nebo spíše, že jsem si neověřil jeho detaily, ale čekal bych, že tuto zásadní informci dostanu od vás. Vaše postupy se mi nelíbi a znovu opakuji, že mi přijdou silně neetické."

OB:"Tohle já vyřešit nemohu. Budu to muset předat paní ředitelce."

Já: "Předejte to prosím paní ředitelce. Rád si s ní o tom promluvím. A kolik vlastně dělá dluh?"

OB: "Jedenáct korun. A nějaké poplatky k tomu"

Já: "Předejte to prosím paní ředitelce."

No a to je zhruba celé. Bohužel jsem neměl tolik duchapřítomnosti, abych bance řekl, že když jim nepřipadalo podstatné mi sdělit, že mě oholí o 240 korun, mě zas je celkem jedno, že mám u nich dluh ve výši korun jedenácti. S nějakými těmi dodatkovými poplatečky, samozřejmě. A taky uročíček zanedbatelný kontokorentní by se jistě našel.

... pokračování příště ... buď po hovoru s paní ředitelkou, nebo až dorazí upomínka/exekuce? kdo ví....

středa 30. září 2009

Translate LANGID to human readable string from

I needed to display language settings of a Windows system. No utility was available in the wild. Here I present and offer a simple utility which displays language string acquired by GetSystemDefaultLangID() and GetUserDefaultLangID(). Source included for any use.

Well no easy way how to attach file. Just a source for now:
/*
This code is public domain. No restriction to use for any purpose.
*/
#include "stdafx.h"
#include "displaylang.h"
#include

typedef struct _langinfo {
int id;
char *desc;
char *code;
char *scriptTag;
char *ansiCP;
} LangInfo;

LangInfo table[]={
{0x0436,"Afrikaans (South Africa)","af-ZA","Latn","1252"},
{0x041c,"Albanian (Albania)","sq-AL","Latn","1252"},
{0x0484,"Windows Vista and later: Alsatian (France)","gsw-FR"," "," "},
{0x045e,"Windows Vista and later: Amharic (Ethiopia)","am-ET"," ","Unicode only"},
{0x1401,"Arabic (Algeria)","ar-DZ","Arab","1256"},
{0x3c01,"Arabic (Bahrain)","ar-BH","Arab","1256"},
{0x0c01,"Arabic (Egypt)","ar-EG","Arab","1256"},
{0x0801,"Arabic (Iraq)","ar-IQ","Arab","1256"},
{0x2c01,"Arabic (Jordan)","ar-JO","Arab","1256"},
{0x3401,"Arabic (Kuwait)","ar-KW","Arab","1256"},
{0x3001,"Arabic (Lebanon)","ar-LB","Arab","1256"},
{0x1001,"Arabic (Libya)","ar-LY","Arab","1256"},
{0x1801,"Arabic (Morocco)","ar-MA","Arab","1256"},
{0x2001,"Arabic (Oman)","ar-OM","Arab","1256"},
{0x4001,"Arabic (Qatar)","ar-QA","Arab","1256"},
{0x0401,"Arabic (Saudi Arabia)","ar-SA","Arab","1256"},
{0x2801,"Arabic (Syria)","ar-SY","Arab","1256"},
{0x1c01,"Arabic (Tunisia)","ar-TN","Arab","1256"},
{0x3801,"Arabic (U.A.E.)","ar-AE","Arab","1256"},
{0x2401,"Arabic (Yemen)","ar-YE","Arab","1256"},
{0x042b,"Windows 2000 and later: Armenian (Armenia)","hy-AM","Armn","Unicode only"},
{0x044d,"Windows Vista and later: Assamese (India)","as-IN"," ","Unicode only"},
{0x082c,"Azeri (Azerbaijan, Cyrillic)","az-Cyrl-AZ","Cyrl","1251"},
{0x042c,"Azeri (Azerbaijan, Latin)","az-Latn-AZ","Latn","1254"},
{0x046d,"Windows Vista and later: Bashkir (Russia)","ba-RU"," "," "},
{0x042d,"Basque (Basque)","eu-ES","Latn","1252"},
{0x0423,"Belarusian (Belarus)","be-BY","Cyrl","1251"},
{0x0445,"Windows XP SP2 and later: Bengali (India)","bn-IN","Beng","Unicode only"},
{0x201a,"Windows XP SP2 and later (downloadable); Windows Vista and later: Bosnian (Bosnia and Herzegovina, Cyrillic)","bs-Cyrl-BA","Cyrl","1251"},
{0x141a,"Windows XP SP2 and later: Bosnian (Bosnia and Herzegovina, Latin)","bs-Latn-BA","Latn","1250"},
{0x047e,"Breton (France)","br-FR","Latn","1252"},
{0x0402,"Bulgarian (Bulgaria)","bg-BG","Cyrl","1251"},
{0x0455,"Not supported: Burmese"," "," "," "},
{0x0403,"Catalan (Catalan)","ca-ES","Latn","1252"},
{0x0c04,"Chinese (Hong Kong SAR, PRC)","zh-HK","Hant","950"},
{0x1404,"Windows 98/Me, Windows XP and later: Chinese (Macao SAR)","zh-MO","Hant","950"},
{0x0804,"Chinese (PRC)","zh-CN","Hans","936"},
{0x1004,"Chinese (Singapore)","zh-SG","Hans","936"},
{0x0404,"Chinese (Taiwan)","zh-TW","Hant","950"},
{0x101a,"Windows XP SP2 and later: Croatian (Bosnia and Herzegovina, Latin)","hr-BA","Latn","1250"},
{0x041a,"Croatian (Croatia)","hr-HR","Latn","1250"},
{0x0405,"Czech (Czech Republic)","cs-CZ","Latn","1250"},
{0x0406,"Danish (Denmark)","da-DK","Latn","1252"},
{0x048c,"Windows XP and later: Dari (Afghanistan)","gbz-AF","Arab","1256"},
{0x0465,"Windows XP and later: Divehi (Maldives)","dv-MV","Thaa","Unicode only"},
{0x0813,"Dutch (Belgium)","nl-BE","Latn","1252"},
{0x0413,"Dutch (Netherlands)","nl-NL","Latn","1252"},
{0x0c09,"English (Australia)","en-AU","Latn","1252"},
{0x2809,"English (Belize)","en-BZ","Latn","1252"},
{0x1009,"English (Canada)","en-CA","Latn","1252"},
{0x2409,"English (Caribbean)","en-029","Latn","1252"},
{0x4009,"Windows Vista and later: English (India)","en-IN","Latn","1252"},
{0x1809,"English (Ireland)","en-IE","Latn","1252"},
{0x2009,"English (Jamaica)","en-JM","Latn","1252"},
{0x4409,"Windows Vista and later: English (Malaysia)","en-MY","Latn","1252"},
{0x1409,"English (New Zealand)","en-NZ","Latn","1252"},
{0x3409,"Windows 98/Me, Windows 2000 and later: English (Philippines)","en-PH","Latn","1252"},
{0x4809,"Windows Vista and later: English (Singapore)","en-SG","Latn","1252"},
{0x1c09,"English (South Africa)","en-ZA","Latn","1252"},
{0x2c09,"English (Trinidad and Tobago)","en-TT","Latn","1252"},
{0x0809,"English (United Kingdom)","en-GB","Latn","1252"},
{0x0409,"English (United States)","en-US","Latn","1252"},
{0x3009,"Windows 98/Me, Windows 2000 and later: English (Zimbabwe)","en-ZW","Latn","1252"},
{0x0425,"Estonian (Estonia)","et-EE","Latn","1257"},
{0x0438,"Faroese (Faroe Islands)","fo-FO","Latn","1252"},
{0x0464,"Windows XP SP2 and later (downloadable); Windows Vista and later: Filipino (Philippines)","fil-PH","Latn","1252"},
{0x040b,"Finnish (Finland)","fi-FI","Latn","1252"},
{0x080c,"French (Belgium)","fr-BE","Latn","1252"},
{0x0c0c,"French (Canada)","fr-CA","Latn","1252"},
{0x040c,"French (France)","fr-FR","Latn","1252"},
{0x140c,"French (Luxembourg)","fr-LU","Latn","1252"},
{0x180c,"French (Monaco)","fr-MC","Latn","1252"},
{0x100c,"French (Switzerland)","fr-CH","Latn","1252"},
{0x0462,"Windows XP SP2 and later (downloadable); Windows Vista and later: Frisian (Netherlands)","fy-NL","Latn","1252"},
{0x0456,"Windows XP and later: Galician (Spain)","gl-ES","Latn","1252"},
{0x0437,"Windows 2000 and later: Georgian (Georgia)","ka-GE","Geor","Unicode only"},
{0x0c07,"German (Austria)","de-AT","Latn","1252"},
{0x0407,"German (Germany)","de-DE","Latn","1252"},
{0x1407,"German (Liechtenstein)","de-LI","Latn","1252"},
{0x1007,"German (Luxembourg)","de-LU","Latn","1252"},
{0x0807,"German (Switzerland)","de-CH","Latn","1252"},
{0x0408,"Greek (Greece)","el-GR","Grek","1253"},
{0x046f,"Windows Vista and later: Greenlandic (Greenland)","kl-GL","Latn","1252"},
{0x0447,"Windows XP and later: Gujarati (India)","gu-IN","Gujr","Unicode only"},
{0x0468,"Windows Vista and later: Hausa (Nigeria, Latin)","ha-Latn-NG","Latn","1252"},
{0x040d,"Hebrew (Israel)","he-IL","Hebr","1255"},
{0x0439,"Windows 2000 and later: Hindi (India)","hi-IN","Deva","Unicode only"},
{0x040e,"Hungarian (Hungary)","hu-HU","Latn","1250"},
{0x040f,"Icelandic (Iceland)","is-IS","Latn","1252"},
{0x0470,"Igbo (Nigeria)","ig-NG"," "," "},
{0x0421,"Indonesian (Indonesia)","id-ID","Latn","1252"},
{0x085d,"Windows XP and later: Inuktitut (Canada, Latin)","iu-Latn-CA","Latn","1252"},
{0x045d,"Windows XP SP2 and later (downloadable); Windows Vista and later: Inuktitut (Canada, Syllabics)","iu-Cans-CA","Cans","Unicode only"},
{0x083c,"Windows XP SP2 and later (downloadable); Windows Vista and later: Irish (Ireland)","ga-IE","Latn","1252"},
{0x0410,"Italian (Italy)","it-IT","Latn","1252"},
{0x0810,"Italian (Switzerland)","it-CH","Latn","1252"},
{0x0411,"Japanese (Japan)","ja-JP","Hani;Hira;Kana","932"},
{0x044b,"Windows XP and later: Kannada (India)","kn-IN","Knda","Unicode only"},
{0x043f,"Windows 2000 and later: Kazakh (Kazakhstan)","kk-KZ","Cyrl","1251"},
{0x0453,"Windows Vista and later: Khmer (Cambodia)","kh-KH","Khmr","Unicode only"},
{0x0486,"Windows Vista and later: K'iche (Guatemala)","qut-GT","Latn","1252"},
{0x0487,"Windows Vista and later: Kinyarwanda (Rwanda)","rw-RW","Latn","1252"},
{0x0457,"Windows 2000 and later: Konkani (India)","kok-IN","Deva","Unicode only"},
{0x0812,"Windows 95, Windows NT 4.0 only: Korean (Johab)"," "," "," "},
{0x0412,"Korean (Korea)","ko-KR","Hang;Hani","949"},
{0x0440,"Windows XP and later: Kyrgyz (Kyrgyzstan)","ky-KG","Cyrl","1251"},
{0x0454,"Windows Vista and later: Lao (Lao PDR)","lo-LA","Laoo","Unicode only"},
{0x0426,"Latvian (Latvia)","lv-LV","Latn","1257"},
{0x0427,"Lithuanian (Lithuania)","lt-LT","Latn","1257"},
{0x082e,"Windows Vista and later: Lower Sorbian (Germany)","dsb-DE","Latn","1252"},
{0x046e,"Windows XP SP2 and later (downloadable); Windows Vista and later: Luxembourgish (Luxembourg)","lb-LU","Latn","1252"},
{0x042f,"Windows 2000 and later: Macedonian (Macedonia, FYROM)","mk-MK","Cyrl","1251"},
{0x083e,"Windows 2000 and later: Malay (Brunei Darussalam)","ms-BN","Latn","1252"},
{0x043e,"Windows 2000 and later: Malay (Malaysia)","ms-MY","Latn","1252"},
{0x044c,"Windows XP SP2 and later: Malayalam (India)","ml-IN","Mlym","Unicode only"},
{0x043a,"Windows XP SP2 and later: Maltese (Malta)","mt-MT","Latn","1252"},
{0x0481,"Windows XP SP2 and later: Maori (New Zealand)","mi-NZ","Latn","1252"},
{0x047a,"Windows XP SP2 and later (downloadable); Windows Vista and later: Mapudungun (Chile)","arn-CL","Latn","1252"},
{0x044e,"Windows 2000 and later: Marathi (India)","mr-IN","Deva","Unicode only"},
{0x047c,"Windows XP SP2 and later (downloadable); Windows Vista and later: Mohawk (Canada)","moh-CA","Latn","1252"},
{0x0450,"Windows XP and later: Mongolian (Mongolia)","mn-Cyrl-MN","Cyrl","1251"},
{0x0850,"Windows Vista and later: Mongolian (PRC)","mn-Mong-CN","Mong","Unicode only"},
{0x0461,"Windows XP SP2 and later (downloadable); Windows Vista and later: Nepali (Nepal)","ne-NP","Deva","Unicode only"},
{0x0414,"Norwegian (Bokmål, Norway)","nb-NO","Latn","1252"},
{0x0814,"Norwegian (Nynorsk, Norway)","nn-NO","Latn","1252"},
{0x0482,"Occitan (France)","oc-FR","Latn","1252"},
{0x0448,"Oriya (India)","or-IN","Orya","Unicode only"},
{0x0463,"Windows XP SP2 and later (downloadable); Windows Vista and later: Pashto (Afghanistan)","ps-AF"," "," "},
{0x0429,"Persian (Iran)","fa-IR","Arab","1256"},
{0x0415,"Polish (Poland)","pl-PL","Latn","1250"},
{0x0416,"Portuguese (Brazil)","pt-BR","Latn","1252"},
{0x0816,"Portuguese (Portugal)","pt-PT","Latn","1252"},
{0x0446,"Windows XP and later: Punjabi (India)","pa-IN","Guru","Unicode only"},
{0x046b,"Windows XP SP2 and later: Quechua (Bolivia)","quz-BO","Latn","1252"},
{0x086b,"Windows XP SP2 and later: Quechua (Ecuador)","quz-EC","Latn","1252"},
{0x0c6b,"Windows XP SP2 and later: Quechua (Peru)","quz-PE","Latn","1252"},
{0x0418,"Romanian (Romania)","ro-RO","Latn","1250"},
{0x0417,"Windows XP SP2 and later (downloadable); Windows Vista and later: Romansh (Switzerland)","rm-CH","Latn","1252"},
{0x0419,"Russian (Russia)","ru-RU","Cyrl","1251"},
{0x243b,"Windows XP SP2 and later: Sami (Inari, Finland)","smn-FI","Latn","1252"},
{0x103b,"Windows XP SP2 and later: Sami (Lule, Norway)","smj-NO","Latn","1252"},
{0x143b,"Windows XP SP2 and later: Sami (Lule, Sweden)","smj-SE","Latn","1252"},
{0x0c3b,"Windows XP SP2 and later: Sami (Northern, Finland)","se-FI","Latn","1252"},
{0x043b,"Windows XP SP2 and later: Sami (Northern, Norway)","se-NO","Latn","1252"},
{0x083b,"Windows XP SP2 and later: Sami (Northern, Sweden)","se-SE","Latn","1252"},
{0x203b,"Windows XP SP2 and later: Sami (Skolt, Finland)","sms-FI","Latn","1252"},
{0x183b,"Windows XP SP2 and later: Sami (Southern, Norway)","sma-NO","Latn","1252"},
{0x1c3b,"Windows XP SP2 and later: Sami (Southern, Sweden)","sma-SE","Latn","1252"},
{0x044f,"Windows 2000 and later: Sanskrit (India)","sa-IN","Deva","Unicode only"},
{0x1c1a,"Windows XP SP2 and later: Serbian (Bosnia and Herzegovina, Cyrillic)","sr-Cyrl-BA","Cyrl","1251"},
{0x181a,"Windows XP SP2 and later: Serbian (Bosnia and Herzegovina, Latin)","sr-Latn-BA","Latn","1250"},
{0x0c1a,"Serbian (Serbia, Cyrillic)","sr-Cyrl-CS","Cyrl","1251"},
{0x081a,"Serbian (Serbia, Latin)","sr-Latn-CS","Latn","1250"},
{0x046c,"Windows XP SP2 and later: Sesotho sa Leboa/Northern Sotho (South Africa)","ns-ZA","Latn","1252"},
{0x0432,"Windows XP SP2 and later: Setswana/Tswana (South Africa)","tn-ZA","Latn","1252"},
{0x045b,"Windows Vista and later: Sinhala (Sri Lanka)","si-LK","Sinh","Unicode only"},
{0x041b,"Slovak (Slovakia)","sk-SK","Latn","1250"},
{0x0424,"Slovenian (Slovenia)","sl-SI","Latn","1250"},
{0x2c0a,"Spanish (Argentina)","es-AR","Latn","1252"},
{0x400a,"Spanish (Bolivia)","es-BO","Latn","1252"},
{0x340a,"Spanish (Chile)","es-CL","Latn","1252"},
{0x240a,"Spanish (Colombia)","es-CO","Latn","1252"},
{0x140a,"Spanish (Costa Rica)","es-CR","Latn","1252"},
{0x1c0a,"Spanish (Dominican Republic)","es-DO","Latn","1252"},
{0x300a,"Spanish (Ecuador)","es-EC","Latn","1252"},
{0x440a,"Spanish (El Salvador)","es-SV","Latn","1252"},
{0x100a,"Spanish (Guatemala)","es-GT","Latn","1252"},
{0x480a,"Spanish (Honduras)","es-HN","Latn","1252"},
{0x080a,"Spanish (Mexico)","es-MX","Latn","1252"},
{0x4c0a,"Spanish (Nicaragua)","es-NI","Latn","1252"},
{0x180a,"Spanish (Panama)","es-PA","Latn","1252"},
{0x3c0a,"Spanish (Paraguay)","es-PY","Latn","1252"},
{0x280a,"Spanish (Peru)","es-PE","Latn","1252"},
{0x500a,"Spanish (Puerto Rico)","es-PR","Latn","1252"},
{0x0c0a,"Spanish (Spain)","es-ES","Latn","1252"},
{0x040a,"Spanish (Spain, Traditional Sort)","es-ES_tradnl","Latn","1252"},
{0x540a,"Windows Vista and later: Spanish (United States)","es-US"," "," "},
{0x380a,"Spanish (Uruguay)","es-UY","Latn","1252"},
{0x200a,"Spanish (Venezuela)","es-VE","Latn","1252"},
{0x0430,"Not supported: Sutu"," "," "," "},
{0x0441,"Windows 2000 and later: Swahili (Kenya)","sw-KE","Latn","1252"},
{0x081d,"Swedish (Finland)","sv-FI","Latn","1252"},
{0x041d,"Swedish (Sweden)","sv-SE","Latn","1252"},
{0x045a,"Windows XP and later: Syriac (Syria)","syr-SY","Syrc","Unicode only"},
{0x0428,"Windows Vista and later: Tajik (Tajikistan)","tg-Cyrl-TJ","Cyrl","1251"},
{0x085f,"Windows Vista and later: Tamazight (Algeria, Latin)","tmz-Latn-DZ","Latn","1252"},
{0x0449,"Windows 2000 and later: Tamil (India)","ta-IN","Taml","Unicode only"},
{0x0444,"Windows XP and later: Tatar (Russia)","tt-RU","Cyrl","1251"},
{0x044a,"Windows XP and later: Telugu (India)","te-IN","Telu","Unicode only"},
{0x041e,"Thai (Thailand)","th-TH","Thai","874"},
{0x0851,"Windows Vista and later: Tibetan (Bhutan)","bo-BT","Tibt","Unicode only"},
{0x0451,"Windows Vista and later: Tibetan (PRC)","bo-CN","Tibt","Unicode only"},
{0x041f,"Turkish (Turkey)","tr-TR","Latn","1254"},
{0x0442,"Windows Vista and later: Turkmen (Turkmenistan)","tk-TM","Cyrl","1251"},
{0x0480,"Windows Vista and later: Uighur (PRC)","ug-CN","Arab","1256"},
{0x0422,"Ukrainian (Ukraine)","uk-UA","Cyrl","1251"},
{0x042e,"Windows Vista and later: Upper Sorbian (Germany)","wen-DE","Latn","1252"},
{0x0820,"Urdu (India)","tr-IN"," "," "},
{0x0420,"Windows 98/Me, Windows 2000 and later: Urdu (Pakistan)","ur-PK","Arab","1256"},
{0x0843,"Windows 2000 and later: Uzbek (Uzbekistan, Cyrillic)","uz-Cyrl-UZ","Cyrl","1251"},
{0x0443,"Windows 2000 and later: Uzbek (Uzbekistan, Latin)","uz-Latn-UZ","Latn","1254"},
{0x042a,"Windows 98/Me, Windows NT 4.0 and later: Vietnamese (Vietnam)","vi-VN","Latn","1258"},
{0x0452,"Windows XP SP2 and later: Welsh (United Kingdom)","cy-GB","Latn","1252"},
{0x0488,"Windows Vista and later: Wolof (Senegal)","wo-SN","Latn","1252"},
{0x0434,"Windows XP SP2 and later: Xhosa/isiXhosa (South Africa)","xh-ZA","Latn","1252"},
{0x0485,"Windows Vista and later: Yakut (Russia)","sah-RU","Cyrl","1251"},
{0x0478,"Windows Vista and later: Yi (PRC)","ii-CN","Yiii","Unicode only"},
{0x046a,"Windows Vista and later: Yoruba (Nigeria)","yo-NG"," "," "},
{0x0435,"Windows XP SP2 and later: Zulu/isiZulu (South Africa)","zu-ZA","Latn","1252"},
{-1,NULL,NULL,NULL,NULL}};


LangInfo findLangInfo(int id){
int i=0;
for(i=0; table[i].id!=-1 && table[i].id!=id; i++);
return table[i];
}

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

LangInfo system=findLangInfo(GetSystemDefaultLangID());
LangInfo user=findLangInfo(GetUserDefaultLangID());

MessageBoxA(NULL,system.desc,"System default language", MB_OK);
MessageBoxA(NULL,user.desc,"User default language",MB_OK);
}

úterý 22. září 2009

... drobky ze CIA


Při cestách internetem jsem narazil na jednu zajímavou příručku. S trochou nadsázky lze ji lze nazvat "Co všechno jste chtěli vědět o sabotážích, ale báli jste se zeptat".
Pochází z dob druhé světové války a byla vydána v USA organizací, jež je předchůdcem CIA. Pro angličtiny znalé tedy trocha zajímavého čtení.

http://www.gutenberg.org/files/26184/page-images/26184-images.pdf