Raccourcis claviers avec les tabulations

Publié dans Geekeries | Laisser un commentaire

J’ai découvert aujourd’hui un nouveau raccourci clavier avec la touche tabulation (TAB), et ça risque d’être très utile ! Pour le coup, petit rappel de quelques raccourcis claviers avec TAB.

Switch des fichiers

  • ALT+TAB : switch au fichier ouvert après le fichier courant
  • ALT+MAJ+TAB : switch au fichier ouvert avant le fichier courant

Tabulation

  • TAB : Créé une tabulation
  • MAJ + TAB : Enlève une tabulation

Et cela fonctionne aussi lorsque l’on sélectionne tout un groupe de lignes. Ce qui est plutôt pratique lorsqu’on a des soucis de tabulations. Pour le coup on se demande pourquoi la touche Supr n’est pas MAJ+Return… La touche Fin pourrait être MAJ+Début (on ne pourrait alors plus sélectionner rapidement toute une ligne).
Bref, ça aurait été malin de faire une touche par action, et une combinaison de touche pour les actions inverses, au lieu d’une nouvelle touche… M’est avis hein ! Ah, si je fabriquais un nouveau clavier…

Publier un billet sur Dotclear via Google Documents avec XML/RPC

Publié dans Dotclear | 2 commentaires

Sur Dotclear (et d’autres blogs), il est possible de publier un billet sans passer par l’interface d’administration. J’ai découvert cette fonctionnalité assez magique il y a quelques temps, et j’avoue ne pas m’en servir souvent, mais par exemple, aujourd’hui j’écris ce billet à partir de Google Documents ! Si, si, c’est vrai ! J’ai coché une petite case sur Dotclear, j’ai configuré Google Documents comme il faut, et ça marche.
Ce petit miracle, est possible grâce à XML/RPC. C’est un protocole RPC (Remote Procedure Call) qui permet en gros d’utiliser du XML pour faire dialoguer mon blog Dotclear et Google Documents.

Mode d’emploi

Il faut tout d’abord aller dans l’interface d’administration de Dotclear (Tableau de bord > Paramètre du blog) et dans Configuration du blog, cocher : Activer l’interface XML/RPC.

Le petit lien plus d’informations nous mène en bas de la page et fournit toutes les infos pour configurer Google Documents (ou autre).

Maintenant, il faut se rendre sur Google Documents. On créé un document texte classique, et on écrit ce que l’on souhaite dedans.
Reste ensuite à publier le document sur un blog. Pour cela, il faut cliquer sur Partager > Publier en tant que page Web …. Cela nous mène à la page suivante :

Avant de publier le billet, il va falloir paramétrer l’envoi.

Rien de bien compliqué, il suffit de suivre les informations fournies par Dotclear.
En cliquant sur Envoyer dans mon blog, le billet est automatiquement publié ! Magie !

Dans le cas de Google Documents, le corps du billet est le corps du document, et le titre correspond aux premiers mots de la première ligne. L’inclusion du titre du document lors de l’envoi ne fonctionne pas. Et je n’arrive pas à préciser la catégorie. Bref, ce n’est pas ce qui se fait de plus pratique, mais si on a quelque chose d’écrit sur Google Documents et que sur un coup de tête on décide de le publier sur son blog, ça peut servir.
Petit avantage/désavantage tout de même, les images sont stockés chez Google. ça peut être pratique si vous avez peu d’espace disque, mais c’est quand même mieux d’avoir tout chez soit !

Pour aller plus loin

Je fournis à Google Documents le script XML/RPC sur mon blog qui se charge de publier un billet. Ce script demande un mot de passe à Google, je le luis fournis, et je lui dis aussi quel billet envoyer. Google Documents transforme tout ça au format XML qui va bien, Dotclear re-transforme ça au format qui lui va bien, et c’est gagné !
Si je saisis bien, XML/RPC est l’ancêtre du SOAP (Simple Object Access Protocol) qui est plus couramment employé aujourd’hui.

Ajouter un alias à Apache

Publié dans Apache | Un commentaire

De base, pour ouvrir une page à l’aide d’Apache, il faut que celle-ci se trouve dans le dossier /var/www sous Linux, ou dans le dossier www/ d’Apache sous Windows. On y accède alors en allant à l’adresse : http://localhost/nomDeLaPage.html.
Cela n’est pas forcément des plus pratique, par exemple moi j’ai une partition sur laquelle est installée Windows, une autre avec Linux, et une troisième qui contient mes documents (avec un petit soft installé sur Windows pour pouvoir gérer le système de fichiers ext3). Par conséquent, Apache est installé sur ma partition Linux, et mes fichiers se trouvent dans ma partition documents et non dans /var/www de la partition Linux. Heureusement, il existe des solutions pour mettre fin à ce petit embêtement : il suffit de créer un alias. Pour cela, il faut rajouter une ligne dans le fichier de configuration d’apache. Sous Linux : /etc/apache2/apache2.conf (ou httpd.conf si vous utilisez apache1), ou sous Windows : $VOTRE_DOSSIER_APACHE/conf/httpd.conf (en général, des interfaces graphiques vous permettent d’ajouter facilement des Alias). Ajoutez à la fin :

# Mes alias
Alias /nomDuDossierAlias /cheminVersLeVraiDossier

Reste à redémarrer Apache, en ligne de commande par exemple :

bash$ /etc/init.d/apache2 restart

Et le tour est joué, la page http://localhost/nomDuDossierAlias est désormais accessible et utilisera les fichiers de /cheminVersLeVraiDossier. On peut préciser les permissions qui s’appliquent à ce dossier (comme pour locahost, ou un virtualhost) en ajoutant après l’alias :

<Directory /cheminVersLeVraiDossier>
   Order allow,deny 
  Allow from all
</Directory>

Pour finir, dans le cas où on souhaite utiliser de l’url-rewriting, il faudra peut-être ajouter un RewriteBase au fichier .htaccess :

RewriteBase /cheminVersLeVraiDossier

Et voilà !

Un ami m’a aussi expliqué comment enlever le localhost et utiliser directement http://cequejeveux.com en ajoutant « 127.0.0.1 cequejeveux.com » dans le fichier hosts. ça devient gadget mais ça peut être utile. J’ai un article plus détaillé en cours de rédaction à ce sujet 🙂

Pour aller plus loin

Réécriture d’url pour Dotclear

Publié dans Dotclear | Laisser un commentaire

Voilà déjà quelques temps que j’ai réussi à réécrire l’url des pages de mon blog Dotclear. Auparavant une page billet avait un url ressemblant à index.php?post/2009/07/16/titre-du-billet.html, et maintenant, elles sont de la forme : /post/2009/titre-du-billet.html. C’est quand même mieux ! On pourrait optimiser encore, mais moi ça me suffit.

Il y a deux choses à faire pour modifier la réécriture des urls sur son blog.

Format d’url des nouveaux billets

Dans les paramètres du blog (Tableau de bord > Paramètres du blog), il est possible de modifier le format d’url des nouveaux billets. Par exemple : Année/Mois/Jour/Titre ou Année/Titre.
Mais il est aussi possible de modifier ça « à la main » (donc avec plus de possibilité) dans about:config (Extensions > about:config).

Format d'urls
Continuer la lecture

Montre mécanique

Transformer une date en langage naturel, en timestamp

Publié dans PHP | Laisser un commentaire

En ce moment, je m’amuse avec des flux RSS, et il se trouve que dans un flux RSS, on tombe souvent sur une date de la forme : « Fri Oct 30 17:17:00 2009 ». Bref, une date en langage naturel ! Mais voilà, ce dont j’ai besoin c’est d’une date au format timestamp (le nombre de secondes depuis le 1er janvier 1970 à minuit, aussi appelé l’epoch). Je pars donc avec mes grands sabots : des regex pour séparer heures, minutes, …, et un p’tit coup de mktime !
C’est pas mal, mais en fouillant dans la doc, j’ai trouvé une petite fonction fort sympathique : strtotime ! Cette fonction prend une chaine de caractères en argument et renvoie, si possible, le timestamp correspondant. Plusieurs mots clefs sont pris en compte, par exemple now, ou next Thursday. Et le format de date précédemment cité est bien reconnu, chouette, non ? Pour se convaincre :

$str = 'Mon Nov 2 07:01:11 2009';
$timestamp = strtotime($str);
$str2 = date('D M j H\:i\:s Y', $timestamp);
echo 'Date d\'origine : '.$str.'<br />Timestamp après strtotime : '.$timestamp.'<br />Date réécrite après strtotime : '.$str2;

Ce qui affiche bien :

Date d’origine : Mon Nov 2 07:01:11 2009
Timestamp après strtotime : 1257145271
Date réécrite après strtotime : Mon Nov 2 07:01:11 2009

Magique, non ?
Bon, je retourne à mes flux RSS.

Google indexerait-il si rapidement ?

Publié dans Geekeries | 4 commentaires

Il y a quelques minutes j’ai écris un billet sur [CONCAT en MYSQL|/post/2009/Mysql-et-la-recherche-sur-plusieurs-champs-avec-concat-ou-concat_ws], et comme à mon habitude, j’ai tapé  »mysql concat concat_ws rétrolien » pour trouver d’éventuels billets de blogs auxquels je pourrai envoyer un rétrolien. Mais qu’elle ne fut pas ma surprise en voyant un lien vers le billet que je venais juste d’écrire dans les résultats de Google : [((/public/Divers/.google-dingue_m.jpg|Google crawl en moins de 12 minutes|C|Google crawl en moins de 12 minutes, oct. 2009))|/public/Divers/google-dingue.jpg] Google a indexé une page que je venais de créer il y a seulement 12 minutes… J’avoue ne pas comprendre comment cela est possible ! C’est dingue. J’imagine que c’est grâce au Ping-o-Matic! et Google Blog Search de Dotclear. Je n’ai jamais vraiment compris à quoi servent ces trucs, ni comment ils fonctionnent, mais je crois qu’il va falloir que je m’y penche sérieusement. Ou alors c’est dû au nouveau système [Google Social Search|http://www.zorgloob.com/2009/10/google-social-search-votre-reseau-la.asp] qui cherche dans les contenus très récent. Dans tous les cas, c’est très surprenant ! (et je suis un peu deçu d’avoir changé l’url de ma page depuis ces 12 minutes, parce que pour le coup, le lien de Google mène vers une jolie page 404) %%% Allez savoir… Au fait, Google a un système pour voir les résultats d’une recherche sur ce qui a été indexé il y a moins de 3 jours, 2 jours, … moins d’1h ! Et mon précédent billet apparait bien (avec le bon url en prime). Bref, dingue ! [Exemple avec le mot clef « Google »|http://www.google.fr/search?hl=fr&q=google&as_qdr=h&btnG=Rechercher&meta=&aq=f&oq=]

Mysql et la recherche sur plusieurs champs : avec CONCAT ou CONCAT_WS

Publié dans SQL | 3 commentaires

Après avoir parlé un peu de la recherche en MySQL via LIKE puis REGEXP, et avant d’aller plus loin, parlons un peu de la recherche dans plusieurs champs à la fois. Eh oui, c’est possible grâce à CONCAT, ou plutôt CONCAT_WS.
Prenons une table contenant les billets d’un blog, et donc possédant les champs id, titre et contenu. Une recherche classique cherchera un mot clef dans le titre et dans le contenu du billet. Pour cela, on pourrait utiliser OR, mais un CONCAT qui concatène (i.e. met l’un à la suite de l’autre) le contenu de titre et de contenu, c’est pas mal aussi ! Exemple à l’appui :

SELECT * FROM billet WHERE CONCAT(titre, contenu) LIKE "%mot%clef%";

On peut ainsi concaténer autant de champs que l’on souhaite. Un petit détails cependant, si l’un de ces champs est NULL, le résultat renvoyé est NULL. Ce qui implique qu’un article sans titre dont le contenu correspond au mot clef, ne sera pas récupérée. Même si l’exemple est débile, c’est un peu dommage. Pour éviter cela, il convient d’utiliser CONCAT_WS qui fonctionne de la même manière, sans se soucier des champs vides.
Le deuxième exemple ci-dessous est certes moins compréhensible, mais il illustre ce dont nous venons de parler, et explique bien l’intérêt d’utiliser CONCAT plutôt que OR dans certains cas.

SELECT * FROM billet WHERE CONCAT_WS(date, ' ', heure, 'h', minute) LIKE "10/11/2009 23h30";

Bien sûr, il est possible d’utiliser la commande REGEXP au lieu de LIKE ! Bref, vive la concaténation !

Puisque ses rétroliens ne semblent pas fonctionner, merci à CrazyCat de G33k-zone pour m’avoir fait découvrir cette commande SQL bien utile.

Problème SEO Dotclear : pages archives – pages billets

Publié dans Dotclear | Laisser un commentaire

Calendrier 30minparjour
L’autre jour je surfais un peu sur mon site (on s’ennuie toujours quand on s’ennuie. Je me console en me disant que ça me permet de trouver des bugs ou des fautes de frappes) et en utilisant les liens du calendrier, je me suis fait la réflexion suivante : Sur mon blog, en général, j’écris au maximum 1 billet par jour. (et parfois aucun ;-)) Par conséquent, le contenu d’une page billet (exemple) est presque le même que le contenu d’une page archive du même jour. (exemple) La question est donc : n’y a-t-il pas un risque que Google et ses comparses prennent cela comme du duplicate content (+ de 70-75% de similitude entre 2 pages) et ralentissent le scrawling de mon site ?
Continuer la lecture

Uploadify : uploader facilement avec Jquery

Publié dans Javascript | 2 commentaires

Voilà déjà quelques temps que j’entretiens, en parallèle de mon script « toolbar BBcode » un script d’upload de fichiers. Il contient une interface d’administration bien complète, et l’interface utilisateur permet d’uploader facilement un ou plusieurs fichiers à la fois, en renommant, écrasant, sélectionnant un dossier particulier, et bien sûr la gestion des fichiers déjà uploadés permet d’en faire autant. Récemment, en apprenant des notions d’Ajax, j’ai même appris à faire des uploads sans rechargement de pages, c’est beaucoup plus zoulie !

Continuer la lecture

Singleton(s) !

Publié dans PHP objet | Commentaires fermés sur Singleton(s) !

Voilà bien longtemps que je n’avais pas fait de billets sur le PHP Objet. A vrai dire, je suis en train d’apprendre la programmation orientée objet en cours (au travers du Java et du C++), donc ça fixe vraiment les idées et permet de comprendre pas mal de petites choses, notamment l’utilité de certaines notions, comme les singletons, qui me paraissait bien douteuse auparavant. Un singleton, c’est une classe que l’on ne peut instancier qu’une seule fois. Par exemple, en cours on a créé une classe liste dont hérite la classe liste vide, et la classe listeNonVide. Clairement, il n’existe qu’une et une seule liste vide (sinon, on ne s’en sort pas), donc cette classe ne peut être instanciée qu’une seule fois, donc c’est un singleton. Je n’ai pas encore trouvé d’exemples plus parlant, par contre sur Apprendre-PHP, l’exemple est celui d’une classe PresidentDeLaRepublique qui, en effet, ne peut être instanciée qu’une seule fois)

Comment faire ?

L’idée est la suivante : le constructeur de la classe est private, on ne peut donc instancier la classe en passant directement par lui. Par contre, une variable static possède un accessor (getMachin()) qui est public et qui appelle le constructeur si la classe n’est pas encore instanciée (variable static == null), ou retourne l’instance sinon. En somme, voilà ce que ça donne :
Continuer la lecture