Archives par étiquette : programmation

Ajouter la puissance de bash_completion à votre projet Symfony

En général les utilisateurs réguliers d’un système Linux connaissent les avantages de l’utilisation du package bash_completion, et bien voici une astuce pour que cela soit applicable à un projet Symfony. Bon je ne suis pas développeur, mes bases étant un peu limitées, mais étant amené à utiliser pas mal de projets Symfony dans le cadre de mon travail, j’ai eu vent de cette astuce. Tout d’abord il faut créer un fichier dans votre home avec comme nom .bash_completion . S’il existe déjà, nous mettrons à jour ce dernier.

_symfony()
{
local cur prev action
COMPREPLY=()
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
action=${COMP_WORDS[1]}

case « $prev » in
« init-module »| »propel-generate-crud »| »propel-init-crud »| »propel-init-admin »| »generate:module »| »propel:generate-crud »| »propel:init-admin »)
COMPREPLY=( $( compgen -W « $( ls -1 apps 2>/dev/null | sed -e ‘s/ /\\ /g’ | sed -e ‘s/\/$//g’ ) » — $cur ) )

return 0
;;

« init-project »| »generate:project »)
COMPREPLY=( $( compgen -W « $( pwd | perl -pe « s/^.*?([^\/]+)$/\$1/g » ) » — $cur ) )

return 0
;;

« init-app »| »generate:app »)
COMPREPLY=( $( compgen -W « frontend backend » — $cur ) )

return 0
;;

« sync »)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W ‘go’ — $cur))
fi

return 0
;;

*symfony)
SYMFONY_VERSION=$( $prev -V | sed ‘s/^symfony version //g’ | awk -F ‘.’ ‘{print $1 « . » $2;}’ )

case « $SYMFONY_VERSION » in
0.*)
# Versions less than 1.0 are not supported.
COMPREPLY=()
;;

« 1.0 »)
COMPREPLY=( $( compgen -W « $( $prev -T | awk ‘/^  /’ | cut -d ‘ ‘ -f 3 ) » — $cur ) )
;;

*)
COMPREPLY=( $( compgen -W « $(
NAMESPACE= »
OLD_IFS=$IFS

IFS=$’\n’
for line in $( $prev -T ); do
if [ $line != ‘Available tasks:’ ]; then
if [ ${line:0:2} == ‘  ‘ ]; then
TASK=$(echo $line | awk -F ‘:’ ‘{print $2;}’ | cut -d ‘ ‘ -f 1)
if [ -z $NAMESPACE ]; then
echo $TASK
else
echo $NAMESPACE:$TASK
fi
else
NAMESPACE=$line
fi
fi
done

IFS=$OLD_IFS
) » — $cur ) )

# Work-around bash_completion issue where bash interprets a colon as a separator.
# Work-around borrowed from the darcs work-around for the same issue.
local colonprefixes=${cur% »${cur##*:} »}
local i=${#COMPREPLY[*]}
while [ $((–i)) -ge 0 ]; do
COMPREPLY[$i]=${COMPREPLY[$i]# »$colonprefixes »}
done
;;
esac

return 0
;;

*)
case « $action » in
« propel-generate-crud »| »propel-init-crud »| »propel-init-admin »| »propel:generate-crud »| »propel:init-admin »)
if (($COMP_CWORD == 3)); then
COMPREPLY=( $( compgen -W « $( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename ‘{}’ ‘.php’ ‘;’ | grep -v ‘Peer$’ | tr [:upper:] [:lower:] ) » — $cur ) )
elif (($COMP_CWORD == 4)); then
COMPREPLY=( $( compgen -W « $( find lib/model -maxdepth 1 -name ‘*.php’ -exec basename ‘{}’ ‘.php’ ‘;’ | grep -v ‘Peer$’ ) » — $cur ) )
fi

return 0
;;
esac

return 0
;;
esac

return 0
}

complete -F _symfony symfony

Modifier votre fichier .bashrc pour y ajouter : [ -f ~/.bash-completion ] && source ~/.bash-completion

Enfin pour bénéficier immédiatement de ses effets, relancer bash, ou plus proprement  tapez « source ~/.bashrc ».

Et voilà vous aussi vous aurez ainsi accès à l’auto-complétion pour votre projet Symfony :

[user@nommachine monrep]$ ./symfony monprojet-matache matache-action:realize

Et voila pour cette astuce. Si mes souvenirs sont bons, la Source initiale provient du wiki de Symfony et notamment de la section « update » du lien précédent. Personnellement je l’ai testé sur une Mandriva 2008.1 et cela avait fonctionné.

Programmation Génétique – Genetic Programming

Voici un aspect de la programmation auquel je ne m’étais jamais intéressé et pour cause on ne peut pas dire que j’ai le profil d’un développeur. En revanche j’y avais déjà pensé plusieurs fois sans toutefois lui donner son nom exact. Merci donc à Stormi qui m’a fait découvrir un petit logiciel en flash qui met en application ce principe.

http://www.wreck.devisland.net/ga/ (site fermé)

Alors pour résumer la programmation génétique est une méthode de programmation s’inspirant de la théorie de l’évolution de Darwin. Elle se fixe pour but de trouver par approximations successives des programmes répondant au mieux à une tâche donnée. Le programme que l’on a développé est donc capable de sélectionner les meilleurs résultats de séries d’évènements répétés avec d’infimes changements de variables afin de faire évoluer son programme vers un fonctionnement optimal. On y insère aussi des croisements entre les « génomes » les plus prometteurs. Cela semble bien compliqué ainsi, mais on en trouve des applications assez intéressantes ainsi Roger Alsing nous présente dans son blog la reproduction du portrait de Mona Lisa à travers la programmation génétique et des séries de polygones.

Genetic Programming: Evolution of Mona Lisa

J’avoue que le résultat est assez bluffant, mais que j’ai plus observé le premier programme évoluer durant plusieurs heures. Bon, je ne suis pas assez compétent, du moins pour le moment, pour coder moi même une telle application, mais on peut déjà trouver quelques exemples assez sympathiques sur le net comme les deux ci-dessous :

http://www.eigenfaces.com/

http://picbreeder.org/

Voilà pour ce soir et en attendant, pour ceux qui souhaiteraient une définition plus complète de la programmation génétique ou de son histoire, je vous inviterais à consulter déjà l’article français de Wikipedia ou encore l’article de la version anglaise qui est à peine plus complète : Genetic Programming. Sur ce, amusez-vous bien. 🙂