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 >
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 !
Projets >
Remote Tools >
Informations
Nouvelle fonction depuis déjà 2 jours : la réception d'information en provenance de l'ordinateur serveur. C'est-à-dire que votre téléphone peut recevoir des informations depuis votre ordinateur, à propos par exemple du morceau en cours de lecture, la durée du morceau en cours, l'utilisation du disque dur, le titre de la fenêtre actuelle...
Pour ce qui est du presse-papier, je compte étendre cette fonction à plus d'informations. L'idée principale que j'ai est la mise en place d'un fichier d'échange avec le téléphone. On aurait ainsi un fichier pour envoyer du texte depuis le téléphone, et un deuxiéme pour envoyer du texte vers le téléphone.
On peut aussi remarquer la complexité relative des commandes à exécuter dans certains cas. En effet, il s'agit presque de petits scripts bash dans certains cas, la situation la plus intéressante pour l'instant étant celle pour récupérer le temps de lecture sur banshee, la commande résultante faisant prés de 3 lignes. Il y a aussi un probléme récurrent qui est de savoir si un programme est en cours d'exécution avant d'exécuter une autre commande, on se retrouve à chaque fois avec des
ps -e | grep -q banshee && banshee --next
qui sert par exemple à passer au morceau suivant de banshee sans lancer banshee il n'est pas lancé.
Sinon, j'ai enfin réussi à mettre en place les commandes de vlc, cas un peu plus complexe puisque
vcl --pause
n'existe pas, il s'agit ici de faire des commandes en tcp/ip, autrement dit de faire un truc un peu complexe, qui nécessite une configuration manuelle de vlc au préalable, trivial.