Přeskočit na hlavní obsah

Příspěvky

Stahujeme videa v Ubuntu

Tento záznam se netýká Javy, je zamířen na uživatele OS Linux. Na svých domácích počítačích používám postarší verze Ubuntu (10.04 LTS a 10.10) a pro uživatele s podobnou konfigurací zde mám návod, jak si jednoduše stahovat streamované video z různých zdrojů. Používám k tomu dva nástroje pro příkazovou řádku - program movgrab a skript tv-dl . movgrab – YouTube, Metacafe, vimeo, ... Prográmek movgrab umí stahovat z mnoha populárních zdrojů a použití je opravdu přímočaré. movgrab http://www.youtube.com/watch?v=oP59tQf_njc Movgrab není v Ubuntu repozitářích, takže k instalaci je potřeba přidat WebUpd8 PPA repozitář: sudo add-apt-repository ppa:nilarimogard/webupd8 sudo apt-get update sudo apt-get install movgrab Vlastnosti, které mě zaujaly: stahování v různých formátech (např. když na youtube je video v různých kvalitách) navázání přerušeného downloadu tv-dl – ČT, Nova, Prima, ... Z nadpisu je zřejmé, že skript tv-dl je určen pro stahování z archívů televizí vysílajíc...

Remote Notifications

Na letošním jOpenSpace jsem měl Lightning talk o tom jak jednoduše vytvořit desktopovou notifikační aplikaci, řízenou pomocí HTTP requestů. Aplikace je na pár řádků a nezávisí na žadných dodatečných knihovnách. Integruje tři nepříliš známé vlastnosti Javy: ikonka v System Tray - přidáno v Java 6 přehrání systémových zvuků (ve Windows) - od Javy 1.4 HTTP server - v Javě 6 od Sunu/Oraclu (HotSpot, OpenJDK) Ukázky zdrojového kódu a použití výsledného programu najdete v prezentaci. Prezentace na SlideShare Celý projekt naleznete pod GPL licencí na GitHubu na adrese: https://github.com/kwart/Notifier Aplikaci si můžete rovnou vyzkoušet spuštěním Notifier.jar .

jOpenSpace 2011

O víkendu proběhl další ročník tradiční (ne)konference české Java komunity jOpenSpace 2011. Tentokrát předal Šrakyi (Michal Šrajer, Inmite – znáte z Google akcí ) organizační taktovku Filemonovi (Jiří Fabián, JetMinds – znáte z CZPodcast ) a jako místo konání byly vybrány Vítkovice v Krkonoších. Základní prezentace se samozřejmě točily kolem technologií z Java světa (Spring, RPC, Graddle, Git, SQL a noSQL, JSON, Android, XMLs a Relax NG, adorované a zatracované portály, …), ale to co dělalo tuto konferenci originální jsou další témata, která vytvářela velmi inspirativní atmosféru: hands-on přímo od Oraclu – jak správně natočit pivo jak si doma postavit Boeing 737-800 programování pro Kinect s využitím Jírových aretačních misek štěstí a spokojenost završené prezentací „Veselá jehlička aneb jak udělat manželku šťastnou“ monetizace aplikací pro platformu Android již neodmyslitelná degustace vín z Bílého sklepa A protože je obrázek často za tisíc slov, hlavní body přednášek si m...

Expanze proměnných – neobjevujte kolo

Možná jste už někdy řešili problém, jak nahradit proměnné jejich hodnotou třeba v konfiguračním souboru. Například ze vstupu <app-config baseDir="${projectDirectory}"> <timeout>${timeout}</timeout> </app-config> chceme ve výsledku dostat <app-config baseDir="C:\Projects\MyApp"> <timeout>30</timeout> </app-config> Asi vás napadne využít String.replaceAll(String, String) nebo v lepším případě přímo dvojice Pattern / Matcher a capturing groups . Proč ale znovu vymýšlet kolo, když knihovna Apache Commons Lang (která by mimochodem měla být standardní součástí každého netriviálního projektu) nabízí pro daný problém přesně ty třídy, které potřebujeme. Výchozím bodem je třída StrSubstitutor , která obsahuje i statické metody pro zjednodušení v nejpoužívanějších případech: Map<String, Object> properties = new HashMap<String, Object>(); properties.put("animal", "dog"); properties.put(...

Zipujeme efektivně

Jedna ze základních vlastností Javy je práce se ZIP archívy, ať už jsou to knihovny tříd a spustitelné JARy, webové aplikace (war), nebo třeba JEE bumbrlíčci (ear). Není tedy divu, že i přímo v základním API je implementována práce s těmito archívy. Slouží k tomu třídy v balíku java.util.zip a nejzajímavější z nich jsou ZipOutputStream a ZipInputStream. Příkladem budiž vytvoření zipu: //Vytvorime Zip ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("javlog.zip")); //V Zipu chceme mit jeden textovy soubor zos.putNextEntry(new ZipEntry("priznani.txt")); //naplnime obsah textoveho souboru zos.write("Máme rádi Javu!".getBytes()); //zavrem entry (priznani.txt) zos.closeEntry(); //zavrem stream zos.close(); a jeho rozbalení: ZipInputStream zis = new ZipInputStream(new FileInputStream("javlog.zip")); ZipEntry zipEntry; //budem predpokladat, ze v ZIPu mame jen textove soubory a tak je vypisem do konzole while ((zipEntry =...

Jak na xs:anyURI v JAXB

Při práci s JAXB (Java API for XML Binding) jsem narazili na zajímavou chybu při unmarshalování. Jestliže byl typ XML elementu xs:anyURI a hodnota obsahovala na začátku, či konci mezery např. <test:Config xmlns:test="http://www.mycompany.com/test/"> <test:MyServiceUri> http://www.myserver.com/myService </test:MyServiceUri> </test:Config> pak navzdory tomu, že to bylo validní vůči dané XML Schema instanci, unmarshalovaná hodnota tohoto elementu byla null v případě cílového typu java.net.URI a nebo obsahovala i ony nežádoucí mezery v případě cílového typu String. Takže první krok k vyřešení problému bylo nahlášení chyby do Issue trackeru JAXB RI a pak nezbývalo než hledat, jak to ošetřit na mé straně než bude vydána opravená verze JAXB. Nakonec jsem použil workaround, v němž vstupní XML soubor (String, InputStream, apod.) načtu se zapnutou validací jako DOM a teprve ten předám k unmarshalování. Nechtěné mezery v DOMu mizí jako zázrakem....

Jak na CRL a jejich URL

Občas se stane, že si při práci s X509 certifikáty nevystačíte jen s možnostmi, které nabízí balík java.security.cert a rádi byste vydolovali více informací. Já jsem například řešil požadavek na získání CRL (Certificate Revocation List) souboru pro zadaný certifikát. V takovýchto případech se hodí využít kryptografickou knihovnu Bouncy Castle a pomocí ní vypreparovat třeba i střeva z vašich certifikátů. Jak tedy implementace vypadá? Nejdříve zjistíme, zda certifikát vůbec podporuje rozšíření CRLDistributionPoints a jesliže ano, máme vyhráno. Knihovna Bouncy Castle obsahuje už připravené třídy přímo pro toto rozšíření. Stačí se tedy ponořit do stromových struktur distribučních bodů a získat tak seznam URL, na kterých by měly být připraveny ke stažení CRL soubory. import java.io.IOException; import java.security.KeyStore; import java.security.cert.X509Certificate; import java.util.HashSet; import java.util.Set; import org.bouncycastle.asn1.DERString; import org.bouncycastle.asn...