Mind Map example

On Stack overflow I was asked to provide with an example on how I might use Mind Maps to organize my thoughts before I start coding. I’ve added one here where I plan the following task:

“Add mail archive to mass email sending and add save draft functionallity”. Read more for the map itself. Read More...
|

Joda Time and XStream

I got a mail requesting the code for the XStream and Joda Time converter. It appears that this is still an issue with XStream. I didn’t have to have the code for this as I wrote it for the Norwegian Research Council, but that was some time back, but that is good as I could write it again with a newer Joda Time version.

Here it is as a test class (need to split into some modules, but basically this is what does the trick:

(Seems like my blog software don’t want to pretty format this code...)

package test;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.joda.time.format.ISODateTimeFormat;
import org.junit.Assert;
import org.junit.Test;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.converters.SingleValueConverter;

public class WeightTest {
@Test
public void test_joda_time_xstream() {
XStream xStream = getXStream();
Convert test =
new Convert();
String xml = xStream.toXML(test);
System.
out.println(xml);

Convert testAfter = (Convert) xStream.fromXML(xml);

Assert.assertEquals(test.
localDate, testAfter.localDate);
Assert.assertEquals(test.
dateTime, testAfter.dateTime);

}

private XStream getXStream() {
XStream xStream =
new XStream();

SingleValueConverter localDateConverter =
new SingleValueConverter() {

@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(LocalDate.class);
}

@Override
public String toString(Object arg0) {
return arg0.toString();
}

@Override
public Object fromString(String arg0) {
String[] parts = arg0.split(
"-");
return new LocalDate(Integer.parseInt(parts[0]), Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));
}
};
xStream.registerConverter(localDateConverter);

SingleValueConverter datetimeConverter =
new SingleValueConverter() {

@Override
@SuppressWarnings("unchecked")
public boolean canConvert(Class arg0) {
return arg0.equals(DateTime.class);
}

@Override
public String toString(Object arg0) {
return arg0.toString();
}

@Override
public Object fromString(String arg0) {
return ISODateTimeFormat.dateTimeParser().parseDateTime(arg0);
}
};
xStream.registerConverter(datetimeConverter);
return xStream;
}

static class Convert {
public LocalDate localDate = new LocalDate();
public DateTime dateTime = new DateTime();
}

}
|

Scala - små steg - del 1

Jeg har akkurat startet opp prosjektet som skal bli mitt første Scala prosjekt. Jeg har tidligere vært med på en workshop hvor man lærte litt Scala, men jeg er vel bortimot helt blank for Scala å regne.

Prosjektet jeg skal lage er å hente data fra en Fritt Regnskapsdatabase og lagre det i en lokal embedded database. Denne applikasjonen skal være en webstart applikasjon.

Ved første gangs oppstart tar applikasjonen inn brukernavn, domene og passord. Applikasjonen logger inn på Fritt Regnskap, laster ned skjema og oppretter database. Deretter laster den ned data og dytter de inn i databasen.

Applikasjonen skal ha et treview som viser tabellene og deres struktur, et spørrevindu hvor man kan formulere SQL og et resultatvindu der man ser resultatet i tabulær form. Til dette har jeg tenkt å bruke:

* Scala Swing
* JDBC (Kanskje et bibliotek for å gjøre det enklere å bruke JDBC)
* En embedded database - enten hsql eller Apache Derby.
* Noe form for http utility. Har blitt tipset om
http-dispatch http://dispatch.databinder.net/About

Dette er nok ikke en revolusjonerende applikasjon, og det er gjort ofte før meg. Derimot er det en jeg synes vil bidra til Fritt Regnskap og jeg trenger å lære meg Scala Happy

Jeg begynte først med å laste ned Idea og etter et par oppdateringer så virker den klar til bruk. Den ville så ha en Scala installasjon, så jeg lastet ned 2.8.1. Siden jeg kommer til å trenge en del avhengigheter, samt at jeg er blitt tipset om at SBT (Simple Build tool) er greia for Scala, så har jeg lastet ned den også. Jeg fulgte oppskriften og har nå en ‘sbt’ kommando som jeg kan kjøre.

Etter litt dokumentasjon har jeg sånn ca forstått hva som skjer. Jeg har laget meg en Scala/ katalog, og i den kjørte jeg sbt og fulgte oppskriften. Har opprettet et prosjekt FrittRegnskapDBBrowser og fikk en struktur som ligner veldig på maven.

For å ha en avhengighet til Derby så testet jeg å lage en prosjektfil. I project/build/ laget jeg en FrittRegnskapOfflineDB.scala (om det skal være slik det får jeg vel finne ut av etterhvert) og der kunne jeg legge til

val derby = "org.apache.derby" % "derby" % "10.4.1.3"


og ved å kjøre sbt update så ser det ut som at den laster ned derby. Hva som er sammenhengen her med hva prosjektet eventuelt heter har jeg ikke helt forstått, men jeg antar at det er en navnekonvensjon ute å går her. (For eksempel klassenavn <-> prosjektnavn).

Jeg trengte også nå å få laget Idea prosjekt. Jeg utvidet definisjonen min med ‘with IdeaProsject’ (elegant bruk av mixins ser det ut som) og ved å kjøre sbt idea så har jeg fått et Idea prosjekt.

Det som nå viser seg i sbt prosjektet er at jeg må eksplisitt dra inn Scala Swing i prosjektet. Det får jeg til ved å legge til følgende lille snutt sammen med derby includen:

val scalaSwing = "org.scala-lang" % "scala-swing" % "2.8.1"


Deretter må man kjøre
* ‘sbt reload’ for å få sbt med på leken om at noe er oppdatert.
* ‘sbt update’ for å få lastet ned biblitoteket.
* ‘sbt idea’ for å få oppdatert Idea prosjektet.

Og da lot Hello World Swing eksemplet seg kompilere igjen Happy
|

Synligheten av Fritt Regnskap

Når man lager en webside så er det tydeligvis ikke alltid lett å vite hva som man bør gjøre for å få gode resultater for siden sin i google. Jeg ble i dag overrasket over å se at det som har gitt meg mest trafikk til Fritt Regnskap ikke er “regnskap” eller “regnskapssystem”. Det er faktisk et lite avnsitt jeg har skrevet om kontantprinsippet. (Nøkkelordet er “kontantprinsippet&rdquoWinking

Det er tydeligvis behov for litt tips om regnskap der ute på nettet, for at min lille snutt skal dukke opp som nummer 7 på google for dette høres litt rart ut - det må da være bedre kilder der ute enn det ? Happy

Den andre kilden som gir masse treff inn til regnskapssystemet er iPhone applikasjonen. Det er utrolig mange rare plasser som indekserer slike programmer og gjør de tilgjenglig for søk. Det er tydelig en del penger å tjene på å liste ut programmer som finnes på iTunes. En skulle jo tro at folk bare bruker iTunes slik at dette er et ikke marked, men tydeligvis er det tilstrekkelig penger å tjene på reklame på slike sider at noen gidder dette.

Det andre tallet som overrasker meg er antall nedlastninger av Fritt Regnskap iPhone applikasjonen. Den er i snitt nedlastet 7 ganger i uka, og jeg ser at driftsloggene mine at det er betraktelig færre som laster den ned som faktisk prøver å synkronisere mot demodatabasen min. Her er det kanskje en i uka.

Av antall brukere som faktisk har tilgang til et system med data for denne er vel en 4-5 så det er neppe dem som laster den ned heller. Det er tydeligvis en lav terskel for å hente ned gratis apper på iTunes store...

Så skal jeg lage mer blest så er det tydelig at jeg bør skrive mer om det å føre regnskap samt lage enda en iPhone applikasjon til systemet. Et nøkkelrod som jeg heller ikke har fått med meg som nå er på plass er “regnskapssystem”.

(Google suggest er fin til å se hva man bør få med seg her)
|

Snapshot using insert ignore pattern.

A nice and simple pattern of creating a snapshot of a row of a database. Read all for more. Read More...
|

Musikk for koding

Musikk mens man programmerer er noe jeg bruker mye. Her prater jeg litt om det. Read More...
|

JavaZone 2010

JavaZone 2010 - hva opplevde jeg der? Read More...
|

Qooxdoo - include a file in your build.

I’ve just started using the javascript library qooXdoo for a subproject in my accounting software. I solved a basic need - include another file from source/ in build/ action. Read More...
|

Strange xcode / interface builder bug

I got the following interesting bug:

2010-08-20 22:49:11.206 FrittRegnskap[27650:207] Unknown class MembershipViewUIController in Interface Builder file.
2010-08-20 22:49:11.210 FrittRegnskap[27650:207] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[ setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key appDelegate.'

It turns out that what caused this was the interface builder was no longer connecting to my xcode class file. To make it go away I renamed the class in interface builder, regenerated it and moved the code from my old class to the new class, recompiled and everything is back to normal again,

Got to love these wonderful tools with soft links between code and UI.


|

Hvor er så Fritt Regnskap?

Fritt Regnskap finner du på frittregnskap.no. Der kan man registrere seg og få laget sitt eget regnskapsystem.

Jeg jobber stadig med å utvikle det videre og har allerede siden første versjon ble åpnet slippet et par utvidelser. Og nå kan dere prøve en direkte innlogging til demo systemet ved å følge denne linken. Read More...
|