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

lundi 28 septembre 2009

Septembre 2009

Intro : J'ai décidément du mal à tenir ce blog à jour... Pourtant, il y a bien des sujets dont je souhaiterais parler ici ; mais entre les articles demandant trop d'investissement en temps et ceux qui seraient trop courts, au final, je ne publie pas. Donc j'ai décidé de me lancer dans une série mensuelle, listant rapidement des petites choses intéressantes, tout domaine confondu (enfin, surtout ceux habituellement traités ici...). En espérant donner un petit coup de fouet à ce blog qui refuse de mourir.

Logiciels :

Découvert au taf, Launchy est un petit lanceur d'application bien sympathique, disponible sous Windows et Linux. Très pratique (et libre).

M'étant mis tout récemment à la musique assistée par ordinateur (voir plus bas), je vous conseille Audacity (libre et multi-plateforme) que je découvre pour tout ce qui est enregistrement et montage audio. J'avoue que j'ai toujours eu peur des logiciels de MAO à cause de la complexité de certaines références (genre Cubase), mais là ça se présente de manière plutôt simple, même s'il faut creuser un peu pour certaines fonctionalités.

Enfin, j'ai récemment commencé à utiliser Eclipse au travail... Contre toute attente, je sens que ce soft va me réconcilier avec les IDE : bien que lourd, il fait un nombre de tâches hallucinant et facilite vraiment la vie du développeur sur pas mal de points assez peu intéressants (conventions syntaxiques, intégration du gestionnaire de configuration, génération automatique de méthode, commentaires, détection d'erreurs en live, etc...). J'ai sans doute l'air de découvrir la roue, mais bon... quand ça tourne bien, faut pas bouder son plaisir.


Musique

Certains le savent, d'autres non. Je suis un gros fan de Blues, et je joue depuis "presque" un an de l'harmonica diatonique (blues harp donc). Comme je l'avais déjà dit ici, je pense que ce sujet est un peu loin des thématiques habituelles de ce blog, et donc j'en parle chez Lefty.
Notamment ce mois-ci : un article sur une compilation de Blues très bien foutue pour ceux qui veulent découvrir, et un premier essai d'enregistrement avec Lefty à la gratte (d'où l'utilisation d'Audacity).


Pro

Suite à la fin de ma mission précédente, j'ai enchainé cet été sur un nouveau truc en... Java. Et plus précisément en Java3D.
Ce nouveau job me plait beaucoup, en bonne partie parce que j'apprends énormément de choses nouvelles, et que l'environnement est assez différent de mes expériences précédentes.
D'abord le domaine de la géométrie algorithmique (que je connaissais déjà dans un contexte de calcul scientifique/modélisation mathématique) qui est bigrement intéressant. Pour l'occasion, je me suis d'ailleurs (enfin) payé le Computational Geometry (de Berg - Cheong - van Kreveld - Overmars) que je ne saurais que trop conseiller à ceux qui s'intéressent à ces problématiques (attention cependant, il n'existe pas de traduction).
Ensuite, l'environnement très libre/open source : même si c'est en bonne partie des outils classiques de développement en Java, c'est toujours agréable de bosser avec des choses comme Eclipse (voir plus haut), Ant, TestNG, SVN, TRAC, plein de bibliothèques libres, etc... (plutôt que Visual Toto, des scripts batch halakon, des outils de test et des libs internes foireux, Clearcase et Rhapsody...). Ah oui, et un wiki pour la doc : si c'est pas cool ça...
Bon, et le Java, c'est pas si terrible.


IoGraphViz := Io + GraphViz

Comme je voulais depuis longtemps m'investir dans un vrai projet libre, et qu'en parallèle je voulais me pencher plus sérieusement sur le langage Io, je me suis lancé dans le projet IoGraphViz.
Il s'agit d'un binding, pour le langage Io, de l'outil de génération de graphes GraphViz. Il n'est pas encore stable/mature, mais j'espère sortir assez rapidement une première version fonctionelle. Pour l'instant je me base fortement sur l'équivalent en Ruby : RubyGraphViz, mais je compte diverger de plus en plus de ce (très bon) point de départ.
Ce qui est intéressant en se lançant dans ce genre de projet, c'est que ça implique de nombreuses contraintes qui sont assez formatrices :

  • Mieux maitriser le(s) langage(s) utilisé(s) bien sûr
  • Héberger son projet/maitriser un gestionnaire de configuration et/ou de version (dans mon cas, je me suis mis à Git via Github - sous Windows, c'est pas de la tarte au début mais on s'en sort...)
  • Et surtout rechercher toutes ces petites choses auxquelles on ne pense pas : de la doc sur des points ultra pointus, un générateur de documentation, tests unitaires, etc...


Je compte faire un vrai article d'introduction (in English if you please...) à la lib quand elle sera présentable.


Curiosités du web

International Dialects of English Archive propose des petits fichiers audio à l'écoute illustrant les accents (en anglais) de gens des quatre coins du monde. Amusant et pratique pour bosser son oreille.

Journée Mondiale présente une liste (non exhaustive mais impressionante) des journées mondiales/internationales/européennes/nationales de... tout et n'importe quoi (genre là on est entre la Journée Européenne des Langues et la Journée Mondiale de la Surdité... touss touss).

Buzzerl : un reddit pas bien, fait par des gens biens, utilisé par des gens biens et des gens pas biens (en Erlang).

mardi 23 septembre 2008

Une tortue avec Processing

J'ai découvert récemment Processing (parfois écrit Proce55ing), un langage de programmation/environnement pensé pour des réalisations "artistiques" : images, animations, sons et 'interactions'.

Basé sur le Java, la syntaxe semble assez proche du Javascript, assez concise et simple. Le typage est statique en revanche. Dans l'ensemble, c'est plutôt bien fait : la prise en main se fait en quelques petits essais... Par exemple :

Exemple (Le code)

Pour information, cet environnement est disponible sous toute plateforme, et en diverses implémentation (Javascript, Ruby...). Pour avoir un peu joué avec Shoes, je retrouve là une bonne partie de ce qui a inspiré _Why pour sa conception... L'un des côtés intéressant, outre l'environnement vraiment simplissime, c'est l'assez grand nombre de bibliothèques (3D, traitement du son et du signal, XML, Vidéo, PDF...) même si elles sont parfois un peu "orientée Mac" (QuickTime entre autre...). Notamment, Arduino et Wiring dans l'interfaçage physique, me paraissent particulièrement intéressants : avec un matos de base relativement abordable (à partir de 20€ pour les cartes), les possibilités sont très grandes... (Je vous laisse chercher.)

Allez, un petit code rigolo pour illustrer :

Turtle :

J'ai essayé de faire une petite version, assez simplifiée, du langage Logo (langage de programmation où l'on dessine avec une tortue).

Le "coeur" est implémenté dans un premier fichier "turtle_lib.pde".
La méthode setup(), comme son nom l'indique, est une méthode d'initialisation qui est systématiquement appelée (si existante) par Processing avant la méthode principale. Elle ne peut être rappelée par la suite. La fonction noLoop() indique à l'interpréteur que les instructions qui seront données par la suite n'auront pas à être répétées (par défaut, le contenu de la méthode draw() est exécuté de manière cyclique, notamment pour les animations et les captions diverses : souris, clic, etc... Ici, ceci est inutile et gênant).
Les méthodes suivantes sont les méthodes de base du Logo : move pour avancer le crayon d'un nombre donné de pixels, turn pour changer sa direction, changeColor pour changer sa couleur et son opacité, raisePen et putPen pour le lever le crayon (celui-ci n'écrit donc plus lorsqu'on le déplace) et le (re)poser, respectivement.

Voici un petit exemple d'utilisation : les instructions se trouvent dans la méthode draw() qui constitue la méthode "principale" de tout programme Processing.


Exemple de la tortue (turtle_ex.pde)

Non, ce n'est pas très joli... mais c'est de la faute à la tortue !

Références :

Dans le même genre...

Amusez-vous bien !

mardi 19 février 2008

Et maintenant, quel langage ?

Les habitués de forums de programmation pour débutants (SDZ ?) devraient avoir souri en lisant ce titre... (En effet, ce type de forum voit apparaître avec une fréquence de 2 à 10 par semaine des sujet portant un titre approché de ça : "Quel language choisire svp URGENT ?" le plus souvent).

Blague à part, la question n'est pas idiote. Loin de là.
Quel langage apprendre ?

Des langages !
Beaucoup !

Il y a beaucoup de langages. De plus en plus même (note : je vais parler ici des "vrais langages" de programmation, c'est à dire, à mon sens, ceux qui sont Turing-complet ; pas du HTML, LaTeX, XML ou autres...).

Lesquels sont généralistes ? La plupart.
Lesquels sont spécialisés ou orientés vers une utilisation précise ? La plupart aussi !
Je m'explique : Fortran permet de tout faire (à condition d'être courageux) mais n'a que peu d'intérêt en dehors du domaine scientifique. Ruby est généraliste, mais est surtout employé pour des applications web (Rails...). Python permet de faire de "vrais" programmes mais sera surtout utilisé (dans le monde pro) pour du scripting d'appoint. On cherche encore Ada ailleurs que dans de l'embarqué et le Javascript ailleurs que dans des applis web côté client... Et pourtant, dans l'absolu, tous permettent de faire la même chose.

Les généralistes et les familles

Cela dit, il existe quelques langages qui sont utilisés (utilisables ?) pour à peu près tout : le C++ et le Java. Pas de chance pour eux (ou pour moi !), je ne les apprécie pas outre mesure. Sans être allergique au C++ que j'ai déjà utilisé en milieu professionnel, je trouve qu'ils sont assez proches et assez lourds (j'ai déjà le Fortran à la maison, merci !) : je reconnais sans problème leurs qualités respectives, mais ils ne conviennent pas, à mon sens, pour un usage domestique/éducatif/récréatif. De plus il ne recèlent pas ou peu de concepts nouveaux pour moi (même si ça ne me ferait pas de mal de revoir la gestion des pointeurs et références en C++ et deux, trois petites choses...).

Dans le même ordre d'idée, je pourrais me mettre au Python. Mais comme il est très proche de Ruby, à quoi bon ? Me taper les différences de syntaxe et de convention pour faire les mêmes choses qu'en Ruby mais en Python ? Pas assez rentable à mon goût ! Je pense, ou plutôt espère, que connaître un langage dans une "catégorie" facilite et accélère l'apprentissage des langages proches, en cas de nécessité. Par exemple pour Ruby : Python, Perl, Groovy, Smalltalk...

Coder, pourquoi ?
Coder plus pour gagner plus...

Car si je code, ce n'est pas que pour le plaisir.

C'est vrai qu'après des débuts difficiles, je me suis mis à apprécier de plus en plus la programmation, pour pas mal de raisons. D'abord pour l'aspect mathématique assez fort que j'y retrouve. Ensuite pour le côté "Lego" : il y a un aspect "architectural" dans la construction d'un programme, des contraintes mais aussi une grande liberté devant son éditeur de texte (un peu comme face aux briques), et une fois terminé on peut "jouer avec" son programme. Enfin, c'est un monde riche en "concepts" liés à l'image que l'on (l'homme et/ou la machine) se fait d'un problème et de sa résolution.

Mais la programmation, c'est aussi une partie importante de mon métier (ingénieur modélisation - bon, ok, pas en ce moment, mais je vais trouver ^^). Et dans ce contexte, à mon niveau, il n'est pas question de choix. On travaille avec le(s) langage(s) qu'on nous donne. Et c'est là que ça se gatte... Dans le domaine de la simulation et analyse numérique, sont surtout utilisés le Fortran et le C++, que je maîtrise "relativement" bien. Les informations glanées sur le web, au cours d'entretiens, etc... ont mis en lumière d'autres "technologies" possibles : Matlab, VisualBasic, C et Ada principalement.
  • Je pourrais me mettre au Matlab mais c'est pas gratuit, même s'il existe SciLab dans le genre...
  • L'environnement VisualBasic, malgré tout le mal que j'en pense, a été installé sur ma bécane... moins d'une heure. Déjà, les IDE m'insupportent, alors quand on ajoute un helper autiste et des tutos qui commencent par "Comment insérer un copyright dans votre programme" (véridique : cherchez sur le web !) et enchaîne sur "Créer un menu dans une fenêtre", ça fait beaucoup. Sans rire, ce genre de truc est extrêmement dangereux pour le PC d'un gars comme moi... Dix minutes de plus et je transperçais l'écran à coup de tête. Dangereux je vous dis !
  • C après C++, connaissant le Fortran ? Mouais...
  • Ada serait sans doute le plus intéressant, mais il y a peu de chance qu'il me serve en milieu professionnel, vu qu'il est le plus souvent dédié au systèmes embarqués (domaine intéressant, mais un peu loin de ma branche).

L'utilisation éventuelle d'un langage en entreprise m'aide donc peu.

Concept ?
Aqui lo paradigme !

Il reste les "concepts".
Cela fait déjà un bon moment que le monde de la programmation fonctionnelle me fascine : attraction/répulsion.
Attraction car c'est une grande famille de langages, de LISP à Haskell en passant par Scheme et OCaml avec des méthodes intéressantes.
Répulsion car jusqu'ici, j'ai toujours été incapable de "décrypter" le moindre bout de code fonctionnel aperçu ici ou là : crispant.
Il y a aussi d'autres "concepts" (paradigmes en l'occurrence ici) : logique (PROLOG), concurrent (Ada, encore !), par contrainte...

Finalement...
Tout ça pour ça...

Finalement, c'est par hasard que je me suis mis... au Scheme.
Un article, chez RubyInside, décrivait un interpréteur pour Scheme, codé en Ruby, dans le bus. J'ai voulu tester. Du coup, il m'a fallu taper un peu de Scheme ; du coup, j'ai lu du Scheme ; du coup je me suis mis à comprendre un peu le Scheme ; du coup, j'apprends le Scheme.
Pour être tout à fait franc, ce langage faisait déjà parti de ceux qui me tentaient fortement, avec le LISP, l'OCaml, Io et Cobol (non, pour le Cobol, j'd3conne !).
Io a perdu car je voulais voir autre chose que de l'OO. Quite à se lancer dans le fonctionnel, autant prendre un langage "simple" : l'OCaml me semblait "trop riche" car multi-paradigme. Enfin, le LISP a eu un petit désavantage : cette citation de G. Chaitin sur la "pureté" d'un langage.
Scheme donc, avec l'interpréteur MzScheme (Bus-Scheme, celui en Ruby étant... peu utilisable ?).

Effectivement, Scheme est austère. Mais il semble reconnu pour son côté pédagogique et est (hormis pour les parenthèses) assez bref dans sa syntaxe : il y a une certaine élégance proche des maths je trouve. Il est vieux, mais a un certain charme... et j'avoue que je l'apprends avec un certain plaisir. Et pour ma bonne conscience professionnelle, Scheme est utilisé dans certains codes de calculs industriel, en appoint (bientôt un article sur "Quel(s) langage(s) dans tel programme ?").Que demander de plus ?

Références et Docs :

D'abord, deux textes pleins de sagesse (si si, il y a un rapport avec le reste...) :
L'article sur Bus-Scheme, l'implémentation en Ruby :
Commençons gentiment en Scheme (avec un interpréteur qui marche !) :
Pour tout le reste vu dans cet article, Wikipédia saura répondre... sinon demandez toujours !



vendredi 4 janvier 2008

RubyShyne v0.6

Allez hop, une petite mise à jour de RubyShyne qui commence à marcher pas trop mal...
  • Ajout du Java et Groovy pour les langages
  • Corrections de quelques petites erreurs
  • Léger nettoyage
Pour rappel, il génère du HTML avec balises "pre" mais est facilement modifiable pour prendre "text-area" (peu pratique chez Blogger), et je l'utilise depuis quelques temps maintenant pour présenter mes bouts de codes sur ce blog (tag "code" pour voir des exemples).

Encore une fois, si vous utilisez cette modeste application, n'hésitez pas à me le faire savoir pour que je puisse l'améliorer.

RubyShyne v0.6 :

jeudi 3 janvier 2008

Découvrons le Groovy !


En ce moment, sur les bons conseils de Poulet, un jeune programmeur de talent dont l'agressivité sur un forum n'a d'égal que le riche savoir, je jette un coup d'oeil sur un langage on ne peut plus exotique : le Groovy !

Pour résumer :

Groovy = ((Java) + Ruby + Python + Smalltalk) / JVM

avec JVM la Java Virtual Machine. Il s'agit donc d'un Nième langage de script pour la plateforme Java, aux cotés de Javascript, Rhino, JRuby, Jython, BeanShell et autres... Mais c'est peut-être le plus proche du Java sur certains points. Il possède diverses caractéristiques intéressantes :

  • Orienté Objet (quasi-totalement comme le Ruby).
  • Syntaxe à la fois "souple" (comme Ruby ou Python) mais proche du Java.
  • Interprété OU compilé (en bytecode, comme Java).
  • Utilisable dans des classes Java.
  • Capable d'utiliser les classes Java.
  • Typage dynamique ou statique, au choix.
  • Exécutable en ligne de commande / interpréteur en shell (groovysh) / GroovyConsole (sympa !)
  • Pas mal d'autres choses devenues classiques dans les langages modernes (regexp, closures, surcharge des opérateurs, etc...)
Exemple :


// Un aperçu de Groovy
a = 0
for (i in 0..9){
a ++
println "Iteration ${i+1} : ${a}"
}
assert a == 10


Divers liens en vrac :


On en reparlera, notamment niveau perfs, petits tricks sympas et comparaisons de syntaxe...

jeudi 27 décembre 2007

A l'assaut du Java...

Il fallait bien que ça arrive, à force de voir des offres d'emploi demandant la connaissance du Java dans le profil du candidat... J'ai craqué, et je me suis lancé dans une petite formation aux bases du langage Java, en ligne, gracieusement financée par mon "employeur" actuel. Il est clair que je compte surtout acquérir quelques notions pour pouvoir me dépatouiller avec en cas de besoin (et l'ajouter sur mon CV, cela va de soi...), mais que d'emblée, j'ai un a priori assez fort contre ce langage...


Pour l'instant, la qualité du tuto est assez discutable, avançant des affirmations un peu suspectes comme "avec une vitesse d'exécution comparable au C et C++" (je demande à voir pour le C !), "beaucoup plus portable et modulable" (tiens donc !), "Syntaxe très simple et peu contraignante" (!!!)... Aucune aide pour l'installation, et une grande légèreté dans l'explication de la compilation et de l'exécution (qui ne marchait pas au départ avec leurs indications...). Bref, ça partait plutôt mal...

Du coup, je suis passé voir le tuto Java du Site du Zéro, qui avait pas l'air trop mal, et où il m'est confirmé une impression que j'avais : sous Windows, sans IDE, tu peux t'accrocher mon poulet... JBuilder qui y était recommandé étant depuis devenu payant, j'ai pris JCreator qui est supposé être bien pour les débutants. Pour l'instant ça me paraît assez clair (j'utilise à peu près jamais d'IDE, ces trucs là me gonflent...) et fait miraculeusement tourner le code de départ de la formation. Jetons un coup d'oeil :

Java :

// Sortez une hache, j'attaque Java...

package exemples.messages ;

public class PremiereApp{
public static void main(String args[]){
System.out.println ("Ma premiere appli Java") ;
}
}
Bon, c'est pas encore Azureus, c'est sûr... mais pµTa1N que c'est VERBEUX !!! Pour rappel, en Ruby :

Ruby :
puts "Ma 267eme appli en Ruby..."
Et un petit tour des différents types (comme en C++ apparemment, et non pas "classes de bases" comme en Ruby...) m'a déjà scié 3 nerfs : "byte, short, int et long !!!"... Va pas falloir se gaufrer à la déclaration j'ai l'impression...

Allez, j'arrête de râler, et je m'y plonge sérieusement : je peux pas croire que le Java serait tant utilisé s'il était aussi foireux que ce que je crois... A l'attaque !


(prochain langage, j'en prends un fonctionnel... je le dit, je le fais, allez !)