TheCaméléon

Bienvenue !

Projets > morss.it
Le dernier né de mes projets, morss.

Vous pouvez vous en servir gratuitement à l'adresse suivante :
morss.it

Les flux RSS sont un outils formidable, mais la plupart des journaux ne fournissent qu'une intro des articles, ce qui est très limitant pour les lire dans un newsreader, tel Tiny Tiny RSS. Ainsi, le jour même où j'ai découvert les flux RSS (il y a peu de temps, donc au mois d'avril), j'ai directement commencé à coder un petit programme pour compléter ces flux RSS.

morss permet donc de transformer n'importe quel flux RSS "réduit" (avec seulement les intros), en un flux "complet" (avec les articles entiers).

Au début, j'ai cherché un tel service sur internet qui existe déjà. J'ai alors trouvé des services qui proposent au choix: un prix exorbitant ($10/mois), un service lamentable (3 "items" par flux), une interface principale à chier (texte en rouge sur un fond noir), ou des solutions semi-open source, assez mal codées et dont les dernières mises à jour sont payantes.

Face à ce constat, j'ai rapidement écrit morss, qui fait le travail vite et bien. Pas de perte de temps à configurer des choses obscures, pas de liens imbitables (il suffit d'ajouter "http://morss.it/" au début du lien), pas de flux beaucoup trop courts…

Donc, au final: on a jusqu'à 100 articles dans le flux, un temps de chargement des flux toujours inférieur à 7 secondes (pour que les newsreader ne timeout pas), une interface assez sympathique pour configurer le flux (barre de progression pendant la récupération des flux), pas de pub dans le flux. Et en cadeau, un projet 100% open source, en python, léger.

Alors, pourquoi le python?
Tout simplement, car au début il s'agissait d'un programme à faire tourner localement sur sa propre machine, d'où le choix du python pour sa rapidité de développement. Cependant, il s'est vite avérer que faire tourner un tel programme sur une machine particulière est très lent, notamment pour récupérer beaucoup de petites pages (imaginez-vous ouvrir 20 onglets d'un coup dans votre navigateur, c'est un peu la même idée).
De fait, j'ai adapté le code pour qu'il marche aussi sur un serveur Apache. Une telle implémentation est disponible à morss.it. Le service est assez rapide et surpasse la concurrence en rapport qualité/prix (gratuit et plus d'articles).

Donc, à ce jour, le programme fonctionne aussi bien en local que sur un seveur Apache. Je pense aussi ajouter la possibilité de le lancer comme daemon sur un serveur/ordi, ou encore d'y inclure directement le serveur http, au lieu de passer par Apache, et gagner un peu de temps.

Blog > Quickly resolve feedsportal url

Feedsportal

At feedsportal.com, they're really good at making ugly url. They can turn
http://www.lesechos.fr/economie-politique/politique/actu/0202780572707-la-cour-de-justice-de-la-republique-mode-d-emploi-568780.php?xtor=RSS-2010
into
http://rss.feedsportal.com/c/499/f/413824/s/2c4da967/l/0L0Slesechos0Bfr0Ceconomie0Epolitique0Cpolitique0Cactu0C0A20A2780A57270A70Ela0Ecour0Ede0Ejustice0Ede0Ela0Erepublique0Emode0Ed0Eemploi0E568780A0Bphp0Dxtor0FRSS0E20A10A/story01.htm
. That's really impressive. And it makes your feed reader display weird links, which are not easy to share (cause they lead to an advertisement page.

So, resolving them might be a good solution to get rid of those links, and get back the original link. Turns out it's really easy to do. I was rather surprised to find no quick explanation on how to do that, so here's my fix. It's so damn easy, it only takes 3 lines of python code to do that!
This doesn't require an internet connection!
If you look a bit at feedsportal long url, you might just recognize the original url in it, with some weird changes. So the idea is to revert those changes. Sample python code:
match = re.search('/([0-9a-zA-Z]{20,})/story01.htm$', item.link)
if match:
url = match.groups()[0].split('0')
t = {'A':'0', 'B':'.', 'C':'/', 'D':'?', 'E':'-', 'I':'_', 'L':'http://', 'S':'www.', 'N':'.com', 'O':'.co.uk'}
item.link = "".join([(t[s[0]] if s[0] in t else "=") + s[1:] for s in url[1:]])
log(item.link)
That's all!

Some explanations:
The "encoding" of the link, is made by replacing special characters (any character outside a-z 0-9) with "0x", where "0" is a zero and "x" a letter which tells what letter it replaces. So you just need to replace those sequences with the matching letters.

A quick match-table:
0A→0
0B→.
0C→/
0D→?
0E→-
0I→_
0L→http://
0S→www.
0N→.com
0O→.co.ul
0→=

This list might not contain all the letters in use, but it's not bad. And finally, don't forget the last line, which replaces "=" in the original link with a single "0". It should work.

What about feedburner?

They also like weird links, but theirs can't be resolved so easily. You can still load the link to follow the http redirection, but that's not needed when you use RSS feeds, the original link is embedded!

Sample:
<item>
<title>5 Features of the New Xbox That Are About to Ruin Everything</title>
<pubDate>Thu, 23 May 2013 05:00:00 PDT</pubDate>
<link>http://feedproxy.google.com/~r/CrackedRSS/~3/xbsHq0JUorY/</link>
<feedburner:origLink>http://www.cracked.com/quick-fixes/5-features-new-xbox-that-are-about-to-ruin-everything/</feedburner:origLink></item>
So you can fetch the original link with traditional xml rules. Keep in mind that the "feedburner" namespace redirects to
http://rssnamespace.org/feedburner/ext/1.0
, as seen in the
<rss xmlns:media="http://search.yahoo.com/mrss/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
line.
Blog > PediaPress, impressions…
J'ai franchi le pas pour Noël, j'ai commandé un bon gros livre chez PediaPress, ci-dessous quelques photos!
Blog > piwik - log-analytics on shared hosting without python access
I've started to use Piwik yesterday. And the first thing I saw was… nothing. Of course, since the database was empty, and I had to wait for users to go on the website to see something. Then, I found that we can actually "import" old log files from apache into piwik! To do so, the "log analytics" plugin is used.
This plugin is wonderful, and thanks to it, I know have access to 1-year old logs, and after some research in old backups, all the way to 2009! (but my 2009-2011 logs aren't very accurate, since it wasn't with apache logs, but custom logs in a sql database).

The only problem with log analytics is that it requires to run python script on the server, which I couldn't do in my cheap shared hosting. However, it turns out we can run the script locally. Which means that we don't actually need to have python+ssh on the remote server to run it.
The target here is to import once your old logs, when you set up your piwik installation. I didn't try it for daily import.

Get piwik's settings

"log-analytics" actually makes http requests to the piwik installation to save to database, but those http requests can be done from outside the server. The only things actually used from the server are the configuration files. So the trick is to download them and use them locally. No, it's not a problem, since the script doesn't write anything on the server, it only queries the http piwik installation.

So, you have to have the whole content of your piwik installation on your harddrive, without databases. For this, I downloaded the files, for instance using filezilla, onto my harddrive. It can be done faster if you use the install .zip from piwik's website, since you can avoid downloading tons of files over ftp, which can be very slow. Please, ensure you download the install .zip of the version in use on your server.
Basically, you can just extract the install .zip, but you have to fetch the piwik/config/ folder from the server. That way the script will be able to grab the token from the configuration files.

To sum up, if you downloaded the whole piwik install over ftp, it's ok.
And if you decided to use the install .zip, you have to replace the piwik/config/ folder of the extracted zip with your server's.

Run the script

Once you've grabbed the config/ folder from your piwik server, you have to open a terminal in the folder of your copy of your piwik installation on your harddrive, in the misc/log-analytics/ folder.
cd /path/to/piwik/misc/log-analytics/
There you can run the script.
./import_logs.py --url=piwik.yourdomain.com /path/to/log/file.log --idsite=1
Note: Since I'm using archlinux, I had to add "python2.7" at the beginning of the command, since python3 is not backward compatible.
The "--idsite=1" isn't mandatory according to the documentation, but I had to use it, otherwise I had an error message.
"piwik.yourdomain.com" is the url to the hosted piwik installation, to which http queries will be sent to save to database.
I didn't try, but I think you can actually use globbing to match log files, for example "/path/to/log/*.log" if you want to import a bunch of log files.

If you are unsure about what you're doing, you can add "--dry-run" at the end of the command. That way, the database won't be changed, and you can ensure that nothing goes wrong with the parsing of your log files.

Done

Once the whole import is over, it while be displayed on your piwik home page. Nothing will be visible during the import itself.
Projets > Pictuga > Note de version > Petits changements…
Le site utilise désormais sqlite3 pour enregistrer les articles, comme ça mon compte mysql peut entièrement être consacré à Piwik, qui me permet d'avoir des statistiques détaillées des visites :)
En bonus, les accès à la bdd sont maintenant bien plus "propres" et sécurisés (utilisation de "prepare" pour les connaisseurs). Voilà :) Que du bon!
Blog > Getting RTL8188CUS usb to work on Raspberry Pi, on ArchLinux
Good news!
Just tried it today, looks like the drivers for RTL8188CUS usb dongles are now included in rpi-archlinux-linux-kernel! So, you no longer need to do anything special to get it to work! Just start your wifi connection with netcfg (really easy to set up by the way).
I bought a Raspberry Pi a couple of weeks ago, and I bought a USB wifi dongle yesterday, but I couldn't get it to work, because the provided driver doesn't work... So I looked around on Google for a solution, and turns out that the most simple solution was missing. Most of them wanted me to download the whole linux kernel to do I-dunno-what with it. So I just combined a few versions to get it to work on my rpi.
What I did it to compile the driver provided by RealTech.

Building your own driver

This step might be useful if the kernel is updated in the meantime, and making my build useless for you.

Downloads

You first need to download the driver at http://www.realtek.com/downloads/downloadsView.aspx?Langid=1&PNid=21&PFid=48&Level=5&Conn=4&DownTypeID=3&GetDown=false from RealTech. You may prefer to download it from your normal computer if you are working over ssh, since their website is not really commandline-friendly.

Most of the following steps have to be done as root.

Preparation

First, make sure your system is up to date:
pacman -Syu
You may need a couple of things to get it to work.
pacman -S make
Nope, you don't need git.
From here, an internet connection is no longer required (except if playing with ssh, of course).

Tweaking a few stuff before building

Well, it won't work out of the box, so you need to do the following extra-step:
cd /lib/modules/3.1.9-23-ARCH+/build/arch/
ln -s arm/ armv6l

Building the actual stuff

Then do the following:
cd /folder/where/you/downloaded/the/file/
unzip RTL819xCU_USB_linux_v3.4.2_3727.20120404.zip
cd RTL8188C_8192C_8192D_USB_linux_v3.4.2_3727.20120404/driver/
tar -xf rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404.tar.gz
cd rtl8188C_8192C_8192D_usb_linux_v3.4.2_3727.20120404/
./make_drv
make
insmod 8192cu.ko
Please note that the above steps have to be done on the rpi, we don't need to cross-compile here, it fast enough ;) We ain't building the whole kernel.

Setting things up

The previous lines do load the module from the current folder, and therefore won't work after a reboot, therefore you need to move it:
mv 8192cu.ko /lib/modules/3.1.9-23-ARCH+/kernel/net/wireless/
Then, you may want to have it to load on boot:
Edit /etc/rc.conf, add 8192cu to the MODULES array, which should now look like :
MODULES=(8192cu)
or like
MODULES=(snd_bcm2835 8192cu)
if you already added the alsa driver (for sound).

...and not to be bothered by default buggy driver:
echo "blacklist rtl8192cu" > cat /etc/modprobe.d/wifi.conf
And now, reboot, to make sure everything works fine :)

Sources

Please note that those are only sources, and that you may not want to follow them as well.

http://www.raspberrypi.org/phpBB3/viewtopic.php?f=66&t=6737&start=25#p93676
http://elinux.org/Rpi_kernel_compilation#Arch_Linux
http://lumux.co.uk/2012/06/07/realtek-rtl8192curtl8192c-wifi-on-raspberrypi/

Using the actual wifi

Well, I still haven't used it yet. Mostly, you'll want to follow https://wiki.archlinux.org/index.php/Wireless_Setup and maybe https://wiki.archlinux.org/index.php/NetworkManager (using nmcli if you are only playing with ssh).
Projets > osu! web > git !
Voilà, j'en avais franchement mare de bzr pour gérer le code. bzr bug pas mal, a finit par corrompre sa propre base de donnée (what ?!), enfin bon, pleins de trucs dans le genre qui font que j'ai préféré m'en séparer au profit de git, développé à la base pour Linux par Linux :)
Du coup, le code change de situation et se retrouve sur github : https://github.com/pictuga/osu-web/ (tiens, en allant sur la page github du projet pour c/c l'url, je vois que quelqu'un d'autre suit le projet ! :D C'est gentil ça.)

Rien d'autre à annoncer, sauf peut-être que je vais aussi bouger mes autres projets vers git, qui bug je trouve moins.
Ah, derniére nouvelle, cette fois j'ai décidé d'apprendre à utiliser git (plutôt que d'y aller au pif comme avec bzr), et il s'avére que quand on sait comment ça fonctionne, on peut faire beaucoup plus de choses...
Projets > osu! web > Back on the stage !
Bon, pour le titre de l'article, c'est juste un référence au précédent ("Going gown"), pour ceux qui se demandaient...

Donc, voilà, j'ai enfin eu le droit à deux semaines consécutives de vacances, que j'ai donc utilisé au profit du site pour en continuer un peu le développement ! J'ai principalement tourné le code vers du Orienté Objet, car le code était vraiment dégueulasse par endroit, voire pas maintenable sur le un-peu-long terme. Donc, voilà, du code propre ! ...bien que un peu chiant à transposer (rajouter des "this." partout), avec des problémes pour l'accés aux variables depuis les objets inclus dans d'autre. Ce point devrait d'ailleurs être bientôt amélioré, en utilisant encore plus de POO, où le représentation des-dits éléments du gamefield serait faite en dehors de la classe des éléments en question !

J'en ai aussi profité pour améliorer un peu le design de la chose, même si mes compétences dans le domaine sont visiblement à pleurer... Mais bon, le sélecteur de beatmap est enfin utilisable, et prend surtout beaucoup moins de place qu'avant ! Non seulement il prend moins de place, mais en plus il affiche plus d'informations, avec notamment le créateur de la beatmap ainsi que l'artiste !

Du point de vue de la compatibilité, j'ai bêtement lâché les iPhone, car je ne me sers plus de mon iPod Touch en ce moment, et que comme je n'ai pas vraiment le temps pendant le peu de vacances que j'ai, j'ai préféré me concentrer sur les trucs plus importants.
À ma grande joie, j'ai vu que le site fonctionnait tel quel sur android ! (seul un bug posait probléme, mais il intervenait aussi sur ordi avec des écrans verticaux, enfin rien de bien spécifique aux téléphones). Le support pour iPhone a été perdu, même s'il peut être réglé en 2-3 lignes de code, mais bon... ça viendra un jour ou l'autre !
Sinon firefox fonctionne bien entendu comme un charme, puisque c'est mon navigateur de référence. Chrome fonctionne aussi à la perfection, pour IE9, faudrait que je fasse des tests. Safari Desktop devrait fonctionner, mais je n'ai pas testé... Pour ce qui est de Opéra, je ne sais franchement pas.

Sinon, pour ceux qui s'intéresse au code du projet, sachez que bzr ne veut plus uploader le code, et se contente de planter comme une pauvre merde... Donc pas de code pour l'instant, désolé, mais si quelqu'un insiste dans les commentaires, je peux faire un effort !
Pour ceux qui voudraient mettre en place leur propre serveur, j'ai un peu amélioré la chose ! On peut en effet depuis peu (dans le fichier js/main.js) changer facilement le dossier des images, des fichiers au format ogg et des beatmaps ! Avant ce n'était le cas que pour les beatmap et la chose était codé d'une façon assez dégueulasse... C'est notamment trés pratique pour ceux qui voudraient une version stable et instable sur le même hébergeur, pour développer, plus besoin d'avoir plein de fichier en doubles ! Seuls les scripts sont en double (bien entendu...).
Projets > Addone > Parti, le segfault
Un petit mot pour vous dire que je me suis enfin motivé (grâce à Prologin) pour régler le dernier (les 2 derniers mêmes) bug connu : le programme ne plante plus quand on modifie un todo :)
Et amélioration majeure : il ne faut plus créer de dossier à la main pour l'enregistrement.

Edit: J'ai enfin mis le code sur le serveur :)
bzr clone http://bzr.pictuga.com/addone/
cd addone
make
sudo checkinstall
addone
...pour l'installation :)
Blog > oatmeal.com
Vous avez peut-être déjà entendu parler de ce site assez sympathique, ou du moins je l'espére. Le principe est assez simple, le proprio fait des "comics" vraiment sympa, souvent orientées un peu geek, le tout vraiment sympa. Le site est bien foutu, et je me permets un petit tour sur le site de temps en temps pour me changer les idées.

Quelques pages à voir:
http://theoatmeal.com/comics/computers
http://theoatmeal.com/comics/peeing_sitting_down
http://theoatmeal.com/comics/apple (petit coup de coeur supplémentaire)
http://theoatmeal.com/comics/coffee + http://theoatmeal.com/comics/beer

Et, récemment, pour Noël, j'ai décidé de passer le pas, et je me suis enfin acheté quelques affiches sur le site. Avant de me lancer j'avais été un peu déçu car j'avais pas trouvé bcp d'avis sur les affiches imprimées sur internet, à moi d'en faire un :)

- Elles sont plus grandes que ce que je croyais (en dépit du fait qu'ils donnaient les mesures en cm sur le site)
- Certaines sont un peu floues/pixelisées, c'est d'ailleurs là le plus gros défaut que j'ai pu trouver affiches, mais heureusement, ce n'est pas le cas de toutes !
- Les bord verticaux des affiches sont un peu (trés légérement, pas d'euphémisme ici) abîmés à cause du transport
- Ils mettent pour l'envoi "Value $9", ce qui est un peu déprimant quand on voit qu'une affiche coûte 20$...
- La banque m'a pris plus de 2EUR de commission pour la conversion (!), ce que j'ignorais...

Dans l'ensemble, vous ne serez pas déçu par votre achat, bonne qualité, bonne impression (sauf qq unes) !
Reste à voir si vos proches apprécierons ;) La "Why it's better to pretend you don't know anythong about computers" a rencontré son petit succés dans ma famille (enfin, dans la mesure où ils savaient que c'était à moi).

Donc, voilà, si vous aviez peur quant-à la qualité des produits et au sérieux de theoatmeal.com, n'ayez crainte :)

Pour ce qui est de l'achat en soi, vous aurez un mail pour valider le payement, puis un pour vous prévenir lorsque le colis a été envoyé, pas plus. Il n'y a pas d'inscription de nécessaire.

Voilà, pour Noël prochain, vous savez que faire !