Another (Idiot) Intelligent Developing Software


Vlaamse programmeerwedstrijd

Vandaag was het de Vlaamse programmeerwedstrijd. Ons team (JaWS) staat op de 20ste plek van de 45 teams binnen onze categorie. Er waren vijf vragen waarvan we één heel snel hadden. Ik had degene met priemgetallen maar was de zeef van Eratosthenes vergeten en had hem bijna maar hield geen rekening met priemgetallen tussen 1 en 10. Althans dat is wat ik denk. Mijn programma kwam hetzelfde uit met de voorbeeld input en output. Een andere kwam foute output uit. Een vierde waren we bezig maar we hadden tijd tekort voor te implementeren en de vijfde lieten voor wat het was. De vragen post ik wel nog eens als ze online komen.

Het was een toffe ervaring, vooral omdat het eens iets anders is dan het gewone programmeren aan de KHL. Ook enkele oude bekenden van de KULAK waren er ook. Dus tof om deze mensen nog es te horen.

Er was gratis drank en een broodje ’s avonds. We kregen een gratis t-shirt, dat was onze enige prijs. Ook minister Vincent van Quickenborne gaf een toespraak op het einde. Hij begon over Twitter omdat onze lector hem op Twitter lastig viel. Daarnaast sprak hij vol lof over Opensource projecten en dat hij voorstander ervan was en dat ze ook meer en meer Opensource gebruiken op zijn kabinet en de overheid (50 sites draaien op Drupal) en dat allemaal bij het bijzijn van de sponsor Microsoft ^^.


Image viewer uitgebreid

Ik ben net klaar met me vijfde opdracht voor Visuele gebruikersomgevingen. Ik ben redelijk tevreden van het resultaat maar struikel toch nog over het heap overflow probleem. Wat heb ik gemaakt? Ik heb mijn vorige Image Viewer uitgebreid met extra functies zoals een slideshow. Er zit dus een Timer in, een JPopupMenu die je toelaat om tijdens de slideshow te pauzeren of te stoppen, een Toolbar die je bovenaan ziet en nog zoveel meer.

Download: ImageViewer.jar (243 kB)
MD5 checksum: 34109082368238f57b9b6fa9d806f4d5
SHA-1 checksum: f71d0d8813924d856ee347a438c27766559b1a44


Pastebin API in PHP

Pastebin.com heeft een nieuwe website en ook een API nu. Ze laten zelfs toe om je code te embedden in je blog of website. Dit kan door een iframe of gewoon met javascript. Ik heb voor de PHP mensen onder ons een Pastebin klasse geschreven.

Wat is het nut ervan?
Je kan als webmaster je code hosten bij pastebin.com en daarna embedden in je website. De stijl wordt door pastebin.com verzorgt. Dus als je …

hebt, maak je een nieuw object aan. Stuur je het naar pastebin en kan je de embedded URL opslaan. Bijvoorbeeld:

$pastebin = new Com_WordPress_Aiids_Util_Pastebin(… , taal);
$pastebin->post();

$jsUrl = $pastebin->getEmbeddedJsURL();

echo ‘<script src=”‘ . $jsUrl . ‘”></script>’;

De broncode!

Pastebin.php: http://aiids.pastebin.com/10UmGg9A
Exampe.php: http://aiids.pastebin.com/wgY5zLAB

Enjoy!


Pastebin subdomein

Vanaf heden worden alle code fragmenten op een subdomein van de site pastebin.com opgeslaan. Dus vanaf nu allen naar http://aiids.pastebin.com om mijn code fragmenten te begluren.


Kotnet onderzocht!

Jupjup, het is terug zover. Kotnet frustratie deel 2. Ik heb een mail gestuurd naar de kotnet admins dat ze hun limieten moeten verhogen omdat ze nog limieten hanteren van 2004. We staan nu zes jaar verder en het internet is sterk gegroeid qua multimedia (youtube, …), rich internet applicaties (flash, javafx, silverlight, …), cloud applicaties (google, facebook, …) enzovoort. Ik zal wachten op hun antwoord.

Nu heb ik nog iets ontdekt. Per seconde komt er 1543 bytes bij je limiet. Dus als ik nu 1543 bytes download, staan er binnen de seconde terug 1543 bytes erbij. We gaan ervan uit dat we nu op 0 bytes staan. Kotnet zegt het volgende:

Vanaf 15 agustus 2004 geldt er een volumelimiet van 4 Gigabytes downloadverkeer per 30 dagen per gebruiker.

Dus ik moet binnen 30 dagen terug 4GB kunnen downloaden. Ik heb voor jullie even de rekensom gemaakt.

1543 * 60 * 60 * 24 * 30 bytes = 3.72 GB

Dus kotnet geeft ons per 30 dagen 0.28 GB te weinig. Ik zit al 17 maanden op kotnet en dat betekent dat kotnet mij iets meer dan 5GB verschuldigd is! Ik wil dan nu mijn 5GB en hogere limieten!


Check/generate checksums

Ik verveelde me deze morgen en ben dan maar begonnen aan een checksum programma. Je kan er checksums mee maken van je bestanden. Je kan ook de checksum van een bestand controleren. Het programma kan gemakkelijk bestanden van GB’s controleren of checksums van maken (het duurt gewoon lang -> zie progressbar die tevoorschijn komt).

Een checksum is een reeks van hexadecimale getallen (32 voor MD5 en 40 voor SHA-1). Het vertelt of het gedownloade bestand wel correct is. Stel ik publiceer mijn Checksum.jar en geef de checksum. Iemand anders geeft jou ook die Checksum.jar maar met een virus erin. Dan kan jij met de checksum van mij kijken of die Checksum.jar correct is. Je kan van ieder type bestand een checksum maken of controleren.

Voor de geïnteresseerden, de broncode zit in de jar pacakage.

Download: Checksum.jar (203 kB)
MD5 checksum: 09afcf61c88784b7ce4ffca260395682
SHA-1 checksum: d52b46e2c8da5d909093ed34dafd1d04e4ea1058

Versie 1.1 - ondersteuning om een bestand te slepen naar het “File: ” tekstvak zodat een bestand kiezen sneller gaat. Het menu is een beetje uitgebreid met informatie.


Image viewer

Alweer een nieuwe applicatie. Deze keer moesten we een eigen layout manager maken en het template patroon gebruiken.

http://dl.dropbox.com/u/1056571/Java/imageviewer.normaal.jar
http://dl.dropbox.com/u/1056571/Java/imageviewer.negatief.jar

Er zitten twee foutjes in. Als de afbeelding kleiner is dan 100 op 100 pixels, gaat hij een exception gooien. Als er teveel afbeeldingen zijn om te laden gaat hij een heap overflow exception gooien.


Externe libraries toevoegen

Als je in je Java applicatie gebruikt maakt van externe libraries (.jar files) en je wilt die externe jar’s mee builden in je applicatie jar, moet je het volgende doen. Je opent de build.xml en plakt de volgende onderaan (net boven </project>).

http://pastebin.com/ff407941

Ik stop me externe libraries in de lib/ map van mijn project. Eerst en vooral moet je de naam van de jarfile wijzigen. Als je gaat builden worden twee jar’s gebouwd. Namelijk één met en één zonder je externe libraries.

<jar jarfile=”dist/NotepadMetMigLayout.jar“>

Daarna ga je per externe library een zipfileset regel toevoegen.

<zipfileset src=”lib/miglayout-3.7.jar” excludes=”META-INF/*” />

Als laatste ga je zeggen welke klasse je main methode bevat.

<attribute name=”Main-Class” value=”be.khleuven.s509679.vgo.notepad.Main“/>

Dit is gedaan in Netbeans met Ant als builder.


Simple notepad applicatie

Voor me tweede opdracht voor het vak visuele gebruikersomgevingen moesten we iets maken dat WindowEventListener, JDesktopPane, JList met JDefaultModel en GridBagLayout gebruikte. In plaats van GridBagLayout mocht je ook MigLayout gebruiken. MigLayout is een layout ontwikkeld niet door Sun en werd eigenlijk aangeraden door een student die al veel Swing ervaring heeft.

Ik had eerst me notepad met GridBag gedaan maar het is zo moeilijk te begrijpen en maakte fouten tijdens runtime. Je moet ze maar eens bekijken de fouten. Ik heb zes uur zitten zoeken wat de fout is en niet gevonden. Na een halfuur had ik hetzelfde met MigLayout en het werkt correct tijdens runtime. Mensen die ook met Swing werken, kan ik vanaf nu MigLayout aanraden.

De eerste foto is hoe het er zou moeten uitzien. Bij de derde foto voeg ik iets toe aan de textarea linksonder. Hierdoor gaat die panel verbreden. Bij de tweede foto heb ik de applicatie geminimaliseerd en dan terug gemaximaliseerd. Geen scrollbalk maar hij is vergroot. GridBagLayout gebruiken is problemen zoeken.

Voor alle mensen die hopeloos zoeken naar de link van de applicatie, het staat hieronder.

Simple notepad applicatie

update

Er is nu syntax highlighting!!! Dankzij JSyntaxPane project :-).


JScrollPane bugje

Tijdens het programmeren was ik aan het werken met JScrollPane. Ik had een exception die me naar de source van de JScrollPane code leidde. Ik scrolde naar beneden en wat zie ik daar…

http://pastebin.com/f4e8b25c7

Sinds wanneer worden String objecten met de == operator vergeleken?  Woot ik heb een eerste bug in Java gevonden :-P

Damn, iemand was me voor.

/**
* This method gets called when a bound property is changed.
* @param e A <code>PropertyChangeEvent</code> object describing
* the event source and the property that has changed. Must not be null.
*
* @throws NullPointerException if the parameter is null.
* @since 1.5
*/
public void propertyChange(PropertyChangeEvent e) {
String propertyName = e.getPropertyName();
if (propertyName == “horizontalScrollBar” ||
propertyName == “verticalScrollBar”) {

if (e.getNewValue() instanceof JScrollBar) {
setScrollBarRelations((JScrollBar)e.getNewValue());
}
}
}