Waarde uit JPasswordField halen

Een kleine tip voor mensen die de tekst van een JPasswordField willen halen. De getText() methode is deprecated dus moet je het als volgt gaan doen.

String wachtwoord = new String(passwordField.getPassword());

De getPassword() van JPasswordField geeft een array van chars terug waarvan je dan een String object van maakt. Let op! Gebruik niet de toString() methode van de array want die geeft het adres terug van die array.

Java Persistence API: annotations

Java Persistence API (JPA in het kort) is eigenlijk de API die ervoor zorgt dat je je objecten kan opslaan in databases. Bijvoorbeeld je hebt een database voor liedjes. Je hebt een songs, albums en artiesten tabel. Daarin zitten bepaalde kolommen die dan per record waarden krijgen. Nu is het zo dat ik in me opleiding een basis gekregen heb van JPA. Daar leerden we enkele annotaties kennen als @Entity en @OneToMany. De annotaties zeggen dat die klasse een tabel is en dat de properties van de klasse de kolommen zijn. Nu heb je ook dat je relaties hebt tussen objecten en tabellen. Bijvoorbeeld een liedje kan in meerdere albums voorkomen en een album kan meerdere liedjes hebben. Dat is een ManyToMany relatie. Een andere relatie is een OneToMany (of ManyToOne) relatie. Voorbeeld is dat een song een artiest heeft en een artiest kan meerdere liedjes hebben. In SQL vorm en met behulp van ERD toestanden wordt dit als volgt weergegeven.

Nu is het zo dat ik al ontwikkelaar altijd eerst de database ontwerp doe en dan pas de software eromheen ga maken. Nu had ik een ERD gemaakt en alle tabellen aangemaakt en dan komt de ontwikkeling in Java. Omdat het mijn eerste grote toepassing is in Java met combinatie van een database, zat ik mij af te vragen of ik geen JPA kon gebruiken (want zelf een ORM maken neemt dan terug veel tijd in beslag). Ik had al een basis kennis in me broekzak en wist dat JPA eigenlijk nogal een eigenzinnige manier heeft van namen te geven aan tabellen en kolommen. Ook had ik geen zin om de structuur aan JPA over te laten maar JPA moest mijn structuur volgen. Dus die naam gebruiken voor die entiteit en die namen voor die kolommen en de relaties moesten zo gaan noemen. Dus ik ging op zoek hoe ik dat kon doen. Ik vond dingen als @JoinTable en @JoinColumn voor de relaties en @Table en @Column voor de namen van tabellen en kolommen.

Laat ons eens beginnen met de code te geven die Netbeans maakt als je een entiteit maakt.

Song.java
Album.java
Artiest.java

Je ziet dat er relaties zijn. In JPA moet een relatie altijd een eigenaar hebben. Je ziet dat er soms staat mappedBy en dan een naam. Dat is de naam van de klasse property die de eigenaar is van de relatie. Zo weet JPA dat aan de andere kant van de relatie naar die mappedBy moet gekeken worden om zo de corresponderende objecten te vinden.

Nu willen we dat de tabel namen en kolommen gelijken op onze ERD. Dit is belangrijk want als die database al in gebruik is door andere toepassingen, dan willen we niet dat JPA alles gaat verknoeien door zelf namen te geven. Ik heb de code nogmaals gepost met de annotaties erbij en in commentaar staat er uitleg bij.

Song.java
Album.java
Artiest.java

En nog een screenshot van de tabellen en kolommen die gemaakt zijn.

Voor meer uitleg of vragen kan je altijd een reactie nalaten hier.

Metasploit

Voor het vak computer- en netwerkbeveiliging moesten we een opdracht maken. Ik heb gekozen om eens een exploit te doen met Metasploit. Dat is een framework dat exploits bevat die je lekker kan runnen. Het leuke eraan is dat je code aan de exploit kan toevoegen die uitgevoerd wordt op de slachtoffer zijn computer. De leukste payload is degene die een shell sessie opent bij de slachtoffer. Kan je leuk commando’s uitvoeren op zijn computer. Anyway, ik heb een exploit gedaan omtrent Java. Maar meer kan je zien op het filmpje. Enjoy.

Java vs .NET quote

Vandaag een leuke quote/verhaaltje/mopje gevonden over Java en .NET.

A group of 4 Microsoft .NET programmers and a group of 4 Java programmers are going on a train to an expo. The MS programmers buy a ticket each, and then watch the Java programmers proceed to buy one ticket between them.

The MS programmers are intrigued and when they get on the train, they watch the Java programmers to see what they do when the guard comes to check the tickets. It turns out that, before the guard comes, they all cram into the toilet. The guard knocks on the door, and asks for the ticket. The guard takes it from under the door, and slides it back.

The MS programmers are all impressed, so on the way back, they buy only one ticket. Only to watch the Java folks get on the train without buying a ticket at all.

When they get on the train, the MS people cram into the toilet, as they saw the Java folks on the earlier journey. The Java programmers then knock on the door, and say “Ticket please”. The MS programmers slide the ticket under the door, as they saw the Java programmers do earlier.

“Thank you”, they say. “You steal our methods, but you don’t understand them.”

Mindios in JSP

Owja Mindios is voor de 101ste maal herrezen en ditmaal in JSP vorm. Voor het vak Internet programmeren moeten we voor het examen een site maken in JSP/JSF of Flex met Persistency. Ik ga daarom Mindios implementeren in JSP met mijn eigen JSP mini-frameworkje dat ik in februari gemaakt heb.

Eventjes over het project zelf spreken. Met Mindios kan je projecten beheren. Daar valt onder om een team samen te stellen van verschillende levels (developpers, testers, …). Dit kan doordat mensen zich aanmelden bij jou project. Jij plaatst een advertentie waarop leden kunnen soliciteren. Er komt ook een soort van tijdslijn met taken op die moet voldaan zijn. Taken worden toegedeelt aan een team of teamleden. Je kan dan ook bepalen dat al die taken moeten voltooid zijn om je project te releasen. Een release bestaat uit een aantal downloads voor platformen. De projectleider kan die release uploaden als de taken voor die release voltooid zijn. Daarnaast heeft ieder project een wiki pagina met daarin standaard categoriën als bugs, tutorials, FAQ, …

Eind deze week moet 80%-100% af zijn.

MultiExplorer 1.0 final release

Het is zover…de final release van MultiExplorer’s eerste versie. Er zijn nieuwe bestandtypes toegevoegd, een nieuwe beeld, opties bovenaan om bestanden/mappen te verwijderen, aan te maken, kopiëren, plakken en te hernoemen. Er zijn ook een aantal bugjes uitgehaald. De menubalk is ook weg omdat er maar één functie was, namelijk een nieuwe tab openen. Dit is vervangen door een plus-icoon-tab achteraan de andere tabs (inspiratie door Firefox). Foutmeldingen worden zoveel mogelijk zelf opgelost, de fouten die nog niet automatisch worden verholpen worden getoont in een venster met de boodschap. Standaard worden de bestanden van de huidige gebruiker getoont van deze computer.

De kopieer/plak functie werkt volledig maar heeft jammer genoeg geen progressbalk. Dus grote bestanden kopiëren kan lang duren. Wanneer je een bestand kopieert, dan wordt de “plakken” knop actief in alle tabs. Dit betekent dat je dit bestand kan plakken in alle tabs. Je kan gerust van PC naar FTP plakken en visa versa maar ook van PC naar PC en van FTP naar FTP. De functionaliteit hangt niet af van het soort data provider.

Wat komt er nog? Ik ga na de examens hier een Google project voor oprichten, ga wat uitbreidingen toevoegen:

  • Zoekfunctie
  • Mappen kopiëren en plakken
  • Progressbalk voor acties die aan het uitvoeren zijn (files deleten, plakken, van map veranderen, …)
  • JTable gebruiken in plaat van JList zodat het beeld “Tegels” de bestanden naast elkaar kan plaatsen.

Download: MultiExplorer2Final.jar (801 kB)
MD5 checksum: 4faa22f31e69de3727bc5d314e5690ec
SHA-1 checksum: 3974f30b574339522216d9412c501715aab48a03

MultiExplorer RC1

Jup jup, ik zit niet stil. Het gaat goed mijn MultiExplorer. Het enige wat ontbreekt zijn features als mappen aanmaken, bestanden openen met een extern programma afhankelijk van het type bestand,  kopieren/plakken van de ene tab naar de andere tab en een “Map aan het openen…” lader. Die lader is nodig voor verkenning via netwerk en dit traag kan gaan. Deze features worden zondag met de final release toegevoegd. Ditmaal een screenshot want de vorige keer was ik dit vergeten.

Download: MultiExplorer2ReleaseCandidate.jar (536 kB)
MD5 checksum: e50b8a18b55fcb515cb8983f667d45e6
SHA-1 checksum: b917c04f0d84331e7bbae22c2e481ada78b7eb01

MultiExplorer beta 1

Voor het vak Visuele Gebruikersomgevingen (Java GUI software maken met Swing) moeten we een eindproject maken. Ik had eerst gedacht aan een formulier ontwerpen. Dit heb ik vervangen door een soort van bestanden verkenner. De reden was dat een formulier ontwerpen mij teveel werk ging kosten voor de tijd enzin die ik had.

MultiExplorer is eigenlijk een bestanden verkenner die met verschillende technologiën werkt. Je kan bestanden verkennen op je eigen computer, op een ftp server, … Ik laat drie puntjes omdat ik die eerste twee zelf gemaakt heb. Het programma is ontworpen zodat jij zelf ook een technologie kan implementeren en toevoegen aan het systeem. Het heeft een ingenieus setup systeem per technologie die gebruik maakt van Java Reflect.

Het gaat hier om beta 1 (er is al een eerdere versie geschreven maar die is later verworpen en terug vanaf 0 gewerkt wegens slecht ontwerp) en dus zitten er nog foutjes en ontbrekende modules in dit programma.

Mensen die graag de FTP willen testen. Je kan als hostname ftp.mozilla.org gebruiken zonder username en password. De PathSeparator is /. Dit wordt gevraagd omdat ik niet kan achterhalen wat het symbool is dat de mappen van elkaar scheidt. Van de computer kan ik dit wel achterhalen.

Er komt nog een toolbar bij zodat je een map hoger kan en ook vorige locaties kan terug openen. Ook komen er views zodat die lijst met bestandname vrolijker wordt. En als kers op de taart wat opties zoals copy/paste/delete/open/download/…

Veel plezier met het testen. En laat ik avdg niet vergeten te bedanken voor de eerste test te doen.

Download: MultiExplorer2Executable.jar (462 kB)
MD5 checksum: 6611f5ca1f93d8e3eac2de1336d5c7fe
SHA-1 checksum: cadcddf152a7d16439f67ebd69c9c2814f61b7dc

Compile script voor Java projecten

Sinds vorige week werk ik met openSuse 11.2 en dus programmeer ik er ook mijn Java projecten op. Ik heb besloten om eens Vim te leren ipv het automatisch gedoe van Netbeans/Eclipse. Een Java programma schrijven is niet moeilijk maar het compilen is iets anders. Daarom heb ik een bash script geschreven die mijn eigen project map structuur doorloopt en alles compiled en in een executable JAR stopt. Me project map structuur ziet er als volgt uit.

Java
— Project naam
—- src
—- bin
—- lib

In de src zit mijn broncode bestanden, in de bin komen alle compilde bestanden in en in lib zitten de images en third party JAR’s.

compile.sh: http://aiids.pastebin.com/ckCbfjUn

Het gebruik ervan is simpel.

compile.sh Project_Naam package.Main

De eerste parameter is de naam van je project. Dit is de naam van de ma in je java projecten map. De tweede parameter is de klasse die de main methode bevat. Als die klasse in een package zit, moet je die package ook meegeven.

Wie dit ook wil gebruiken moet javac en jar geïnstalleerd hebben en je moet regel 5 aanpassen naar de map waar je projecten in staan.

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.