Porto – prechádzka

20.8.2011
Je už relatívne neskoro (polnoc) ale ešte niečo odblogujem, lebo bohvie ako to bude s Internetom v Santiagu. Vlak mi ide zajtra 7:55, takže s hostela musím vyraziť 6:30 (AU!).

Ráno som si dal tradičný hostelový breakfast – toast s lekvárom a vyrazil som do ulíc. Môj prvý cieľ bol nájsť knižnicu Livraria Lello, ktorá mala byť kdesi blízko môjho hostela. Asi 20 min som sa motkal okolo toho istého námestia, kým som to objavil, spýtal som sa asi dvoch ľudí hovoriacich čisto po portugalsky, kývajúc hlavou, že rozumiem ich inštrukciám a potom sa motkajúc tak isto ako predtým. Ale tie drevené schody stáli za to. Veľmi pozoruhodná a originálna stolárska práca. Potom som zišiel dole ku rieke a šiel som popri nej pešo až k oceánu. Chvíľu som posedel pri majáku a potom som šiel plážou až k Matosinhos. Po ceste som videl toto, nejak som tomu nevenoval pozornosť, myslel som, že je to nejaká náhodná spleť káblov. Až teraz jak sem dávam linky z wikipedie, tak vidím, že je to nejaká socha. Na konci pláže som vošiel vyhladovelý do prvého fastfoodu a dal som si Francesinhu, ktorej som sa prežral do predvýbuchového stavu. Prešiel som pár blokov k zastávke metra v Matosinhos, zistil som, že lístok, ktorý som išiel z letiska mi ešte platí, pretože som si ho “nevalidoval” (po našom: necvakol) a teda včera som šiel z letiska vlastne na čierno. Nuž, ale môže za to ten ochotný ujo na letisku, ktorý ma na túto podstatnú vec neupozornil. Odviezol som sa ku Casa da Música, celkom zaujímavý architektonický výplod. Okrem zaujímavosti budovy je zaujímavá aj úprava dlažby okolo nej. V rohoch parcely vyhradenej tejto budove sa dvíha do svahu, čím sa zjavne stáva zaujímavou pre miestnu skejťač a bicigľač. Od tohto som prešiel cez park s akýmsi stĺpom s akousi zverou na vrchu, kde som si nachvíľu ľahol na lavičku s miestnymi bezdomovcami a turistami a potom som šiel ku tomuto. Nie som si teraz istý či sa to volá Palácio de Cristal, alebo je to niečo iné. Odtiaľto som šiel pešo do hostela, bolo cca 5 hodín a ja som bol unavený jak otrok. Po výdatnom šlófiku som šiel na recepciu pre nejaké cestovné tipy ako sa dostanem do Santiaga a potom som šiel opäť von. Podarilo sa mi získať pohľadnicu a známku ako som chcel, napriek tomu, že bola sobota cca 7 hodín, takže aj druhá babka dostane pohľadnicu (keď pošlete pohľadnicu jednej, musíte aj druhej, viete ako to chodí…) Vyšťavený som sadol na jeden expresný čerstvo vytlačený pomarančový juice. Obsluha nevedela po anglicky, ale ľudia tu vo všeobecnosti rozumejú španielsky, takže som si celkom zvykol okamžite po nevydarenom anglickom prihovorení prepnúť na španielčinu. Potom som sa znova musel ísť pozreť z toho starého mostu, ten pohľad je proste úžasný, chvíľu som posedel na druhej strane rieky čumiac na ten skvost extreme engineeringu až kým som nedostal ukrutnú chuť na pivo, ktoré som si chcel zakúpiť v nejakej krčmičke blízko štvrte s mojim hostelom aby som bol schopný rýchlo príjemne odkvecnúť. Zakempil som v uličke kde sa akurát chystalo nejaké free premietanie kina, dokonca anglicky s portugalskými titulkami, čiže by sa to aj dalo sledovať, ale bolo to až za 10 min tak som zatiaľ zabehol do podniku asi 10m odtiaľ, ktorý sa volal “Plan B”, hral tam veľmi príjemný nujazzíček, tak som si tam k pivu otvoril knižku a ďalšiu hodinu som odtiaľ nevyliezol, až kým sa mi z toho príjemného koženého kresla v ktorom som sedel nezačal neskutočne zaparovať zadok. Potom som už fičal do hostela, pred spaním sa ešte podeliť s týmto na blogu…

Najbližšie dni (viacmenej až do Bilbaa) plánujem správať sa viac nízkonákladovo (po slovensky low-budgetovo), ale uvidíme jak sa mi to podarí… Takže je možné že budem chvíľu bez Internetu. Dôležité nudné detaily sa však nestratia, všetko si budem zapisovať na papier… akurát je možné, že sa publikujú trochu neskôr. Zatím..

Rím, Porto

19.8.2011
Ty kokos prečo sa tie tri krásne baby nemohli nasťahovať do mojej izby v Ríme o deň skôr? No nevadí aj tak sa necítim na nejaké sociálne interagovanie, mám na hube obrovský opar a vyzerám ako keby som mal lepru. Celé dnešné doobedie bolo o dostaní sa na letisko a úspešnom odletení do Porta. Po chvíli blúdenia na vlakovej stanici Termini sa mi podarilo nájsť Šatl. Tentokrát ma šatl nevyšiel nič (normálne stojí 4-6 EUR) lebo zhodou okolností sa predomnou bol akýsi japonec opýtať, či môže vrátiť lístky a oni že nie a tak potom odišiel a keď začul, že si pýtam lístok na CIAMPINO (letisko) tak mi rezignovane dal svoj (dokonca dva). Mám rád Japoncov.

Web check-in s Ryanairom je úplne to isté ako normálny check-in, akurát namiesto bežnej letenky nosíte so sebou vytlačený papier. Aj tak je vždy niekde ujo/teta, ktorej odovzdávate bagáž. Neprítomnosti tohto uja a miesta jasne označeného spoločnosťou a číslom letu som sa bál najviac. Myslel som si, že sa budem musieť hlásiť v nejakom generickom baggage drop pointe kde bude riziko, že moja batožina bude cestovať na iný svetadiel ako ja.

Odlet z Ríma sa udial za poludňajšej svetelnosti a viditeľnosti, tak som si ešte z lietadla mohol znovu vychutnať niektoré pamiatky – rozoznal som akurát Sv. Petra a tú tehlovú tortu. Lietadlo spoločnosti Ryanair, typický lowcostový Boeing 737 nebolo vôbec také zlé ako sa o ňom povráva.

Nad Portom bolo tiež veľmi pekné počasie a z okienka som mal možnosť pozrieť si vtáčí pohľad na cetrum. Od prvého momentu ako som vystúpil z lietadla v Porte, šlo všetko 100krát hladšie ako v Ríme. Ruksak som dostal hneď, pri východe mi usmievajúca sa tetula dala do ruky praktickú mapku mesta (Obrigada- poďakovala mi ona, že som bol ochotný si ju vziať) Pri automatoch na lístky na metro stál ochotný (!!!toto nie je samozrejmosť!!!) týpek, ktorému som povedal kam chcem ísť (Sao Bento) a on mi kúpil lístok. Chcel som ísť na zastávku z ktorej naviguje Oporto Poet’s Hostel svojich návštevníkov a čeknúť si, či tam náhodou nemajú miesto. Keď sme pred tromi rokmi boli v Lisabone v ich pobočke, bol som z toho hostela nadšený. Samozrejme ako som bohužial tušil nemôže zas všetko 100% vychádzať – nemali túto noc voľno. Ale veľmi milá a ochotná recepčníčka mi vyhľadala ďalšie hostely v okolí. Najprv mi na mapku nakreslila jednu bodku. Povedal som jej, že pre istotu ju poprosím aby mi tam dala ešte jeden backup. Nakoniec sa celkom rozbehla a z hlavy tam nabodkovala asi 7 hostelov. Nebolo treba. Prvý tip, ktorý mi dala – Gallery Hostel, ktorý bol asi 8 min. pešo odtiaľ mal voľno a úplne ma očaril. Majú tu aj terásku s lehátkami na streche, galériu, bar, knižnicu a kinomiestnosť! Keď som sa dotešil z dobrého hostelového dílu šiel som sa do mesta najesť a potom sa trochu poprechádzať. Kým som neobjavil most Luja Prvého, tak som bol z Porta iba priemerne nadšený, ale akonáhle som uvidel ten výhľad z neho, tak si ma Porto okamžite získalo. Je to jedna z najkrajších mestečkovských scenérií. Potom som sa tam šiel prejsť ešte v noci a bolo to rovnako čarovné. Večer bola moja hlavná misia ísť okoštovať portské víno. Misia bola úspešne splnená so záverom, že portské víno nemusím. Je to taký sladký, korenistý vermutoid. Aby som si bol istý dal som si jeden pohárik v dvoch krčmách, každá na inej strane rieky. Červené som mal desaťročné SANDEMAN a biele som mal akési neznáme suché. Každopádne ma to príjemne unavilo a pozbavilo chutí riešiť akýkoľvek nightlife.

Zajtra sa chcem vybrať niekam ďalej smerom k pláži.

Brno, Rome

17.8.2011
Potom ako som trochu ochorel na Grape Festivale vyzeralo to už s mojim odchodom všeliako ale našťastie som chorobu (špinu jednu) pokoril behom cca dvoch dní. Brucho ma pobolievalo ešte deň pred odletom (čiže včera) ale dnes som už presvedčený, že to boli len príznaky cestovnej nervozity.
Budova Brnenského letiska Tuřany. Je celkom zaujímavá. Taký hovnivalček. Prišiel som samozrejme v brutálnom predstihu 2 hodiny pred odletom, v ček-ine som čakal iba minimálnu radu a aj tá bola dokonale skrátená sledovaním módnych trendov v paralelnej rade letiacej do londýna. Legíny. Keď je mladé hipsterča v legínach a vyplňuje ich elegantnými krivkami odpúšťam aj tie sprofanované Rejbeny.
Let s Wizzairom som enjoyoval, dokonca som si opäť pozrel aj bezpečnostné pokyny ukázané kolegou Kubem. Celú cestu som čumel von oknom, vychytal som pohľad na celkom pohľadný západ slnka.
O Ríme som asi pred hodinou nevedel ešte absolútne nič, na letisku v Brne som si prečítal úvod PDF-ka od Lonely Planet a samozrejme, že som sa hneď chcel ísť “ponárať do atmosféry starovekej metropoly” a okamžite som chytil pocit že nestíham za jeden deň nič. Tak som zrušil svoj pôvodný plán, že z letiska Fiomicino pôjdem prvú noc prespať do malého plážového mestečka a rozhodol som sa vyraziť priamo do centra. Po pristátí som si otvoril výtlačok nejakého nachytro skompilovaného zoznamu hostelov z Wikitravel a začal som obvolávať, že či majú voľný dorm. Po cca 8mom odmietnutí alebo nefungujúcom čísle mi už začínalo lepiť, ale nakoniec sa ozvala jakási milá tetula a povedala, že majú voľné. Tak som sa jej spýtal, ako sa k nim dostanem a ona, že musím zobraž Šatl z letiska na “Termini” (vlaková stanica). Kým som zistil ako si vybavím šatl tak som asi dvoje zmeškal a odišiel som z letiska po dvoch hodinách ponevierania sa tam jak taký sociotrt. Keď som došiel do hostela tak mi povedali, že medzitým už voľnú izbu nemajú (tú lacnú, drahú samozrejme mali), našťastie si ma hneď po vystúpení z autobusu odchytil hostelový mokrček a ponúkol mi nejaký ďalší hostel. Nevyzeralo to tak štýlovo ako ten predošlý, ale bol o 5e na noc lacnejší, tak som si povedal, že celkom dobrý díl (na to, že je to moja jediná možnosť). V Ríme bolo brutálne teplo, nikde som nevidel teplomer ale odhadujem to na dobrých 30 stupňov. Po ubytovaní som si povedal, že ešte nezaspím, tak som sa šiel prejsť. Kúpil som si pivo do ruky a pustil som sa na okružnú prechádzku po asi najškaredšej možnej trase (moje urbanisticko estetické vnímanie bolo rozostrené asi) – niečo ako keby som sa v BA prechádzal v okolí hlavnej stanice. Ale pivo bolo celkom dobré (btw zaujímavy 2tretinový formát 0.66 litra), uspalo ma presne ako som očakával.

18.8.2011
Ráno som vstal cca 8:30, celkom vzorne, ako správny pamiatkochtivý turista. Chviľu som musel zháňať našich indických recepčných aby som si predplatil ďalšiu noc (jeden z nich spal v našej izbe ale nemal som srdce ho budiť). Nakoniec som jedného našiel v kuchynke, kde mi ponúkol raňajky. Je zaujímavé ako je v hostelovej terminológii posunutý pojem “Raňajky”. Tu to znamenalo jeden malý koláčik a asi deci džúsu.
Potom som sa už pustil do pešej cesty po meste – btw celý deň som šiel pešo a ani raz som nepoužil žiadny dopravný prostriedok – a prešiel som toho fakt dosť – musím sa potľapkať po ramene.

Vo všeobecnosti hodnotím Rím ako jedno veľké múzeum. Kebyže som človek zaujímajúci sa o architektúru, alebo ešte nebodaj jej históriu, tak z Ríma serem tri dni v kuse. Mňa múzeá takých starých vecí (< 16. stor) veľmi nevzrušujú, ale tu zavážila moja druhá obľuba – Extreme engineering. Dajú sa tu nájsť dosť veľké stavby zaujímavých tvarov, takže aj moja stavbárska duša bola na mieste.

Piazza della Repubblica – veľká budova jak hovado + veľké námestie jak hovado => Pekné
Monumento a Vittorio Emanuele II – poprevyumelkovávaná megalománia -tak veľké až pekné
taká oblasť všeliakých zrúcanín pri koloseu, docela nuda, ale človek má pocit, akokeby chodil vo filme Gladiátor.
Koloseum – krásna veľká okrúhla brutalita, dnu som sa samozrejme nepchal, bola tam dvojhodinová rada
Potom som sa prešiel po rieke smerom k Vatikánu.
Basilica S. Pietro – mega, tak toto teraz ovláda Racinger ?
Pri s.Pietrovi som naivne prešiel security checkom, dokonca som bol aj spôsobilý čo sa môjho oblečenia týka (slečinka s ramienkami vedľa mňa nebola) ale pred bránou som zistil, že by som tam zakempil asi na ďalšie 2h kebyže chcem ísť donútra, tak som si povedal, že do Racingerovho humna tentokrát nemusím.
Poslal som babke do Hornej Súče pohľadnicu z Vatikánu a šiel som het. vo vatikáne som sa ešte stihol zastaviť na fastfood pizzu. jem si ju opretý o stenu nejakej historickej budovy a zrazu jeb! osral ma holub za krk. keď som sa pozrel hore a videl tam toho hajzla, hneď mi bolo jasné čo sa stalo, ale pokojne som dojedol posledný kúsok chrbtom som sa snažil byť decentne stále oproti stene. potom som však musel zahodiť veškeré dekórum, dať si pred plnou ulicou turistov dolu tričko a utreť si z neho hovno. To ten vatikánsky holub robí určite len ateistom, pambíčkar jeden zasratý!
…anyway
Castel sant Angelo – veľká tehlová torta
Piaza del Popolo – menší s.Pietro
villa Medici + jakási záhrada – tam som si asi hodinu poležal na lávke
potom som sa tak nejak domotkal až k Pantheonu – môj favorit celého mesta. Krásna vec aj zvonku aj zvnútra, proste kukal som na to s otvorenou hubou asi 10 min zvonku a 20min zvnútra. Je to obyčajných pár stĺpov s obyčajnou strechou pred obyčajnou kupolou ale je to zväčšené na veľkosť našej bytovky (objemovo?) – krásne. Po pantheone som si povedal, že som pamiatkovo ukojený a šiel som si dopriať nejakú typickú taliansku véču. Zvolil som čerstvé cestoviny (niečo ako polievkové slíže teplanskej babky) a červené víno(merlot). mohlo byť a ani som neplatil nejak katastrofálne veľa(17e) a cítil som sa ako bonviván – samozrejme predstavoval som si, že som oblečený v nejakej ružovkastej námorníckej košielke s previazaným svetríkom a nie v holubom osranom tričku.
Po večeri som si povedal, že pamiatok bolo dosť, a idem na hostel a idem si niečo zistiť o Porte atď, takže tak. Neviem, či budem mať vždy čas niečo napísať na net počas celej cesty, lebo notebook som si so sebou výnimočne nevzal – odmenou je mi krásne ľahký batoh, váži niečo do 15kg.
Ak v Portugalsku a Španielsku bude dosť internetových kaviarní s dobrou klávesnicou a kde už prosím pekne panenka mária skákavá sedembolestná opustili Internet Explorer (ahá teraz mi to došlo vlastne v historickom centre ríma je možno zvyk používať aj historický softvér!) – tak snáď ešte napíšem – ešte počas cesty.

Parser pre slovnik.sk

Vedeli ste, že slovník na stránke slovník.sk je momentálne celkom jednoducho parsovateľný ? Samozrejme ak to začne niekto zneužívať predpokladám, že to páni vývojári zmenia, ale momentálne sa dá celkom jednoducho dotazovať vďaka rozumnému formátu URL pri dotazovaní cez HTTP GET. Je to z programatického hľadiska oveľa prehľadnejšie ako napríklad taký cestovný poriadok na cp.sk. Tutok je môj java kód, na odoslanie jedného dotazu. Určite by sa to dalo napísať aj krajšie a vôbec som to netestoval, to len tak pre demonštračné účely.



package sk.linhard.slovnik;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Parser for slovnik.sk
 @author Michal Linhard
 *
 */
public class SlovnikRequest {
  public static class SlovnikTranslation {
    private String from;
    private String[] to;

    public SlovnikTranslation(String aFrom, String[] aTo) {
      from = aFrom;
      to = aTo;
    }
    
    public String getFrom() {
      return from;
    }
    
    public String[] getTo() {
      return to.clone();
    }
  }
  
  public static final String DEFAULT_URL = "http://slovnik.azet.sk";
  
  private String term;
  private String lFrom;
  private String lTo;
  
  /**
   * Create a request object.
   @param aTerm Term to search for
   @param aLangFrom Language to translate from
   @param aLangTo Language to translate to
   */
  public SlovnikRequest(String aTerm, String aLangFrom, String aLangTo) {
    term = aTerm;
    lFrom = aLangFrom;
    lTo = aLangTo;
  }
  
  private String encodeReqURL(String aTerm, String aLangFrom, String aLangTo) {
    StringBuffer sb = new StringBuffer();
    sb.append(DEFAULT_URL);
    sb.append("/?q=");
    sb.append(aTerm.replace(' ''+'));
    sb.append("&l=");
    sb.append(aLangFrom);
    sb.append("-");
    sb.append(aLangTo);
    return sb.toString()
  }
  
  private String slurp (InputStream inthrows IOException {
    try {
      StringBuffer out = new StringBuffer();
      byte[] b = new byte[4096];
      for (int n; (n = in.read(b)) != -1;) {
          out.append(new String(b, 0, n, "UTF-8"));
      }
      return out.toString();
    finally {
      if (in != null) {
        in.close();
      }
    }
  }
  
  private List<String> findPTables(String src) {
    return findTags(src, "<table class=\"p\">""</table>");
  }
  
  private List<String> findTableRows(String src) {
    return findTags(src, "<tr>""</tr>");
  }
  
  private List<String> findTags(String src, String tagBegin, String tagEnd) {
    List<String> r = new ArrayList<String>();
    int idx = src.indexOf(tagBegin);
    while (idx != -1) {
      int idxend = src.indexOf(tagEnd, idx);
      if (idxend == -1) {
        throw new RuntimeException("tag not ended");
      }
      r.add(src.substring(idx + tagBegin.length(), idxend));
      idx = src.indexOf(tagBegin, idxend);
    }
    return r;
  }
  
  public SlovnikTranslation[] perform() {
    try {
      URL u = new URL(encodeReqURL(URLEncoder.encode(term, "UTF-8"), lFrom, lTo));
      System.out.println("---- QueryURL: " + u.toString() " ----");
      List<SlovnikTranslation> result = new ArrayList<SlovnikTranslation>();
      String input = slurp(u.openStream());
      for (String eachPtable : findPTables(input)) {
        String termFrom = null;
        List<String> toTerms = new ArrayList<String>();
        for (String row : findTableRows(eachPtable)) {
          Matcher mTR = Pattern.compile(
              "<td class=\"z\"[^>]*>\\s*(.*)\\s*</td>\\s*" +
              "<td class=\"sipka\">\\s*&nbsp;&rarr;&nbsp;\\s*</td>\\s*" +
              "<td class=\"do\"[^>]*>(.*)\\s<a[^>]*>[^<]*</a>\\s*" +
              "<div[^>]*>[^<]*</div>\\s*</td>", Pattern.DOTALL).matcher(row);
          if (mTR.find()) {
            if (termFrom == null) {
              termFrom = mTR.group(1);
            }
            toTerms.add(mTR.group(2));
          else {
            System.out.println("TERMS NOT FOUND FOR ROW: " + row);
          }
        }
        if (termFrom != null && !toTerms.isEmpty()) {
          result.add(new SlovnikTranslation(removeSpans(termFrom), toTerms.toArray(new String[toTerms.size()])));
        }
      }
      return result.toArray(new SlovnikTranslation[result.size()]);
    catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
  
  private String removeSpans(String atermFrom) {
    Matcher m = Pattern.compile(
        "[^<>]*<span>([^<>]*)<span class=\"highlight\">([^<>]*)</span>([^<>]*)</span>[^<>]*")
        .matcher(atermFrom);
    if (m.matches()) {
      return new StringBuffer().append(m.group(1)).append("|").append(m.group(2)).append("|").append(m.group(3)).toString();
    else {
      return atermFrom;
    }
  }
  
  public static void main(String[] argsthrows Exception {
    SlovnikTranslation[] result = new SlovnikRequest("žena""sk""es").perform();
    for (SlovnikTranslation t : result) {
      System.out.println("---- translation of \"" + t.getFrom()+"\" ----");
      for (String s : t.getTo()) {
        System.out.println(s);
      }
    }
  }
}


JBoss automatic startup in Ubuntu 9.10

I come from Windows background, where I start and stop my development app server instance conveniently from Eclipse and view the server and app log directly as the standard console output.

JBoss has been running on my linux server for about 4 months now, but I never found time to make it start automatically at system startup. I had to start it manually with run.sh all the time. Now when I’m transferring it to other hardware and system and I’m configuring everything all over again, I decided finally to settle this matter once and for all. I’m runnig JBoss AS 5.0.1 GA. So this is the story. It uses my real directories, because I don’t want to spoil the narration by expressions like %JBOSS_HOME%.

My JBoss resides in /data/server/jboss and the configuration I’m running is default” (of course I edited it for my purpose, and mostly it is based on “web” configuration).

So the main startup script is /data/server/jboss/bin/run.sh

I edited /data/server/jboss/bin/run.conf to my liking (set the JAVA, JAVA_HOME vars, set 512MB memory via JAVA_OPTS and added pluggable-instrumentor.jar for JBoss AOP)

Then I took /data/server/jboss/bin/jboss_init_redhat.sh and copied it to /etc/init.d/jboss. The command that adds the symlinks to the /etc/rc?.d directories looks like this:

sudo update-rc.d -f jboss start 84 2 3 4 5 . stop 15 0 1 6 .

The numbers 84 for start(S) links and 15 for stop(K) links are taken from a JBoss community howto page.

But the update-rc.d script didn’t like it, because it missed some “LSB Information“. So I added this and my final script looked like this:

#!/bin/sh
#
# Modified JBoss Control Script

### BEGIN INIT INFO
# Provides:          jboss
# Required-Start:    $local_fs $syslog $network $named
# Required-Stop:     $local_fs $syslog $network $named
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start JBoss
# Description:       Starts JBoss Server
### END INIT INFO

#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"/data/server/jboss"}

#define the user under which jboss will run, or use 'RUNASIS' to run as the current user
JBOSS_USER=${JBOSS_USER:-"misoli"}

#make sure java is in your path
JAVAPTH=${JAVAPTH:-"/usr/lib/jvm/java-6-openjdk"}

#configuration to use, usually one of 'minimal', 'default', 'all'
JBOSS_CONF=${JBOSS_CONF:-"default"}

JBOSS_HOST="linux"
JBOSS_JNP_PORT="1099"

#if JBOSS_HOST specified, use -b to bind jboss services to that address
JBOSS_BIND_ADDR=${JBOSS_HOST:+"-b $JBOSS_HOST"}

#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"}

#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF $JBOSS_BIND_ADDR"}

if [ "$JBOSS_USER" = "RUNASIS" ]; then
 SUBIT=""
else
 SUBIT="su - $JBOSS_USER -c "
fi

if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
 # ensure the file exists
 touch $JBOSS_CONSOLE
 if [ ! -z "$SUBIT" ]; then
 chown $JBOSS_USER $JBOSS_CONSOLE
 fi
fi

if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
 echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
 echo "WARNING: ignoring it and using /dev/null"
 JBOSS_CONSOLE="/dev/null"
fi

#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}

JBOSS_CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
JBOSS_CMD_STOP=${JBOSS_CMD_STOP:-"java -classpath $JBOSSCP org.jboss.Shutdown --shutdown -s $JBOSS_HOST:$JBOSS_JNP_PORT"}

if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
 export PATH=$PATH:$JAVAPTH
fi

if [ ! -d "$JBOSS_HOME" ]; then
 echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
 exit 1
fi

echo JBOSS_CMD_START = $JBOSS_CMD_START

case "$1" in
start)
 cd $JBOSS_HOME/bin
 if [ -z "$SUBIT" ]; then
 eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &
 else
 $SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &"
 fi
 ;;
stop)
 if [ -z "$SUBIT" ]; then
 $JBOSS_CMD_STOP
 else
 $SUBIT "$JBOSS_CMD_STOP"
 fi
 ;;
restart)
 $0 stop
 $0 start
 ;;
*)
 echo "usage: $0 (start|stop|restart|help)"
esac

Please note that jboss should be run under it’s own user e.g. jboss. For convenience reasons I’m using my regular username, which is a little less safe.

Main gotchas that I’ve encountered

1. The main JBoss community site that explains this process said, that on most linux systems JBoss should run on runlevel 3, but that’s not the case with Ubuntu, where the normal (all features on) runlevel is 2.

2. For shutdown to work properly I had to add the command line option -s server:port to the shutdown part of the script, and turn on the JNP service. For me that meant setting the Port attribute for mbean “jboss:service=Naming” to the value 1099 (from original value -1, which is set in configuration “web” on which I based my “default”) in the file /data/server/jboss/server/default/conf/jboss-service.xml

Of course, for the oblivious, /etc/init.d/jboss has to be executable (chmod +x).

I also made a handy little shortcut for log viewing command: tail -20 /data/server/jboss/server/default/log/server.log (which is also conveniently viewable by Ubuntu util System > Administration > Log File Viewer as I discovered)

Pozor na podpisovanie binárnych reťazcov …

Tak som si znova študoval čosi o digitálnych podpisoch. Len tak na okraj, že prečo preboha: Vyvíjam zrovna Java klientskú aplikáciu, ktorú by som rád distribuoval ako applet alebo cez Java Web Start. Kvôli náture aplikácie sa však potrebujem pripojiť na vzdialený server, čo je však Java Runtimom považované za citlivú operáciu a keď kód chce bežať ako applet alebo cez Java Web Start, tak je pod dohľadom otravného security managera a ten takéto operácie neoblomne zamieta hádzaním security exsepšien (genitív množného čísla od anglického slova exception). Jednoduchým spôsobom ako toto vyriešiť je svoj kód podpisovať, čo znamená mať svoj pár kľúčov, certifikát atď atď.

Tak som si znova načítal wikipeďácku stránku http://en.wikipedia.org/wiki/Digital_signature a začal po 467. krát študovať. Matematika ohľadom kryptografie v PKI schéme mi do hlavy nejde vôbec, ale samotná schéma je celkom jednoduchá a jasná akurát, že vždy zabudnem detaily typu kedy sa z čoho robí hash, čo sa k čomu prikladá a tak.

Potom som si vygúglil, že čo by momentálne mohla byť moja certifikačná autorita a celkom ma potešilo zistiť, že už aj v našej malebnej krajine máme celkom dobrú ponuku. Kukal som firmu Disig, ktorá ponúka zaujímavé produkty, certifikované od NBÚ. Už aj veci ako čipovú kartu alebo usb kľúč na ukladanie privátneho kľúča sa ponúkajú v cenách ktoré si môže dovoliť aj bežný kostelový človek ako ja.

Neviem prečo, ale dostal som chuť prečítať si slovenský zákon o elektronickom podpise, že čo by som tak mohol ešte robiť zo svojím zaručeným elektronickým podpisom, kebyže si ho kúpim od nejakej CA.

Ale čo ma najviac zaujalo na celom tomto researchi bol článok (PDF tuná) na ktorý som sa dostal cez spomínanú wikipedia stránku, ktorý hovoril o jednom zaujímavom spôsobe (z milión iných) ako kompromitovať digitálny podpis.

Ide o to, že to čo sa vlastne pri digitálnom podpise podpisuje je sekvencia bitov. Pre nás samotná táto sekvencia nemá valný význam pokiaľ sa nejako neinterpretuje, povedzme ako PDF dokument, alebo iný formát ako napr. HTML, XML alebo aj slávny DOC. Dôležité je to, aby človek vedel, že to čo podpisuje je nejakým dobre definovaným spôsobom spojené s tým čo pred sebou vidí. Autori tento princíp alebo požiadavku nazývajú WYSIWYS (What You See Is What You Sign). Interpretácia binárnych reťazcov je mojou srdcovou témou teoreticko-informatických kontemplácií, preto som si neodpustil nepodeliť sa so zážitkom z čítania.

Autori článku načŕtajú pár zaujímavých útokov na podpisový mechanizmus. Napr. Keď sa podpisujú XML dokumenty a nepriloží sa k nim ich schéma alebo DTD, tak môže veľmi jednoducho nastať problém interpretácie. To čo ste podpísali môže mať pri inej schéme úplne iný význam.

Ešte zaujímavejšia je úvaha o fontoch. Ak používam aplikáciu, ktorá renderuje text pomocou fontov, tak si musím byť istý, že také isté fonty bude mať aj každý človek, ktorého sa môj podpísaný dokument nejako týka. Citlivé su napríklad znaky ako $, ale hypoteticky sa dá uvažovať aj nad “malicious userom” ktorý velice chytro vymení glyfy tak aby ste si mysleli, že podpisujete niečo nevinné a pritom mu dávate plnú moc na svoje bankové konto alebo iné fajnovosti.

Pre ľubovoľné binárne dáta, ktoré majú byť kódovaním nejakej grafickej informácie autori radia vždy vytvoriť si aj bitmapu samotnej grafickej reprezentácie a tú (poprípade len jej hash) vždy prikladať k podpisovaným dátam. Budete tak mať zaručené, že podpisujete skutočne to čo ste videli.

Free the Pirates!

The BitTorrent protocol is one of the most beautiful technologies of recent years. Not only because of what it can do – Free sharing of information among Internet users – but also because of it’s ingenious design from the computer science point fo view. It’s quickly become my favourite means of peer-to-peer filesharing.

The PirateBay has been my favourite BitTorrent tracker for a long time now. It’s always been a server with a soul for me. Each time I’m there to search for a torrent, I feel kinda welcome. Shockingly, recent trials have sentenced it’s creators for 1 year of jail and each of them has to pay over 650 000 euro. I feel that it is unacceptable that people behind this wonderful and admirable site are punished for creating it.

I don’t agree with several ideas of the (originally) Swedish Pirate Party’s principles regarding copyright law. I don’t like the idea of drastically shortened period of copyright protection and they do not have a clear definition of what is „non-commercial“ use of the content. Their principle document points out the crucial problems very well but doesn’t offer viable alternatives.

However, they are absolutely right when it comes to citizen’s right to privacy and to share information. I have few bits on my hard drive and if I and my friend Johnny want, he can have exactly the same bits and there ain’t no fucking way anyone’s gonna tell us he can’t, because he can. That is the wonder of this technological era. And consequently a real challenge to content makers.

It is intrinsic property of information that it is easy to copy and spread. With modern cryptography it is easy to conceal information which is not meant to be public and to create really secure communication channels. But once I decide to tell my stuff to the outside „untrusted“ world, there’s no way I can control it’s spread. That’s the catch and we have to live with it. Digital rights management and other oppresive tools try to piss against the wind and control the uncontrollable. Spreading the information existed for many years, even before invention of print. Once I heard something I could decide to tell it further, once I saw something I could describe or paint it so that others could see it. Technology only brings quality to the copies.

The people trying to make money by selling copies are sad, because this world isn’t fit for their business models that worked so well 50 years ago. Any new technology that facilitates free spread of information is another big strike to their profit stack. The guys from the Pirate Bay only created a new technology, which hurt these people really bad (imagine a giant media corp. CEO struck by a declining sales graph on a report that he reads on a leather sofa in his yacht) and now they got punished for their invention.

I am not a communist. I understand business (a bit). If I produce something I want to get paid. Possibly enormously well. I am a content maker myself. But do we really want to punish inventions ? Is that what copyright is about ?

My idea is to finally accept the fact that any „information product“ today is very easily copiable, once made public and not fight it. It’s a lost battle, so why not give up now and save ourselves lot of energy. Instead let’s start to work on new business models and technologies allowing rewarding the content makers and stop putting intelligent people in jail, because we need them in this process.