---
title: Software - 0110.be
canonical: https://0110.be/Software?page=3
markdown_url: https://0110.be/Software.md?page=3
page: 3
posts_per_page: 30
total_posts: 106
filters:
  content_page: Software
  tags:
  - Code
previous: https://0110.be/Software.md?page=2
next:
---

# Software - 0110.be

 # Software

Below you can find links to the open source software I developed during my research. It is always nice to hear how this software is used, don't hesitate to <a href="&#109;a&#105;l&#116;&#111;:&#106;&#111;&#114;&#101;&#110;&#46;&#115;&#105;&#120;&#64;&#117;&#103;&#101;&#110;&#116;&#46;&#98;&#101;">drop me a line</a>. Bug reports are welcomed as well.

---
  

## [Jobsopschool](https://0110.be/posts/Jobsopschool.md)

- Published: 2009-03-01T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 11
- Canonical: https://0110.be/posts/Jobsopschool

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Portfolio](https://0110.be/tags/Portfolio.md), [Projecten](https://0110.be/tags/Projecten.md)

Ik heb in opdracht van scholengroep Sperregem een website gemaakt die het vinden van kandidaten voor korte vervangingen vlotter doet verlopen. Mensen met interesse voor [vacatures in het onderwijs](http://jobsopschool.be) in West-Vlaanderen kunnen zich er op inschrijven.

De website heeft enkele voordelen voor verschillende scholen in de scholengroep:

-   Het zoeken van kandidaten is erg eenvoudig: na het invoeren van een vacature komt er een lijst met kandidaten met een geschikt profiel die tijdens de vacature beschikbaar zijn.

-   Er kunnen e-mail of SMS-berichten verstuurd worden om kandidaten op de hoogte te brengen van een vacature.

-   Profielen van kandidaten zijn altijd up-to-date: de kandidaten zijn er zelf verantwoordelijk voor en kandidaten lange tijd niets van zich laten horen worden automatisch op non-actief gezet.

-   De historiek van kandidaten wordt automatisch bijgehouden en kan opgezocht worden.

Ook voor de aspirant onderwijzers is de website handig:

-   De vacatures zijn publiek zichtbaar, kandidaten kunnen dus actief solliciteren.

-   Ze kunnen zelf hun profiel beheren en bijvoorbeeld een vernieuwde versie van hun C.V. uploaden.

-   Voor elke kandidaat is een gepersonaliseerde lijst met vacatures beschikbaar (ook via RSS), afgestemd op hun profiel.

Daarnaast is het ook voor de personeelsdienst een handige tool: die kan nu een beter overzicht bewaren over de vacatures en de invulling ervan in de verschillende scholen.

Hieronder staan enkele screenshots.


![Startpagina](https://0110.be/files/photos/11/home.png)

![Nieuwe vacature](https://0110.be/files/photos/11/nieuwe_vacature.png)

---

## [Vooruit.be vernieuwd](https://0110.be/posts/Vooruit.be_vernieuwd.md)

- Published: 2009-02-27T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 271
- Canonical: https://0110.be/posts/Vooruit.be_vernieuwd

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Cultuur](https://0110.be/tags/Cultuur.md), [Vooruit](https://0110.be/tags/Vooruit.md)

![Vooruit Logo](https://0110.be/files/attachments/271/vooruit_logo.png "Vooruit Logo")

Vandaag is de vernieuwde vooruitwebsite gelanceerd:

> We bieden je nog meer video's, foto's, audiotracks en tekstmateriaal en hebben ook jouw persoonlijke voordelen uitgebreid. Wanneer [je lid wordt van www.vooruit.be](http://vooruit.be/nl/signup), kan je nog steeds je kalender aanvullen, vrienden maken en reacties posten, maar daarnaast krijg je ook *aanbevelingen op maat*, kan je voorstellingen tippen en kan je berichten sturen naar vrienden [\*](http://vooruit.be/nl/headlines/244).

Het gepersonaliseerde aanbevelingssysteem is door Greet Dolvelde en mezelf in het kader van onze thesis: [Collaborative Filtering: Onderzoek & implementatie](https://0110.be/artikels/lees/Collaborative_Filtering%253A_Onderzoek_%2526_implementatie) <a href="http://0110.be/attachment/be.0110/147/collaborative_filtering_onderzoek_en_implementatie.pdf" title="Collaborative Filtering: Onderzoek & implementatie PDF (7 MB)">\[pdf\]</a> ontwikkeld. Dus waar wacht je nog op? [Word lid](http://vooruit.be/nl/signup), check de [aanbevelingen bij concerten](http://vooruit.be/nl/event/1759?genre=concerts) en vooral je gepersonaliseerde aanbevelingen.

Voor de iets minder enthousiaste doorklikkikkers staan hieronder wat screenshots van de verschillende soorten aanbevelingen op [www.vooruit.be](http://vooruit.be):


![Gebruikersprofielpagina](https://0110.be/files/photos/271/profile.png)

![Aanbevolen evenementen](https://0110.be/files/photos/271/recommended_productions.png)

![Buren](https://0110.be/files/photos/271/recommended_users.png)

![Aanbevolen artiesten](https://0110.be/files/photos/271/recommended_artists.png)

![Evenementpagina](https://0110.be/files/photos/271/production.png)

![Aanbevelingen bij evenement](https://0110.be/files/photos/271/production_recommendations.png)

![Gelijkaardigheid tussen gebruikers](https://0110.be/files/photos/271/compatibility.png)

---

## [Verhuis naar VPS](https://0110.be/posts/Verhuis_naar_VPS.md)

- Published: 2009-02-16T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 234
- Canonical: https://0110.be/posts/Verhuis_naar_VPS

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Harde waren](https://0110.be/tags/Harde%20waren.md)

![VPS](https://0110.be/files/attachments/234/vps_server_small.png "VPS")

Waarschijnlijk heb je het al gemerkt: deze site gaat nu heel wat sneller. Dit is te danken aan een verhuis. [0110.be](http://0110.be) wordt nu gehost op een VPS (Virtual Private Server).

De virtuele server heeft Ubuntu 8.04 LTS Server als besturingssysteem en draait op [een Xen hypervisor](http://en.wikipedia.org/wiki/Xen). De fysieke server zelf bevat een achttal Intel® Xeon® E5440 @ 2.83GHz CPU's.

De server staat in [Amsterdam](http://globalswitch.nl/locations/amsterdam.en.html) en is rechtstreeks verbonden met het grootste internetknooppunt ter wereld: [AMS-IX](http://en.wikipedia.org/wiki/Amsterdam_Internet_Exchange).


---

## [SQL-bestand met een lijst van alle Belgische postcodes en steden](https://0110.be/posts/SQL-bestand_met_een_lijst_van_alle_Belgische_postcodes_en_steden.md)

- Published: 2008-11-29T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 210
- Canonical: https://0110.be/posts/SQL-bestand_met_een_lijst_van_alle_Belgische_postcodes_en_steden

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md)

![Logo de Post](https://0110.be/files/attachments/210/post.gif "Logo de Post")

Uit de [lijst van postcodes van alle Belgische steden](http://www.post.be/site/nl/postal_codes.html) heb ik een SQL-bestand samengesteld. De gegevens bevatten de postcode zelf, de naam van de stad, de naam van de stad in hoofdletters en een veld "structure" waaruit de gemeente-deelgemeente relatie gehaald kan worden als er op gesorteerd wordt. Dit zijn bijvoorbeeld de deelgemeentes van Chimay.

    6460   CHIMAY
    6460        Bailièvre
    6460        Robechies
    6460        Saint-Remy (Ht.)
    6460        Salles
    6460        Villers-la-Tour
    6461        Virelles
    6462        Vaulx-lez-Chimay
    6463        Lompret
    6464        Baileux
    6464        Bourlers
    6464        Forges
    6464        l'Escaillère
    6464        Rièzes

\
<br/>\
Het sorteren kan in [PostgreSQL](http://www.postgresql.org) met deze SQL instructie: `order by translate(structure, ' ', 'z')`. Het SQL-script zelf is een lijst van `INSERT INTO` SQL-Statements.

    insert into cities(zipcode,name,up,structure)  VALUES ('1790','Affligem','AFFLIGEM','1790   AFFLIGEM');
    insert into cities(zipcode,name,up,structure)  VALUES ('9051','Afsnee','AFSNEE','9051        Afsnee');
    insert into cities(zipcode,name,up,structure)  VALUES ('5544','Agimont','AGIMONT','5544        Agimont');
    ...

Dit is het "SQL-bestand met een lijst van alle Belgische postcodes en steden":\[steden.sql.txt\]. Hopelijk is hier iemand ooit iets mee.


---

## [Query Tool](https://0110.be/posts/Query_Tool.md)

- Published: 2008-11-10T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 103
- Canonical: https://0110.be/posts/Query_Tool

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Portfolio](https://0110.be/tags/Portfolio.md), [Vooruit](https://0110.be/tags/Vooruit.md)

![Vooruit Logo](https://0110.be/files/attachments/103/vooruit_logo.png "Vooruit Logo")

While working at the [Vooruit Arts Centre](http://vooruit.be/en) I got the assignment to create a tool to query an Oracle database with ticketing data. There were a few requirements for the Query Tool, in the current version all of these are met:

-   First of all it had to be easy to execute complex queries, no knowledge of SQL (Structured Query Language) should be required for the end user.

-   The results of the queries should be exportable to an easy to analyse format. \* Editing queries or adding new ones should be doable, by someone knowledgeable with SQL.

-   The Query Tool should be easy to configure and database independent.

-   Should work on Windows, Mac OS X and Linux.

By publishing the Query Tool on my website I hope that the fruits of my labour can be enjoyed by a wider audience. To see it in action you can *"give it a spin":\[QueryTool.jar\]*. A recent version, version 6, of the [JRE (Java Runtime Environment)](http://www.java.com/en/download/manual.jsp) is needed.

## How Do I Use The Query Tool?

The program supports two ways to query a database:

-   A number of predefined queries can be selected and executed. Depending on the selected query, zero or more parameters are required. E.g. the screen shot below depicts a query with one parameter: a product category. When the query is executed all the products in the selected category are fetched.

-   The tab "SQL" can be used to execute arbitrary SQL-instructions.

The two buttons below are self explanatory. When the button "CVS Export" is hit a CVS file is created in a configured directory.

Depending on the complexity of a query it can take a long time before results are returned. Because the application is multithreaded the user interface remains responsive and the query can be stopped at any time.

The contents of the tab "log" gives you an idea what the application does. When something goes awry while executing a query a message appears in this tab.

The tab "Config" can be used to set configuration parameters. The tab "Help" contains... helpful information.

<div align="center">
![Screenshot](https://0110.be/files/attachments/103/ui.png "Screenshot")

</div>
### How Do I Add My Own Queries?

The list of predefined queries is constructed by iterating over SQL-files in a configured directory. Adding additional queries to the program is easy, just add an extra SQL-file to the directory. An SQL-file should have the following format, otherwise it is ignored:

    TITEL
    ----
    DESCRIPTION
    ----
    SQL-INSTRUCTION with zero or more !{PARAMETERS}!

In the screen shot above this query is visible:

    Select products in category
    ----
    Select all the products in a category.
    ----
    SELECT * FROM  
    products WHERE categoryid = !{category}!  

To make the queries dynamic the Query Tool supports different kinds of parameters. A parameter has this form: <code>!{type name}!</code>, the name is optional. If there is a name specified it is used as a label in the interface, otherwise <code>type</code> is used. There are three types of parameters:

1.  Parameters that define a type. For each type a corresponding user interface is rendered. E.g. for the type string a text field is rendered. The supported types are:\
    #\* <code>!{string}!</code>\
    #\* <code>!{boolean}!</code>\
    #\* <code>!{double}!</code>\
    #\* <code>!{date}!</code>\
    #\* <code>!{integer}!</code>

2.  Parameters for raw SQL. A textfield is rendered, the contents is directly injected in the SQL-query. It has this format: <code>!{sql}!</code>

3.  Parameters for lists. In the example above a list parameter is used. These lists are fetched from the database. E.g. a list of categories. The SQL-instruction and name of the list parameters can be configured.

If you want to use your own database you need to configure the database connection string. The program uses JDBC to connect to the database. It uses metadata provided by the JDBC layer. If your database has a JDBC driver with support for metadata the Query Tool will work correctly. The JDBC driver must be included in the classpath.

## Credits

The Query Tool uses the [famfamfam mini icons](http://www.famfamfam.com/lab/icons/mini/).

For demoing purposes the executable contains a lightweight [hsql](http://hsqldb.org/) database. The data in the database is a modified version of the [Microsoft Northwind](http://www.codeplex.com/NorthwindCommunity/) database. The "northwind hsql database":\[northwind.hsql.zip\] is created with this "SQL-script":\[northwind.script.txt\].

## Downloads

-   "Java Source code en documentation":\[QueryTool.source.zip\]: contains an [eclipse](http://eclipse.org) project.

-   "Executable":\[QueryTool.jar\]: Contains only the executable.


- [ui.png](https://0110.be/files/attachments/103/ui.png)

- [vooruit\_logo.png](https://0110.be/files/attachments/103/vooruit_logo.png)

- [northwind.script.txt](https://0110.be/files/attachments/103/northwind.script.txt)

- [northwind.hsql.zip](https://0110.be/files/attachments/103/northwind.hsql.zip)

- [QueryTool.source.zip](https://0110.be/files/attachments/103/QueryTool.source.zip)

- [QueryTool.jar](https://0110.be/files/attachments/103/QueryTool.jar)

---

## [Boids in Python](https://0110.be/posts/Boids_in_Python.md)

- Published: 2008-08-16T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 198
- Canonical: https://0110.be/posts/Boids_in_Python

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [School](https://0110.be/tags/School.md)

![Python Logo](https://0110.be/files/attachments/198/python-logo.gif "Python Logo")

Na het bekijken van het onderstaande filmpje van een zwerm spreeuwen vroeg ik mij af of die bewegingen zich aan een bepaald algoritme houden en of ik een programma kon schrijven die dit gedrag simuleerde. Na wat onderzoek bleek dat zowat alle dieren die zich in kudde voortbewegen dit doen volgens gelijkaardige, relatief eenvoudige processen.

<div align="center">
<object  width="425" height="344" style="margin-bottom:0.5em;margin-top:0.4em;margin-left:auto;">
<param name="movie" value="http://www.youtube.com/v/-JlsdDOUzSQ&hl=en&fs=1&rel=0"></param><param name="allowFullScreen" value="true"></param><embed src="http://www.youtube.com/v/-JlsdDOUzSQ&hl=en&fs=1&rel=0" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"></embed></object>

</div>
<br/>

Er zijn [drie basisregels](http://en.wikipedia.org/wiki/Flocking_(behavior)#top) waaraan onder andere scholen vissen, zwermen vogels en kuddes gnoes zich houden:

1.  Voorkom botsingen met de dichtste buren door de andere kant op te gaan.

2.  Beweeg ongeveer in de zelfde richting en even snel als het gemiddelde van de buren.

3.  Beweeg naar het midden van de groep.

De paper [Flocks, Herds, and Schools:\
A Distributed Behavioral Model - 1987](http://www.cs.toronto.edu/~dt/siggraph97-course/cwr87/) van Craig W. Reynolds was de eerste die deze regels formeel omschreef. Aan de hand van die documentatie en [een praktische omschrijving](http://www.vergenet.net/~conrad/boids/pseudocode.html) kon ik aan een implementatie beginnen. De "boids implementatie in Python (src)":\[boids.zip\] gebruikt [pygame](http://www.pygame.org) om een groep creaturen voor te stellen met een gekleurd vierkantje. De creaturen bewegen zich volgens de drie bovenstaande regels. Daarnaast proberen ze om binnen het zichtbare kader te blijven en begeven ze zich naar het midden van het kader. Om de boel wat interactiever te maken wordt de muisaanwijzer gezien als een gevaarlijk roofdier die niets liever lust dan vierkantjes. De vierkantjes proberen de roof-muis dus te ontlopen. De zesde en laatste regel legt een maximum snelheid op, zodat de bewegingen realistisch blijven.

De huidige implementatie is O (n²), terwijl het O (nk) zou moeten zijn, met k de grootte van de burenlijst. Een vloeiende simulatie van een zwerm van duizenden is dus momenteel niet mogelijk. De berekeningen voor een extra dimensie zijn erg eenvoudig te implementeren, helaas is de visualisatie van de resultaten dat niet. Ik heb geprobeerd om met de OpenGL bindingen voor Python te werken maar veel resultaat heeft dat niet opgeleverd. Dit is de "3D-versie":\[3D.zip\], maar dan met een 2D visualsatie.

Ik heb er voor het gemak ook een "uitvoerbaar bestand voor Windows":\[boids_binary.zip\] van gemaakt.


---

## [Vergelijking Ruby VMs](https://0110.be/posts/Vergelijking_Ruby_VMs.md)

- Published: 2008-08-08T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 252
- Canonical: https://0110.be/posts/Vergelijking_Ruby_VMs

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [School](https://0110.be/tags/School.md)

![Ruby Logo](https://0110.be/files/attachments/252/ruby_logo_new.gif "Ruby Logo")

Ik heb een [B-Tree](http://en.wikipedia.org/wiki/B-tree) en een [Red-Black tree](http://en.wikipedia.org/wiki/Red-black_tree) geschreven in Ruby. Om die datastructuren te testen heb ik een programma geschreven dat alle woorden uit een grote tekst inleest in een b-tree met het woord als sleutel en de frequentie als waarde en daarna een red black tree gebruikt als priority queue met als sleutel de frequentie en als waarde het woord. Op die manier kunnen de meest voorkomende woorden bepaald worden. De broncode is "hier neer te laden":\[trees.zip\].

Het programma is een ideale test voor Ruby VM's: het is redelijk intensief en gevarieerd. [IronRuby](http://www.ironruby.net/), [JRuby](http://jruby.codehaus.org/), [Ruby 1.8](http://www.ruby-lang.org/) en [Ruby 1.9](http://www.ruby-lang.org/en/news/2009/01/30/ruby-1-9-1-released/) werden getest op een Intel Core 2 Duo E6660 en dit zijn de resultaten:

  VM         Duur        Geheugen   VM details
  ---------- ----------- ---------- ----------------------------------------------------------------------------
  JRuby      28.79 sec   162MB      jruby 1.1.3 (ruby 1.8.6 patchlevel 114) (2008-07-20 rev 7243) \[x86-java\]
  IronRuby   88.15 sec   195MB      IronRuby 1.0.0.1 on .NET 2.0.50727.1433
  Ruby 1.8   104.1 sec   102MB      ruby 1.8.6 (2007-09-24 patchlevel 111) \[i386-mswin32\]
  Ruby 1.8   66.8 sec    96MB       ruby 1.8.6 (2007-09-24 patchlevel 111) \[universal-darwin9.0\]
  Ruby 1.9   33.42 sec   88MB       ruby 1.9.1p0 (2009-01-30 revision 21907) \[i386-darwin9.2.0\]

De verschillen zijn dus erg groot. Zowel in geheugengebruik als in duur. Ruby 1.8 is blijkbaar erg traag maar gebruikt relatief weinig geheugen. JRuby is in deze test drie keer sneller maar gebruikt meer geheugen. Ook IronRuby is sneller dan de standaard Ruby VM maar gebruikt net niet het dubbele aan geheugen. Hierbij moet wel verteld worden dat IronRuby een alfa build is, de resultaten kunnen dus nog veel veranderen.

Ruby 1.9 werd later getest op Mac OS X, met dezelfde pc. De nieuwe Ruby lijkt toch enkele beloften in te lossen. Ter vergelijking werd de voor Mac OS X geoptimaliseerde Ruby 1.8 VM die standaard met het besturingssysteem meegeleverd wordt ook nog getest.


---

## [Bash Script to Backup Remote Postgres Databases via Cron with Password Authentication](https://0110.be/posts/Bash_Script_to_Backup_Remote_Postgres_Databases_via_Cron_with_Password_Authentication.md)

- Published: 2008-07-17T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 307
- Canonical: https://0110.be/posts/Bash_Script_to_Backup_Remote_Postgres_Databases_via_Cron_with_Password_Authentication

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md)

![PostgreSQL Logo](https://0110.be/files/attachments/307/elephant-64.png "PostgreSQL Logo")

I have modified a bash-script to backup PostgreSQL databases, this is [the original script](http://archives.postgresql.org/pgsql-admin/2001-03/msg00143.php). The "modified version":\[database_backup_script.txt\] can be used to backup databases on a remote or local database server. Also this script does not need a trust relationship but uses a login and password. To get started you need to:

1.  Modify the directory and database variables to suit your needs.

2.  Add an entry to crontab to perform the backups nightly or whenever you wish.

3.  Have fun.

The script empties ~/.pgpass\ and\ writes\ login\ info\ for\ the\ system\ databases.\ Then\ it\ logs\ in\ and\ fetches\ an\ up-to-date\ list\ of\ databases.\ For\ every\ database\ an\ entry\ is\ made\ in~/.pgpass and every database is backed up. The results are logged to \$logfile.


---

## [Collaborative Filtering: Onderzoek & implementatie](https://0110.be/posts/Collaborative_Filtering%3A_Onderzoek_%26_implementatie.md)

- Published: 2008-06-13T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 108
- Canonical: https://0110.be/posts/Collaborative_Filtering%3A_Onderzoek_%26_implementatie

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Collaborative Filtering](https://0110.be/tags/Collaborative%20Filtering.md), [Cultuur](https://0110.be/tags/Cultuur.md), [Jazz](https://0110.be/tags/Jazz.md), [Muziek](https://0110.be/tags/Muziek.md), [School](https://0110.be/tags/School.md), [Thesis](https://0110.be/tags/Thesis.md), [Vooruit](https://0110.be/tags/Vooruit.md)

![Vooruit Logo](https://0110.be/files/attachments/108/vooruit_logo.png "Vooruit Logo")

Gisteren werd de laatste hand gelegd aan de thesis over collaborative filtering (CF) waar Greet Dolvelde en ikzelf een jaar mee bezig zijn geweest. Als je hier meer over wilt weten dan kan je het werk "Collaborative Filtering: Onderzoek & implementatie \[pdf\]":\[collaborative_filtering_onderzoek_en_implementatie.pdf\] downloaden. De intiemste details van verschillende CF-benaderingen worden er in geuren en kleuren uit de doeken gedaan. Uit de poster zou moeten duidelijk zijn waarover de thesis eigenlijk gaat:

<div align="center">
![Poster Collaborative filtering: onderzoek & implementatie](https://0110.be/files/attachments/108/poster-klein.png "Poster Collaborative filtering: onderzoek & implementatie"):\[poster.png\]

</div>
De poster is ook "verkrijgbaar in pdf-formaat":\[poster.pdf\].


- [vooruit\_logo.png](https://0110.be/files/attachments/108/vooruit_logo.png)

- [poster.png](https://0110.be/files/attachments/108/poster.png)

- [poster.pdf](https://0110.be/files/attachments/108/poster.pdf)

- [poster-klein.png](https://0110.be/files/attachments/108/poster-klein.png)

- [thesis.pdf](https://0110.be/files/attachments/108/thesis.pdf)

- [collaborative\_filtering\_onderzoek\_en\_implementatie.pdf](https://0110.be/files/attachments/108/collaborative_filtering_onderzoek_en_implementatie.pdf)

---

## [Genetisch algoritme in Python](https://0110.be/posts/Genetisch_algoritme_in_Python.md)

- Published: 2008-05-29T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 257
- Canonical: https://0110.be/posts/Genetisch_algoritme_in_Python

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [School](https://0110.be/tags/School.md)

![Python Logo](https://0110.be/files/attachments/257/python-logo.gif "Python Logo")

Maandag heb ik een examen over A.I. Dat gaat onder ander over [genetische algoritmen](http://en.wikipedia.org/wiki/Genetic_algorithm). Om dat principe in werking te zien heb ik een eenvoudig programmatje geschreven in Python: er zitten enkele beestjes (vierkantjes) in een omgeving. Als de beestjes opvallen, witte beestjes zie je goed zitten op een zwarte achtergrond, worden ze verslonden. De beestjes die minder opvallen overleven, muteren of planten zich voort. Overlevenden gaan een generatie langer mee. Bij het muteren verandert de huidskleur willekeurig. Bij voortplanten wordt er een kind gemaakt die het gemiddelde van de huidskleuren van zijn ouders als kleur heeft. Als het meerendeel van de beestjes uiteindelijk een goeie schutkleur aangenomen hebben kan de achtergrond veranderd worden en begint alles van voor af aan.

<div align="center">
![Screenshot genetisch algoritme.](https://0110.be/files/attachments/257/generations.png "Screenshot genetisch algoritme.")</a>

</div>
Dit is de "broncode van het programma":\[generations.py\], het werkt enkel met grijswaarden. Er is ook "een uitvoerbaar bestand voor Windows":\[generations.exe\]. De .exe is gemaakt met [PyInstaller](http://pyinstaller.python-hosting.com/). De achtergrondkleur kan veranderd worden door er op te klikken. Dit is "broncode van de versie met kleur":\[generations-kleur.py\].


---

## [Text To Speech Recognition](https://0110.be/posts/Text_To_Speech_Recognition.md)

- Published: 2008-05-11T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 300
- Canonical: https://0110.be/posts/Text_To_Speech_Recognition

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Poging tot humor](https://0110.be/tags/Poging%20tot%20humor.md)

![Python Logo](https://0110.be/files/attachments/300/python-logo.gif "Python Logo")

Om [Python](http://www.python.org/) wat te leren kennen heb ik een "Text To Speech Recognition" programma geschreven. Het roept [SAPI 5.1](http://www.microsoft.com/downloads/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&displaylang=en) aan om een tekst voor te laten lezen door Microsoft Sam. Het voorgelezen stuk tekst wordt daarna meteen via microfoon opgenomen en Sam probeert het zelf, via Speech Recognition, te verstaan. Het resultaat van de speech recognition wordt dan gelezen door Sam enzovoort... Dit is een voorbeeld van Sam in dialoog met zichzelf:

> I am sitting in a room different from the one you are in now. I am recording the sound of my speaking voice and I am going to play it back into the room again.

> I'm sitting in a room different from the one U.N. NA I'm recording the sound of my speak English and I'm going to play it back into the room against

> I'm sitting in a room different from the one you could in a LAN recording the sound of my speak English and I'm going to clamp back into the room against

> I'm sitting in a room different from the one you put in a LAN recording the sound and I speak English and I'm going to clamp back into the room against

> I'm sitting in a room different from the one you put in a LAN recording the sound and I speak a Mac into ghent

> I'm sitting in a room different from the one you put in a LAN recording the sound and I speak a match into ghent

De broncode is "hier":\[TTSR.py\] te vinden.


---

## [Stage bij kunstencentrum Vooruit](https://0110.be/posts/Stage_bij_kunstencentrum_Vooruit.md)

- Published: 2007-05-22T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 191
- Canonical: https://0110.be/posts/Stage_bij_kunstencentrum_Vooruit

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Cultuur](https://0110.be/tags/Cultuur.md), [Muziek](https://0110.be/tags/Muziek.md), [School](https://0110.be/tags/School.md), [Thesis](https://0110.be/tags/Thesis.md), [Vooruit](https://0110.be/tags/Vooruit.md)

![Vooruit Logo](https://0110.be/files/attachments/191/vooruit.png "Vooruit Logo")

Kunstencentrum Vooruit heeft sinds kort een nieuwe site opgericht. Aan de site is een community luik gekoppeld waarop gebruikers een profiel kunnen aanmaken en evenementen op een persoonlijke wishlist kunnen plaatsen. Daarnaast kunnen ze er ook tickets voor voorstellingen kopen. Ook kunnen de gebruikers relaties tussen zichzelf en vrienden leggen.

Aan de hand van die gegevens en de gegevens van in het back-office systeem zou het mogelijk moeten zijn om een cultureel profiel op te stellen van de gebruikers en ze gepersonaliseerde, relevante tips geven. De voordelen van zo'n Customer Intelligence systeem zijn legio:

-   Kunstencentrum Vooruit leert zijn klanten beter kennen

-   De klanten krijgen gepersonaliseerde tips en hierdoor wordt hun culturele interesse geprikkeld

-   Trends kunnen makkelijker ontdekt worden

-   Er kan gerichter reclame gevoerd worden

-   ...

En dat C.I. systeem gaan wij volgend jaar ontwikkelen. Er zal een uitgebreid onderzoek gebeuren naar de manier waarop en daarna wordt een implementatie gekoppeld met de in Ruby on Rails ontwikkelde website.


---

## [Sorteeralgoritmes in c++](https://0110.be/posts/Sorteeralgoritmes_in_c%2B%2B.md)

- Published: 2007-04-23T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 294
- Canonical: https://0110.be/posts/Sorteeralgoritmes_in_c%2B%2B

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [School](https://0110.be/tags/School.md)

Voor het vak algoritmen hebben we enkele sorteeralgoritmes besproken en in c geïmplementeerd. Dit is mijn versie van de algoritmes het gebruikt een interface <code>SortAlgorithm</code> en het Strategy design pattern om zijn werk te doen.

![Sorteer algoritmes en het Strategy design pattern](https://0110.be/files/attachments/294/Sortalgorithm.png "Sorteer algoritmes en het Strategy design pattern")

In principe kan om het even wat gesorteerd worden maar sommige sorteeralgoritmes (Counting Sort) werken enkel met int's. Om strings te sorteren kan gebruik gemaakt worden van de Nstring klasse.

Elk sorteeralgoritme kan getest en gemeten worden, dit is de uitvoor voor het shell sort algoritme met de Sedgewick incrementen:

    <code>
    Measuring sorting algorithm: Shell Sort: Sedgewick increments
                                Random           Sorted         Reversed
                  128                0                0                0
                  230                0                0                0
                  414                0                0                0
                  745                0                0                0
                 1341                0                0                0
                 2413                0                0                0
                 4343                0                0                0
                 7817                0                0                0
                14070             0.01                0                0
                25326             0.01                0             0.01
                45586             0.01             0.01             0.01
                82054             0.03             0.01             0.02
               147697             0.07             0.02             0.03
               265854             0.12             0.05             0.06
               478537             0.22             0.09             0.12
               861366             0.44             0.15             0.22

    </code>

Hier kan de code gedownload worden: "download":\[Sort.zip\]. Niet alle algoritmes werken even goed dit is een lijst van werkende algoritmes die het wel doen:

-   Heap sort

-   Selection sort

-   Insertion sort

-   Counting sort (enkel met int's)

-   Quicksort

-   Shell sort met
    -   Sedgewick incrementen
    -   Twee incrementen
    -   veelvouden van drie als incrementen


- [Sortalgorithm.png](https://0110.be/files/attachments/294/Sortalgorithm.png)

- [Sort.zip](https://0110.be/files/attachments/294/Sort.zip)

---

## [Vakantiejob bij Encima](https://0110.be/posts/Vakantiejob_bij_Encima.md)

- Published: 2006-07-22T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 264
- Canonical: https://0110.be/posts/Vakantiejob_bij_Encima

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md)

<div style="float:right"><img src="https://0110.be/files/attachments/264/encima.jpg"/></div>
<p>
Ik werk momenteel bij <a href="http://www.encima.be">Encima</a>. Encima maakt websites en andere toepassingen in Java. Mijn eerste week zit er al op en ik heb me bezig gehouden met een module voor <a href="http://www.weekendesk.com">www.weekendesk.com</a>. Maandag wordt de module, samen met de nieuwe versie van de site, in gebruik genomen. Weekenddesk doet het volgende:
</p>

<blockquote>

Weekendesk.com is een B2C e-commerce site die weekend- en dagtrips on line verkoopt en zich hierbij in eerste instantie op de Belgische en Nederlandse markt richt.
Weekendesk fungeert hierbij als tussenpersoon tussen de consument en de organisator van de vrijetijdsactiviteit.
De website biedt de klant op een frisse en overzichtelijke manier alle nodige informatie over de vrijetijdsactiviteiten. 
<br>
De activiteiten zijn onderverdeeld in twee types: cadeaubonnen en weekendideeën. De prijs en beschikbaarheid van elke activiteit is steeds up-to-date. On line boeken is snel, eenvoudig en veilig. Betalen kan via creditcard of per overschrijving.
<br>
Via een on line content management module kan Weekendesk alle activiteiten en de gerelateerde informatie (beschrijving, fotoboek, prijzen, beschikbaarheid, promotie, ...) beheren. Een order management module laat hen toe de bestellingen on line op te volgen.
<br>
Ook de leveranciers (organisatoren) van de activiteiten kunnen via een private on line module de beschikbaarheid, prijzen en promoties inbrengen.
</blockquote>

En net die module voor de leveranciers, organisatoren (meestal hotels) heb ik in elkaar gestoken.

---

## [Wat we in Halmstad doen](https://0110.be/posts/Wat_we_in_Halmstad_doen.md)

- Published: 2006-03-10T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 266
- Canonical: https://0110.be/posts/Wat_we_in_Halmstad_doen

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Joren In Halmstad](https://0110.be/tags/Joren%20In%20Halmstad.md), [Reizen](https://0110.be/tags/Reizen.md), [School](https://0110.be/tags/School.md), [Thesis](https://0110.be/tags/Thesis.md)

<div class="thumb" style="float:right" >
  <img src="https://0110.be/files/attachments/266/hh_logga_web.gif" alt="Halmstad University"/>
</div>

<p>
Mel en ik zijn bezig aan een systeem om war games te ondersteunen. War games zijn 
grootschalige ramp-oefeningen. 
</p>
<p>
Bijvoorbeeld een aanval van terroristen op een kerncentrale. Er wordt een bepaald scenario opgesteld: terroristen 
gijzelen werknemers en dreigen de boel op te blazen. Er wordt op deze situatie gereageerd door iedereen die daar
in het echt ook mee zou te maken hebben: politie, swat teams, er worden fake nieuwsberichten gemaakt door de media, 
de werknemers van de centrale zelf,.... 
<br/>Tijdens die simulatie wordt adhv vragenlijsten gepolst hoe goed (of slecht) 
alles verloopt. Die vragenlijsten komen op een beveiligde website die wij aan het programmeren zijn.
Die data is dan de basis voor een rapport met de bevindingen: wat verliep er goed en wat kan beter.
</p>

<p>
We gebruiken het ASP.NET 2.0 platform in samenwerking met <del>een sql express 2005 database én een object database: <a href="http://db4o.com">db4o</a>. Daarmee zijn we aan het experimenteren. Daarbij horen unit tests en <a href="https://0110.be/files/attachments/266/loadtest.png" title="load test">load tests</a>. Daaruit blijkt dat Db4o zijn beloftes waar maakt:</del>
</p>

<blockquote>
<del>Embed db4o's native Java and .NET open source object database engine into your product and store even the most complex object structures with only one line of code.
db4o slashes development cost and time, provides superior performance, and requires no DBA.</del>
</blockquote>

<p>blijkbaar zijn we verplicht een access database te gebruiken, hoe 1994, zucht. </p>



---

## [first post :p](https://0110.be/posts/first_post_%3Ap.md)

- Published: 2002-11-03T00:00:00Z
- Updated: 2013-12-05T18:19:15Z
- Author: Joren
- ID: 126
- Canonical: https://0110.be/posts/first_post_%3Ap

- Tags: [0110.be](https://0110.be/tags/0110.be.md), [Code](https://0110.be/tags/Code.md), [Poging tot humor](https://0110.be/tags/Poging%20tot%20humor.md)

first post :d

---

[Newer posts](https://0110.be/Software.md?page=2)
