arnaud.devlog ()

Aller au contenu | Aller au menu | Aller à la recherche

lundi, janvier 18 2010

Débuggage accéléré avec PHP sous linux

Voici une rapide astuce pour ouvrir le code source de votre projet dans netbeans (ou votre éditeur préféré) depuis votre navigateur en cliquant sur les noms des fichiers présents dans les stack traces généré par xdebug ou symfony >= 1.3.

Créez le fichier /media/data/apps/netbeans-url-handler.sh

#!/bin/bash
url=$1
file=${url#*\/} # substitution de netbeans://file... par /file..
netbeans --open "$file"

Ajoutez netbeans dans votre PATH si ce n'est pas déjà fait :

export PATH=.:$PATH:/media/data/apps/netbeans-6.8/bin 

Support des URL netbeans:// dans gnome (pour KDE il faut chercher comment configurer les url handler avec kfmclient) :

gconftool-2 -t string -s /desktop/gnome/url-handlers/netbeans/command '/media/data/apps/netbeans-url-handler.sh %s'
gconftool-2 -t bool -s /desktop/gnome/url-handlers/netbeans/needs_terminal false
gconftool-2 -t bool -s /desktop/gnome/url-handlers/netbeans/enabled true

Configuration de symfony pour substituer les noms des fichiers par des liens html :

dev:
  .settings:
    file_link_format: "netbeans://%f:%l"

On peut aussi configurer cette option par le biais de la variable xdebug.file_link_format dans le fichier /etc/php5/conf.d/xdebug.ini :

sudo echo "xdebug.file_link_format=\"netbeans://%f:%l\"" >> /etc/php5/conf.d/xdebug.ini
sudo apache2ctl restart

Chrome ou Firefox devraient maintenant ouvrir netbeans en cliquant sur les URL au format netbeans://filename:10

Si quelqu'un connait une méthode pour ne pas avoir besoin du fichier netbeans-url-handler.sh je suis preneur !

À vous d'adapter ces lignes à votre IDE préféré. En cas de problèmes essayez de rédémarrer votre navigateur ou votre session X.

Happy coding !

mardi, décembre 15 2009

[Mémo] Installation de XDebug sous ubuntu

Par les paquets :

sudo aptitude install php5-xdebug

Ou en compilant par le biais de pecl :

sudo aptitude install php5-dev php-pear
sudo pecl install xdebug

Dans les deux cas il va falloir configurer le chargement de xdebug.so. Dans le cas de l'installation par pecl, le chemin devrait être affiché à la fin de l'installation. Dans le cas d'aptitude, utilisez la commande suivante :

find /usr -name 'xdebug.so'

Exécutez la commande suivante (en adaptant le chemin de xdebug.so)

echo "zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
xdebug.remote_enable=on" > /etc/php5/apache2/conf.d/xdebug.ini
apache2ctl restart

Il ne reste qu'à ajouter des breakpoints dans netbeans et faire Ctrl+F5

mercredi, novembre 25 2009

Merci d'enregistrer mon mot de passe en clair

Une faille d'injection sql chez Marmiton et je peux dire adieu à mon compte. Un md5 sha1 avec un grain de sel serait pourtant très simple !

Mot de pass Marmitton

lundi, novembre 9 2009

Cherchez l'erreur

Cherchez l'erreur

jeudi, octobre 29 2009

Passer à ubuntu ? oui, mais comment ?

Ubuntu 9.10 (aka Karmic Koala) is born ! Voici une nouvelle excuse pour pousser mon entourage à passer sous Ubuntu !

Pour les plus réticents Wubi vous permettra d'installer Ubuntu comme un simple programme Windows au cas où vous auriez peur de faire une bêtise. Vous pourrez ainsi le désinstaller comme tout autre programme Windows. L'inconvénient de cette solution est qu'elle ne sera plus fonctionnelle en cas de caprices de votre Windows.

Pour les autres, vous pourrez suivre la documentation française qui détaille toutes les étapes de l'installation (prévoir entre 15 et 30min)

Dans tous les cas, il ne vous coûte rien d'essayer le live CD (ou très pratique live USB) qui est sans AUCUN risque pour votre système.

Une fois celui-ci installé, voici ma sélection de paquets à installer pour vous éviter quelques recherches. Pour vous dire à quel point Ubuntu est une distribution "clefs en main", cette courte sélection représente 90% des applications installées manuellement sur mon système.

Pour les novices, plus il y a de "+" à coté des noms, plus les applications sont réservées aux utilisateurs "avancés". Faites votre choix.

Les commandes suivantes sont à taper dans un terminal (Menu "Applications" > "Accessoires"). C'est une méthode pratique lorsque le nombre de programmes à installer est assez important. Mais rien ne vous empêche d'utiliser la "Logithèque Ubuntu" disponible dans le menu principal. Vous pourrez d'ailleurs l'utiliser pour désinstaller un programme qui ne vous convient pas; ou taper la commande suivante :

sudo aptitude remove nom_du_programme

Web

Google Chrome :

sudo add-apt-repository ppa:chromium-daily/ppa
sudo aptitude update
sudo aptitude install chromium-browser

Notifications Firefox :

sudo aptitude install firefox-notify

Filezilla (client FTP) (++) :

sudo aptitude install filezilla

Notifications d'une boîte gmail :

sudo aptitude install checkgmail
sudo checkgmail -update # répondre 'Y' à la question posée

Outils d'administration du système

Unp pour extraire depuis un terminal des fichiers compressés (+++) et Terminator un terminal multi-panneaux :

sudo aptitude install unp  terminator

Démarrage et contrôle d'un ordinateur à distance par un terminal (+ + + +) :

sudo aptitude install wakeonlan openssh-server

GSmartControl (pour vérifier la santé de son disque dur) (++) :

sudo aptitude install gsmartcontrol

Outils divers :

Gnome Do :

sudo add-apt-repository ppa:do-core/ppa
sudo aptitude update
sudo aptitude install gnome-do gnome-do-docklets gnome-do-plugin-rhythmbox gnome-do-plugins

Wine (permet d'exécuter des fichiers .exe) (+++)

sudo aptitude install wine

Virtualbox (permet de lancer Windows depuis Ubuntu) (+++) :

sudo -s
echo "deb http://download.virtualbox.org/virtualbox/debian karmic non-free" >> /etc/apt/sources.list
wget -q http://download.virtualbox.org/virtualbox/debian/sun_vbox.asc -O- | sudo apt-key add -
aptitude update && aptitude install virtualbox-3.0

Multimédia

Codecs et lecteurs multimédia :

sudo aptitude install ubuntu-restricted-extras  adobe-flashplugin smplayer vlc lastfm subdownloader rhythmbox

Développement web

Serveur web :

sudo aptitude install php5 php5-mysql apache2 mysql-server phpmyadmin php-pear php5-ldap

Editeur :

sudo aptitude install  vim-full vim-gnome

Gestion de sources :

sudo aptitude install  mercurial git subversion meld

Pipette de couleurs (vive les traductions qui sonnent faux) :

sudo aptitude install  gcolor2

Have fun ! et n'hésitez pas à poser vos questions ici ou sur le forum d'ubuntu-fr.org.

PHP, Vim & CTags, ou comment naviguer rapidement dans vos sources

Ce billet est certainement les millionième howto du web sur vim+ctags. Je partage quand même ce mémo au cas où il soit utile à quelqu'un.

$ sudo aptitude install exuberant-ctags

Ajoutez les lignes suivantes au fichier ~/.vimrc :

set tags=tags;/ " Permet de rechercher un fichier "tags" en remontant depuis le répertoire courant jusqu'à la racine jusqu'à ce qu'il soit trouvé
map <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>

Ajoutez ceci à votre ~/.bashrc ou ~/.bash_aliases :

phptags () {
    ctags-exuberant -h ".php" -R                     \
        --exclude="\.svn"                            \
        --totals=yes                                 \
        --tag-relative=yes                           \
        --PHP-kinds=+cf                              \
        --regex-PHP='/abstract class ([^ ]*)/\1/c/'  \
        --regex-PHP='/interface ([^ ]*)/\1/c/'       \
        --regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\2/f/'
}

Puis placez vous à la racine de votre projet

$ phptags

Un fichier tags devrait avoir été créé, et devrait être pris en compte au prochain démarrage de vim.

Voici donc les différentes façon de naviguer dans vos sources (en vous plaçant au début d'un appel de fonction) :

  • Control ] Devrait vous amener à la définition de la fonction/classe (= Control ClicDroit)
  • Control T Vous ramènera à l'appel de la fonction (= Control ClicDroit)
  • Control W Control ] Ouvrira la définition dans un panneau horizontal
  • Alt ] Ouvrira la définition dans un panneau vertical
  • Control \ Ouvrira la définition dans un nouvel onglet

jeudi, mai 28 2009

Personnaliser le nom d'un fichier uploadé sous Symfony + Doctrine

Par défaut Symfony donne un nom de fichier hashé aux fichiers uploadés :

sha1($this->getOriginalName().rand(11111, 99999)).$this->getExtension($this->getOriginalExtension());

Rien de très explicite pour l'utilisateur qui va télécharger le fichier. Persuadé qu'une solution simple devait exister, une petite fouille dans les sources de Symfony s'imposa. Je note ici le résultat parce que je suis sûr que je l'aurai oublié d'ici quelques mois. Ça pourra aussi servir à quelqu'un (c'est aussi dans le tuto jobeet).

La solution est d'implémenter la méthode generate{ColonneDuFichier}Filename ($file) dans la classe du modèle qui va stocker le chemin vers le fichier. Exemple pour la colonne "certificat" :

public function generateCertificatFilename ($file)
{
  return "mynewfilename".$file->getExtension($file->getOriginalExtension());
}

mardi, mai 19 2009

Bug de Javascript sous IE n°20313

À défaut de faire de la pub pour un logiciel libre (ce que j'aimerais continuer d'ici peu) je vais une fois de plus me défouler sur IE. Après un problème de CSS, voici une n-ème merveille en provenance de Redmond.

C'est en voulant surveiller le changement de valeur d'un groupe de bouton radio que je me suis rendu compte de ce "serious bug"

IE fires the event when the checkbox or radio is blurred, and not when it is activated. This is a serious bug that requires the user to take another action and prevents a consistent cross-browser interface based on the change event on checkboxes and radios.

(Quirksmode.org

Concrètement l'évènement "change" n'est pas levé lorsqu'on clique sur un checkbox/radio mais lors d'un second clic sur un endroit quelconque de la page (correspond à l'évènement onBlur)

Le code était pourtant simple :

$('.options input', context).change (function () {
  // Do some stuff
});

La solution la plus simple est donc de déclencher manuellement les évènement change lors d'un click

$('.options input, .options label', context).click (function () {$(this).change();});

Encore une merveille qu'il est bon de connaître avant de perdre quelques cheveux.

Aller, je retourne m'attaquer au hasLayout, inline-bloc & co... sous IE bien sûr

samedi, février 21 2009

SSH Tips

Authentification sans mot de passe

Cette configuration ne doit être faite que si vous avez un minimum confiance dans la sécurité de l'hôte client. Une faille de sécurité sur le client compromettra automatique celle de l'hôte distant.

Créer une clef d'authentification coté client (taper "entrer" à chaque invite)

ssh-keygen

Puis la copier sur la machine distante

ssh-copy-id arnaud@avignon.didry.info

Configuration des connections (hôtes, utilisateurs, tunnels)

Coté client, ajouter les lignes suivantes au fichier ~/.ssh/config

Host avignon
    Hostname avignon.didry.info
    User arnaud

Host univ
    Hostname backdoor.univ-avignon.fr
    User uapv62073
    LocalForward localhost:25 smtp.univ-avignon.fr:25
    LocalForward localhost:389 ldap.univ-avignon.fr:389

Taper simplement ssh avignon pour se connecter au serveur défini dans le fichier ~/.ssh/config

Remarques pour les geek feignants : Les hôtes que vous aurez définis seront pris en compte dans la complétion de Bash (sous ubuntu du moins) ainsi que sous Gnome-do (par le biais d'un plugin).

Options de connexion utiles

-X : "X11 forward" permet d'ouvrir localement des applications graphiques

-v : "verbose" permet de vérifier par exemple que les tunnels se sont bien ouverts

Connections en utilisant plusieurs hôtes intermédiaires.

Bélier permet l’ouverture automatisée d’un terminal ou l’exécution de commandes sur un ordinateur distant via une connexion ssh. L’intérêt principal de Bélier réside dans sa capacité à traverser plusieurs machines intermédiaires avant d’accomplir la tâche assignée.

http://www.ohmytux.com/belier/

mardi, février 3 2009

Bug de CSS sous IE n°20312

Comment faire du webdesign en HTML/CSS sans devenir fou ?

CSS and front-end development can be ‘interesting’at times, and shouting at the screen seldom has any affect.

Pour ne pas changer, je viens tomber une 100ème fois sur le bug des blocs qui disparaissent sous IE. Je commence à être rodé et crois reconnaître le bug du hasLayout. Plusieurs sites sont là pour m'aider, dont celui de microsoft, une honte. Je tente la technique qui consiste à ajouter "zoom: 1;" au conteneur des floats qui posent problème. Cette technique m'a plusieurs fois aidé à résoudre ce bug mais là rien n'a changé.

Après quelques cheveux en moins et quelques recherches, je tombe sur ce lien qui nous dit :

Un bloc avec une position absolue peut disparaître s'il précède ou suit, dans le code source, un bloc en position flotante. ... N'importe quel bloc (même un div vide) placé dans le code source entre ces deux bloc résous le problème.

Magnifique ! Une raison de plus de détester/cracher sur IE et Microsoft !

Voici donc le code source final contenant le fameux div vide qui me permet de résoudre le problème

<div class="page">
  <div id="pub-left">hello from left en position absolute</div>
  <div id="pub-right">hello from right en position absolute</div>
 
  <div> <!-- Merci Microsoft pour ce div vide !  --> </div>
 
  <div id="contenu">lorem ipsum en position float</div>
  ...
</div>

Est-ce qu'un aimable développeur de virus pourrait aider les malheureux webdesigners en créant un petit ver qui supprimerait IE et le remplacerait par Firefox ? Si tu en es un, saches que tu auras le soutiens de toute la communauté des développeurs web pour répandre ton oeuvre !

jeudi, janvier 29 2009

My song has been Songsmithed !

Avez-vous entendu parler de Songsmith ? Microsoft vient de dévoiler l'outil utilisé secrètement par nos stars comme Britney Spears pour générer leurs mélodies à partir d'un chant. Pendant qu'elles l'utilisent pour se remplir les poches, d'autres s'en servent pour générer des reprises de hits, et le résultat est souvent "assez réussi" :

"Roxane" - Police

La suite dans le reste du billet >>>

Lire la suite...

mardi, janvier 13 2009

Introduction to GWT

Here is a (very short) presentation I made on Google Web Toolkit for an English course :

Bonne année

Ça commence à être un peu tard mais bonne année ! bon code et pas peu de bugs !

Place aux résolutions :

  • Me mettre enfin à Ruby on Rails
  • En apprendre plus sur GWT voire démarrer un petit projet
  • Passer moins de temps sur Google Reader
  • Me remettre au sport

Parmis les projets "pet store" qui me tournent dans la tête :

  • Un outil web d'analyse de consomation de tout type (edf, eau, banque, essence, etc) et de comparaison au jour/semaine/mois/année précédent. Une sorte de Google Analytics de la conso. A ce propos voici comment brancher son compteur edf sur un port série pour analyser sa conso.
  • Un lecteur RSS intelligent qui analyse les éléments lus, en déduit les centres d'intérêt et propose un mode "résumé" ne contenant que les items les plus importants.

Je crois que je vais manquer de temps d'ici la fin du monde annoncée dans 3 ans :

...20 ans d'après cet astrophysicien qui arrive à nous faire rire en parlant du crash d'une météorite sur la terre en 2029

mardi, décembre 9 2008

C'est Noël !

Avez-vous fait votre liste ? Vous croyez que si j'envoi la mienne chez ce Monsieur barbu habillé de rouge on me répondra ? J'ai espoir ! Après tout il a déjà distribué des cadeaux ayant un rapport avec l'informatique : gcc, make, emacs, etc ! Hop :

economie-du-logiciel-libre.jpg gwt.jpg livre-agile.jpg rails3.jpg

 

jeudi, novembre 27 2008

Photoshop "suédé"

Si vous avez aimé le délire de Michel Gondry dans son film "Soyez sympas, rembobinez" voici le Photoshop suédé :

C

jeudi, novembre 20 2008

Client riche/Serveur léger - L'architecture client serveur de demain

L'utilisation intensive du javascript afin d'ajouter des effets visuels où des communications asynchrones avec le serveur a grandement amélioré l'ergonomie de nos sites web; On passe progressivement des documents aux application. En revanche cela n'a aucunement changé l'architecture des sites ni notre manière de coder. Grossièrement le fonctionnement actuel de la plupart des applications web est le suivant : Pour traiter une requête on analyse le contexte (session, paramètres, etc), manipule des données métier, et générons du code HTML. En somme, les trois parties du modèle MVC sont exécutées côté serveur.

Jusqu'à présent, pour des raisons de simplicité, de navigateurs ne respectant pas les standards, et de performances des moteurs javascripts, nous (développeurs) avons été bridés et n'avons pas utilisé tout le potentiel des outils standardisés par le W3C. Mais les choses ont avancé très vite ces derniers temps. La compétition est lancée entre les navigateurs pour savoir lequel aura le moteur Javascript le plus rapide : TraceMonkey (Firefox), SquirrelFish Extreme (Webkit), v8 (Google Chrome) !

Et pendant ce temps là, Microsoft apprend à faire ses lacets

C'est le début d'un tournant dans le développement de véritables applications web. Mais pour cela, il faut optimiser l'architecture actuelle un peu vieillotte : allégeons les serveurs et dynamisons les clients !Passons d'une architecture "server-centric" à "client-centric".

Lire la suite...

jeudi, novembre 6 2008

Google tech talk compilation

Ne les ayant pas tous vu, je les commenterai peut être plus tard. Certains datent un peu mais restent intéressant.

Django: Web Development for Perfectionists with Deadlines

The Paradox of Choice - Why More Is Less

7 Habits For Effective Text Editing 2.0 (with VIM)

Beyond Test Driven Development: Behaviour Driven Development

Core Patterns for Web Permissions

Thin Server Architecture and Dojo

Writing Clean Testable Code

mercredi, novembre 5 2008

Quelques flux

Petite compilation des sites en rapport avec l'informatique présents dans mon agrégateur.

Des liens à proposer ?

jeudi, octobre 30 2008

Mercurial, un gestionnaire de version décentralisé

Apparus aux alentour de 2005, Mercurial fait partie de la dernière génération des systèmes de versions qui ont comme particularité d'être décentralisés. Contrairement aux systèmes centralisés tels que Subversion ou CVS, chaque développeur possède ses propres dépôts contenant l'intégralité des modifications d'un projet.

Apparus dans le contexte de projets open source, ces DVCS permettent à un développeur extérieur à un projet de le "cloner" afin d'y ajouter une fonctionnalité. Possédant ainsi son propres dépôt il peut alors "versionner" ses modifications sans pour autant modifier le projet original. Une fois terminé il peut proposer aux développeurs du projet de récupérer son code afin de l'analyser en vue d'une intégration dans leur code de base. Avec Subversion, un tel scénario n'aurait pas été possible aussi simple.

D'autres logiciels open source existent bien sûr, les plus connus sont (source wikipédia):

Ayant l'occasion d'utiliser Mercurial dans un projet, je vais essayer de décrire ses principales commandes pour vous montrer à quel point il est simple à utiliser.

Lire la suite...

mercredi, octobre 8 2008

Shoutbox Part 1 : Prototypage

Voici comment vont s'architecturer les différentes parties du développement de la shoutbox :

  1. prototypage
  2. personnalisation du comportement du modèle et de l'interface
  3. petite touche d'ajax avec jquery

Lire la suite...

- page 1 de 2