vendredi 13 novembre 2009

TGITS sur Google Sites

Le format billet de blog n'étant pas toujours adéquat de mon point de vue pour faire de petits articles sur la programmation, j'ai créé un site compagnon (aussi nommé TheGeekInTheShell) à ce blog sur Google Sites.
Je réserve le blog pour mes billets d'humeur et les informations que je souhaite relayer.
Le site sera plus pour des "articles" (c'est un grand mot !) sur la programmation.

mardi 10 novembre 2009

Le Projet Euler

Une initiative intéressante qui intéressera les amateurs de problèmes mathématiques et informatiques : le "Projet Euler".

Le projet Euler propose un ensemble de petits (par la taille de l'énoncé ;-) ) problèmes qui demandent à la fois réflexion mathématique et mise en oeuvre informatique afin d'être résolus. En effet, il s'agit bien de programmer la solution en utilisant l'ordinateur pour ce qu'il est : une super calculatrice programmable !
Il est possible de s'enregistrer gratuitement sur le site pour pouvoir tenir le compte des problèmes pour lesquels vous avez trouvé une solution.

Il y a bien sûr le côté récréatif pour ceux qui aiment ce genre de petits défis qui active les neurones. C'est aussi à mon sens une mine d'or pour les enseignants d'algorithmique et d'initiation à la programmation.

Bon par contre, tout est en anglais, ce qui est parfois un problème pour certains...

Je suis tombé un peu par hasard sur ce site, à la lecture d'un article de DeveloperWorks sur le langage Clojure dans lequel quelques problèmes du Projet Euler sont résolus avec ce langage.

http://projecteuler.net/

dimanche 18 octobre 2009

IntelliJ IDEA vient de passer en OpenSource

Cela fait pas mal de temps que j'entends souvent des commentaires élogieux sur IntelliJ IDEA... néanmoins comme je n'ai jamais eu l'opportunité de l'utiliser dans un contexte professionnel et que ce dernier était payant, je n'avais jamais pu vérifier ces dires par moi-même.

Jeudi dernier, en jetant un oeil aux derniers podcasts disponibles, je suis tombé sur le dernier en date de l'excellent JavaPosse (épisode #283) qui parle du passage en Open Source d'IntelliJ IDEA.
Ainsi une version "Community" est disponible gratuitement pour Windows/Mac/Linux. Cette propose tous les plugins pour le développement Java hors JEE et pour différents language de la JVM (Groovy, etc.). La version Ultimate avec tout le nécessaire pour faciliter le développement JEE reste quant à elle payante.

Dans tous les cas, c'est une excellente nouvelle et va permettre à un large public de développeurs de tester cet IDE.

Rendez-vous sur le site de JetBrains dédiés à IntelliJ : www.jetbrains.org.
Des informations et des liens sur le site de l'épisode #283 du JavaPosse (ainsi que le Podcast qui est également disponible sur iTunes) et sur le site d'Artima.

Bien sûr il doit y avoir bien d'autres des sites et blogs qui doivent désormais relier la news !

A vos claviers !

dimanche 21 juin 2009

Les Cast Codeurs Podcast

En attendant d'avoir le temps et le courage de publier la suite de l'échiquier en JavaFX, voici un petit billet pour parler d'un podcast sur la plateforme Java que j'ai découvert récemment, qui est très intéressant et surtout - ce qui n'est pas si commun - en français !
Je veux parler des Cast Codeurs Podcast. En allant sur leur site à l'occasion de ce billet, j'ai vu que le sixième épisode était sorti aujourd'hui. J'étais tombé dessus un peu par hasard sur iTunes, lors d'une recherche sur Java il y a peut-être 3 semaines. Cela m'a fait pensé à une version française de the JavaPosse (et je le pense comme un compliment) : les participants savent de quoi ils parlent (du beau monde de la communauté Java française : Emmanuel Bernard, Guillaume Laforge, Antonio Goncalves, Vincent Massol), cela se passe dans la bonne humeur, les informations techniques et les news sur la plateforme Java sont réellement intéressantes pour un développeur Java. Bref un podcast indispensable qui a pour une fois la bonne idée d'être en français !
Le site : http://lescastcodeurs.com/

dimanche 17 mai 2009

Un échiquier en JavaFX

Dans ce billet, un petit programme en JavaFX qui dessine en un échiquier. Ce petit programme était l'occasion de s'essayer à utiliser un CustomNode (qui ici correspondra à l'échiquier). Et quand il y a quelques années j'enseignais la programmation en Java, le dessin d'un échiquier était un des premiers TP que je donnais aux étudiants quand nous abordions AWT/Swing, parce que c'est simple à mettre en oeuvre.

Ci-après la copie d'écran du programme :



Ce programme est composé de 2 fichiers : ChessBoardNode.fx qui contient la classe ChessBoardNode qui étend la classe CustomNode et Main.fx qui contient notre Stage et utilise le ChessBoardNode.

Tout d'abord ChessBoardNode.fx :

/*
* ChessBoardNode.fx
*
*/

package simplechessboard;
import javafx.scene.CustomNode;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.paint.Color;
import javafx.scene.shape.Rectangle;

/**
* @author TGITS
*/

public class ChessBoardNode extends CustomNode {
public var lightColor:Color;
public var darkColor:Color;
public var casesByRow:Integer;
public var numberOfRows:Integer;
public var caseWidth:Integer;
public var caseHeight:Integer;
public var x:Integer;
public var y:Integer;

override function create():Node {
return Group {
content: for (i in [1..casesByRow]) {
for (j in [1..numberOfRows]) {
Rectangle {
x: this.x + this.caseWidth * (i-1);
y: this.y + this.caseHeight * (j-1) ;
width: this.caseWidth;
height: this.caseHeight;
fill: if ((i+j) mod 2 == 0) {this.lightColor}
else {this.darkColor };
}//Rectangle
}//for
}//content
}//Group
}//Create
}//create

Tout ceci est assez simple, mais revenons sur quelques points :
- La classe CustomNode est une classe abstraite et il faut redéfinir la fonction "create" ; attention en JavaFX quand on redéfinit il faut utiliser le mot clé override.
Cette fonction create est un peu comme la méthode paint pour les composants graphiques en Java/Swing : en la redéfinissant on indique comment le composant doit être "peint". Cette méthode doit retourner un objet de type Node. Ici on créé plusieurs Rectangle (en fonction du nombre de lignes et du nombre de cases par ligne, valeurs définies dans les attributs) pour lesquels on alterne les couleurs parmi 2 et qui forment un Group, sous-classe de Node.

On remarquera qu'un certain nombre d'attributs ont été définis pour rendre l'échiquier plus facilement paramétrable.

Autre point, on notera ici l'utilisation du for et du if : il faut rappeler qu'en JavaFX, ce sont des expressions et qu'ils retournent un résultat.
A part cela, ce code ne pose pas de difficultés particulières.

Maintenant utilisons cette classe dans Main.fx :


/*
* Main.fx
*
*/

package simplechessboard;

import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.stage.Stage;
import simplechessboard.ChessBoardNode;

/**
* @author TGITS
*/

Stage {
title: "Simple Chess Board"
scene: Scene {
content : ChessBoardNode {
lightColor:Color.WHITE;
darkColor:Color.BLUE;
casesByRow:8;
numberOfRows:8;
caseWidth:50;
caseHeight:50;
}//content
}//Scene
}//Stage

On utilise directement un objet ChessBoardNode, en renseignant certains de ces attributs. On notera que l'abscisse et l'ordonnée de l'échiquier ne sont pas renseignées, pas plus d'ailleurs que la largeur ou la hauteur de la Scene ou du Stage : c'est JavaFX qui détermine tout cela en prenant les valeurs au plus juste.

Initialement, je voulais proposer une suite à ce billet sur JavaFX, en repartant de cet exemple et en l'améliorant un peu par la mise en oeuvre du "binding" de JavaFX pour obtenir simplement des petits effets sympathiques. Cependant je trouve qu'un billet de blog ce n'est pas l'idéal pour faire un texte comportant du code. En effet, je ne doit pas être doué mais je n'ai pas réussi à faire une mise en page correcte simplement pour les parties de code. En plus pas possible de joindre une archive du projet.

Entretemps j'ai créé un petit site sur Google Sites, dans lequel je reprends et complète ce billet.

jeudi 14 mai 2009

Cours d'introduction au SGBD

Un cours d'introduction au SGBD avec MySQL. Cela s'adressait à des étudiants n'ayant pas de connaissances particulières sur les bases de données mais ayant un background informatique. Ce cours n'a pas connu de mise à jour significative depuis 2005-2006. Elle est également disponible directement sur SlideShare.

mercredi 13 mai 2009

Cours d'introduction à C++

Voici un cours d'introduction à C++, s'adressant à un public type bac +3 connaissant ayant des connaissances minimum en algorithmique et connaissant le C. Cette présentation est également disponible sur SlideShare.

mardi 12 mai 2009

Cours d'introduction à Java

Voici un cours d'introduction à Java qui date un peu (dernière mise à jour significative en 2005-2006), mais qui sait cela peut servir. La présentation est également disponible sur SlideShare. Ce cours s'adresse à des étudiants niveau Bac +3/Bac +4 connaissant déjà C et C++.

lundi 11 mai 2009

Cours d'introduction à UML

Ci-après un cours d'introduction à UML que j'ai donné en 2005-2006 à l'ISAIP Dijon quand j'y étais responsable de la formation & enseignant.

Cela date un peu et cela fait un moment que cette présentation est sur SlideShare... mieux vaut tard que jamais, je la mets également sur mon blog.

D'autres présentations correspondant à d'anciens cours que j'ai donnés devraient suivre petit à petit. En espérant que cela puisse être utile.

dimanche 3 mai 2009

Une cardioïde en JavaFX (bis)

Quand en 2007 j'avais regardé pour la première fois JavaFX, j'avais fait un petit programme qui affichait une cardioïde.

Entre temps, JavaFX a changé (moi aussi d'ailleurs mais c'est une autre histoire :-P) et comme je suis en train de m'essayer à nouveau à JavaFX, voici une nouvelle version d'un dessin de cardioïde avec JavaFX.

/*
* Main.fx
*/

package javafxcardioide;

import java.lang.Math;
import javafx.ext.swing.SwingSlider;
import javafx.scene.paint.Color;
import javafx.scene.Scene;
import javafx.scene.shape.Polyline;
import javafx.stage.Stage;

var slider = SwingSlider {
minimum: 0
maximum: 100
value: 50
translateX: 10
translateY: 320
}

def rho:Number = bind slider.value;

function generatePath(rho:Number): Number[] {
var points:Number[] = [];
var theta_radian:Number;
var x_theta:Number;
var y_theta:Number;
for (theta in [0..360]) {
theta_radian = theta / 180.0 * Math.PI;
x_theta = rho * Math.cos(theta_radian) * ( 1 + Math.cos(theta_radian));
y_theta = rho * Math.sin(theta_radian) * ( 1 + Math.cos(theta_radian));
insert x_theta into points;
insert y_theta into points;
};
return points;
}

Stage {
title: "Dessin d'une cardioïde"
width: 300
height: 400
scene: Scene {
content: [
Polyline {
points : bind generatePath(rho)
strokeWidth: 2.0
stroke: Color.BLUE
translateX: 50
translateY: 150
},//Polyline
slider
]//content
}//Scene
}/Stage
Cela donne cela :


Rien de bien extraordinaire dans le code. Le Slider permet de modifier la taille du cardioïde. Sont utilisés ici les capacités de binding de JavaFX (entre le paramètre rho de la courbe paramétrique et la valeur sélectionnée par le Slider ; pour plus d'information sur la cardioïde voir http://fr.wikipedia.org/wiki/Cardio%C3%AFde).

La fonction generatePath retourne une séquence de coordonnées x et y correspondant à la cardioïde par rapport à la valeur du paramètre rho. Cette séquence de coordonnées est utilisée par la Polyline.