1. Java ME GUI APIs

    Jag har faktiskt börjat gilla Java ME utveckling. Visserligen finns det häftigare, nyare och flashigare teknologier att leka med på Java SE/EE-sidan, men med Java ME så kommer du ändå så nära användarna som bara är möjligt. Nu ska jag inte påstå att det är bekymmersfritt att jobba med Java ME, tvärtom (vilket ni säkert konstaterat efter att ha läst mina tidigare inlägg). Jag tänkte nu skriva lite om hur det ser ut på GUI-sidan för Java ME.

    Trots att det finns en del trevliga JSRer för Java ME så måste man tyvär, om man vill nå ut till den stora massa, begränsa sig till MIDP 2.0/CLDC 1.1 (d.v.s., den absolut minsta gemensamma nämnaren för Java på dagens mobiltelefoner) när det gäller GUI. Det är minst 2 år kvar tills dess att den stora massan har mobiltelefoner med inbyggt stöd för SVG (Scalable Vector Graphics, det kommer en post om det lite längre fram), vilket i stort sett kommer lösa problemet. Lösningen är att använda någon av de tillgängliga tredje-parts APIerna för GUI som finns idag. Tyvär är ingen av de användabara alternativen gratis. I vilket fall, de tre alternativ som finns idag är följande:

    • TWUIK (http://www.tricastmedia.com/twuik/) – Ett API för att skapa s.k. ”Flash-like user interface”. Ingen prisuppgift finns att få, vilket antyder att det är DYRT.
    • J2ME Polish (http://www.j2mepolish.org/) – Trots namnet så har det inget med Polen att göra. Detta är inget rent GUI API utan snarare en fullständig platform som kompletterar WTKn. Det finns bygg-script som bygger för olika enheter och en massa annat godis. Om du har behov av en fullständig miljö för Java ME och inte byggt upp något tidigare så är nog detta ett bra alternativ. Kostar 990€ för en licens, har du ett GPL-projekt så använder du deras GPL-licens och slipper betala.
    • TinyLine 2D (http://www.tinyline.com/) – I mina ögon det mest intressanta alternativet. Ett litet och enkelt API för att göra avancerade 2D GUIn. Detta API är enbart inriktat på 2D grafik och klarar allt från affina transformationer, transparens och anti-aliasing. Kostar ungefär 3500 kr att köpa. En intressant detalj är att detta är det API som Google valde för Google Maps Mobile.

    Så för att sammanfatta det hela; det finns alltså tre realistiska alternativ om du vill göra snygga GUIn i Java ME och ingen av dem är gratis. Kanske dags att dra igång ett open-source projekt? Någon som är på? :)

  2. Virtual Ant – En visuell skriptbyggare för Ant

    Beta av Virtual Ant finns nu att ladda ner (demo).


    Med Virtual Ant skriver du inte byggskriptet direkt. Filen build.xml skapas istället kontinuerligt i bakgrunden samtidigt som du visuellt utför de saker som skall ingå i byggskriptet. Inspelningssession sker i ett Windows-Explorer-liknande gränsnitt och allt du gör där omsätts i div Ant-Tasks. Ex om du tar bort en katalog så omvandlas det till rätt Ant-task med parametrar som pekar ut katalogen.

    Du kan köra både byggskript som tagits fram med Virtual Ant och andra Ant-byggskript. Man kan t o m stega fram och tillbaka i tiden för ett byggskript och på så sätt undersöka filsystemets tillstånd mellan stegen i byggskriptet. Filsystemet är virtuellt så man behöver inte vara orolig för att förstöra saker.

    En av poängerna med Virtual Ant är att slippa behöva slå i Ant-manualen och pröva sig fram till ett fungerande användande av ett task. Ex en sådan sak som att packa upp en jar-fil blir enklare eftersom du gör det i ett gränssnitt som du redan är bekant med (Windows Explorer). Att skriva din Ant-fil för hand eller med Virtual Ant kan jämföras med att skriva ditt Java-program med Notepad eller en IDE.

    Plugin till Eclipse och andra IDE:er skall visst släppas samtidigt som den skarpa versionen av Virtual Ant.

  3. PostgreSQL

    Laddade ner version 8.2 på min Windows Laptop för en liten test.

    Databasen var lätt att installera och komma igång med. Det följer också med grafiska verktyg där det mesta kan göras. Om man har arbetat med t.ex. Oracle så känner man snabbt igen sig när det gäller teknisk uppbyggnad och syntaxer.

    Postgres använder “lyssnare” som skapar användarprocesser för varje uppkoppling mot databasen, vilket är ett beprövat koncept som känns igen från t.ex. Oracle.

    Gjorde även en liten “tabell insert” test med 4 miljoner poster från en loopande procedur (autocommit off). Insert’en tog 115 sekunder på min Windows Laptop. Körde proceduren 4 ggr (dvs skapade totalt 16 miljoner poster). Skapade också ett icke unikt index av typen btree det tog 4.5 minuter.

    Man bör stänga av autocommit om man vill ha prestanda. Det görs genom att editera filen psqlrc. Man kan också köra kod under en startad transaktion.

    Postgres verkar fungera väl och har TeraByte databaser som referens. Finns en hel del lyckade benchmarks vad gäller prestanda o.s.v.

    Tycker däremot att namnet känns lite ”tungvrickande” det får dom gärna byta.

    http://www.postgresql.org/

  4. PMD

    Tänkte bara tipsa om en Code Analyzer som är helt okej. Bra för oss som inte kör IDEA.
    http://pmd.sourceforge.net/

  5. Veckans tebjudning…

    Jonathan Schwarts (SEO på SUN) bjuder Linus Torvalds på middag via sin blogg:

    And to prove the sincerity of the offer, I invite you to my house for dinner. I’ll cook, you bring the wine. A mashup in the truest sense.

    Intressant läsning, hela blogginlägget finns här

  6. Ice Ice Baby

    JSF

    Den som håller på med JSF vet att det ofta tillkommer begränsningar och dylikt med ”komponent-kittet” som man använder. Idag finns de ju lite att välja på, bland annat småhäftiga JMaki kittet med coola saker som fisheye menyn(den där snygga grejen som Mac OSX har på nedre delen av skärmen) och annat som kartgränssnitt både från Google och Yahoo.
    Vad det gäller mera kompletta komponenter så är ju oracle ADF Faces bra alternativ(Oracle har bidragit en hel del av detta till opensource projektet MyFaces). Vill man pröjsa så kan man köpa mer kompletta ajaxbaserade JSF komponenter från Oracle, eller någon annan.
    Och så till Istiden…
    Eftersom vi alla gillar opensource så tycker jag att man absolut ska titta på ICEFaces. Dessa är ajaxbaserade komponenter och riktigt snygga. Det som jag personligen gillar är att det finns gott om läsbar dokumentation och förklaringar över hur man kommer igång med ICEFaces på ett konkret och förståerligt sätt.
    http://www.icefaces.com

    Sen måste man också nämna att ICESoft(IceFaces pojkarna och kanske flickorna) också är officiella partners till NetBeans, och NB gillar ju vi alla :)
    p.s

    Får ni också vanilla ice låten i tankarna när ni kommer in på sidan? :)

  7. Eclipse Visual Editor – forts.

    När jag för ett tag sedan skrev om Eclipse GUI-byggare VE (Visual Editor) så tycktes det kanske som om jag dissade den helt eftersom den saknar stöd för GroupLayout. Men VE har faktiskt sina förtjänster.

    Tiden Du som programmerare lägger på det visuella justerandet av Swing reduceras tack vara WYSIWYG (What You See Is What You Get) i VE. Du får även annat icke-visuellt stöd som ex hjälp med att stänga ned en JFrame med lämpligt event.

    På vissa områden kräver dock VE en hel del av programmeraren i form av Swing-kunskaper. Exempelvis är det svårt att få sitt GUI att se ut precis som man vill utan att använda GridBagLayout (en omständig layouthanterare). För att kunna använda GridBagLayout i VE behöver man ha koll på vad klassen GridBagConstraint olika attribut har för innebörd; då tänker jag speciellt på samspelet mellan attributen weight, anchor och fill.

    Men man kan bygga ett GUI genom att enbart använda de enklare layouthanterarna som FlowLayout och BorderLayout.

    lindemanpanel.PNG

    JPanel med några JRadioButton och en JLabel inordnade i ett rutnät med GridBagLayout.

    Markerad JRadioButton ”Geolog Sten Lindeman” har sina egenskaper listade i Eclipse-vyn Properties. Panelens innehåll presenteras även i trädform i Eclipse-vyn Java Beans.

    En JPanel är egentligen bara visningsbar i ett konkret fönster, ex en JFrame och så här går det till att skapa en sådan (välj new JFrame visual class): kryssa för att du vill ha en main-metod.

    daframe.PNG

    VE fyller main-metoden med den kod som behövs för att visa klassen samt stänga ned den på korrekt sätt

    Det tomma fönstret är nu redo att fyllas. Förvald layouthanterare för en JFrame är BorderLayout som har fem områden: north, east, west, south och centre. I south lägger vi en JButton (i en extra JPanel för att respektera knappens preferredSize). Både JPanel och JButton väljs från VE-paletten och placeras ut med musen. I centre lägger vi Lindeman-panelen.

    choosebean.PNG

    Eftersom Lindemanpanelen är en JPanel (extends JPanel) kan man välja den i paletten m h a ”Choose Bean”-knappen.

    Placera ut komponenten i området som heter center. Ge knappen en innebörd genom att högerklicka på den och välja ”Events”, ”actionPerformed”. VE skapar mallkod som du kan byta ut mot önskad kod.

    morelindeman.PNG

    I exemplet har jag bytt ut det mot kod som öppnar en URL med datorns webbläsare (en feature f.o.m. Java 1.6)

  8. Eclipse Tricks – Stavningskontroll med Eclipse 3.3

    Med Eclipse 3.3 kan du få stavningskontroll av strängar och kommentarer i dina java-klasser. Själv tycker jag att det även vore önskvärt med stavningskontroll av variabelnamn, metodnamn och klassnamn etc. Än så länge kontrolleras bara strängar och kommentarer.
    misspelled.bmp

  9. Eclipse Tricks – Quick Assist istället för kortkommandon

    Med en nyare Eclipse (ex 3.3 RC2) kan man använda Ctrl+3 följt av text för att navigera eller utföra kommandon. Ex istället för att använda kortkommando för att växla till debug mode skriver du Ctrl+3 följt av Pers så dyker ”Perspective Debug” upp som valbart kommando.

    quickassist.bmp

  10. JavaSolutions till JavaZone

    Eriks presentation ”Gör ett 3D-spel i Java på 50 minuter” samt min presentation ”The Hundred Kilobytes Kernel (HK2)” har blivit accepterade till JavaZone i Oslo den 12-13. Är du intresserad av att åka till JavaZone, skicka ett epost till goteborg(at)javaforum.se så kan vi kordinera restider och hotell!

    Här är abstracten till min presentation:
    The java.net project ”Hundred Kilobytes Kernel” (HK2) is a module subsystem coupled with a simple yet powerful component model to build software. It is a great technology to use in any Java software development and can be used in small devices such as phones up to enterprise applications. HK2 is designed to be friendly to existing technologies such as OSGi but it will also provide a path to the implementation of modules (JSR 277) in Java SE 7. HK2 is used as the foundation for GlassFish V3.

    Abstracten till Eriks presentation:
    Java has penetrated most areas in software engineering today, from small embedded device to large, distributed enterprise systems. However, one area where Java still is absent is 3D desktop games. This session will demonstrate how easy it is to write a complete 3D game using Java and show that it is a viable platform for writing real, commercial desktop games. It will focus more on the different software components and less on 3D APIs, so very little knowledge about OpenGL and 3D programming is required.

  11. XFire på JavaForum

    Min presentation från javaforum finns nu att ladda ner som pdf här.

    Jag har även lagt upp körbar kod (via Maven 2) för server-implementationerna, exemplet med den generade klienten som jag inte hann visa, samt alla klientskript i Groovy. Koden kan ni ladda ner här.

    För att starta servern:

    För att köra Groovy-skripten (när servern är startad):

    • Se till att Groovy är installerat
    • Installera även SOAP-tillägget för Groovy
    • Öppna en kommandoprompt i groovy_scripts-katalogen
    • Kör t.ex. kommandot groovy users.groovy

    Den genererade klienten samt exemplet mot Västtrafik går båda att köra med kommandot mvn test

    Västtrafik-klienten är lite speciell då WSDL-filen för den operation jag använder (GetRoute) endast returnerar en xsd:string, även fast innehållet i strängen är en XML-struktur. För att kunna koda mot denna servicen ändå så genererade jag ett XML-schema som matchade denna XML-struktur med hjälp av ett program som heter Trang. När jag väl hade XML-schemat så var det bara att låta JAXB sköta deserialiseringen av XML-strukturen. Ett detaljerat exempel på detta kanske blir ett framtida blogg-inlägg.