kops Kops Online PageS

30mai/090

Du changement dans le système

Les exams passés, le projet multimessenger rendu, ainsi que la vidéo d'animation, il était temps de faire du ménage sur le pc. J'ai cherché un nouveau système à essayer. La contrainte était d'avoir un environnement sous Kde4. Pourquoi ne pas essayer autre chose que du linux ? Je regarde vite fait du côté des BSD les plus connus : OpenBSD, FreeBSD et NetBSD. Le choix part pour NetBSD... Pourquoi pas ?

Installation du système de base pas plus compliquée qu'un autre système, le serveur X ne pose pas des masses de problèmes non plus, c'est quasiment tout automatisé par des scripts. Maintenant, pour installer KDE4 faut aller utiliser le projet WIP, qui signifie "Work In Progress". Déjà ça rebute un peu quand on veut se construire un environnement pour une utilisation de tous les jours. Qu'à cela ne tienne, c'est parti... On lance la compilation de l'usine à gaz. Ça a fini par fonctionner, mais finalement c'est pas ce qu'il me faut. Si je me permet de comparer le système pkgsrc de NetBSD à portage de Gentoo, je trouve portage bien plus simple à utiliser (quand on installe depuis les sources bien sûr). Les "use flags" de Gentoo sont plus simple à mettre en place que les "options" de NetBSD.

Du coup, j'ai un élan de lucidité : Et si j'essayais un truc où on compile pas tout ? Un truc ou y'a tout qu'est intégré, et qu'on optimise pas ? Je persiste du côté BSD, et là je sors PCBSD. Basé sur FreeBSD et il a déjà l'environnement de bureau KDE4 ! Testé sur mon portable aucun soucis, ça tournait. Mais sur mon pc de bureau, pas moyen de passer l'installation, le pc freeze au milieu de la copie des fichiers. Il est 3h du mat', il me faut une solution sans me prendre la tête.

Et je teste Arch Linux. Installé en moins d'une heure (largement) avec un KDE4 qui marche parfaitement bien. La simplicité d'installation est impressionnante. J'ai même failli me laisser tenter par remonter un RAID + LVM sur mes 3 disques durs Raptor. La raison m'a rappelé à l'ordre, pour ce que ça apporte, j'ai remis ça à plus tard. Mais n'empêche que ça doit être possible de mettre ça en place en deux coups de baguette magique.

4mai/090

La sérialisation en Java

Je passe une soirée à glander avant de passer aux choses sérieuses... et je me dis que je vais sérialiser mes objets Java à la main pour mon projet Asyd. Il suffit d'implémenter l'interface Externalizable et de jouer avec les flux :

public void writeExternal(ObjectOutput out) throws IOException {
	ByteArrayOutputStream bout = new ByteArrayOutputStream();
	DataOutputStream dout = new DataOutputStream(bout);
	dout.writeInt(2);
	dout.writeUTF("muahaha");
	out.writeInt(bout.size());
	GZIPOutputStream gzout = new GZIPOutputStream((OutputStream) out);
	gzout.write(bout.toByteArray());
	gzout.finish();
}

Ci-dessus on applique un coup de compression GZip sur les données qu'on écrit, pratique pour les objets qui ont beaucoup d'informations à sérializer.

Et pour désérializer, il ne reste plus qu'à faire la même chose dans l'autre sens :

public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
	int size = in.readInt();
	GZIPInputStream gzin = new GZIPInputStream((InputStream) in);
	byte[] data = new byte[size];
	byte[] buf = new byte[1024];
	int len;
	while (len = gzin.read(buf) != -1) {
		System.arrayCopy(buf, 0, data, len);
	}
	ByteArrayInputStream bin = new ByteArrayInputStream(data);
	DataInputStream din = new DataInputStream(bin);
	int deux = in.readIn();
	String muahaha = in.readUTF();
}

Mouais, ça a l'air bien ennuyant pour pas grand chose... Voyons ce que ça donne. Ma classe représente un dossier et contient dans un tableau de string tous les sous fichiers/dossiers.

Nombre de sous dossiers/fichiers Sérialisation par défaut Sérialisation à la main
6 757 octets 161 octets
38 2,3 Ko 360 octets
232 14 Ko 3,4 Ko

Ça marche plutot bien dans tous les cas ;)

Taggé comme: , Aucun commentaire
3mai/090

Révisions

Voilà, j'ai une semaine pour préparer les exams.
On va commencer par se mettre à l'aise, donc ranger un bon coup.