Mind Map example
29/01/11 14:04
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...
“Add mail archive to mass email sending and add save draft functionallity”. Read more for the map itself. Read More...
|
Joda Time and XStream
10/12/10 00:41
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();
}
}
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
28/11/10 19:54 Filed in: Programming
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
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
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:
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
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
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
Synligheten av Fritt Regnskap
19/11/10 18:33
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&rdquo
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 ?
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)
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 ?
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.
16/11/10 18:22
A nice and simple pattern of creating a snapshot of a
row of a database. Read all for more. Read
More...
Musikk for koding
10/10/10 13:15 Filed in: Programming
| music
Musikk mens man programmerer er noe jeg bruker mye. Her
prater jeg litt om det. Read
More...
Qooxdoo - include a file in your build.
02/09/10 19:46
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
20/08/10 23:00
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.
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?
04/08/10 22:45
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...
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...