sobota 18. února 2012

Groovy + Maven

Groovy je skvělé, můžete v něm psát jako v Javě, ale přitom to taky můžete napsat mnohem stručněji. Navíc díky tomu, že se jedná o dynamicky typovaný jazyk je v něm práce s XML, JSONem atd. o mnoho pohodlnější a přehlednější. Takže pokud nepotřebujete, aby váš kód byl rychlý, pak Groovy mohu jen doporučit. Pokud chce někdo začít s Groovy doporučuji, začít vněm psát testy.
Bohužel jsem zjistil, že rozchodit Groovy v Mavenu není jen jeden řádek. Existuji na to sice pluginy, ale u mě prostě nefungovaly :(. Takže tady je jenden navod jak rozchodit sice je dlouhý, ale funkční
(update: ještě lepší způsob je tady: Kompilace Groovy pomocí groovy-eclipse-compiler pluginu).

Java + Groovy s Mavenem

Je potřeba udělat 2 věci v pom.xml
1) Nejprve přidat do projektu závislost na groovy:
2) Pak je potřeba nakonfigurovat maven, aby překládal groovy fily (v hlavním projektu a v testech).
No a je to! :). Upozornil bych jen, že *.groovy zdrojáky se hledají normálně mezi .java zdrojáky, což lze ale snadno upravit změnou cest srcdir="${basedir}/src/main/java/" popř. srcdir="${basedir}/src/test/java/"

Poznámka - Použití Groovy pouze pro testy.

Pokud chcete používat groovy pouze v testech:
1) dependency na groovy nastavime pouze pro testy:
2) Definici pluginu nastavíme pouze pro testy a přidáme groovy do závislostí pluginu, protože jinak by mu při kompilaci chybělo: Přeji mnoho štastných groovy dnů.

čtvrtek 26. ledna 2012

Stopařův průvodce po galaxii - ePub

Je tu kniha:
Douglas Adams
Stopařův průvodce po galaxii
Ve formátu ePub http://pisar.wz.cz/bonus/Stoparuv_pruvodce_po_galaxii.epub

Není to sice žádný zázrak, ale zato to je nenáročné.

úterý 29. listopadu 2011

Zip4j java knihovna, která opravdu umí zipovat.

Vypadá to, že pro Java konečně existuje použitelná, jednoduchá a funknční knihovna, která umí zipovat. Bože děkuji!

Domovské stránky projektu: http://www.lingala.net/zip4j/

Jinak pár týdnu tuhle knihovnu používáme a zatím nemáme jediný problém.

Příkládek

Zazipuje obsah adresáře "c:/sourceDir" do souboru "c:/target.zip" a použije nižší úroveň komprese.

  ZipFile zipFile = new ZipFile("c:/target.zip");
  File sourceFile = new File("c:/sourceDir");
  ZipParameters zipParameters = new ZipParameters();
  zipParameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_FAST);
  zipParameters.setIncludeRootFolder(false);
  zipFile.createZipFileFromFolder(sourceFile, zipParameters, false, 0);

Maven dependency

  <dependency>
     <groupid>net.lingala.zip4j</groupid>
     <artifactid>zip4j</artifactid>
     <version>1.2.5</version>
  </dependency>

pondělí 21. listopadu 2011

Java - SSL for Jersey Client

Programové nastavení SSL na Jersey
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.TrustManagerFactory;
import java.security.KeyStore;
...

private void setupSSL(ClientConfig clientConfig) {
    try {        
        //Pokud se použije starší:
        //SSLContext.getInstance("SSL");
        //muže to skončit na chybe pri handshake
        SSLContext ctx = SSLContext.getInstance("TLS");

        KeyStore ks = KeyStore.getInstance("JKS");

        //Nacteni z filu
        //ks.load(new FileInputStream("d:/tmp7/clientstore"), "KeystorePassword".toCharArray());

        //nacteni z classpathy
        URL clientStore = getClass().getResource("/path/to/store/clientstore");
        ks.load(clientStore.openStream(), "KeystorePassword".toCharArray());

        //kdyz se pouzije
        //TrustManagerFactory.getInstance("SunX509", "SunJSSE");
        //Tak to nepojede na IBM jave, protože ta ma IbmX509 a ne SunX509
        //Naštěstí tohle funguje na obou. On uz si to dohleda:
        TrustManagerFactory tmf = TrustManagerFactory.getInstance("X509");
        tmf.init(ks);
        TrustManager tms[] = tmf.getTrustManagers();
        ctx.init(null, tms, null);
        clientConfig.getProperties().put(HTTPSProperties.PROPERTY_HTTPS_PROPERTIES, new HTTPSProperties(null, ctx));
    } catch (Exception ex) {
        throw new RuntimeException("Ssl setup failed", ex);
    }
}
...
ClientConfig clientConfig = new DefaultClientConfig();
client = Client.create(clientConfig);

neděle 9. října 2011

Windows XP sdílení pomocí účtu bez hesla

Potom co jsem to dost dlouho hledal si to sem napíšu:
K Windows XP se nedá přistupovat přes sít pomocí uživatelského účtu bez hesla. Aby to bylo možné musí se povolit následujující:

Start -> Spustit... -> gpedit.msc
Konfigurace počítače -> Nastavení systému Windows -> Nastavení zabezpečení -> Místní zásady -> Možnosti zabezpečení -> "Účty: Omezit použití prázdného hesla místního účtu pouze pro přihlášení ke konzole."
Na to dvojklik a nastavit na Zakázáno.

Pak by mělo jít sdílet i pomocí účtů bez hesla. (Možná to chce ještě restart)


Jak povolit anonymní přihlášení jsem našel zase tady:
http://technet.microsoft.com/en-us/library/cc755781(WS.10).aspx#BKMK_Local

Start -> Run -> gpedit.msc
Konfigurace počítače -> Nastavení systému Windows -> Nastavení zabezpečení -> Místní zásady -> Možnosti zabezpečení -> "Přístup k síti: Použít oprávnění účtu Everyone pro anonymní uživatele"
Na to dvojklik a nastavit na Povoleno

pondělí 15. srpna 2011

Java - Hello world bez metody main()

Taková zajímavost. Jak napsat java program bez main() metody.
public class NoMainHelloWorld {
    static {
        System.out.println("Hello world.");
        System.exit(0);
    }
}

Předtím než java zavolá metodu main(), tak musí třídu nahrát, při nahrání třídy se inicializují statické bloky - při té příležitosti se v našem programu napíše "Hello world" a dřív než mu začne vadit, že nemá metodu main(). Tak se zavolá System.exit(0).

Co je tento blog zač.

Na blog bych chtěl dávat své poznámky týkající se programování pravděpodobně převážně o Javě. Příspěvky nebudou pravděpodobně moc doladěné, aby mě to nezabralo moc času a příliš mě neodrazovalo je psát.