Vítejte na mém smetišti poznámek a postřehů…

Nefungující zvuk ve flashi

Pokud vám Flash v prohlížeči blokuje zvukový výstup a používáte nejnovější verzi distribuce Ubuntu, která již obsahuje zvukový server PulseAudio, pak můžete tuto nepříjemnost elegantně vyřešit instalací knihovny, která přinutí Flash používat PulseAudio místo starého OSS:

apt-get install libflashsupport

A pokud si budete chtít hned tento postup vyzkoušet, doporučuji následující videa (před tím však nezapomeňte restartovat Firefox – to je snad jasné):

Videí tohoto typu je víc, stačí poklikat Related videos;-)

Nejlepší knihy o Javě

Dneska ještě hodím na blog jeden text, který jsem měl připraven již dříve. Shrnuje ty nejlepší knížky na trhu s důrazem na ty, co vyšly v češtině. Další tipy prosím připojte v diskuzi. Díky.

→ Číst dále...

Výborná Java Concurrency in Practice

Jsem zpět z dovolené, na které jsem si s chutí přečetl knížku Java Concurrency in Practice od týmu autorů v čele s Brianem Goetzem. Je v ní mnoho zajímavých věcí, z nichž je většina nepokryta předchozí literaturou. Autoři se věnují úskalím, které klade programování pomocí více vláken.

Zaujal mě problém pořadí zamykání, který může nastat v případě, že vlákna (nebo i procesy) adaptují synchronizaci pomocí blokujícího zámku. Autor vše ilustruje na dobře zvoleném příkladě – máme dva bankovní účty A a B; každá transakce musí nejprve uzamčít zdrojový účet, poté cílový a konečně může dojít k transakci. Je daný model funkční za všech situací?

Není, může dojít k problému při pořadí zamykání. Dvě vlákna mohou zároveň převádět částku z účtu A na B a také z účtu B na A. V tuto chvíli může dojít k deadlocku, kdy jedno vlákno čeká na zámek pro B a druhé pro A. Řešení je ovšem elegantní – zajistit, aby vlákna požadovala zámky vždy ve stejném pořadí. Například můžeme dát přednost účtu s nižším číslem a k situaci nikdy nedojde.

Většina textu knihy představuje na příkladech řešení daných problémů pomocí knihovny java.util.concurrent, která je od verze Javy 6.0 součástí JRE. Tato knihovna nabízí veliké množství pomůcek, jako jsou například thread pooly, task a executor framework, explicitní zámky, atomické primitivní typy a velmi zajímavé prvky neblokující synchronizace. Autoři kromě daných řešení předkládají také výkonnostní testy a analýzy. Nutno uznat, že velmi fundovanou formou.

Škoda jen, že kniha není napsána formou kuchařky. Po přečtení má člověk plnou hlavu nových myšlenek a nápadů, jak zlepšit (nejen svůj) kód. Do knihy určitě několikrát nahlédnu a mohu ji všem zájemcům o problematiku vřele doporučit.

End Of Summer - Uničov

Po dlouhé době se zase postavím za gramofony, tentokrát na Čtyřce v Uničově. Servírovat se bude zpočátku House (funky/deep), ale před blížící se půlnocí to zřejmě zlomím (Drum And Bass), protože druhá část noci se bude odehrávat v tomto duchu. Hrát začínám 21:30, kdo chce jet, tak mám volno v autě ;-)

endsummer_unicov.jpg

Náhrada za notepad.exe: WinVi

Potřeboval jsem zobrazit binární soubor a zjistil jsem, že nemám nainstalován na pracovním notebooku s Windows žádný schopný hexa-prohlížeč. Chvilku jsem googlil a jako ostříleného vimaře mě ve výsledcích hledání zaujal program WinVi. Maličký prográmek bez zbytečných závislostí (startuje opravdu bleskově) autor vytvořil jako náhradu za notepad.exe, se kterým je kompatibilní (pravděpodobně se jedná o stejné vstpní parametry a OLE/DDE). Neváhal jsem, a nahradil soubory windows\notepad.exe a windows\system32\notepad.exe tímto krasavcem, který mimo editaci ve VI kompatibilním režimu nabízí i hexadecimální pohled.

Pokud chcete menupoložku v kontextové nabídce Windows Exploreru, stačí vytvořit následující .reg soubor, upravit v něm cestu k programu a načíst ho (naimportovat do registru):

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\*\Shell\Edit wit WinVi]

[HKEY_CLASSES_ROOT\*\Shell\Edit wit WinVi\command]
@="c:\\bin\\winvi32.exe \"%1\""

Tento úžasný program je distribuován jako freeware.

Jak vygenerovat self-signed certifikát

Potřeboval jsem vygenerovat self-signed certifikát. Už jsem zde psal návod na vygenerování certifikátu podepsaného CA, takže nyní to doplním:

PASS=test
FILENAME=testcert
CERTNAME="TEST 20 YEARS"
openssl genrsa -des3 -out "$FILENAME-key.pem" -passout "pass:$PASS" 2048
openssl req -new -x509 -days 7300 -key "$FILENAME-key.pem" -out "$FILENAME-cert.pem" -passin "pass:$PASS"
openssl pkcs12 -export -in "$FILENAME-cert.pem" -inkey "$FILENAME-key.pem" -name "$CERTNAME" -out "$FILENAME.p12"

Poslední příkaz vyzve k zadání hesla (zde „test“) a zeptá se na heslo pro soubor p12.

Shortcut pro IntelliJ IDEA

S programem IntelliJ IDEA se nedodává menupoložka pro KDE/Gnome, proto jsem si ji vytvořil.

# cat ~/.local/share/applications/idea.desktop
[Desktop Entry]
Version=1.0
Encoding=UTF-8
Name=IntelliJ IDEA
GenericName=Java Development IDE
Comment=The best Java IDE on Earth
Type=Application
Categories=Development;
FilePattern=iml;ipr;iws
Exec=/opt/java/idea/bin/idea.sh %f
Terminal=false
StartupNotify=false
Icon=/opt/java/idea/bin/idea32.png

Bazaar a ukládání hesel

Pro své soukromé projekty jsem si oblíbil RCS Bazaar, který poskytuje hned několik přístupů (centralizovaný, decentralizovaný, obojí). Ačkoli jsem jistě neprozkoumal všechny možnosti tohoto nástroje (zejména jsem neměl žádné náročné konflikty), jsem nadmíru spokojen. I když je Bazaar napsán v Pythonu, je velmi svižný (když srovnám například se Subversionem), ale zatím jsem nemohl testovat na velikých projektech a pomalejších linkách. Moc se mi líbí možnost pracovat v offline režimu (kolik já už toho napsal v Pendolinu). Prima je také plná podpora binárních souborů (svn diff neumí pracovat s binárními soubory!). Doporučuji také vyzkoušet GUI pluginy – nainstalují se přímo do Bazaaru. Pro publikování svých soukromých projektů používám protokolů FTP nebo HTTPS, open-source projekty zase dávám na www.launchpad.net. Typické centralizované sezení může vypadat asi takto:

# bzr init
# bzr add
# bzr commit -m "Initial import"
# bzr push https://lzap@muj.server.cz/repos/moje_repo
# bzr bind https://lzap@muj.server.cz/repos/moje_repo

V prvním příkazu inicializujeme v aktuálním adresáři novou větev, druhým příkazem přidáme všechny soubory (mohli bychom i selektivně), třetím commitneme (zatím lokálně) první změnu, ve čtvrtém příkazu publikujeme na server větev a posledním navážeme svoji větev jako checkout. Dále můžeme pracovat v již známém režimu:

# bzr update
# bzr commit -m "Moje zmeny"

Pravda, repozitář pro centralizovaný vývoj lze inicializovat i rychleji pomocí init-repo příkazu, ale takhle jsem ukázal krásu Bazaaru. Pakliže se rozhodneme aktuální pracovní verzi „odpojit“ a vytvořit si zcela nezávislou větev, můžeme to provést jediným příkazem „unbind“ a volně přejít k distribuovanému vývoji. Moc se mi tahle myšlenka líbí. Jak ale čím dál víc používám Bazaar, tak mě omrzelo opakovaně zadávat hesla při pull/push/commit/update operacích. Řešení je snadné:

# cat ~/.bazaar/authentication.conf
[xxx-https]
scheme=https
host=www.xxx.cz
user=yyy
password=zzz
verify_certificates=no

[xxx-ftp]
scheme=ftp
host=ftp.xxx.cz
user=yyy
password=zzz

Starší zápisky >>

Diskuze

If you can't read the letters on the image, download this .wav file to get them read to you.
pridej.cz
start.txt · Poslední úprava: 29.05.2008 09:04 (external edit)
Creative Commons License Valid CSS Driven by DokuWiki Recent changes RSS feed Valid XHTML 1.0