Tag: Programmeren ¦ Atom ¦ RSS

Implicit conversions in C#

Yesterday I came across an interesting article: What's the opposite of Nullable. While the solution for Non-Nullability is interesting, the reason i'm blogging this is because the article also used a C# feature which i didn't know of: implicit conversions.

And guess what? Today I had a situation where I could use these implicit conversions. My app reads data from a CSV-file, so all the input are just strings. Until now that was just fine. However, at one part of my code I had to process one of the fields which has a fixed format. Say a field is a phonenumber and i need the country-prefix. So I created a PhoneNumber-class like this:

public class PhoneNumber
{
  private readonly string _number;

  public PhoneNumber(string number)
  {
      if (!new Regex(PHONE_NUMBER_REGEX).IsMatch(number))
      {
          throw new ArgumentException("Invalid phone number", "number");
      }
      _number = number;
  }

  public string Prefix
  {
    get { return GetPrefixFromNumber(...); }
  }
}

Now it is possible to create a (helper-)method in another class to get the prefix like this (this is just a simple example):

public …

Techdays

Gisteren mocht ik voor het werk een dagje van de Microsoft Techdays bijwonen. Het was de eerste keer dat ik naar een Microsoft-event ging en had me eerlijk gezegd aan veel show en weinig inhoud verwacht. In sterk contrast tot JavaPolis Devoxx, waar er veel inhoud en weinig show is. Achteraf bekeken viel dit eigenlijk enorm goed mee. Enkel de keynote ging er wat over. Een Developer Evangelist of Regional Director moet echt niet als één of andere superster worden aangekondigd met loeiharde muziek en lichtshow, maar dat is mijn mening natuurlijk.

Na de keynote heb ik de sessie over C# 4.0 gevolgd en dat was erg interessant. C# 4.0 belooft weer een versie te worden om naar uit te kijken. Eén van de nieuwe features is het dynamic keyword. Dit zorgt ervoor dat je methodes op het object kan oproepen waarbij de compiler niet checked of deze effectief bestaan. De check wordt pas 'at runtime' gedaan. Dit is erg handig om te integreren met andere talen zoals …

Boekenfestijn

Boeken

Net zoals vorig jaar is het weer boekenfestijn in het bouwcentrum in Antwerpen. Ook dit jaar waren er weer ?norm veel interessante boeken. Je zou er echt gemakkelijk een grote winkelkar volkrijgen met stuk voor stuk interessante boeken. (sommige mensen doen dat dan ook :D). Zelf heb ik het bij 3 boeken gehouden: JUnit, Tapestry en XDoclet, allemaal van Manning.

Standardizing BeanShell

A while ago, when I first wrote about Groovy, I started wondering why there wasn't a JSR for Beanshell. As you might know, Beanshell is, just like Groovy, a scripting language for Java. Today Pat, the main Beanshell developer, announced that Beanshell will be standardized in JSR 274. You can read more about this on his blog.

Debugging with Eclipse

Ofcourse Eclipse has a debugger which you can use to debug your Java applications. Like most other debuggers you can set breakpoints, view variables, use watch expressions, inspect objects and use actions like 'step into', 'step over' and so on.

But Friday I discovered another nice feature while debugging: When you change some of your code while debugging you don't need to restart your application. Eclipse simply uses your new code. Something similar is possible with the debugger of Visual Studio 6 and will be possible again in Visual Studio 2005.

Here is a, rather stupid, example to illustrate it:

I created a method 'getList()' in the class 'Foobar' which should return a List with two elements. Ofcourse i create a UnitTest for it:

Debugging with Eclipse: an Example

Now suppose i just returned a new arraylist in getList() instead of the one i created in that function. Ofcourse the test will fail:

Debugging with Eclipse: an Example

So i set a breakpoint somewhere in the method 'getList()' (ofcourse i would have discovered the reason for the bug by now …

Eclipse, not just an IDE

Eclipse Logo

In the past half year i have been doing two projects, of which one in .NET (C#) and one in Java. As far as i can tell now I certainly prefer Java over .NET. Although with "out-of-the-box"-programming in .NET (with "out-of-the-box" i mean simply installing Visual Studio) you will get a result in less time, .NET misses the big (Open Source) community that Java has. While there are expensive IDE's for Java, like IntelliJ, there are also various Open Source alternatives, of which NetBeans and Eclipse are the two most well known.

Especially Eclipse is an extremely beautiful IDE, if not the best IDE ever created. But Eclipse is more then just an IDE. In fact it is a platform to create IDE's. And by default, when you download the official Eclipse release, it comes with JDT, the Java Development Tools. The architecture of Eclipse is completely build on the idea of plugins. Almost every part of Eclipse is a plugin, including the Eclipse core. This is one …

Groovy: Java Scripting (NL)

Dit is de Nederlandse vertaling van een artikel dat ik een tijdje terug in het engels schreef. Bedankt Vicky voor de vertaling!

Een paar dagen geleden struikelde ik over een artikel dat bij onjava.com Groovy introduceert. Groovy is een scripting taal voor Java, dit betekent dat de groovy-scripts kunnen worden uitgevoerd zonder dat ze eerst moeten worden gecompileerd. Dit maakt het zeer gemakkelijk om kleine scriptjes te schrijven die vanaf de commandoregel of van binnenin een Java-applicatie kunnen worden uitgevoerd.

Groovy is niet de enige scripting taal voor Java. Andere zijn onder andere Beanshell, Jython, JRuby en etc. Een aardig overzicht kan hier worden gevonden. De mensen die jEdit gebruiken zullen zeker al van Beanshell gehoord hebben aangezien het de taal is die door jEdit wordt gebruikt Macro's te schrijven.

Zowel Groovy als Beanshell gebruiken een syntaxis die op Java wordt gebaseerd, maar hun doelstellingen zijn een beetje verschillend. Beanshell probeert normale Java documenten te vertalen en lijkt dit zeer goed te doen. Door Beanshell te gebruiken zou het …

uit de oude doos: MasterMind 2001

Mastermind screenshot

Zonet was ik wat opkuis aan het houden in ??n van de vele mappen op m'n harde schijf. Toevallig kwam ik wat oude spulletjes tegen die ik vroeger eens had geschreven. E?ntje daarvan is een eenvoudige MasterMind, geschreven in VB6. En ja hij werkte zelfs :). Omdat hij toch maar op m'n schijf 'stof stond te vangen' heb ik hem online gezet, met de broncodes erbij (GPL-ed).

Ik wil er overigens wel bijzeggen dat deze code van 2001 dateert en het design van het programmaatje op zo goed als niets trekt. Vandaag de dag programmeer ik wel net iets properder ;) En ook: als het ding uw computer laat crashen, ontploffen of begint op te eten, ik ben NIET verantwoordelijk ;)

Dat gezegd zijnde:
http://dev.budts.be/releases/old/
De zip downloaden, uitpakken en MasterMind.exe starten en je bent vertrokken :)

Groovy: Java Scripting

See below for an explanation why this is written in English

Groovy logo

A few days ago I stumbled across an article at onjava.com introducing Groovy. Groovy is a scripting language for Java, meaning that Groovy-scripts can be executed without the need of first being compiled. This makes it very easy to write little scripts which can be executed from the command-line or from inside a java application.

Groovy is not the only scripting language for Java. Others include Beanshell, Jython, JRuby and some more. A nice overview can be found here. People that use jEdit will certainly have heard of Beanshell since it is the language used by jEdit to write Macro's.

Both Groovy and Beanshell use a syntax based on Java, but their goals are a bit different. Beanshell tries to interprete normal java files and seems to do this very well. So by using Beanshell it should be possible to run a real Java application by feeding the source files to Beanshell, instead of compiling them into .class-files …

darcs: versiebeheer op een nieuwe manier

darcs logo

Toen Andreas Gohr enkele maanden geleden opzoek ging naar een geschikte source control-tool voor DokuWiki koos hij voor darcs. Het was de eerste keer dat ik van darcs hoorde, maar sindsdien ben ik het meer en meer tegengekomen.

In vergelijking met 'klassieke' SCM-tools, zoals CVS, Subversion en SourceSafe, werkt darcs opmerkelijk anders. Bij deze klassieke systemen heb je meestal enerzijds een centrale server met een 'repository' waar al de code wordt bewaard en anderzijds een sandbox op je lokale computer die alle bestanden bevat waaraan je kan werken. darcs echter is een gedistribueerd systeem. Hierbij is dus iedere 'sandbox' ook meteen een 'repository'. Dat heeft aardig wat voordelen. Zo moet je bijvoorbeeld geen verbinding hebben met een server om bewerkingen op de repository uit te voeren.

In tegenstelling tot CVS werkt darcs niet met versies van bestanden maar met 'patchsets'. Zo'n patchset wordt gemaakt aan de hand van alle wijzigingen die je aanbracht ten opzichte van je lokale repository. Dit is handig want op die manier zitten alle wijzigingen die …