pátek 26. září 2014

Výhledy ze Syslíkovic nory

Jelikož nová Syslíkovic nora je spíš povahou orlí hnízdo nabízející nepřeberné množství výhledů a panoramat, množí se dotazy, co že je to, co je vidět.

V prostoru, který dřív částečně patřil k parku Lužánky a kde park přecházel do soukromých zahrad, byla v roce 1860 založena první vilová kolonie v Brně. První vily v této lokalitě navrhl brněnský stavitel Josef Arnold. Nejstarší Kaiserova vila byla postavena v roce 1860, v roce 1862 Arnoldova vila, Giskrova vila a dnes již zbořená Adamčikova vila.

Vila Tugendhat (1930)
Klenot brněnské funkcionalistické archtektury pozná většina návštěvníků a není ji potřeba asi moc představovat.
Navrhl ji Ludwig Mies van der Rohe pro manžele Fritze a Gretu Tugendhatovy na pozemku, který jim daroval Gretin otec. Tugendhatovi žili ve vile do května 1938 kdy před hrozbou války odjeli do Švýcarska. V roce 1939 vilu zabavilo Gestapo, v letech 1945-1950 zde byla soukromá taneční škola, od roku 1950 byla ve vlastnictví československého státu a do konce sedmdesátých lete zde bylo rehabilitační středisko pro děti jako součást nedaleké dětské nemocnice. V roce 1992 zde po proběhlých jednáních byla podepsána smlouva o rozdělení státu.
Od roku 1980 je vila ve vlastnictví města Brna a od roku 2012 je vila otevřena veřejnosti.

Arnoldova vila (1862)
Vila stavitele Josefa Arnolda patřila od roku 1909 Cecílii Hože, sestře Alfreda Löw-Beera, která ji v letech 1909-1915 dala upravit ve stylu art deco s prvky secese. V roce 1939 vilu zabavilo Gestapo, po válce ji vlastnil stát, po té město Brno a v letech 1952-2012 v ní byla mateřská školka.
Vila je ve špatném stavu a v roce  2012 byla zapsána na seznam nejohroženějších kulturních nemovitých památek.

Löw-Beerova vila (1903-1904)
Secesní vilu nechal postavit brněnský textilní průmyslník Moritz Fuhrmann. Tři roky po jeho smrti v roce 1910 prodali jeho synové továrníkovi Alfredu Löw-Beerovi, otci Grety Tugendhatové.
V roce 1940 vilu zabavilo Gestapo, od roku 1954 je majetkem státu a od roku 1962 zde sídlil Domov mládeže.
Vila se v současné době opravuje.

Zahradní domek Samuela Berana (1919-1920)
Letní dřevěný zahradní domek postavil pro Samuela a Hermine Beranovi na zahradě jejich vily Ernst Wiesner.
V domku využívá Ústav geoniky Akademie věd.

středa 13. srpna 2014

Vertica a historické dotazy

Sloupcová databáze Vertica má zajímavou vlastnost, která umožňuje dělat dotazy i na již neexistující data (smazaná nebo změněná).
Syntaxe vypadá tak, že se před běžný dotaz SELECT předřadí čas, ve kterém nás zajímá stav dat:

at time '2014-08-13 00:30:00' select * from moje;

Celé to funguje tak, že Vertica po operaci DELETE nemaže smazané řádky přímo, ale jenom je jako smazané označí. Operaci UPDATE Vertica implementuje jako smazání řádku a vložení nového (DELETE+INSERT).

Metadatům o smazaných řádcích Vertica říká delete vektory a jejich stav můžeme zjistit ze systémové tabulky delete_vectors:

select projection_name,sum(deleted_row_count) as deleted_row_count,floor(sum(used_bytes)/1024) as used_kb from delete_vectors group by projection_name order by projection_name;
 projection_name | deleted_row_count | used_kb 
-----------------+-------------------+---------
 moje_super      |                 5 |      16

To, jak daleko do historie Vertica "vidí", se konfiguruje pomocí parametrů HistoryRetentionTime (počet sekund) nebo HistoryRetentionEpochs (počet zpětně uchovávaných epoch). Pokud oba parametry nastavíme na -1, Vertica si bude smazaná data pamatovat navždy.

Seznam aktuálních epoch můžeme zjistit ze systémové tabulky epochs:

select * from epochs;
       epoch_close_time        | epoch_number 
-------------------------------+--------------
 2014-08-13 12:05:52.71345+02  |        16259
 2014-08-13 14:49:47.034859+02 |        16260
 2014-08-13 14:49:47.04223+02  |        16261

Pro zjištění údajů o aktuální epoše můžeme využít funkce:

select GET_AHM_TIME() as time, GET_AHM_EPOCH() as epoch;
                      time                      | epoch
------------------------------------------------+-------
 Current AHM Time: 2014-08-13 14:49:47.04223+02 | 16261

AHM znamená Ancient History Mark a je to značka, označující nejstarší uchovávanou epochu -- starší epochy je možné smazat.

AHM je možné nastavit i ručně, funkcemi SET_AHM_TIME (nastaví AHM na daný čas),
SET_AHM_EPOCH (nastaví AHM na danou epochu), MAKE_AHM_NOW (nastaví AHM na aktuální čas).

Skutečné mazání dat (PURGE) z epoch starších než AHM řídí Vertica automaticky nebo je můžeme vyvolat ručně.
O automatiku se stará komponenta Tuple mover při provádění operace mergeout -- neplést s operací moveout, která přesouvá data z Write Optimized Storage (WOS) do Read Optimized Storage (ROS).
Ruční purge můžeme provést funkcemi PURGE_TABLE (provede purge dat v dané tabulce a všech jejích projekcích), PURGE_PROJECTION (provede purge dat v dané projekci) a PURGE (provede purge v celém databázovém schématu).

sobota 8. února 2014

QR Platby v Javě

QR Platba je způsob jak do QR kódu zakódovat informace pro provedení bankovního příkazu k úhradě. Anglicky se prý QR Platba řekne SPAYD - Short Payment Descriptor. Pro generování QR Plateb v Javě existuje knihovna spayd-java, která oplývá velice nepříjemným rozhranním a není publikována do centrálního repa Mavenu.
Knihovna je pod opensource licencí Apache, takže jsem na jejím základě vyrobil knihovnu Geek SPAYD, která je orientovaná na vývojářův prožitek. Zdrojáky jsou na GitHubu a binárky v centrálním Mavenu.

neděle 14. dubna 2013

Odpustil jsem OpenJDK (a opustil Sun JDK)

Oracle se snaží seč může, aby zařízl Sun JDK ve prospěch OpenJDK, ale OpenJDK má v komunitě java vývojářů dost špatnou pověst. Přestože se mě odpor k OpenJDK také týkal, neumím přesně vysvětlit, co za ním stojí. Udělal jsem na toto téma letmou nereprezantativní anketu, a odpovědi měly společný jmenovatel: "zkoušel jsem, nefungovalo", s tím, že většina problému se týkala desktopu a SWINGu.
Shodou okolností jsem ale před časem právě na desktopu začal OpenJDK používat, a protože jsem nenarazil na žádný problém, chystám se ho vyzkoušet i na serveru. Klíčem ke štěstí je odpuštění, říká Gerald Jampolsky, ale v mém případě to bude hlavně o tom, že si instalační balíčky nebudu muset vyrábět sám, ale použiju OpenJDK, které je součástí distribuce.
Jaký je ale rozdíl mezi Sun JDK a OpenJDK? Nejmenovaný zdroj z Oracle říká, že více jak 99% zdrojových kódů je shodných, kromě částí které obsahují kód třetích stran, a které nemohly být opensourcovány (např. font resterizer).
OpenJDK také neobsahuje doplňky prohlížečů Java Plugin a Java Web Start, instalátory pro Windows nebo MacOS (podporován je zatím jenom Linux), servisní podporu (SNMP agent nebo Fligth Recorder) a speciální platformově závislá rozšíření (ucrypto security provider pro Solaris nebo Windows accessibility bridge).

středa 22. srpna 2012

Zeroturnaround: Continous Delivery webinář

Na webináři byla ukázána jednoduchá javová webová aplikace, kde ke continous delivery používali:
Zaznameníhodné záležitosti:
  • build number propagovali do maven verze artefaktů
  • všechny buildy kromě prvního byly parametrizované build číslem prvního buildu v pipeline, čímž toto číslo procházelo přes všechny fáze pipeline
  • v Nexusu měli pro každou fázi pipeline vlastní repozitář a pokud artefakt úspěšně prošel fází, do následujícího repozitáře artefakt prostě překopírovali (tj.v posledním "ready for production" bylo relativně málo artefaktů)
  • deployovali do repa nejenom war archivy, ale i další artefakty (txt soubory) a v následující fázi je z repozitáře vybírali pomocí dependency:get
Zajímavým způsobem bylo řešené zařazení manuálního testování do pipeline: mail plugin poslal QA oddělení mail, že build je možné manuálně testovat a po otestování mají kliknout na link, čímž se spustila další fáze v pipeline (pomocí buildWithParameters?xxx=yyy).

Škaredé bylo, že build příkazy pro jednotlivé fáze byly zapsané jen v konfiguraci jenkins jobů a nebyly součástí version control.

Ve výsledku to bylo opravdové continous delivery, ale celé řešení v Jenkinsu to na mě působilo strašně na koleně spíchnutým a nerobustním dojmem. Možná to bylo tím, že to celé mělo být promo na LiveRebel a ne Jenkins, i když s Jenkinsem se na webináři strávilo zdaleka nejvíc času.

středa 7. března 2012

Java tipy

Debianovský balíček java-package, který slouží k vytváření debianovských balíčků z distribučních archivů Javy, se po ukončení licence DLJ probral k životu a podporuje Sun Java 7. Musím vyzkoušet.

Eclipse ani Subversion už dlouho nepoužívám, ale co kdyby se někdy hodilo nastavení pluginu Subclipse
  • nastaveni svn+ssh
  • Linux: apt-get install libsvn-java eclipse.ini: -Djava.library.path=/usr/lib/jni
Chyba při spouštění Jetty: No suitable Log constructor - problém je v knihovně commons-logging, vyřeší překopírování webapp/WEB-INF/lib/log4j-*.jar do adresáře Jetty ext/.

pondělí 28. listopadu 2011

Oracle zakázal distribuci Sun JVM/JDK

Oracle prosazuje OpenJDK a jako způsob zvolil zrušení licence "Operating System Distributor License for Java" (DLJ), která linuxový distribucím dovolovala vzít Sun JVM/JDK a poskytovat ji uživatelům prostřednictvím distribučních balíčků. Jediným způsobem jak získat Sun JVM/JDK je jejich stažení z Oracle webu. Laxně to na svém blogu oznámil Dalibor Topic (můžete si ho pamatovat z Oracle Java Developer Conference 2011) s tím, že tím pádem končí i distribuční web http://jdk-distros.java.net/

Žádná linuxová distribuce (Debian, Ubuntu, CentOS,...) tak nesmí distribuovat balíčky s Javou 7 a možná bude nutné balíčky odebrat i z vydaných distribucí, ale především také bezpečnostní aktualizace Javy 6. Uživatelé, kteří mají nainstalované balíčky se Sun Javou, tak už neobdrží žádnou bezpečnostní aktualizaci a jejich systémy jsou tak zranitelné vůči bezpečnostním chybám.
Z unstable verze Debianu už byla odebraná Sun Java 6 a podrobně o situaci na svém blogu informuje správce debianovských balíčků. Ubuntu 11.10 (Oneiric Ocelot) už Sun Javu také neobsahuje.

Jediným způsobem jak provozovat Javu v Linuxu tak zůstává OpenJDK (i se všemi jeho nedostatky) nebo instalace po stažení z webu Oracle -- naštěstí Oracle alespoň pro Javu 7 už nepoužívá instalátor a tar.gz balíček stačí stáhnout a rozbalit do /usr/lib/jvm podle návodu.