Flux RSS

mercredi 31 mai 2006

Château Clos Mignon - Rosé 2004

J'ai découvert le Château Clos Mignon lors de l'opération Bienvenue à la ferme. La production, sous AOC Côtes du Frontonnais est assez diverse, du blanc (bof bof) au rouge (correct) en passant pas le rosé (sympathique).

Le rosé 2004, justement, médaille d'argent au Concours Général Agricole de Paris 2005 (si ça vous parle...) n'est pas exceptionnel, mais correct. Il se rapproche un peu du 6éme sens, le rosé 2004 de Gérard Bertrand, avec cependant un peu mois de structure mais plus de nez.

Olivier Muzart, Vigneron - Récoltant
Villeneuve-les-Bouloc
31620 Fronton

L'international mon petit, l'international

Pour avoir des interlocuteurs intéressants, plus de subventions, y tout tout, il y a un truc à la mode : prévoir d'adresser le marché international dans son plan de développement. Faisant du logiciel, je n'ai pas résisté à la tentation.

Dans cette optique, depuis ce début d'après-midi, mon application est totalement multi-lingue : anglais et français.

Le plus dur, ça va être de trouver des revendeurs potentiels à l'étranger!

mardi 30 mai 2006

La capital, c'est capital (désolé, elle était facile!)

Le capital prévisionnel minimum est pour le moment de 12 000€. C'est un montant assez important pour donner statistiquement plus de chances de succès à l'entreprise. Mais plus il y en a, mieux c'est. Donc, je le rappelle: il y a 100 parts sociales, et une part coûte 800€. Réservez vite la ou les vôtres !

Techniquement, ça fuse!

Je peaufine tranquillement le logiciel de GED. Pour ceux que ça intéresse, j'ai presque terminé l'ajout deux fonctionnalités que j'avais prévu d'intégrer dans une version suivante : la gestion des méta-informations (avec même un éditeur!) et une zone de travail améliorée (avec copier/coller par drag'n'drop).

J'ai - hélas - modifié pas mal de choses dans le coeur du logiciel, ce qui m'a fait crouler sous des heures de boulot. Mais maintenant, j'ai une base en laquelle j'ai une confiance élevé. Le serveur est à présent un programme multi-threadé entièrement en Java, dont toutes les données sont persistées dans une base de données (même les documents), grâce à Hibernate (donc tout est transactionnel). La partie indexation n'a pas bougé, c'est toujours le moteur d'indexation Lucene qui est aux commandes. Je suis passé aussi, en toute logique, à Ant pour gérer les compilations.

Parce que j'ai changé des gros morceaux, j'ai décidé de rationaliser les tests : j'utilise JUnit (c'est bien) en combinaison avec Emma, pour la couverture des tests (c'est mieux). Pour le moment, j'en suis à une couverture de 21%. Je compte atteindre 95% à la mi-juin. J'ai profité du refactoring des tests unitaires pour mettre en place un mini-SDK en Java et sous licence BSD, ce qui permettra au client de s'intégrer facilement avec la GED (les tests unitaires utilisent le mini-SDK pour se connecter au serveur et émettre des commandes pour vérifier les réponses).

DV et Linux, ça marche!

J'ai branché en Firewire un camescope DV sur mon PC, j'ai lancé kino, et .. magie, tout a fonctionné du premier coup! L'acquisition du contenu de la casette DV ou d'un live est parfaite, aucune trame n'est perdue.

Par contre, pour le montage, c'est bien plus galère. Kino est fâché avec ma version des mjpegtools et de ffmpeg : je ne peux pas exporter un montage! Je n'ai trouvé qu'une application propriétaire qui fonctionne bien, MainActor.

MAJ: J'ai recompilé ffmpeg et kino, tout fonctionne à présent.

mardi 23 mai 2006

Hop, Juin!

Après réflexion, je n'attendrais pas la rentrée pour l'immatriculation de l'entreprise : - Je vais utiliser la "période creuse" des vacances pour "ingurgiter" les courriers administratifs de création d'entreprise. - Si j'arrive à établir rapidement les premiers contacts avec des clients/revendeurs potentiels, je pourrais prendre en compte leur feedback pour la rentrée, en ayant ainsi une sorte de version 1.5. Besoins mieux adressés = produit mieux vendu (enfin, il parait).

Donc, l'immatriculation est (enfin) pour juin. Vive l'aventure!

lundi 22 mai 2006

Dilemme

Dilemme!

Je suis enfin prêt à monter l'entreprise: le logiciel fonctionne pas trop mal (j'ai même commencé à intégrer - de façon très conservative - des fonctionnalités prévues pour la version 2) mais ...

... mais créer une entreprise en Juin, ce n'est pas forcément le meilleur moment : les vacances approchent à grand pas, promettant un début d'activité creux. Donc, je pourrais repousser le tout à la mi-août, ce qui me permettrais d'avoir un logiciel encore mieux fini, mais ...

... mais sauf que si j'attends trop, c'est moi qui risque une faillite personnelle : les réserves s'amenuisent.

Dur dur, le choix.

mardi 16 mai 2006

Apple MacBook

Ça y est, Apple a enfin dévoilé le successeur de l'iBook, le MacBook. Avec les options nécessaires (Core Duo à 2GHz, 1Go de RAM, 80Go de disque), le geek s'en sort avec un total de 1500 € TTC.

C'est le portable que j'achèterais pour ma future entreprise. Pourquoi ? Tout d'abord parce qu'il est classe et que pour les démonstrations, ça compte; mais surtout parce que ayant un Mac, je vais pouvoir porter les logiciels de l'entreprise dessus (aussi bien la partie cliente que la partie serveur).

Maj: L'écran glossy, pas glop.

samedi 13 mai 2006

Miss Memory

J'ai commandé de l'équippement photo sur Miss Memory.com mercredi, et ce samedi matin, j'ai été livré. Rapide, efficace, prix corrects (pour des français) : rien à redire!

Enfin si, je suis un peu déçu par l'emballage j'aurais préférée que mon flash 580EX ait été mieux protégé que par du papier à bulle posé en vrac dessus.

Sur ce, je vais acheter des piles rechargables pour tester ma dernière acquisition :-)

mercredi 10 mai 2006

Hibernate Annotations, MySQL et les LONGBLOB

Attention, je partage ici un un mémo personnel, car je pense qu'il peut être utile. Le vocabulaire n'est pas forcément académiquement correct, si vous trouvez des coquilles, vos commentaires sont les bienvenus. Pour comprendre ce qui suit, vous devez être familier avec Hibernate!

Pour stocker dans MySQL des gros blobs, jusqu'à 2Go, il faut utiliser les types LONGBLOB et LONGTEXT, car les blobs de base sont limités à 64ko.

Dans Hibernate Annotations, pour la définition d'un blob dans une entitée (@Entity), il ne faut donc pas utiliser l'annotation @Lob, mais à la place @Column(columnDefinition="LONGBLOB") pour du binaire, ou @Column(columnDefinition="LONGTEXT") pour du texte.

Par exemple:

  @Entity
  public class Revision implements Serializable {
     Long  id;
     Date creationDate = new Date ();
     String creationComment;
     byte  binaryContent;
     String textualContent;
     @Id
     @GeneratedValue
     public Long getId () {
        return id;
     }
     public void setId (Long id) {
        this.id = id;
     }
     @Temporal(TemporalType.TIMESTAMP)
     public Date getCreationDate () {
        return creationDate;
     }
     public void setCreationDate (Date creationDate) {
        this.creationDate = creationDate;
     }
     public String getCreationComment () {
        return creationComment;
     }
     public void setCreationComment (String creationComment) {
        this.creationComment = creationComment;
     }
     @Column(columnDefinition="LONGBLOB")
     public byte getBinaryContent () {
        return binaryContent;
     }
     public void setBinaryContent (byte binaryContent) {
        this.binaryContent = binaryContent;
     }
     @Column(columnDefinition="LONGTEXT")
     public String getTextualContent () {
        return textualContent;
     }
     public void setTextualContent (String textualContent) {
        this.textualContent = textualContent;
     }
  }

Quand une entitée est chargée par Hibernate, tous ses attributes sont récupérés depuis la base de données (Eager loading). Donc si cette entitée contient des blobs, tous les blobs seront lus. Inutile de vous dire que cela peut rapidement mettre à genou la base de données, même la rapide MySQL.

Pour corriger ce problème, il existe deux solutions. La première consiste à créer pour chaque blob un entitée, car le chargement des collections (les liens entre les objets, comme les pointeurs, vecteurs, etc etc) est dynamique (Lazy loading).

La seconde solution consiste à activer le chargement dynamique des attributs. Il faut pour cela spécifier ledits attributs par une annotation.

  ...
  @Basic(fetch=FetchType.LAZY)
  @Column(columnDefinition="LONGBLOB")
  ...
  @Basic(fetch=FetchType.LAZY)
  @Column(columnDefinition="LONGTEXT")
  ...

Mais cela ne suffit pas : si le code n'est pas instrumenté (=bytecode passé à une moulinette spéciale), l'annotation est SILENCIEUSEMENT IGNOREE. Pour l'instrumentation, une tâche Ant est fournie. Pour l'utiliser, par exemple:

  <target name="instrument">
     <taskdef name="instrument" classname="org.hibernate.tool.instrument.cglib.InstrumentTask">
        <classpath refid="l'id de la définition du classpath avec les .jar"/>
     </taskdef>
     <instrument verbose="true">
        <fileset dir="le dossier où sont les .class à instrumenter">
           <include name="*.class"/>
        </fileset>
     </instrument>
  </target>

Nota: Le MySQL de la Mandriva 2006 a un bug, il faut l'utiliser avec le driver JDBC Connector/J 3.0.17 et pas une version supérieure! (j'ai perdu une demi-journée avant de trouver le problème...)

Les aides à la création d'entreprise

La recherche et l'obtention des aides à la création et au développement d'entreprise, c'est ... galère. J'ai trouvé un peu par hasard une solution intéressante à ce problème : je vais passer par un consultant qui fait le job chiant et réverbératif pour une rémunération au résultat, avec un maximum de 15% des montants obtenus. Ce consultant a pour mission de rechercher les aides disponibles et de monter les dossiers nécessaires. Que de temps de gagné pour l'entrepreneur!

Si cette expérience est probante, je vous donnerais plus de détails.

Ikea est passé par là!

A force de bosser 10h par jour avec un siège trop bas (vérin hydraulique cassé), je me suis un peu abîmé : douleurs aux poignets, puis à l'avant bras, puis au bras, puis au dos et au cou! J'ai décidé d'agir avant d'être incapable d'utiliser une clavier. Je suis passé de ça (120 x 60 cm):

À ça (160 x 80 cm):

Le nouveau bureau est plus profond, ce qui me permet enfin de poser mes avant bras pour tapoter sur mon clavier. Mais aussi et surtout, ce bureau est réglable en hauteur: je l'ai réglé pour être un peu plus bas que la moyenne, ce qui est plus confortable. Je n'ai plus qu'à trouver un siège neuf qui me convient pour être un chouilla plus haut, et ce sera parfait.

Mais cette histoire de changement m'a aussi donné envie de zapper mon vaillant 17 pouces Sony Multiscan 200sx âge de huit ans (du très bon matériel) contre un écran LCD 20 pouces en 16/10°. Hélas, ce n'est financièrement pas raisonnable :-(

dimanche 7 mai 2006

Savoir dire non!

J'ai vu une une publicité de Dell où cette entreprise affirme être devenue leader en sachant dire non, basiquement pour avoir un processus ultra-optimisé, donc des coûts faibles qui permettent de se démarquer de la concurrence au niveau des tarifs. Je trouve cela tellement logique et de bon sens! Un des points clef de la réussite de Dell est d'avoir tout simplement choisi ses clients, en ne traitant essentiellement qu'avec ceux qui veulent bien suivre ses processus, dont le principal : l'achat sur Internet.

Ce n'est qu'en forçant un processus auprès de ses clients que l'on peut mettre en place dans sa propre entreprise des processus internes complets. C'est une belle théorie, mais j'ai hélas peur que cela ne soit applicable qu'à grande échelle, c'est à dire avec des grosses entreprises. Il faut avoir la capacité à dire : Si on bosse ensemble, c'est en suivant CETTE démarche et pas une autre.

Mais je reviens sur le choix des clients : je pense que c'est par contre un facteur essentiel de réussite. Je sais que les jeunes entreprises ont tendance à accepter tout et n'importe quoi pour tout simplement réaliser les premières ventes. Je suis convaincu que lors des premières années d'existence de l'entreprise, les deux tiers des prospects sont des clients potentiels dont le potentiel est surtout celui de faire perdre du temps (entre ceux qui veulent toujours en plus "cette petite fonctionnalité en plus" mais sans jamais vouloir la payer, les indécis qui enchaînent réunions stériles sur réunions stériles, les mauvais payeurs...).

Et trier, ça a au moins l'avantage de limiter les déplacements, et de ne pas dépenser des sommes astronomiques en essence. J'ai fait le plein en début d'après-midi, et pour 45 litres, j'ai déboursé pas moins de 58 euros. En parlant voiture, je devrais sûrement prendre une assurance pro. Mais ceci est une autre histoire...

mercredi 3 mai 2006

Je morfle

Je morfle! J'ai décidé d'avancer l'implémentation de deux notions importantes dans le logiciel : le transactionnel et l'asynchrone. Je comptais initialement les implémenter dans la version deux, mais je me suis ravisé : les changements induits sont assez importants, et écrire un outil de migration de la version un vers la version deux prendrait beaucoup trop de temps. Donc je bosse 10h à 12h par jour, et j'ai encore bien 100 à 150h de boulot!

Pour ne pas que parler de technique, j'ai été me renseigner sur la ZFU de Toulouse : je vais monter un dossier pour être intégré à la pépinière de la ZFU. Les conditions de travails ne sont pas superbes (OpenSpace, mais bureaux privatifs pour les réunions), mais ça a le mérite de coûter peu cher (environs 200€ par mois avec l'accès Internet) et le préavis est court (deux mois, les baux commerciaux classiques sont à durée fixe, de trois à neuf ans!).