Admingenerator + Symfony2 => AdmingeneratorGeneratorBundle : The automatic setup

Voila un sacré moment que je n’ai rien écris sur ce blog. Mais j’ai une excuse, j’ai codé :D. Et voici un premier screencast du bundle d’admingenerator que j’ai réalisé pour symfony2.

Le site de la documentation est ici : http://symfony2admingenerator.org/
Le repo github ici : https://github.com/cedriclombardot/AdmingeneratorGeneratorBundle

Il s’agit bien d’un générateur basé sur la librairie TwigGenerator qui va lire nos bon vieux fichiers generator.yml que nous aimons tant !

http://symfony2admingenerator

A regarder en HD et en plein écran.
Et en dans le texte comment ca marche ? « Just tell yes, copy/paste and it’s work »

Minifier les JS et les css

Alors j’ai chercher la solution la plus rapide pour minifier des js et des css d’un dossier en excluant les pattern des js pourris à savoir non compatible avec les suppression des retours à la ligne ou déja minifié

Voici mon fichier minify.sh

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh

if (! [ -z $( echo "$1" | egrep "/tiny_mce/") ] )
then
exit 0
fi

FILE="$1.min"

cat $1 | sed -e "s|/\*\(\\\\\)\?\*/|/~\1~/|g" -e "s|/\*[^*]*\*\+\([^/][^*]*\*\+\)*/||g"  -e "s|\([^:/]\)//.*$|\1|" -e "s|^//.*$||" | tr '\n' ' ' | sed -e "s|/\*[^*]*\*\+\([^/][^*]*\*\+\)*/||g" -e "s|/\~\(\\\\\)\?\~/|/*\1*/|g" -e "s|\s\+| |g" -e "s| \([{;:,]\)|\1|g" -e "s|\([{;:,]\) |\1|g" > $FILE

mv $FILE $1
echo $FILE

Et ensuite l’appel moins impressionnant que le sed

1
2
find current/web/ -name *.css -type f | xargs -i /home/www/divocea/minify.sh {}
find current/web/ -name *.js -type f | xargs -i /home/www/divocea/minify.sh {}

Configuration de l’encodage pour shell en ubuntu serveur

Voila donc un petit billet de type « note a moi même » , mais qui peux aussi servir a d’autres. Je viens d’installer mon serveur en ubuntu et la pas de chance j’ai choisi le francais et donc la lang est fr_FR mais dans mon terminal c’est tout moche les accents sont tous cassés. La solution, c’est :

1
2
echo $LANG #Retourne fr_FR
export LANG=fr_FR.UTF-8

Et revoila les accents ! Pour le conserver pensez à le rajouter dans ~/.profile

Gérer les déployements de votre code source

Voici un article que je voulais écrire depuis longtemps, je vais vous présenter la manière la plus simple de déployer votre code en production et ceci avec un scm de votre choix. J’ai nomé capistrano.

Vous pouvez trouver le repos git  ici : https://github.com/capistrano/capistrano

L’exemple ci dessous est réalisé sur une Ubuntu, mais j’ai tester sur gentoo et même sur windows et cela fonctionne !!

Il faut savoir que capistrano est à l’origine développé pour deployer du Rails, il est donc écrit en ruby, je vais donc installer ruby et rubygems:

1
sudo apt-get install ruby rubygems

Puis ensuite capistrano

1
gem install capistrano #ou sudo apt-get install capistrano

Enfin dans mon projet de code versionné avec un SVN ou Git par exemple :

1
Capify .

Si vous regarder il vous à créer un fichier Capfile et un fichier config/deploy.rb et c’est dans le deploy.rb que l’on va configurer capistrano

Et dans le fichier deploy.rb, vous allez pouvoir redefinir l’ensemble de ses variables : http://theadmin.org/articles/2010/06/24/capistrano-variables/

Je vais donc faire une config standard

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# Dirs that need to remain the same between deploys (shared dirs)
set :shared_children, %w(log web/uploads web/images web/flash data/search.index)
set :shared_files, %w(config/databases.yml config/project.yml apps/frontend/config/factories.yml robots.txt)

 

set :application, "APP_NAME"
set :domain,      "DOMAIN_URL"
set :user, "USER_NAME"
set :deploy_to,   "/home/www/#{application}"
set :use_sudo, false
set :symfony_env, "preprod"

 

set :repository,  "svn://DOMAIN_URL/#{application}/trunk/"
set :scm,         "subversion"# Or: `accurev`, `bzr`, `cvs`, `darcs`, `subversi$
set :deploy_via,  :remote_cache

 

role :web,        domain                         # Your HTTP server, Apache/etc
role :app,        domain                         # This may be the same as your

 

set  :keep_releases,  3
after "deploy:update", "deploy:cleanup"

Bon ok vous êtes observateurs, je vous ais mentis, j’ai ajouté un capifony par dessus , mais ceci me permet juste d’executer la liste des commande de déploiement spécifiques à un projet symfony1.x à savoir les build model, clear cache, … et ce quelque soit l’ORM

En effet toute la puissance de capistrano c’est entre chaque action d’avoir au début un event before:{action} et après un after:{action} on peut donc injecter facilement ces commandes.

Alors comment est-ce que l’on install capifony :

1
gem install capifony

Et dans le Capfile :

1
2
3
4
load 'deploy' if respond_to?(:namespace) # cap2 differentiator
Dir['plugins/*/lib/recipes/*.rb'].each { |plugin| load(plugin) }
load Gem.required_location('capifony', 'capifony.rb') # Ajouter cette ligne
load 'config/deploy' # remove this line to skip loading any of the default tasks

Enfin pour déployer votre application :

1
cap deploy

Je vous expliquerais comment on peux ajouter ces propres commandes dans un prochain billet.

Debug toujours – I love Better than grep

Aujourd’hui, je vais vous présenter un outils que j’utilise depuis quelques temps déja et qui est carément magique. J’ai nommé better than grep ou ack (sur ubuntu ack-grep)

Ce petit programmes, vous permets de rechercher dans les fichiers la présence d’une chaine comme suit en excluant :
les svn, csv, git …

Recherche de chaine de maniere case insensitive

1
ack chaine

Recherche de chaiNe de maniere case sensitive

1
ack chaiNe

Recherche de chaiNe de maniere case sensitive dans un php

1
ack chaiNe --php

Recherche de chaiNe de maniere case sensitive dans tout sauf du php

1
ack chaiNe --nophp

Recherche de chaiNe de maniere case sensitive dans un yml
Malheureusement il ne le connait pas par défaut :

1
ack settings --type-add yml=*.yml --type=yml

Recherche dans le nom du fichier

1
ack -f | ack nom

Ouvrir un fichier dans eclipse v2

Alors comme le projet Eclipse Web Interface, que je vous avais présenté n’existe plus, j’ai été obligé de trouver une nouvelle solution.

La voici :

1
2
3
4
#!/bin/bash
path=$( pwd )
file="$1"
/opt/eclipse/eclipse --launcher.openFile "${path}/${file}"

Et cela s’utilise toujours pareil

1
e fichier.php

Et dans la suite de mon atelier eclipse voici comment apprendre a firefox le protocol eclipse://

Il faut dans un premier temps enregistrer le protocol grâce à http://kb.mozillazine.org/Register_protocol

J’ai donc fait :

1
2
gconftool-2 -s /desktop/gnome/url-handlers/eclipse/command '/usr/bin/open-in-eclipse-ff %s' --type String
gconftool-2 -s /desktop/gnome/url-handlers/eclipse/enabled --type Boolean true

Et dans /usr/bin/open-in-eclipse-ff

1
2
3
4
#!/bin/bash
file="$1"
path=`echo $file| cut -c10-` 
/opt/eclipse/eclipse --launcher.openFile "${path}"

Bon maintenant symfony et la debug bar :

Dans settings.yml je met :

1
2
3
dev:
  .settings:
    file_link_format: "eclipse://%f"

Et hop symfony met dans view le lien eclipse, je peux enfin debugguer le script que j’ai récupéré

Note à moi même – Apprendre a configurer les sf_culture !!

En effet je me suis laisser prendre comme un débutant. Et j’ai encore une fois de plus été obligé de chercher dans le code de symfony ou est-ce que l’on paramétrais la langue par défaut.

En effet dans settings, cela ne suffit pas !

Donc pour moi la prochaine fois et pour vous peut être.

Il faut simplement faire :

Dans settings.yml

1
2
3
4
all:
  .settings:
    i18n:                   true 
    default_culture:        fr

Et dans factories.yml

1
2
3
all:
  user:
    default_culture: fr

Ouvrir un fichier dans eclipse depuis le Terminal

Ah enfin le script dont je rêvais depuis longtemps, ouvrir un eclipse depuis mon Terminal

Pour ce faire, il vous suffit d’installer dans eclipse le plugin Eclipse Web Interface

En l’installant par Help > Software Updates > Find and Install… et en ajoutant l’URL
http://eclipse-incub.cvs.sourceforge.net/*checkout*/eclipse-incub/org.eclipse.soc.ewi/update/org.eclipse.soc.ewi.update/site.xml

Ensuite créez le shell suivant dans /usr/bin/open-in-eclipse.sh

1
2
3
4
5
#!/bin/bash
path=$( pwd )
file="$1"
wget -b "http://localhost:34567/?command=org.eclipse.soc.ewi.examples.commands.openfile&path=${path}/${file}"
rm -rf index.html?command=org.*

Un coup de chmod 777 et un alias plus tard.

Il ne me reste plus qu’a taper : e monfichier.php pour qu’il s’ouvre dans eclipse

Un select ou sfWidgetFormChoice … avec des radios ou des cases à cochées

Bonjour,

Le petit jeu du jour transformer un select en un pseudo select avec des radios ou des checkboxes en fonction du paramètre multiple.
Bien sur ce petit code fonctionne en réalité en html seul, et peu donc aisément s’installer dans un widget symfony.

En image cela donne :

Rendu du select avec les checkboxes

Lire la suite