Affichage des articles dont le libellé est technique. Afficher tous les articles
Affichage des articles dont le libellé est technique. Afficher tous les articles

samedi 16 décembre 2017

LazySloth : un outil pour générer rapidement des JavaBeans

Dans un article précédent (ici), j'ai encouragé l'idée de développer et de construire sa propre boite à outils pour réaliser des tâches répétitives ou ennuyeuses, même, si l'outil en question ne sera pas utilisé par d'autres personnes. L'outil peut être un script, un programme ou un (mini) (micro) logiciel qui fait une seule chose.

Le fait qu'il ne sera pas utilisé par d'autres personnes possède un côté positif. Il n'est plus nécessaire de bien documenter le code, respecter les modèles sophistiqués ou utiliser la dernière technologie. Il n'est plus nécessaire de contrôler toutes les données ou bien de corriger tous les bugs. C'est votre propre outil et vous connaissez ses points faibles.

Dans cet article, je veux présenter l'un de mes outils préférés : LazySloth. Comme son nom l'indique, je l'ai créé parce que je suis un peu "fainéant". Vu que je travaille souvent sur des diagrammes de classes ou bien des diagrammes Entité/Association, cet outil me permet de traduire rapidement ce diagramme vers des classes Java (JavaBeans) et des scripts SQL pour créer les tables adéquates.

L'idée est de faire le tout en une seule commande dans la ligne de commande. Cette commande est constituée de trois partie :

1. Qu'est ce qu'on veut générer :
    a. -java : pour générer des classes Java seulement.
    b. -sql : pour générer des script SQL seulement.
    c. -both : pour générer les classes Java et les scripts SQL.

2. Le nom de la classe ou de l'entité qu'on veut traduire vers Java et SQL.

3. La liste des colonnes séparées par des espaces. La première lettre désigne le type de la colonne, elle ne sera pas prise comme partie de son nom. Les types des données supportés sont les types que j'utilise personnellement dans les différents exemples :
    a. i : pour Integer, pour stocker des entiers.
    b. n : pour Numeric, pour stocker les nombres réelles.
    c. d : pour Date, pour stocker des dates.
    d. s : pour String, pour stocker des chaînes de caractères. C'est le type désigné par défaut si l'outil n'arrive pas à déterminer un type à partir de la première lettre de la colonne.

Il est possible d'ajouter des contraintes après le nom de la colonne. Elles doivent être séparées par des ":" pour ne pas les confondre avec le nom de la colonne. Les contraintes supportées pour le moment :
  1. pk : pour désigner la colonne comme clé primaire.
  2. sN : (exemple s20) pour spécifier N (20 dans l'exemple) comme taille de la chaîne de caractères.
  3. a : pour désigner la colonne comme AUTO_INCREMENT.

Exemples :

Si la commande ne donne pas toutes les informations nécessaires, l'aide de l'outil est affiché :

java -jar LazySloth.jar



Une commande très simple consiste à créer une classe qui contient le id, le nom et le prénom :

java -jar LazySloth.jar -both Exemple1 sid:pk snom:s100 sprenom:s100



Le code Java généré est :

public class Exemple1{

 String id;
 public void setId(String p){
  this.id = p;
 }
 public String getId(){
  return this.id;
 }

 String nom;
 public void setNom(String p){
  this.nom = p;
 }
 public String getNom(){
  return this.nom;
 }

 String prenom;
 public void setPrenom(String p){
  this.prenom = p;
 }
 public String getPrenom(){
  return this.prenom;
 }

}

Le code SQL généré est :

Create Table Exemple1(
 id Char(100) Primary Key,
 nom Char(100),
 prenom Char(100)
)

Comme un dernier exemple, cette commande teste les qutre types supprotés :

java -jar LazySloth.jar -both Exemple2 iid:pk snomprenom:s200 ddatenaissane nsolde


Le code Java généré est :

public class Exemple2{

 int id;
 public void setId(int p){
  this.id = p;
 }
 public int getId(){
  return this.id;
 }

 String nomprenom;
 public void setNomprenom(String p){
  this.nomprenom = p;
 }
 public String getNomprenom(){
  return this.nomprenom;
 }

 Date datenaissane;
 public void setDatenaissane(Date p){
  this.datenaissane = p;
 }
 public Date getDatenaissane(){
  return this.datenaissane;
 }

 double solde;
 public void setSolde(double p){
  this.solde = p;
 }
 public double getSolde(){
  return this.solde;
 }

}

Le code SQL généré est :


Create Table Exemple2(
 id Int Primary Key,
 nomprenom Char(200),
 datenaissane Date,
 solde Decimal(10, 2)
)

Le projet entier se résume en une seule classe Java qui peut être facilement modifiée pour ajouter de nouveaux types de données, de nouvelles contraintes ou pour exécuter d'autres commandes après la génération du code telles que la compilation des fichiers Java générés ou bien pour exécuter les scripts SQL créés.

Le projet se trouve à SourceForge, l'outil que j'ai toujours utilisé pour télécharger des projets OpenSource bien avant l'arrivée de GitHub. Vous pouvez le télécharger par ici.

dimanche 23 décembre 2012

Mon niveau technique a baissé? Et un mot sur les frameworks.

Depuis presque cinq ans, je me suis orienté vers la vie académique. J’étais fortement inspiré par mon projet de fin d’étude qui portait sur l’application des techniques de Recherche d'information (RI) pour résoudre des problèmes liés à l’e-Learning. Il était déjà très clair dans ma tête que je veux continuer l’aventure académique.

Depuis, j’ai travaillé sur plusieurs aspects techniques et conceptuels touchant directement  à la problématique de l’apprentissage à distance. Au milieu de tout cela, j’ai ignoré un aspect important dans ma carrière comme étant informaticien, avant d’être un jeune-chercheur : c’est l’aspect technique, maintenant, je sens que mon niveau technique a baissé! Comment ça s’est arrivé?

Durant les cinq années, j’ai travaillé en Free-lance, c’est très pratique quand il est difficile d’occuper un poste à plein temps (parce que ça sera un sacrifice de la carrière académique). En Free-lance, on a la possibilité de garder un certain niveau de pratique technique, et je suis sûr que je garde le même niveau que j’ai eu depuis quatre à cinq ans alors où est le problème?

Le problème c’est le style de développement, les habitudes des développeurs et les techniques de développement. Il n’est plus possible de suivre le même rythme en commençant chaque fois “from scratch” ou de développer suivant un modèle MVC personnel, il est important de ne plus écrire un code personnel à 100%, il faut réfléchir à utiliser les frameworks disponibles. 

“Il n’y a plus de Javascript, il y a maintenant jQuery”, affirme Scott Hanselman, et de la même façon, dans quelques années, nous n’allons plus entendre de Java, PHP et C# sous la même forme d’aujourd’hui, les frameworks deviendront inséparable des projets de développement les plus simples. Mon niveau technique n’a pas baissé, il n’a pas évolué et c’est ça le problème.

Il est évident qu’il est difficile de suivre deux chemins au même temps, qu’il est impossible de tenter d’attraper deux lapins au même temps, mais, des fois il est amusant d’essayer. Ainsi, mon conseil à vous aussi : les habitudes de programmation changent, il faut que nous changions aussi, sinon, nous perdrons la bataille, tout comme les dinosaures.