Capita selecta antwoorden…

Antwoorden nodig van Capita selecta?

http://dl.dropbox.com/u/1056571/Capita selecta.pdf

Ownee gemene boeven hebben de PDF met alle antwoorden geëncrypteerd, kan jij de encryptie breken en de meeste punten rapen op het examen?

Even serieus: dit zijn de antwoorden van Capita Selecta 2010-2011 waaraan ik een week gewerkt heb (29 pagina’s). Om het toch niet te makkelijk te maken, mag je je kennis van encryptie bovenhalen die je verworven hebt in de opleiding toegepaste informatica.

Succes!

Java UI programming is frustrerend!

Ok, ik probeer een nice UI te maken in Java maar dit leidt al snel tot frustraties en on-Godvriendelijke woorden. Men zegt dat JavaFX beter is maar eigenlijk is dat ook zo’n ding dat niets verbeterd (misschien maar beter dat ze het stop zetten). Voor webdevelopment bestaan er tools als HTML en CSS waarmee je in no-time prachtige layouts kan maken. Dus waarom zitten wij eigenlijk in de 21ste eeuw nog te sukkelen met instanties te maken van Swing klasses of subklasses te maken ervan om een paar regels toe te voegen in de paint methode. Men zou beter eens kijken naar Flex! Daarmee maak je UI’s in een XML taal die je ook kan stylen (zelf weet ik niet hoe maar het kan dacht ik via CSS). Het taaltje zou er dan als volgt kunnen uitzien:

<j:frame>
<j:label>Dit is een label</j:label>
</j:frame>

Natuurlijk ook een hoop toegevoegde components want ik zit al uren te kloten om een BoxContainer te maken zoals in Flex.

Part of the logo *

Ik heb mijn project uit de tweede lade gehaald en ben begonnen met een stukje van het logo, ziehier het stukje.

*update*

Konden we dit niet voorkomen…

In mijn cursus van Digitale beeldbewerking was ik enkele frameprocessen aan het bekijken. Eén ervan is de deling.

(I1*255)/(I2+1)

Als I2 nul wordt, moet er 1 bijgetelt worden zodat delen door nul onmogelijk wordt. Nadeel is dat alle pixels 1 waarde teveel krijgen. Moesten we honderden jaren geleden nu afgesproken hebben om delen door nul toe te staan, dan moesten we geen rekening houden met dit soort zaken. Je kan makkelijk vermenigvuldigen met 0, optellen met 0 en aftrekken met 0. Alleen delen door 0 moest weer anders zijn. Als we nu eens afspreken dat delen door 0 kan maar ik ben er nog niet aan uit welke uitkomsten dit zou geven. Ik heb twee mogelijke oplossingen voor T/0.

  1. T
  2. 0

Ik ben voorstander voor de tweede uitkomst. Dan zijn we gelijk met de vermenigvuldiging. Misschien dat meneer Van Hee (een trouwe blogbezoeker) iets op kan zeggen op mijn “belachelijk” of “revolutionair” concept ^^. Het zou een stuk geruster programmeren zijn in de toekomst, weg met divided-by-zero exceptions.

Idee’tje

Toen ik volgende artikel op tweakers las, kreeg ik een idee. Als je niet thuis bent, je bent gaan werken en je vrouw zit weer te kletsen bij de buurvrouw, en er komt iemand langs die aanbelt (de postbode, een kameraad, getuige van jehova, …). Het systeem vertelt aan de aanbeller dat er niemand thuis is. Dan kan deze persoon een videoboodschap nalaten (een camera en microfoon inbouwen moet niet zo lastig zijn zekers in dit idee).
Later kom je terug van je werk, de vrouw zit nog altijd te kletsen bij de buurvrouw, en zie je dat er iemand aan de deur is geweest. Je klikt op de video waarin de aanbeller zijn boodschap verteld. Het systeem zou moeten ingebouwd zijn dat je die persoon zou kunnen bellen of dat je de persoon zijn locatie (thuis, werk, …) kan doorsturen naar je gps in je auto en er naartoe rijden.

Of dit systeem al bestaat weet ik niet, ik hoop van niet en ik hoop ook niet dat er een chinees dit bericht leest.

Google Wave!

Google Wave is een nieuw product van Google om berichten onderling uit te wisselen. De demo dat ze geven is verbluffend en bied zeer leuke mogelijkheden. Ik zit al een tijdje met een project in me hoofd. Sommige lezers weten dat ik een code editor gemaakt heb, Online Code Editor. Nu wil ik die editor een nieuwe dimensie geven door het mogelijk te maken om met verschillende programmeurs aan één stuk code te werken.

Met Google Wave zou dit mogelijk zijn. Stel dat Stijn en Pieter werken aan een website. Een project heeft een mappen structuur en bestanden met code erin. Ieder bestand zou een Wave zijn en georganiseerd volgens de mappen structuur. Als je de wave opent, zie je als eerste bericht de code en kan je die bewerken. Nu kan je met Google Wave tegelijk een wave bewerken. Dus Pieter en Stijn kunnen tegelijk werken aan een stuk code. Ook het geven van commentaar zou leuk zijn. Met Google Wave kunnen we dan ook de veranderingen zien die onlangs gebeurt zijn en met de timeline de veranderingen zien gebeuren! De veranderingen aan het bestand worden dan ook doorgevoerd aan de server waar de bestanden staan.

In ieder geval brengt Google Wave me een stap dichter bij dit project.

ID3 met bladwijzers

ID3 is de standaard om informatie van je MP3 op te slaan (artiest, uitgever, …). Soms zit ik met MP3 bestanden van 90MB. Sommige stukjes hoor ik graag en na een week is het dan zoeken van “waar is dat leuk stukje terug” en kan ik terug gaan zoeken naar de tijd waar het stukje begint.

Om dit probleem te verhelpen, dacht ik om bladwijzers te invoeren. De enige redelijke manier om dit te doen zou via ID3 zijn. Je zou ook een extra bit kunnen toevoegen aan de header van een MP3 block. Als de bit 1 is zou je kunnen zeggen dat die block een favoriet is. Hoewel dit laatste betekent dat alle MP3 software aangepast moet worden.

{java} instanceof en typecasting

In Java komt het wel eens voor dat ik kijk of een object van een bepaalde class afkomstig is met het keyword instanceof. Wanneer ik een methode uit die class wil gebruiken, moet ik die typecasten en dan pas kan ik een methode oproepen. Een voorbeeld. Ik heb een class A met twee childs B en C. In B zit een methode “getBItem()” en in C de methode “getCItem()”. Nu heb ik een class D die een lijst bijhoud van A classes. Tijdens het itereren van mijn lijst in class D, gebruik ik instanceof om te kijken of het object van class B of C komt. In de huidige Java zou dit er als volgt gaan uitzien.

Iterator<A> iterator = getLijst().iterator();

while( iterator.hasNext() ) {
A current = iterator.next();

if( current instanceof B ) {
B currentB = (B) current;
Object item = currentB.getBItem();
} else if( current instanceof C ) {
C currentC = (C) current;
Object item = currentC.getCItem();
}

In een intelligentere compiler zou Java zien dat als een if conditie true oplevert dat current daadwerkelijk een instantie is van class B (of class C) en dat de programmeur niet meer hoeft te typecasten. Zo zou het eruit zien.

Iterator<A> iterator = getLijst().iterator();

while( iterator.hasNext() ) {
A current = iterator.next();

if( current instanceof B ) {
Object item = current.getBItem();
} else if( current instanceof C ) {
Object item = current.getCItem();
}

Project X

Terwijl Butters nog even in de schuif ligt stof te vangen, ben ik al bezig met nieuwe dingen. Eén zaak is NekoVM. Neko is een jonge programmeertaal. Het leuke aan deze taal is dat je zelf libraries kan schrijven. Het project lijkt me wel iets en geeft me wel zin om enkele libraries en uitbreidingen te schrijven voor deze taal. Hoewel dit geleidelijk aan zal gebeuren, zit er al een halfjaar een idee te broeden in mij. Dit idee noem ik project X en is eigenlijk een afgezwakte versie van wat eerst Mindios moest worden (de mensen van eOs weten wel wat dit was). Ik noem het project X omdat ik het nog zelf allemaal moet op papier plaatsen en omdat ik er niet teveel details over kwijt wil nu. Het enige wat ik erover kwijt wil is dat je in de richting van communicatie en CVS moet denken. Project X zou zowel een server als clientside software bevatten. Met project X zal ik volgende maand al beginnen ontwikkelen. Ondertussen zit wat met Neko te experimenteren, wacht ik op de upgrade van Ubuntu en zal ik een DTD schrijven die mij (en anderen als ze dat willen) het makkelijk maakt om eenvoudige websites maken in XML/XLST stijl.

(en tussendoor wat studeren zal ook geen kwaad kunnen zekers :D)

{Java} Virtuele packages

Naar aanleiding van me recenste concept om methodes toe te voegen aan classes waarvan je de source code niet hebt, heb ik een nieuw concept uitgedacht omdat er een probleem was met packages. Klassen zitten in packages (ook wel namespaces genoemd). De Object class zit in de package java.lang. Wanneer we een methode toevoegen moet deze class ook in de package komen en hier komt het probleem. Als je twee dezelfde klasses in een package stopt, krijg je problemen. Zowel met de compiler als voor de programmeur zelf, hij weet niet meer wat zijn code was en de originele. Daarom introduceer ik het concept virtuele packages. Je maakt een nieuwe package aan met dezelfde naam van het originele package maar je zegt dat het een virtuele package is. Dan weet je dat hierin classes bevinden die jij geschreven hebt die de originele classes uitbreidt (extend).

virtual package java.lang;

class Object extends Object

{

public String toString()

{

return this.getClass().getName();

}

}

Wanneer een child dan import java.lang.*; gebruikt, zal hij eerst de originele classes inladen en dan pas de classes in de virtuele overschrijven met de originele. Zo moet de child geen nieuwe import schrijven en kan met naar hartelust bestaande classes in binaire vorm naar hartelust uitbreiden of verbeteren.