~bohwaz/blog/

Avec de vrais morceaux de 2.0 !

LightPlanet, planet léger et différent

LightPlanet est une petite appli permettant de mettre en place un planet sur une plateforme PHP5. Ca utilise SQLite évidemment. Il est léger (pas de grosse dépendance, pas de connexion mysql, cache statique pour les homes...), et différent, en effet il permet d'avoir des feeds de plusieurs langues sur le même planet sans aucun problème.

Installation :

svn export http://svn.kd2.org/svn/misc/apps/planet/ planet
cp planet/config.php.dist planet/config.php

N'oubliez pas ensuite de modifier planet/config.php pour mettre vos feeds et vos préférences. Il faut évidemment que votre PHP (via apache par exemple) puisse écrire dans son répertoire pour stocker ses données. Si vous n'avez pas svn, faites un coup de apt-get install subversion avant également.

Le parfait exemple de ce planet c'est simplement Planet Opera que je viens de créer ;)

La sorcière blanche est polyamoureuse

Enfin façon de parler. Via Practical Polyamory : Tilda Swinton, qui a joué notamment dans La Plage, Vanilla Sky, Constantine ou le rôle de la sorcière blanche dans Le monde de Narnia, et qui a obtenu un oscar pour son rôle dans Michael Clayton, est polyamoureuse. Elle vit en effet avec deux compagnons : John Byrne, son mari et père de ses enfants, et Sandro Kopp, peintre allemand avec qui elle vit également, qui la suit sur ses tournages. Ils se retrouvent parfois tous les trois ainsi que les deux enfants de Tilda dans la résidence de Tilda et John en Ecosse.

Renommer les photos flickr avec du sens

Les photos enregistrées depuis flickr n'ont pas de nom très causant, un numéro, un hash et voilà... Auteur ? Titre ? Sont pas là. Voici donc un petit script à placer dans votre ~/bin/ et à chmod +x (vous devez aussi avoir php5-cli d'installé). Il renomme les photos téléchargées sur flickr avec l'ID (peut toujours servir pour retrouver la photo), le titre, l'auteur et la licence. Pas besoin de clé d'API ça va chercher tout seul en HTTP. C'est un peu lent mais ça marche très bien.

Utilisation :

$ flickr-rename ~/temp/photos/

Téléchargement

http://svn.kd2.org/svn/misc/apps/fotoo/flickr-rename

Altermusique.org ça avance :)

Deux semaines après la sortie en bêta de Altermusique.org, ça avance pas mal, je bosse dessus régulièrement. Au menu de ce qui a pu se passer ces derniers temps :

  • Des albums ajoutés :) Merci à Lacrymosa, Ehma et Realaze d'avoir rejoint le navire :)
  • Espace artistes revu et corrigé : possibilité de mettre du HTML dans les présentations artiste/album, plus pratique, plus clair, etc.
  • Un blog pour le site :)
  • Une foultitude de bugs corrigés
  • Des stats qui commencent à pointer leur nez (nombre de DL/écoutes album/morceaux)
  • Une bannière revue et corrigée dans les pages artistes/album (plus claire, plus visible)
  • Quelques changements visuels, etc.

Voilà il reste quelques bugs qui traînent, je m'occupe de les éradiquer dès que je peux :) Sinon le planning pour les semaines qui viennent :

  • Regénération d'album (possibilité de changer des trucs pour les albums après publication donc : paroles, présentation, images...)
  • Va falloir regénérer les albums publiés avant "Aléas & Tracas" parce qu'ils n'ont pas la licence dans leur archive
  • Inclusion des paroles dans les archives à télécharger, dans un fichier HTML
  • Possibilité d'avoir plusieurs images pour un album (verso, livret, etc.)
  • Vente d'albums / Dons
  • Refaire la page "musique" du site

Enfin pour la sortie "finale" il faudra mettre en place l'architecture de serveurs finale, et c'est pas de la tarte ça...

Le reste viendra plus tard :) Et tout ça ça fait déjà du boulot, le SVN va bien chauffer :)

Free suicide Freephonie : sauvons-nous avec Asterisk

Free a décidé de bloquer les appels à l'étranger depuis leur service de SIP, tout ça parce que leur interface d'édition de compte est moisie, pas secure et qu'ils sont incapables de détecter et bloquer les abus... Facile quoi. Heureusement nous allons pouvoir passer outre, en rusant. Pour cela il nous faut Asterisk, autrement dit un PABX en logiciel libre. Bon un PABX on s'en fout de savoir ce que ça veux dire, mais ce qui est important c'est que ça fait de la téléphonie, et donc le café.

Ce que j'ai fait est plutôt simple, ça consiste simplement à avoir asterisk qui s'occupe de faire le pont entre vos clients SIP et vos comptes SIP. Ici on a un compte freephonie sur lequel on va recevoir les appels et aussi émettre les appels vers un numéro en france (numéro à 10 chiffres). On a aussi un compte VoIPBuster (payant évidemment, mais pas très cher heureusement), qui va permettre d'appeller l'international et aussi la france quand freephonie déconne (en réalité tout le temps).

Alors le truc simple : apt-get install asterisk. Voilà, facile, no problemo. Maintenant il faut modifier le fichier sip.conf :

[general]
defaultexpirey=1800
dtmfmode=auto
qualify=yes

; Vos comptes SIP où s'enregistrer
register => 09XXXX:secret@freephonie.net
register => blabla:secret@sip.voipbuster.com

; Compte VoIPBuster
[voipbuster] 
type=peer
host=voipbuster.com
username=blabla
fromuser=blabla
secret=secret
nat=yes
allow=all

; Appels sortants sur Freephonie
[freephonie-out]
type=peer
host=freephonie.net
username=09XXX
fromuser=09XXX
secret=secret
nat=yes
fromdomain=freephonie.net
allow=all

; Et pour les appels entrants freephonie
[freephonie-in] 
type=peer
context=fromfree
host=freephonie.net
allow=all

; Client SIP N°1 : mon téléphone SIEMENS C450IP
[phone]
type=friend
username=phone
secret=abcd
host=dynamic
context=maison
nat=yes
; Ces trois lignes suivantes sont spécifiques à mon téléphone pour qu'il fonctionne bien, vous pouvez les enlever pour un client SIP classique
dtmfmode=inband
allow=ulaw,alaw
canreinvite=no

Notez que vous pouvez rajouter autant de sections de type=friend que vous voulez pour avoir autant de clients SIP que vous désirez.

Maintenant configurons extensions.conf qui indique le plan de numérotation :

; Mon contexte c'est "maison", on peux avoir plusieurs contextes selon les clients si ça nous amuse
[maison]

; On compose un numéro à 10 chiffres commençant par zéro puis un chiffre qui n'est pas zéro (exemple 0154545689)
; Alors on essaye de le composer avec Freephonie, mais si ça marche pas on utilisera VoIPBuster
exten => _0ZXXXXXXXX,1,Dial(SIP/freephonie-out/${EXTEN})
exten => _0ZXXXXXXXX,2,Dial(SIP/voipbuster/0033${EXTEN:1})

; Règle spécifique à la belgique qui permet de composer un numéro belge sans le préfixe 0032 :
; si on tape un numéro comportant au moins 5 chiffres (les numéros ici sont plutôt variables en longueur), 
; qui commence par zéro puis un chiffre qui n'est pas zéro (Z), alors on rajoute automatiquement le préfixe 0032
exten => _0ZXX.,1,Dial(SIP/voipbuster/0032${EXTEN:1})

; Autres numéros internationaux commençant par 00 (par ex. 0033 pour la france) : on passe par voipbuster directement
exten => _00ZXXX.,1,Dial(SIP/voipbuster/${EXTEN})

; Si le numéro n'est ni un numéro français ni un numéro belge ni un numéro international on raccroche
; (ou si freephonie et voipbuster sont down)
exten => _0Z.,3,Congestion

; Indique que faire avec les appels entrants sur freephonie
[fromfree]

; ici on fait sonner juste le téléphone (on pourrait faire sonner plusieurs clients SIP en mm temps ou à la suite, ou rediriger vers une boite vocale, je vous laisse mater les trucs sur le net à ce sujet)
exten => s,1,Dial(SIP/phone)

Voilà, un petit coup de /etc/init.d/asterisk restart et hop. Si vous avez des problèmes, tentez le débug, stoppez asterisk, puis en root lancez "asterisk -cvvvvvvvv".

Altermusique.org en bêta

Il y a ceux qui vendent de la musique, et ceux qui en créent !

Altermusique parce que nous privilégions une autre approche de la musique, à l'encontre de la musique commerciale, du marketing et de la vision à court terme de la création. Nous sommes pour une musique libre. Pour les artistes cette liberté c'est la possibilité de reprendre, sampler, modifier, remixer, ré-interpréter, ré-arranger. Pour le public c'est la possibilité de diffuser sans contrainte lourde, écouter, créer, modifier, graver, copier, etc..

Parce que la musique c'est une relation humaine

Un morceau, un album, un concert, se ne sont que des éléments de communication. Car la musique crée une relation entre l'artiste et le public. Nous sommes pour une vision simple des relations entre les créateurs et le public. Nous refusons que le public soit soupçonné, espionné, considéré comme un voleur. Pour nous la relation entre l'artiste et le public est primordiale et il est important que l'artiste soit accessible humainement, ne soit pas placé sur un piédestal.

Pour tout ça, est lancé aujourd'hui le site Altermusique.org en bêta, qui propose aux artistes qui choisissent une licence libre une manière simple de proposer leur musique en téléchargement et en vente en ligne (à venir), et au publier une manière simple de télécharger et acheter en ligne sans souci de format ou de temps de téléchargement.

Altermusique propose les albums à télécharger en Ogg Vorbis, MP3 et FLAC et les morceaux à l'unité en MP3. L'artiste peut choisir de vendre la version FLAC à prix libre (choisi par l'acheteur entre 2 et 20 euros) ou fixe (choisi par l'artiste entre 2 et 9 euros). L'achat permet un accès permanent au téléchargement, il est possible à tout moment de recevoir par mail les liens vers les albums achetés précédemment.

(Altermusique est un projet de longue date, preuve en est que j'ai commencé à écrire ce billet en novembre 2006 !)

La "révolte", en france, en 2008...

... C'est de taguer une affiche du Planning familial qui dit simplement "Sexualité, Contraception, Avortement : Un droit, mon choix, notre liberté" avec un vulgaire slogan appelant à l'interdiction de l'avortement...

Qu'est-ce que ces crétins n'ont pas compris dans le mot "choix" ? Ou peut-être que c'est le mot "liberté" qui les énervent ?

Et encore il y a une semaine, ils défilaient dans la rue pour empêcher justement, d'avoir le choix. Je vous laisse écouter leurs arguments : il s'agirait d'une conspiration "contre" la vie (sic!), que l'IVG serait une solution de facilité (!), une contraception pour "une soirée trop arrosée" (re-sic!)... Le top du top : "La famille est la base de la nation, et c'est justement en cassant la famille que la plupart des dictateurs ont réussi à asseoir leur autorité"...

Est-ce que ces crétins savent au moins de quoi ils parlent ? Qu'ils imaginent ne serait-ce qu'une seconde qu'une IVG n'a rien mais alors rien de plaisant et que ça ne ressemble en rien, ni de près ou de loin, à une "solution de facilité" ? Qui sont-ils pour vouloir faire ce choix à la place de la personne concernée ?

Vite, donnez-moi une batte de base-ball, un parpaing, n'importe quoi, leur haine me fait vomir.

YouWaz et BohTube

Répliquer les vidéos qu'on a uploadé sur les sites de vidéo 2.0 à la youtube/dailymotion/etc. ça peut être une bonne idée quand on sait qu'ils risquent de ne pas durer éternellement. Alors pourquoi ne pas faire notre propre Youtube ? Fastoooche.

Il suffit de prendre un petit FLV Player de notre talentueux camarade neolao, de coder un truc en PHP qui liste les fichiers du répertoire et hop ! Il suffit de recopier les FLV générés par dailytube avec l'aide précieuse d'un outil comme KeepVid, de les mettre dans le même répertoire en les renommant correctement, et hop. Perso je les nomme avec Theme-Nom-Date.flv, ainsi je classe par Theme pour éviter d'avoir une liste énorme. Evidemment rien n'empêche de faire nos propres FLV de meilleure qualité :)

En pratique ça donne ça : http://bohwaz.net/videos/ vous y trouverez l'intégrale de la série Anfer, ainsi que tous les trucs que j'ai rippés sur Dailymotion jusque là. J'ai fait exprès d'élargir autant que possible le player vidéo parce que bon même si la résolution des vidéos c'est 320x240, ça fait trop trop petit.

Et le source du fichier PHP codé à l'arrache : http://bohwaz.net/videos/index.phps (oui c'est goret)

Nota : l'encodage en FLV doit se faire en deux fois sous Debian et Ubuntu :

# Encodage de la bande son en mp3 avec mencoder
mencoder Original.avi -o temp.avi -ovc copy -oac mp3lame -lameopts cbr:preset=32 -srate 22050
# Encodage de la vidéo avec ffmpeg (qui ne contient plus le support mp3)
ffmpeg -i temp.avi -acodec copy Final.flv

Bienvenue en 2008

Des allusions à une laïcité "épuisée" ou guettée par le "fanatisme" vont faire des vagues. Ne craignant pas de choquer, M. Sarkozy dit que l'intérêt de la République est de compter des populations qui "croient" et "espèrent" et qu'il n'est pas de bonne politique sans référence à une "transcendance".

(Source : Le Monde)

Quelqu'un aurait-il le bon sens de lui faire fermer sa gueule ?

MiniSkel, squelettes SPIP flexibles en PHP5

Je n'ai jamais rencontré de langage de template aussi intéressant que celui de SPIP. La plupart des langages existants, comme Smarty par exemple, sont conçus pour afficher un contenu qui est déjà déterminé. Avec les squelettes SPIP, le contenu est demandé par le template lui-même, via un langage de boucles qui mixe PHP et mySQL. Le langage de boucles de SPIP est vraiment très proche du SQL et c'est aussi ça qui rends son utilisation intéressante, c'est un peu comme faire du SQL en français directement dans le template.

J'ai déjà par le passé réimplementé le langage de SPIP dans une classe php3 (c'était en 2003), c'était très intéressant car la classe n'était qu'un wrapper mySQL, elle allait directement chercher le contenu demandé par le template. Cependant c'était pas mal bugué et quand même relativement lent. Et surtout attaquer directement la base de données comme ça c'est pas très secure...

Je me suis donc un peu repenché sur l'idée et j'ai commencé à coder il y a deux jours un objet PHP5 très flexible, qu'on étends selon ses besoins et ses envies, qui parse un squelette. Normalement cet objet est pas trop mal conçu et permet donc des choses très intéressantes. Bon déjà on peux adapter le language à ses besoins (les types de boucles peuvent être définis comme on le sent, les critères également), on peux même renommer les noms des tags et des critères. Mais ensuite, c'est du tout objet, et adapter le parseur de squelette à son projet devient donc un plaisir :)

Prenons un exemple simple, vraiment très simple, on n'autorise un seul type de boucle, la boucle ARTICLE, le code suivant nous suffira :

require_once '../class.miniskel.php';

class mySkel extends miniSkel
{
   protected function processLoopType_article($criterias, $content)
   {
       $articles = array(
           array(
               'title' =>  'Chinese Soup',
               'text'  =>  'this is a french recipe of the soupe chinoise',
           ),
           array(
               'title' =>  'Flamenkuche',
               'text'  =>  'This is delicious !',
           )
       );

       $out = '';

       foreach ($articles as $art)
       {
           $out .= $this->parseVariables($content, $art);
       }

       return $out;
   }
}

$skel = new mySkel;
$skel->display('simple_example.tpl');

Et ouais c'est difficile de faire plus simple ! Bon après on peux mettre ce qu'on veux dans la méthode processLoopType_article, là on renvoie juste un tableau fixe et on ne tient pas compte des critères, mais on peux très bien faire qq chose de plus élaboré. Ca montre la facilité d'adapter le système de squelettes à votre application. On vois également ici que l'objet miniSkel définit des conventions permettant de base simples permettant d'étendre l'objet facilement, mais il est tout aussi facile de redéfinir ces conventions pour faire un peu ce qu'on veux.

J'ai codé trois petits exemples qui vont avec la class miniSkel. Le premier est celui que je viens de montrer, le second est une petite application (un mini CMS) utilisant une base SQLite pour stocker des articles et les afficher via la boucle de type ARTICLE, pour montrer la flexibilité et la proximité du langage avec les requêtes SQL. Le dernier enfin, est un peu plus avancé puisqu'il s'agit d'un compileur de template, comme pour smarty, il va transformer le langage du template en langage PHP, ce qui permet ensuite un traitement bien plus rapide. Ce compileur est évidemment un peu basique, mais il est fonctionne très bien et je l'ai codé en 2 ou 3 heures...

Ce compileur montre la flexibilité et la puissance de l'objet miniSkel. En théorie on pourrait même construire un parseur de squelettes SPIP à 90% compatible avec les squelettes existants, en très peu de temps.

Voilà c'est encore en alpha, ça va sûrement évoluer et y'a probablement encore des bugs (me les signaler merci !), mais si ça vous intéresse vous pouvez aller voir ici :

http://svn.kd2.org/svn/misc/libs/miniskel/

Vous trouverez la classe miniSkel ainsi qu'un répertoire contenant les 3 exemples et leur templates. Attention PHP5 nécessaire, on fait de l'objet ici :)

Le code est déjà largement documenté, mais vous trouverez aussi un README qui vous dira ce qui n'est pas encore implémenté et ce qui ne relève pas de la compétence de miniSkel.

Notes rapides... ↓