Pas facile de remplacer son vieux lavabo par un beau meuble avec vasque, robinet neuf, miroir, et bonde Champi clic-clac quand on n’y connaît rien.
Et pour corser le tout, Murphy était de la partie : entre le robinet général d’eau froide grippé, le robinet général d’eau chaude qui ne ferme pas complètement, les cotes de la notice qui sont fausses, l’installation de robinets d’arrêt impossible, une coulisse de tiroir qui est plus basse que les autres, la conduite d’évacuation trop loin du mur et qui oblige à tailler le meuble à la scie sauteuse pour qu’il puisse plaquer, l’évacuation du siphon qui tombe 12 cm plus haut que le conduit d’évacuation parce que la nouvelle vasque est plus haute que le vieux lavabo, les aller-retours aux magasins de bricolage pour trouver une solution, et une fois que tout est fini, on essaie enfin, et là, ça fuit…
Lire la suite…
En java, n’importe quel objet implémentant l’interface Serializable peut être converti facilement en une séquence d’octets. Cette même séquence peut ensuite être reconverti en l’objet original. Ce mécanisme est par exemple utilisé pour transmettre des objets par RMI.
Voici une petite méthode pour vérifier que votre classe est bien sérialisable
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
public class Assert {
/**
* Assert that an object is serializable by dumping it and then reading it
* back and finally by checking the original object and the dumped and read
* object are equals.
*
* <p>Obviously, the method <code>equals()</code> has to be implemented
* correctly for this method can work.
* @param objOriginal the instance which will be checked against serialization;
* must implement <code>equals()</code> or it won't work
*/
public static void assertSerializable(Object objOriginal) {
try {
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
final ObjectOutputStream out = new ObjectOutputStream(stream);
out.writeObject(objOriginal);
out.close();
final ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(stream.toByteArray()));
final Object objSerialized = in.readObject();
assertEquals(objOriginal, objSerialized);
} catch (IOException e) {
fail("unable to serialize or deserialize object " + objOriginal + ": " + e.getMessage());
} catch (ClassNotFoundException e) {
// unlikely to happen...
fail(e.getMessage());
}
}
}
</p>
Lire la suite…
Dans un article précédent, je donnais une méthode pour convertir rapidement un nombre en binaire et inversement quand on n’avait pas python 3. Ça m’est pratique quand j’ai besoin de faire une conversion rapide : un terminal, on lance python, on tape l’expression et on a le résultat. En regardant les nouveautés de ruby 1.8.7, j’ai découvert que c’était encore plus trivial.
% irb
irb(main):001:0> 42.to_s(2)
=> "101010"
irb(main):002:0> "%b" % 42
=> "101010"
irb(main):003:0> "1001".to_i(2)
=> 9
irb(main):004:0> 0b1001
=> 9
Enfantin non ?