Category: Desktop

100% groovy

Par mc, 17 avril 2009 12 h 35 min

groovy est un des 3 langages (avec Ocaml et perl) pour lequel le
pleac. Voilà qui permet de se faire rapidement une image de la bête qui ressemble a un mélange de ruby et de java.

A vue de nez: j’ai une large préférence pour ruby mais au moins ca permet de faire des .class sans java et c’est packagé dans debian.

L’avenir n’est donc pas sans concurrence pour parrot: le monde java a ANTLR, une grosse communauté, une nuée de vendeurs aillant déjà prouvé leur éfficacité.

des questions me viennent

- personne n’a pensé a porter des langages pour la vm lua? c’est étrange parcequ’elle affiche des perfs et un footprint qui cassent la barraque …
- quid de .NET? vlc me parlait de « nouveautés démoniaques » dans C#3.0 qui mettait a fond l’accent sur le développement d’agents.

java devenir bien ?

Par mc, 14 avril 2009 9 h 58 min

Tout en vociférant contre le marketing mensonger fait autour de cette techno dans les années 90 (processeurs java en carte fille, grande portabilité et execution plus rapide que le code C++ très bientot, … ), j’ai toujours regardé le monde java en sourriant … plein d’admiration devant les « hello world » de 50 lignes et l’argument fumeux du « mais c’est l’IDE qui génère le code pour toi ».

Dans un récent billet sur la liste des mongeurs, cognominal parle de Dalvik, groovy, et scala.

Pas eu le temps d’explorer mais j’ai vu qq bouts de codes sur les sites en question et Groovy me parait être un langage à surveiller.

Coller du code dans IPython

Par virtual_eye, 25 janvier 2009 20 h 58 min

Il vous est sûrement déjà arrivé de vouloir tester un petit bout de code trouvé sur le Net. Ou ne tester qu’un petit bout d’un algorithme faisant partie de votre application.
IPython vous permet de coller du texte dans son interface en utilisant %cpaste, et vous permet de ne pas retaper la partie à tester, surtout si elle se fait relativement longue.

Un exemple simple avec des décorateurs :

In [269]: %cpaste
Pasting code; enter '--' alone on the line to stop.
:def decorateur(func):                                   
:    class MaClasse:                                 
:        def __init__(self,*a,**k):                
:            print "Les arguments passés : ",a,k                
:    return MaClasse                                 
:                                                  
:@decorateur                                             
:def ma_fonction(a):                                  
:    return a*3                                    
:--

Et voilà notre code près à être testé :

In [286]: ma_fonction 2,2
--------> ma_fonction(2,2)
Les arguments passés :  (2, 2) {}
Out[286]: <__main__.MaClasse instance at 0xa66c76c>

Oui dans IPython, on peut se permettre de ne pas mettre de parenthèse pour appeler une fonction car il est notre ami et sait qu’on est fainéant !!

IPython et le shell

Par virtual_eye, 24 janvier 2009 21 h 45 min

IPython vous permet très simplement d’affecter le retour d’une commande shell à une variable entièrement manipulable.

In [64]: var = !ls -R | grep b
 
In [65]: var
Out[65]: SList (.p, .n, .l, .s, .grep(), .fields() available). Value:
0: build
1: Public
2: ./build:
3: beastbible
4: ./Documents/projets/beastbible:
5: ./Documents/projets/beastbible/artist:
6: ./Documents/projets/beastbible/review:
7: ./Public:

Il suffit simplement d’ajouter le caractère ‘ ! ‘ avant votre commande !!

Alors heureux ?

IPython et la fonction magique %edit

Par virtual_eye, 24 janvier 2009 21 h 14 min

[size=15]IPython fournit une quantité de fonctions dites « magiques ». Oui, on est bien dans le monde Python alors pourquoi se priver de telles fonctions !
Voici donc une description de la puissante fonction %edit[/size]

L’interpréteur de commande, aussi sympa soit-il, commence à devenir lourd dès lors que l’on veut tester un code sur plusieurs lignes.
Genre une boucle ou même un script entier.
Vous me direz, c’est fait pour ? IPython vous répond oui !

1) Lancer IPython
Tout d’abord, sachez que lorsque vous lancer IPython, vous avez accès à un certains nombres d’options. Je ne vais pas développer plus loin, car une seule m’intéresse pour vous parler de %edit, l’option -editor.
En effet, cette option vous permettra de choisir votre éditeur de texte préféré à l’appel de %edit. IPython honorera votre éditeur de texte par défaut (vim ??) si cette option n’est pas précisée.

2) Taper votre script dans votre éditeur préféré
Depuis IPython, faites

%edit

Voilà ce qui s’affiche tandis que votre éditeur se lance

IPython will make a temporary file named: /tmp/ipython_edit_*****.py

Taper votre code, qui sera par exemple (volontairement faux pour la suite, le flag re.X manque):

import re
reg = re.compile(r"""(?P<artist>[\w ]+)    # match le groupe 'artist' - au moins 1 caractère alphamunérique ou un espace
                     -                     # un tiret
                     (?P<album>[\w ]+)     # match le groupe 'album' - au moins 1 caractère alphamunérique ou un espace""")
print reg.match("Iron Maiden-Powerslave").groupdict()

On sauvegarde ces quelques et ferme notre éditeur.
Le code tapé est directement exécuté dans IPython ! Le résultat s’affiche ainsi que le code tapé dans votre éditeur !

Editing... done. Executing edited code...
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
 
/tmp/ipython_edit_f88xWz.py in <module>()
      2                      -                     # un tiret
      3                                           (?P<album>[\w ]+)     # match le groupe 'album' - au moins 1 caractere alphamunerique ou un espace""")
----> 4 print reg.match("Iron Maiden-Powerslave").groupdict()
      5
      6
 
AttributeError: 'NoneType' object has no attribute 'groupdict'
WARNING: Failure executing file: </tmp/ipython_edit_f88xWz.py>
Out[28]: 'reg = re.compile(r"""(?P<artist>[\\w ]+)    # match le groupe \'artist\' - au moins 1 caractere alphamunerique ou un espace\n                     -                     #un tiret\n                                          (?P<album>[\\w ]+)     # match le groupe \'album\' - au moins 1 caractere alphamunerique ou un espace""")\nprint reg.match("Iron Maiden-Powerslave").groupdict()\n'

Ici, vu l’erreur, il en résulte une belle exception. Mince je vais devoir retaper tout ça pour corriger l’erreur !!

3) Récupérer son fichier temporaire
Eh bien non, %edit possède une option se chargeant de récupérer votre ancien fichier temporaire et d’en créer un nouveau à partir de celui-ci. Ah oui ? Mais pourquoi en créer un nouveau ? Il se peut que vous exploriez différentes pistes pour votre script. Vous pouvez donc constater l’évolution de votre code et revenir en arrière !

On tape

%edit -p

Miracle, on récupère tout et on corrige ! Ce qui donne :

Editing... done. Executing edited code...
{'album': 'Powerslave', 'artist': 'Iron Maiden'}
 
Out[29]: 'reg = re.compile(r"""(?P<artist>[\\w ]+)    # match le groupe \'artist\' - au moins 1 caractere alphamunerique ou un espace\n                     -                     #un tiret\n                                          (?P<album>[\\w ]+)     # match le groupe \'album\' - au moins 1 caractere alphamunerique ou un espace""", re.X)\nprint reg.match("Iron Maiden-Powerslave").groupdict()\n'

Si votre script est long vous avez également une option pour ouvrir votre fichier à une ligne spécifiée

%edit -n 167 -p

Magnifique ! Mais je vous vois venir. On n’a pu tester la regex qu’avec une valeur hardcodée.

4) Ne pas exécuter le code tapé tout de suite
On récupère notre fichier et au lieu d’hardcoder la string passée match, on spécifie une valeur passée au script
On spécifie à la fonction %edit que l’on ne veut pas qu’elle exécute le code de cette manière

%edit -x -p

On édite notre code :

import re
import sys
 
reg = re.compile(r"""(?P<artist>[\w ]+)    # match le groupe 'artist' - au moins 1 caractere alphamunerique ou un espace
                     -                     # un tiret
                                          (?P<album>[\w ]+)     # match le groupe 'album' - au moins 1 caractere alphamunerique ou un espace""", re.X)
print reg.match(sys.argv[1]).groupdict()

On sauvegarde et ferme, ce qui donne dans IPython

IPython will make a temporary file named: /tmp/ipython_edit_N4NcvF.py
Editing...

5) Exécuter notre code avec l’argument passé au match
IPython peut exécuter des scripts dans son interface via une autre fonction magique qui est %run. Je ne m’y attarderai pas, ce n’est pas le sujet ici. On a toute les info pour exécuter notre code puisque ce gentil IPython nous fournit le nom du fichier temporaire généré

%run /tmp/ipython_edit_N4NcvF "Nirvana-Nevermind"

Et on obtient:

{'album': 'Nevermind', 'artist': 'Nirvana'}

Ca marche !! Voilà une belle petite fonctionnalité qui nous évite les interminables
> vim monfichier.py
> python monfichier.py
fail
Mince comment on fait déjà ?
> ipython
Je teste ! J’ai trouvé
> vim monfichier.py
> python monfichier.py
works

Ceci est une première fonctionnalité d’IPython, il y en a une flopée d’autres !

Les classes utilitaires en Java

Par virtual_eye, 16 décembre 2008 21 h 30 min

[size=15][justify]Créer une classe utilitaire est presque nécessaire dès lors que vous développez une application ou une API. [/size]Cependant, en Java, chaque classe dispose d’un constructeur par défaut, publique donc visible autant au sein de votre application qu’en dehors comme ceci :[/justify]

public class MaClasse {
 
    public MaClasse() {}
 
}

[justify]Le but d’une classe utilitaire n’est pas d’utiliser les propriétés de l’objet mais d’avoir à disposition des méthodes accessibles sans aucune instantiation. Il faut donc utiliser les mots-clés ‘public’ ainsi que ’static’ dans la déclaration de chaque méthode. Voici un court exemple : [/justify]

public class MaClasseUtil {
 
    public static maMethodeUtil(Object monParam1, Object monParam2) {
        //definition
    }
 
}

[justify]Avec un tel développement vous n’êtes malheureusement pas à l’abri des développeurs débutants ou peu soucieux des bonnes pratiques du langage, qui se chargeront d’instantier l’objet MaClasseUtil afin d’y appliquer des méthodes pourtant déclarées statiques. D’où une utilisation de la mémoire absolument injustifiée. Pour palier à ce problème et empêcher ces derniers de stocker inutilement des objets en mémoire, il vous faudra déclarer un constructeur privé tout en évitant d’y faire pointer tout accesseur. Notre classe devient donc : [/justify]

public class MaClasseUtil {
 
    private MaClasseUtil() {}
 
    public static maMethodeUtil(Object monParam1, Object monParam2) {
        //definition
    }
 
}

Et voilà.

Checkstyle – un plug-in de nettoyage pour Eclipse

Par virtual_eye, 16 décembre 2008 0 h 30 min

[size=15]Checkstyle est un plug-in Eclipse qui se chargera de vous avertir des erreurs de coding style lors de l’édition de votre code Java.[/size]

[justify]En effet, il est un outil puissant vous mentionnant toutes erreurs de nommage de vos paramètres, méthodes, ou autres attributs mais également les oublis de commentaires tout comme les possibles erreurs de choix de visibilité des méthodes ou attributs au sein d’une classe Java par rapport à l’ensemble de votre application. L’ensemble des possibilités offertes par cet outil est vaste et surtout entièrement paramètrable au sein du menu « Préférences » d’Eclipse, où vous pourrez activer ou désactiver certaines règles. Pour ma part, j’ai supprimé la règle des 80 caractères par ligne de code vu la tailles des écrans que nous possédons actuellement.[/justify]

[justify]Intuitif et très facile à prendre en main, vous pourrez même laisser le plug-in corriger les erreurs les plus élémentaires via un click droit sur votre classe Java et un click sur « Appliquer les corrections Checkstyle ». Le reste des « warnings » remontés devront être traités manuellement car plus complexes et plus subjectifs. Il vous permettra également d’éditer une Javadoc claire et précise, vous obligeant d’ailleurs systématiquement à la créer et ce pour chaque élément de code tapé.[/justify]

Vous ne pourrez donc plus éditer du code moche… Enfin ça reste toujours du Java, n’est-il pas ?

Le lien vers le site du projet : http://eclipse-cs.sourceforge.net/

Site d’update pour l’installation via Eclipse :http://eclipse-cs.sourceforge.net/update/

Panorama Theme by Themocracy