Les notes de Clément http://clementgrimal.fr/blog Spécialiste de rien // Partageur de tout Tue, 24 Dec 2013 00:29:30 +0000 fr-FR hourly 1 https://wordpress.org/?v=3.8.41 Nouvel hébergement ! http://clementgrimal.fr/blog/2013/12/24/nouvel-hebergement/ http://clementgrimal.fr/blog/2013/12/24/nouvel-hebergement/#comments Tue, 24 Dec 2013 00:29:30 +0000 http://clementgrimal.fr/blog/?p=504 Bon j’ai un peu laisser ce blog à l’abandon… Il y a eu plusieurs raisons : manque de temps, Raspberry Pi en panne. Je vais essayer de lui donner un second souffle !

Déjà, j’ai changé de formule d’hébergement, histoire d’avoir un peu plus de liberté et d’avoir mon serveur bac-à-sable à moi. Donc je viens juste de passer d’un hébergement mutualisé avec nom de domaine géré, à un modeste serveur de la gamme Kimsufi d’OVH, et mon domaine clementgrimal.fr est maintenant géré par Gandi. Je pense que ce sera plus confortable d’avoir les deux séparés comme ça.

En faisant cette migration, je me suis rendu compte que le service que j’avais l’habitude de payer pour l’hébergement mutualisé était plus important que je ne l’imaginé, mais que je pouvais désormais m’en passer, car j’ai appris à gérer un serveur pour le travail : Nginx, php-fpm, MySQL, etc. J’ai repris mon article qui expliquait comment protéger son Raspberry Pi (Sécuriser son accès SSH), en particulier pour installer Fail2Ban. Bref, pas mal de configuration, mais rien d’insurmontable , et au final pas mal de possibilité pour m’amuser avec des trucs inaccessibles en hébergement mutualisé : serveur Node.js, cron de tâches (comme la mise à jour de la page sur Darwin clement.grimal.de/darwin), etc.

D’ailleurs, je voudrais juste profiter de cette article pour expliquer que j’ai dû transférer ce blog, et que je n’ai pas utilisé les fonctions export/import de WordPress, car j’ai fais le changement de DNS un peu vite, et que je n’avais donc plus accès à mon blog ! J’ai donc fait une copie de tous les fichiers, et un export de la base de données. J’ai donc ensuite copier les fichiers dans mon répertoire web, et importer la base de données. J’ai donc également configuré un utilisateur MySQL dédié au blog (accès restreint à la base du blog) et modifier le fichier wp-config.php en conséquence, pour la connexion à la base de données. Finalement, mes pages d’articles ne fonctionnait pas à cause de la ré-écriture d’url, il a fallut que je modifie un peu ma vhost en ajoutant le bloc :

location /blog/ {
    try_files $uri $uri/ /blog/index.php?$args;
}

Finalement, si on veut que WordPress puisse faire les mise à jour facilement, on peut le mettre en mode direct en ajoutant dans le fichier wp-config.php les lignes suivantes :

define( 'FS_METHOD', 'direct' );
define( 'FS_CHMOD_DIR', 0777 );
define( 'FS_CHMOD_FILE', 0777 );

Voilà, histoire de finir sur quelque chose de concret : je vais enfin pouvoir héberger les épisodes de l’émission Sur les épaules de Darwin sur mon serveur !

Sources

]]>
http://clementgrimal.fr/blog/2013/12/24/nouvel-hebergement/feed/ 0
Projet « Sur les épaules de Darwin » http://clementgrimal.fr/blog/2013/03/21/projet-sur-les-epaules-de-darwin/ http://clementgrimal.fr/blog/2013/03/21/projet-sur-les-epaules-de-darwin/#comments Thu, 21 Mar 2013 18:30:27 +0000 http://clementgrimal.fr/blog/?p=477 J’ai déjà parlé de cette superbe émission dans un précédent article, Sur les épaules de Darwin, de Jean-Claude Ameisen, et je ne le referai donc pas ici. J’avais également parlé de la page que j’ai créé pour suivre cette émission, et surtout pourvoir ré-écouter ou télécharger des épisodes : http://www.clementgrimal.fr/darwin/. Mais surtout, j’avais promis de partager la recette qui se cache derrière cette page !

Pour créer cette page, j’utilise plusieurs scripts écrits en Python, qui utilisent eux-mêmes un fichier base de données pour stocker toutes les informations sur les épisodes (titre, date de diffusion, …). Afin de facilement les partager avec tout le monde, j’ai donc créé un projet sur le site GitHub : https://github.com/cgrimal/darwin. Maintenant, rien ne vous empêche de récupérer intégralement ces scripts, pour vous même créer une page web autour de l’émission (merci de me prévenir quand même, ça me fera plaisir !), et même de télécharger les épisodes en mp3.

Non seulement je pense que c’est une bonne chose de partager ce genre de projet car je ne compte pas faire de l’argent avec, mais en plus, cela m’a permis de m’initier à git, qui est un système de gestion de version bien pratique !

Comment télécharger les fichiers mp3 de l’émission ?

En fait, je pense que beaucoup de gens se posent la question, et si vous êtes dans ce cas, je pense modestement pouvoir vous aider. Cependant, pour mieux répondre, il me faut vous poser la question suivante : êtes-vous un informaticien/geek/python-gourou ?

  • Si oui, vous n’avez surement pas besoin de moi, mais si vous ne voulez pas ré-inventer la roue, servez-vous de mon code : darwin_create_database.py pour récupérer les informations (dont les liens directs vers les fichiers mp3), puis darwin_download.py pour télécharger les fichiers.
  • Sinon, vous pouvez cliquer sur les liens « Télécharger » pour télécharger les émissions une par une, ou alors me demander dans les commentaires ou directement par mail (clement.grimal@gmail.com) de l’aide !
]]>
http://clementgrimal.fr/blog/2013/03/21/projet-sur-les-epaules-de-darwin/feed/ 9
Sécuriser son accès SSH http://clementgrimal.fr/blog/2013/02/12/ssh-securite/ http://clementgrimal.fr/blog/2013/02/12/ssh-securite/#comments Tue, 12 Feb 2013 18:14:30 +0000 http://clementgrimal.fr/blog/?p=355 Afin de pouvoir contrôler son Raspberry Pi sans avoir besoin d’y connecter un écran, une souris et un écran, il est très commode de s’y connecter via un accès SSH. Un serveur SSH étant installé par défaut sur Raspbian, il n’y a alors aucune configuration particulière à faire, et on peut brancher son Raspberry Pi, le connecter à son réseau avec un câble Ethernet, et depuis son ordinateur personnel (connecté au même réseau), faire :

ssh pi@raspberry

Ensuite, si l’on ajoute une règle NAT sur sa box pour rediriger le port 22 (celui du serveur SSH), on peut se connecter, en utilisant l’adresse IP externe à la place de raspberry, à son Raspberry Pi de n’importe où ! Et ce n’importe quand ! C’est super n’est-ce pas ? Sauf qu’il serait bon que n’importe qui ne puisse pas le faire… On va donc voir quelles règles simples appliquées pour réduire les chances qu’un petit malin se connecte sur votre réseau.

Pourquoi se protéger ?

Pour commencer, il faut dire qu’il y a pénurie d’adresse IP dans le monde, car leur nombre n’est pas infinie et il y a de plus en plus d’appareils reliés à internet ! C’est pourquoi il existe une nouvelle norme IPv6, mais elle n’est pas encore majoritairement utilisée. De plus, sur toute machine Linux, il y a pas défaut un compte root, qui est le super administrateur de la machine ! En bref, il peut tout faire, et c’est par lui que vous passer dès lors que vous modifier votre système (voir la commande sudo par exemple, qui veut dire « super user do »). Donc en faisant :

ssh root@adresse_aleatoire

J’ai plutôt de bonne chance d’essayer de me connecter à un ordinateur existant, ayant un serveur SSH utilisant le port 22, et ayant un utilisateur s’appelant root ! Ensuite, rien de m’empêche d’essayer automatiquement des milliers de mots de passe, et avec un peu de chance, je le trouverais ! Il suffit d’un programme qui teste méthodiquement toutes les chaînes de caractères, à raison d’un essai par seconde, on peut tester 86400 mots de passe par jour ! Même si le nombre de combinaisons possibles est largement plus grand que ça, avec le temps nécessaire, un pirate pourra alors se connecter en root à votre Raspberry Pi !

Mais il va faire quoi ? Ecouter ma musique ?!

Il y a peu de chance… Son intérêt sera plutôt d’installer un programme sur votre système, qu’il pourra utiliser à sa guise plus tard s’il désire lancer une attaque vers un site en particulier. Votre ordinateur est alors devenu ce que l’on appelle un zombie, faisant partie d’un BotNet !

Quelques règles simples

Pour éviter ce scénario, on peut appliquer les quelques règles suivantes.

Changer le port

Rien de plus simple, éditer la configuration de votre serveur ssh, qui est décrite dans le fichier /etc/ssh/sshd_config, pour y faire figurer la ligne :

Port 1337

Attention : vous risquez d’être déconnecté si vous faite l’opération en étant justement connecté en SSH… Donc vous pouvez dans un premier temps utiliser 2 ports, le 22 et le 1337 en dupliquant cette ligne. Puis supprimer la ligne Port 22 ultérieurement. Vous pouvez remplacer 1337 par n’importe quel numéro compris entre 1024 et 65537, en vérifiant qu’il n’est pas déjà utilisé par un autre programme.

Il faut alors penser à changer la règle NAT dans votre box, pour rediriger le port 1337 (et plus le 22). Pour vous connecter maintenant, utilisez l’option -p de la commande ssh :

ssh -p 1337 pi@raspberry

Désactiver la connexion root

Pour éviter à quiconque (vous y compris) de vous connecter directement en super utilisateur à votre Raspberry Pi . Il faut également éditer le fichier /etc/ssh/sshd_config, pour modifier la ligne:

PermitRootLogin no

Installation d’un logiciel qui bannit en cas d’échec

Pour éviter les attaques de type « brute force » qui consiste à essayer le plus possible de mots de passe, il est possible d’installer un logiciel qui va se charger de bannir une adresse IP si un utilisateur échoue à se connecter plus d’un certain nombre de fois. J’utilise personnellement le logiciel fail2ban (il y en a d’autres !), disponible dans les dépôts. Il y a pas grand chose à faire pour le configurer, on modifie le fichier /etc/fail2ban/jail.conf, les paramètres intéressants sont les suivants :

ignoreip = 127.0.0.1/8
bantime  = 600
maxretry = 3

destemail = votre_adresse@mail.com

action = %(action_mwl)s

ignoreip permet de ne pas se faire bannir depuis le Raspberry Pi lui même, bantime est le temps de bannissement en secondes (10 minutes par défaut donc), maxretry le nombre d’échecs pour être bannit. Ensuite, destmail est l’adresse email à laquelle seront envoyés les alertes, et surtout action sera l’action en cas de bannissement. J’aime bien action_mwl qui est celle qui envoie le plus d’informations. Cette action (les autres aussi) peut  elle-même être personnalisée en éditant le fichier  /etc/fail2ban/action.d/sendmail-whois-lines.conf

Remarque : pour que l’envoi des mail se passe correctement, il vous faudra avoir correctement installé et configuré un MTA sur votre système, et j’ai déjà expliqué comment faire dans ce billet : Installation d’un serveur web (Envoi de mail)

Ne pas utiliser de mot de passe

Finalement, il est possible de ne pas utiliser de mot de passe pour se connecter, mais de passer par la génération de clé de cryptage. Cette méthode est très bien pour des installations critiques, mais je trouve que l’on perd alors en flexibilité, et je ne l’utilise personnellement pas… Je ne détaillerai donc pas ici comme procéder, mais il existe de nombreux tutoriels en ligne, par exemple : lea-linux.org : Connection_SSH_sans_mot_de_passe

Sources

]]>
http://clementgrimal.fr/blog/2013/02/12/ssh-securite/feed/ 12
Raspberry Pi : gestion de sa carte SD http://clementgrimal.fr/blog/2013/02/06/raspberry-pi-carte-sd-sauvegarde-restauration/ http://clementgrimal.fr/blog/2013/02/06/raspberry-pi-carte-sd-sauvegarde-restauration/#comments Wed, 06 Feb 2013 21:41:04 +0000 http://clementgrimal.fr/blog/?p=399 A force de jouer avec mon Raspberry Pi, j’ai eu le désagrément de le voir refuser de démarrer… La partition /root de ma carte SD était corrompue. J’ai donc du me résoudre à réinstaller Raspbian, et à repartir de zéro, l’occasion cependant d’apprendre à faire des sauvegardes et des restaurations !

Bien sûr, je travaille sous Linux (Xubuntu puisque vous voulez tout savoir), et si vous êtes sous Windows, je sais qu’il est possible de faire la même chose, mais je ne le couvrirai pas dans ce billet.

Ce qu’il faut comprendre, c’est que comme ma carte SD est de taille relativement faible (8Go), il est facile de faire une sauvegarde complète de son contenu (surtout en compressant le résultat).

La commande qu’il faut utiliser est la commande dd, la même que j’ai utilisé pour ma première installation de Raspbian. Ses deux arguments principaux sont :

  • if :  fichier d’entrée (ou périphérique)
  • of : fichier de sortie (ou périphérique)

Il faut déjà savoir à quel périphérique correspond votre lecteur de carte SD, utilisez la commande fdisk :

sudo fdisk -l

Et cherchez un disque d’environ 8Go. Si Raspbian est installé sur la carte, vous avez normalement deux partitions, voilà ce que j’obtiens par exemple :

Disk /dev/sda: 7969 MB, 7969177600 bytes
4 heads, 16 sectors/track, 243200 cylinders, total 15564800 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00017b69

		Device Boot      Start         End      Blocks   Id  System
/dev/sda1            8192      122879       57344    c  W95 FAT32 (LBA)
/dev/sda2          122880    15564799     7720960   83  Linux

Sauvegarde

Je sais donc que c’est /dev/sda qui correspond à ma carte SD que je souhaite sauvegarder. Pour faire une sauvegarde, il me suffit alors d’utiliser :

sudo dd if=/dev/sda of=/chemin/vers/ma/sauvegarde.img bs=1M

Le fichier /chemin/vers/ma/sauvegarde.img fait alors exactement 8Go. J’ai personnellement fait plusieurs sauvegardes pendant que je re-configurais mon Raspberry Pi. Par exemple, après avoir fait une mise à jour complète du système, installer vos disques externes, sécuriser votre accès SSH (article à venir), installer votre serveur web et configurer votre DNS dynamique, une petite sauvegarde du système ne fait pas de mal !

Restauration

Il est possible de restaurer cette image en inversant les argument if et of :

sudo dd if=/chemin/vers/ma/sauvegarde.img of=/dev/sda bs=1M

Attention :  en utilisant of=/dev/sda vous écrasez complètement le disque sda, donc vérifiez bien avec la commande fdisk.

Compression

Si vous faites régulièrement l’opération, pensez qu’il est possible de compresser les images pour qu’elles occupent moins de 8Go sur votre disque en utilisant la commande gzip par exemple :

gzip /chemin/vers/ma/sauvegarde.img

qui créera un fichier /chemin/vers/ma/sauvegarde.img.gz, bien plus petit que 8Go. Il est également possible de faire la sauvegarde et la compression en une seule opération, et pour cela, je vous recommande la lecture des pages 12 et 13 du dernier numéro du magazine MagPi (dans les sources).

Effacer la table de partition

Lorsque j’ai eu mon problème de partition /root corrompue, même en re-copiant une image toute fraîche de Raspbian sur ma carte SD, mon Raspberry Pi refuser toujours de démarrer. Il a fallu que j’efface complètement la table de partition de la carte avec la commande :

sudo dd if=/dev/zero of=/dev/sda bs=1M count=2

Attention : vérifiez bien que /dev/sda est la carte SD, et pas un autre disque dur !

Sources

]]>
http://clementgrimal.fr/blog/2013/02/06/raspberry-pi-carte-sd-sauvegarde-restauration/feed/ 7
Capture vidéo, compression et filigrane sous Unix http://clementgrimal.fr/blog/2013/02/05/capture-video-compression-filigrane-unix/ http://clementgrimal.fr/blog/2013/02/05/capture-video-compression-filigrane-unix/#comments Tue, 05 Feb 2013 18:51:27 +0000 http://clementgrimal.fr/blog/?p=412  Si vous souhaitez faire une capture vidéo de votre écran sous Unix, la commande avconv (anciennement ffmpeg) devrait probablement vous suffire. J’ai eu besoin de faire ça, et voilà comment que je me suis débrouillé.

Capture

Pour faire la capture vidéo de l’écran :

avconv -f x11grab -show_region 1 -framerate 24 -s sxga -i :0.0+350,0 -threads 2 -q 1 -bt 8000000 -b 8500000 video.avi

Les options utilisées sont les suivantes :

  • -f x11grab : pour dire que l’on capture l’écran (le serveur X)
  • -show_region 1 : pour afficher un rectangle autour de la zone de l’écran capturée
  • -framerate 24 : on capture 24 images par secondes
  • -s sxga : la zone capturée fait 1280×1024
  • -i :0.0+350,0 : le décalage (300 pixels en horizontal et 0 en vertical)
  • -threads 2 : le nombre de coeurs de votre processeur utilisés
  • -q 1 : meilleure qualité (pas de compression, ça on verra après)
  • -bt 8000000 -b 8500000 : le débit (« bitrate ») et sa tolérance, pour permettre une bonne qualité

Compression

Ensuite, pour compresser la jolie vidéo, il faut modifier l’argument q :

avconv -i video.avi -q 12 video_smaller.avi

Watermark

Pour ajouter un filigrane (« watermark ») sur la vidéo, il suffit d’une image. Prenez par exemple le logo de votre entreprise, et rendez le un peu plus discret à l’aide du Gimp par exemple, avec les deux transformations suivantes :

  • Couleurs > Niveaux > Niveaux de sortie : augmenter le seuil du bas
  • Couleurs > Couleur vers alpha…

Si cette image est image.png et dans le même dossier que vos vidéos, pour l’ajouter en sur-impression à la vidéo :

avconv -i video.avi -vf "movie=image.png [watermark]; [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out]" -q 12 video_watermark.avi

J’ai gardé l’argument -q 12 pour compresser la vidéo en même temps, et j’ai ajouté l’argument -vf, qui est assez compliqué… Si j’ai bien compris, la partie movie=image.png [watermark]; définie un calque à ajouter et le nomme watermark, puis la seconde partie [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out] permet d’ajouter ce calcque. Le overlay permet de positionner l’image, et les nom main_w, main_h, overlay_w et overlay_h correspondent respectivment aux largeurs et hauteurs de la vidéo et de l’image. Si vous avez suivi, notre filigrane sera donc centrée !  Mais si vous voulez par exemple la positionner en haut à gauche, il faut utiliser overlay=0:0

Démo !

Je fais à la fois la capture, le filigrane et la compression. La commande exacte est la suivante :

avconv -f x11grab -show_region 1 -framerate 24 -s 1280x900 -i :0.0+0,105 -vf "movie=me.png [watermark]; [in][watermark] overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2 [out]" -threads 2 -q 12 -bt 8000000 -b 8500000 demo_blog.flv

Ok, ça fait un peu narcissique de se mettre en filigrane mais c'est la première image que j'avais sous la main !

Sources

]]>
http://clementgrimal.fr/blog/2013/02/05/capture-video-compression-filigrane-unix/feed/ 1
Raspberry Pi : installation et partage d’un disque dur externe http://clementgrimal.fr/blog/2013/01/30/raspberry-pi-partage-disque-dur-usb/ http://clementgrimal.fr/blog/2013/01/30/raspberry-pi-partage-disque-dur-usb/#comments Wed, 30 Jan 2013 17:50:04 +0000 http://clementgrimal.fr/blog/?p=286 Comme je souhaite utiliser mon Raspberry comme « serveur de stockage » entre autres, j’ai acheté un disque dur USB alimenté, car les 8Go de la carte SD étaient un peu juste. Dans ce billet, j’explique comment j’ai configuré ledit disque dur, pour un partage simple.

Le montage

Dans le monde Unix, le verbe « monter » désigne l’opération barbare qui consiste à faire en sorte de pouvoir accéder à votre disque dur (ou autre périphérique). En effet, quand on le branche simplement, on ne peut pas y accéder tant qu’il n’a pas été monté. Donc on va faire en sorte que ce disque dur là tout neuf soit automatiquement monté dans un répertoire de notre choix, avec les permissions qui vont bien, afin d’être sûr de toujours le retrouver.

Pour savoir à quel « device » il correspond, utilisez la commande :

sudo fdisk -l

Dans le résultat obtenu, il faut chercher le bloc qui correspond au disque dur, pour moi c’est :

Disk /dev/sdb: 2000.4 GB, 2000398933504 bytes
255 heads, 63 sectors/track, 243201 cylinders, total 3907029167 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x524a5d81

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048  3907024895  1953511424    7  HPFS/NTFS/exFAT

Puisque je sais qu’il fait 2To (enfin 2000398933504 octets). Il correspond donc à /dev/sdb1 (une seule partition) et il est formaté en NTFS, tout va bien. Maintenant, il va nous falloir une seconde info le concernant : son UUID. C’est un identifiant unique, pour le trouver, utilisez la commande :

ls -l /dev/disk/by-uuid/

Et cherchez l’UUID recherché est la suite de numéro et de lettres qui précède le -> ../../sdb1 dans mon cas. Dernière étape : choisir et créer le répertoire dans lequel on veut monter ce disque. J’ai choisit de créer un dossier /storage/ dans lequel je monterai mes disques durs, et donc pour celui là en l’occurrence, on va créer le répertoire /storage/mon_disque :

sudo mkdir /storage
sudo mkdir /storage/mon_disque

On peut maintenant configurer le fichier /etc/fstab pour y ajouter la ligne qui correspondra au montage de notre disque dur :

sudo vim /etc/fstab

Et ajoutez la ligne suivante à la fin :

UUID=votre_UUID    /storage/mon_disque    ntfs-3g    defaults    0    2

Voilà, vous pouvez maintenant monter manuellement votre disque en faisant la commande [AJOUT : il faut avoir installer le paquet ntfs-3g avant !] :

sudo mount /dev/sdb1

Mais tout l’intérêt est que maintenant, à chaque fois que vous brancherez ce disque sur ce raspberry, il sera toujours monté de la même façon, dans le dossier /storage/mon_disque/ !

Un point qui ne me plaisait pas spécialement avec cette configuration très simple, est que le disque dur est en accès 777, c’est à dire que tout le monde peut écrire dessus ! Je ne sais pas si cela est fondamentalement grave mais j’ai préféré changer les permissions. Le seul point délicat, c’est que certains logiciels ont besoin de pouvoir accéder à ce disque : samba, client bittorrent, serveur web, etc… On va voir dans la suite comment j’ai choisi de gérer cela.

Les permissions

Ce qui m’a semblé le plus simple, c’est de créer un groupe storage qui aura tous les droits sur mes disques durs externes, et j’y ajouterai à la main les utilisateurs. Voilà la démarche que j’ai suivie :

  1. Création du groupe :
    sudo groupadd storage
    
  2. Récupération de l’id de ce groupe. La commande :
    cat /etc/group |grep storage
    

    devrait vous renvoyer une seule ligne ressemblant à :storage:x:1005: L’id du groupe est donc 1005, et on va en avoir besoin plus tard.

  3. Ajout de l’utilisateur pi (ou toto si vous vous appelez toto) :
    sudo usermod -a -G storage pi
    
  4. Modification du fichier /etc/fstab pour que le dossier de montage appartienne au groupe storage (on remplace les options defaults) :
    UUID=votre_UUID    /storage/mon_disque    ntfs-3g    suid,dev,auto,async,gid=1005,umask=007    0    2
    

    Le 1005 correspond à l’id du groupe storage et le umask est un paramètre assez compliqué (voir mes sources à la fin du billet), mais la valeur 007 implique que les utilisateurs n’appartenant pas au groupe storage pourront lire et parcourir le disque, mais pas écrire dessus.

  5. Eventuellement, ajout des autres utilisateurs correspondant aux logiciels qui doivent pouvoir écrire sur le disque. Par exemple, si vous souhaitez partager certains dossiers via votre serveur web (voir mon billet Installation d’un serveur web), l’utilisateur correspondant au serveur Apache2 est www-data. Il faut donc faire :
    sudo usermod -a -G storage www-data
    

Partage sur le serveur Web

J’ai expliqué dans le billet Installation d’un serveur web comment installer un simple serveur Apache. Vous pouvez par exemple partager un dossier de votre disque dur directement via le web en créant un lien symbolique. Par exemple, si vous souhaitez partager tout le contenu du dossier /storage/mon_disque/dossier_public/, vous pouvez utiliser la commande :

sudo ln -s /storage/mon_disque/dossier_public/ /var/www/dossier_public

Si l’adresse pour accéder à voter serveur web est mon-rpi.dnsdynamic.com (vous avez utiliser mon tutoriel Utilisation d’un DNS dynamique ?), vous (ou n’importe qui attention !) pouvez consulter le contenu de ce dossier à l’adresse : mon-rpi.dnsdynamic.com/dossier_public/

Il est possible de protéger ce que vous partager sur votre serveur web, par mot de passe par exemple, mais j’en parlerai plus tard. J’ajoute tout de même un lien la dessus dans les sources de ce billet.

Partage avec Samba

Je pense que j’écrirai un billet là-dessus, mais juste au cas où vous auriez déjà configuré un serveur Samba (partage de certains répertoires, y compris avec Windows), sachez que si vous avez suivi ce tutoriel, il vous faudra modifier légèrement votre configuration. Dans le fichier /etc/samba/smb.conf, pour chacun de vos partage, ajoutez la ligne force group = storage, ce qui donnera par exemple :

[mon_disque]
	path = /storage/mon_disque
	browseable = yes
	read only = no
	guest ok = yes
	force group = storage

Accès par client Bittorrent

On verra dans un prochain billet comment installer un client Bittorrent (Transmission) sur votre Raspberry Pi, et le configure pour que les fichiers téléchargés arrivent sur votre disque externe. Il ne faudra donc pas oublier d’ajouter l’utilisateur debian-transmission au groupe storage :

sudo usermod -a -G storage debian-transmission

Sources

]]>
http://clementgrimal.fr/blog/2013/01/30/raspberry-pi-partage-disque-dur-usb/feed/ 5
Utilisation d’un DNS dynamique http://clementgrimal.fr/blog/2013/01/29/utilisation-dns-dynamique/ http://clementgrimal.fr/blog/2013/01/29/utilisation-dns-dynamique/#comments Tue, 29 Jan 2013 18:12:06 +0000 http://clementgrimal.fr/blog/?p=303 Comme vous le savez, je possède depuis peu un Raspberry Pi, et j’y ai installé un serveur web. J’ai écrit un billet là dessus, et à ce moment là, pour accéder à ce site web, je m’étais passé d’utiliser un service de DNS dynamique, et il fallait donc que j’utilise directement l’adresse IP de ma box SFR. Non seulement ce n’est pas pratique, mais en plus, si l’adresse IP change (on redémarre la box par exemple), c’est embêtant. J’avais donc fait un script pour détecter un changement d’adresse IP, chargé de m’envoyé un e-mail.

Bref, ce n’était pas très sérieux ! Heureusement, un collègue (@Toumt4m) m’a éclairé sur l’utilisation pratique du DNS dynamique !

C’est quoi le DNS ?

N’étant pas un spécialiste, je me garderai bien de vouloir vous expliquer en détail les mécanismes du DNS. Mais en quelques mots, c’est l’annuaire d’internet. En effet, chaque site web est hébergé sur un ordinateur. Un ordinateur qui doit donc être relié à internet, il a ainsi une adresse IP. Pour accéder au site web qu’il héberge, il suffit alors de taper l’adresse IP dans son navigateur. Vous voulez visiter google.fr, rien de plus simple : 74.125.230.215

Seulement voilà, ce n’est pas très simple de retenir toutes ces adresses IP, donc le DNS nous permet de retenir le nom de domaine du site, et il se chargera pour nous de le traduire vers l’adresse IP correspondante. Si vous voulez en savoir plus, un bon point de départ est la page Wikipédia : wikipedia.org/wiki/Domain_Name_System

Finalement, lorsque l’adresse IP du serveur qui héberge notre site web peut changer, il faut utiliser un service de DNS dynamique qui permet de mettre à jour en temps réel le DNS. Nous allons donc voir comment utiliser un tel service.

Inscription au service

Il existe pléthore de sites proposant ce type de service, j’ai personnellement opté pour dnsdynamic.org (si vous en connaissez des mieux, ça m’intéresse !). C’est très simple, il suffit de s’inscrire, puis d’ajouter un sous-domaine comme mon-rpi.dnsdynamic.com et de lui associer son adresse IP. Pour connaître votre adresse IP externe, vous pouvez par exemple allez sur le site ipogre.com (si curl est installé sur votre Raspberry, tapé curl ipogre.com dans un terminal).

Voilà ! Maintenant, en tapant mon-rpi.dnsdynamic.com dans votre navigateur, vous devriez tomber sur le site web que vous hébergez sur votre Raspberry. Mais celà fonctionne également pour vous connecter en ssh par exemple (à condition d’avoir redirigé correctement le port de votre serveur ssh…).

Mise à jour automatique

Si votre adresse IP change, il y a plus simple que de se connecter sur dnsdynamic.org pour mettre à jour votre sous-domaine. Vous pouvez utiliser l’API de ce site. En pratique, il vous suffit d’installer ddclient :

		sudo apt-get install ddclient
	

Vous pouvez ensuite reprendre le fichier de configuration /etc/ddclient.conf proposé, en modifiant identifiant, mot de passe et nom du sous-domaine choisi :

	   # Configuration file for ddclient generated by debconf
		#
		# /etc/ddclient.conf

		daemon=60                           # check every 60 seconds
		syslog=yes                          # log update msgs to syslog
		mail=root                           # mail all msgs to root
		mail-failure=root                   # mail failed update msgs to root
		pid=/var/run/ddclient.pid           # record PID in file.
		ssl=yes                             # use ssl-support.  Works with
												# ssl-library
		use=web, web=myip.dnsdynamic.com    # get ip from server.
		server=www.dnsdynamic.org           # default server
		login=votre_adresse@mail.com        # default login
		password=votre_mot_de_passe         # default password
		server=www.dnsdynamic.org,          \
		protocol=dyndns2                    \
		mon-rpi.dnsdynamic.com
	

Ce logiciel s’exécute ensuite comme un démon, mais vous pouvez également le lancer en ligne de commande en faisant :

		ddclient -daemon=0 -verbose
	

J’ai personnelement ajouté cette ligne à mon script (voir le billet …), c’est pas très propre mais comme ça je recevrai toujours l’e-mail en plus.

]]>
http://clementgrimal.fr/blog/2013/01/29/utilisation-dns-dynamique/feed/ 10
Raspberry Pi : installation d’un serveur web http://clementgrimal.fr/blog/2013/01/24/raspberry-pi-serveur-web-sfr-box/ http://clementgrimal.fr/blog/2013/01/24/raspberry-pi-serveur-web-sfr-box/#comments Thu, 24 Jan 2013 18:01:01 +0000 http://clementgrimal.fr/blog/?p=222 Dans ce billet, je vais décrire comment j’ai installé un serveur web sur mon Raspberry Pi, mais surtout comment j’ai configuré mon installation sachant que mon fournisseur d’accès est SFR.

Dans la première moitié, je décris l’installation du serveur et la configuration minimale pour tester. Et dans la seconde partie, je décris comment s’en sortir sans adresse IP fixe (comme c’est le cas chez SFR).

MODIFICATION : j’ai finalement réussi à utilisé un service de DNS dynamique, qui me permet de ne pas forcément utiliser mon script compliqué : voir ce billet

Installation du serveur et configuration minimale

Installation du serveur

On va installer un serveur web, communément appelé LAMP, pour Linux / Apache / MySQL / PHP. Avec ça vous aurez de quoi faire tourner un petit site web, avec base de données et pages dynamiques. Il suffit d’installer les paquets suivants :

	sudo apt-get install apache2 php5 mysql-server libapache2-mod-php5 php5-mysql

La racine de votre site se situe alors dans le dossier /var/www/ et si vous allez sur la page localhost:80, vous devriez voir la page par défaut d’Apache qui dit « It Works! ».

Trouver son adresse IP externe

Il y a plusieurs façon de faire : vous pouvez vous rendre sur l’interface de votre box 192.168.1.1 et l’adresse IP est alors visible en haut à droite. Vous pouvez également utiliser un site web tel que ipogre.com (nous l’utiliserons d’ailleurs dans la seconde partie).

Mais si vous donner cette adresse IP à quelqu’un pour qu’il puisse voir le site web hebergé sur votre Raspberry, cela ne marchera pas car il « atterrira » sur la box ! On va donc voir comment la paramétrer dans la suite.

Paramètrer sa box

Par défaut, lorsqu’un nouvel équipement se connecte à la box (wifi ou ethernet), elle lui attribue une adresse IP locale aléatoire du type 192.168.1.XX. Pour que le Raspberry soit toujours à la même adresse (ce sera mieux pour le retrouver), on va demander à la box de lui attribuer une IP locale fixe. Il faut aller sur l’interface de la box (localhost:80), dans l’onglet DHCP de la section Réseau. Regarder l’aide de SFR à ce sujet qui est très bien faire : Héberger son site web à la maison avec sa box.

Maintenant, il faut rediriger le port 80 (celui du serveur web) vers votre Raspberry. C’est aussi expliqué sur la page d’aide de SFR, et il suffit d’ajouter une règle NAT. D’ailleurs, vous pouvez en profiter pour ajouter d’autres règles. En redirigeant également le port 22, vous pourrez vous connecter en ssh à votre Raspberry depuis n’importe où !

Test

Vous pouvez maintenant donner votre adresse IP externe à votre fameux ami qui meurt d’envie de voir le site web que vous hébergez sur votre Raspberry. Disons que cette adresse est A.B.C.D, s’il se rend à l’adresse A.B.C.D sur son navigateur, il atterrira sur votre site ! Si vous testez de chez vous, vous arriverez sur l’interface de la box, ce qui est moins intéressant, utilisez l’adresse IP locale de votre raspberry.

 

Script pour ne pas utiliser DynDNS

Chez SFR, l’adresse IP de votre box change régulièrement, et il est possible de souscrire à un service de DNS dynamique pour que l’adresse mon-rpi.dyndns.fr redirige toujours vers votre box. Seulement je n’ai pas réussi ! Il faut normalement aller dans l’onglet DynDNS de la section Réseau de l’interface de la box, mais le dervide dyndns.fr n’est pas présent, et donc j’ai préféré m’en passer pour l’instant.

Pour ne pas être bloqué, on m’a soufflé l’idée suivante : faire un script qui vérifie si l’adresse IP a changée, si oui le script doit m’envoyer un mail avec la nouvelle adresse IP. Puis il suffit de faire s’exécuter ce script automatiquement à intervalles réguliers.

Le script

On va mettre le script dans le répertoire /usr/local/bin/ipcheck.sh :

#!/bin/bash
IPFILE=/etc/ipaddress

CURRENT_IP=$(curl ipogre.com)

MAIL_TO=votre_adresse@domaine.fr

if [ -f $IPFILE ]; then
	KNOWN_IP=$(cat $IPFILE)
	else
	KNOWN_IP=
fi

if [ "$CURRENT_IP" != "$KNOWN_IP" ]; then
	echo $CURRENT_IP > $IPFILE

	MAIL_SUBJECT="L'adresse IP du RPI a changé !"
	MAIL_BODY="C'est maintenant $CURRENT_IP"

	echo $MAIL_BODY | mail -s "$MAIL_SUBJECT" $MAIL_TO
	logger -t ipcheck -- Nouvelle adresse IP : $CURRENT_IP
else
	logger -t ipcheck -- Même adresse IP.
fi

Donc l’adresse IP va être stockée dans le fichier /etc/ipaddress et on utilise le site ipogre.com pour récupérer l’adresse externe. Puis on compare l’ancienne adresse avec la courante, et si ce n’est pas la même, on envoie le mail. Voyons maintenant ce qu’il faut installer et configurer pour que tout marche bien.

Installation curl

Je ne sais plus s’il est installé de base dans Raspbian, dans le doute :

	sudo apt-get install curl

Envoi de mail

La partie qui risque de poser problème concerne l’envoi de mail. Car la commande mail ne fait qu’appeler le MTA installé localement. J’ai opté pour ssmtp qui est très simple à installer et configurer :

sudo apt-get install ssmtp

Je l’ai configurer pour utilisé mon compte Gmail pour les envois. Il faut alors éditer le fichier /etc/ssmtp/ssmtp.conf pour modifier les lignes suivantes :

mailhub=smtp.gmail.com:587
UseTLS=Yes
UseSTARTTLS=Yes
AuthUser=votre_login_gmail
AuthPass=votre_mot_de_passe_gmail

Attention, votre mot de passe Gmail n’est pas crypté, il faut donc s’assurer que le fichier ne sera pas lisible par n’importe qui ! :

sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chown root:mail /etc/ssmtp/ssmtp.conf

Cron du script

On va « croner » ce script pour qu’il s’exécute automatiquement toutes les heures. Comme il n’y a que l’utilisateur root (cf. le chown à l’étape précédente), il faut ajouter la tâche en sudo :

	sudo crontab -e

Et ajouter la ligne suivante :

0 * * * * /usr/local/bin/ipcheck.sh >/dev/null 2>&1

Voilà ! Maintenant, toutes les heures, votre RPi vérifiera que son adresse IP externe n’a pas changée. Si elle a en effet changée, il vous enverra un e-mail pour vous donner la nouvelle adresse. Vous pourrez également voir le log dans le fichier /var/log/user.log, en utilisant la commande tail par exemple.

Conclusion

Bien sûr, le gros problème avec cette solution (sans DNS dynamique), est qu’il vous faudra prévenir vos amis à chaque changement d’adresse IP ! Ce n’est bien sûr pas une solution viable pour un vrai site (mais fait uniquement pour partager avec des amis), et il faudra alors songer à acheter un vrai nom de domaine, associé à une solution de DNS dynamique.

N’hésitez pas à me faire part de toute remarques / corrections / erreurs !

]]>
http://clementgrimal.fr/blog/2013/01/24/raspberry-pi-serveur-web-sfr-box/feed/ 6
Courts métrages de science-fiction http://clementgrimal.fr/blog/2013/01/23/courts-metrages-science-fiction/ http://clementgrimal.fr/blog/2013/01/23/courts-metrages-science-fiction/#comments Wed, 23 Jan 2013 19:00:25 +0000 http://clementgrimal.fr/blog/?p=75

Petite session Science-fiction avec trois courts métrages qui valent le détour. Et pour aller plus loin, si ce type d’anticipation et de réflexion sur le trans-humanisme vous intéresse, il y a eu un excellent Thema d’ARTE en Octobre 2012 là-dessus :

Plurality

Sight

Tears of Steel

]]>
http://clementgrimal.fr/blog/2013/01/23/courts-metrages-science-fiction/feed/ 0
Convertir une série d’images en pdf http://clementgrimal.fr/blog/2013/01/22/conversion-jpg-png-pdf/ http://clementgrimal.fr/blog/2013/01/22/conversion-jpg-png-pdf/#comments Tue, 22 Jan 2013 20:00:43 +0000 http://clementgrimal.fr/blog/?p=47 Si comme moi, vous scannez à tout va les documents importants (ou pas) dont vous pensez avoir besoin plus tard, vous avez surement rencontré le problème de la configuration du scanner utilisé…

Scanné au format jpg ? Au format pdf ? pdf bien sûr ! Mais surtout, si votre document fait plusieurs pages, vous ne voulez qu’un seul fichier pdf à la fin.

Si vous êtes sous Ubuntu (ou une autre distribution similaire de votre préférence), il suffit d’installer ImageMagick (sudo apt-get install imagemagick par exemple) !

Une fois installé, cet utilitaire très pratique vous permet de faire tout ça, en une seule commande très simple. Si vos images sont dans le dossier /mon/dossier/, il vous suffit de faire :

cd /mon/dossier/
convert *.jpg fichier_multi_pages.pdf

Si en plus, les images étaient scannées en trop bonne qualité et que vous ne souhaitez pas gâcher votre espace disque, vous pouvez ajouter un paramètre à la commande pour réduire leur taille :

convert *.jpg -resize 50% fichier_multi_pages.pdf

Bref, dès lors qu’il s’agit de manipuler des images, ImageMagick se révèle fort utile, et ce billet ne présente qu’un exemple d’utilisation parmi bien d’autres !

]]>
http://clementgrimal.fr/blog/2013/01/22/conversion-jpg-png-pdf/feed/ 4
Film : Django Unchained http://clementgrimal.fr/blog/2013/01/21/film-django-unchained/ http://clementgrimal.fr/blog/2013/01/21/film-django-unchained/#comments Mon, 21 Jan 2013 22:48:26 +0000 http://clementgrimal.fr/blog/?p=96 Affiche de Django Unchained

En voyant le dernier Tarantino, on ne peut que savourer son inimitable patte. De l’hémoglobine, mais une violence burlesque (tout comme certaines scènes) omniprésente. Mais ce qui reste pour moi le plus agréable, c’est cette avalanche de dialogues ciselés pour Christopher Waltz (Dr Shultz) et Leonardo DiCaprio (Calvin Candy) en particulier.

Bref, on se régale, on jubile même. Mais si on voulait vraiment être critique, en oubliant qu’on aime tous les films de Tarantino… (attention, je déconseille la suite de la lecture si vous n’avez pas encore vu ce superbe film !)

Spoiler Inside

J’ai juste oublier de dire qu’une fois de plus, la bande originale du film est géniale (même si elle manque de jazz manouche) ! Elle est d’ailleurs en écoute gratuite sur Grooveshark : Django Unchained Original Motion Picture Soundtrack, et pour l’acheter vous trouverez tout sur cette page : http://www.unchainedsoundtrack.com

J’ai en particulier aimer celle de John Legend : « Who Did That To You? » que je n’ai trouvé que sur grooveshark :

Who Did That to You? by John Legend on Grooveshark

]]>
http://clementgrimal.fr/blog/2013/01/21/film-django-unchained/feed/ 1
Comment connecter un smartphone sous Android 4.1 à Ubuntu ? http://clementgrimal.fr/blog/2013/01/20/smartphone-android-ubuntu-mtp/ http://clementgrimal.fr/blog/2013/01/20/smartphone-android-ubuntu-mtp/#comments Sun, 20 Jan 2013 18:13:15 +0000 http://clementgrimal.fr/blog/?p=69 Les téléphones sous Android 4.1 « Jelly Beans » (c’est même le cas depuis Android 3 apparemment) qui n’ont pas de carte mémoire SD, et donc une seule partition, comme par exemple le Google Samsung Galaxy Nexus (héhé), ne fonctionnent plus comme des clés usb lorsqu’on les relie à un ordinateur.

En effet, ce système a été abandonné sur ces appareils, et Google a fait le choix du protocole MTP « Media Transfer Protocol » qui fonctionne en natif sous Windows (et aussi sous MacOS bien que je n’ai pas vérifié). En revanche, sous Ubuntu, c’est une toute autre histoire !

Comme je n’ai pas trouvé de tutoriel en français, je me propose de traduire ceux que j’ai utilisé pour accéder à la mémoire de mon téléphone sous Ubuntu (cela doit  a priori également fonctionner sous d’autres distributions Unix).

Dans les étapes suivantes, je suppose que vous avez vim d’installé, si ce n’est pas le cas, votre éditeur de texte préféré fera l’affaire.

  1. Installez les paquets mtp-tools et mtpfs :
    sudo apt-get install mtp-tools mtpfs
  2. Connectez votre téléphone avec le câble usb.
  3. Trouvez maintenant le idVendor et le idProduct de votre appareil :
    mtp-detect | grep idVendor
    mtp-detect | grep idProduct
  4. Créez (ou éditez) maintenant le fichier permettant d’ajouter une règle pour que Ubuntu puisse accéder à votre téléphone :
    sudo vim /etc/udev/rules.d/51-android.rules

    et ajoutez-y la ligne suivante :

    SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", MODE="0666"

    en remplaçant {idVendor} et {idProduct} par les valeurs trouvées à l’étape précédente.

  5. Pour appliquer la règle, il faut relancer udev :
    sudo service udev restart
  6. Créez maintenant le répertoire dans lequel sera monter votre téléphone :
    sudo mkdir /media/nexus
    sudo chmod a+rwx /media/nexus
  7. Ajoutez votre nom d’utilisateur au groupe fuse :
    sudo adduser {utilisateur} fuse

    en remplaçant {utilisateur} par votre nom d’utilisateur.

  8. Enlever le # de la dernière ligne du fichier /etc/fuse.conf (s’il est présent) :
    sudo vim /etc/fuse.conf
  9. Créez les deux alias suivants pour vous permettre de facilement connecter et déconnecter votre téléphone :
    echo "alias android-connect=\"mtpfs -o allow_other /media/nexus\"" >> ~/.bashrc
    echo "alias android-disconnect=\"fusermount -u /media/nexus\"" >> ~/.bashrc
    source ~/.bashrc
  10. Redémarrez votre ordinateur.
  11. Vérifiez que votre téléphone est bien reliez en usb à votre ordinateur, et connectez-le avec la commande :
    android-connect
  12. Vous pouvez maintenant accéder à la mémoire interne de votre téléphone dans le répertoire /media/nexus/
  13. Pour le déconnecter :
    android-disconnect

Voilà c’est terminé ! C’était laborieux mais maintenant, il vous suffit d’utiliser ces deux commandes pour facilement accéder à la mémoire de votre beau téléphone. En espérant tout de même qu’une solution plus simple soit disponible dans les futures versions d’Ubuntu…

]]>
http://clementgrimal.fr/blog/2013/01/20/smartphone-android-ubuntu-mtp/feed/ 1
Sur les épaules de Darwin http://clementgrimal.fr/blog/2013/01/17/sur-les-epaules-de-darwin/ http://clementgrimal.fr/blog/2013/01/17/sur-les-epaules-de-darwin/#comments Thu, 17 Jan 2013 19:50:37 +0000 http://clementgrimal.fr/blog/?p=42

Tous les samedis matins de 11h à 12h sur France Inter, est diffusée une émission de vulgarisation scientifique formidable « Sur les épaules de Darwin » présentée par le biologiste Jean-Claude Ameisen.

Cette émission n’est pas réservée aux scientifiques car les sujets sont abordés de façon très simple. La voix de Jean-Claude Ameisen est totalement envoûtante, associée au rythme de l’émission plutôt posé, elle vous fera certainement voyager !

Comme toutes les émissions de France Inter, vous pouvez ré-écouter (ou télécharger) les émissions déjà diffusées. À ce propos, comme il n’est pas facilement possible de télécharger les émissions passées depuis plus de 2 mois (et qui ne sont plus dans le RSS), j’ai créé plusieurs petits programmes (en python) qui récupèrent toutes les infos sur les émissions (date, titre, etc.) et récupèrent les liens pour ré-écouter ou télécharger ces émissions. À partir de toutes ces infos, je génère une simple page web pour partager de façon simple ces précieuses informations : http://clementgrimal.fr/darwin/

Vous pouvez donc y ré-écouter et télécharger vos épisodes préférés de cette formidable émission. Si vous êtes intéressé par ces programmes, je peux vous les transmettre, et je pense de toute façon les mettre sur une plate-forme de partage (comme GitHub) prochainement.

De plus, comme je viens de recevoir mon Raspberry Pi (un petit ordinateur pas cher : page Wikipedia), j’ai automatisé la mise à jour de cette page web, donc elle sera toujours à jour, même si je suis en vacances !

Bon je pense que le sujet de ce billet a pas mal dérivé… J’en écrirai probablement d’autres pour parler plus des programmes Python et de l’utilisation de mon Raspberry Pi !

Ce qu’il faut retenir, c’est que si j’ai fait tout ces efforts, c’est que cette émission le mérite amplement, tant elle est passionnante. Donc si vous ne la connaissez pas et que vous aimez la vulgarisation scientifique : foncez !

Toutes les informations, et les liens vers le site de l’émission sur France Inter sont
sur ma page : http://clementgrimal.fr/darwin/

]]>
http://clementgrimal.fr/blog/2013/01/17/sur-les-epaules-de-darwin/feed/ 3
Bonjour tout le monde ! http://clementgrimal.fr/blog/2013/01/16/bonjour-tout-le-monde/ http://clementgrimal.fr/blog/2013/01/16/bonjour-tout-le-monde/#comments Wed, 16 Jan 2013 19:33:04 +0000 http://clementgrimal.fr/blog/?p=1 C’est parti pour le lancement de mon énième blog ! Mais attention cette fois ci, j’y crois !

Si vous voulez en savoir un peu plus sur moi et surtout sur ce blog, direction la page À propos. En résumé, je compte me servir de ce blog pour partager des solutions à des problèmes que j’ai rencontré et qui risque fort de concerner le Javascript (et son compagnon jQuery) et autres joyeux langages. Il y a aura probablement d’autres sujets geek car je viens de recevoir mon Raspberry Pi !!! Et puis de temps, je vous parlerai d’un film ou d’un livre qui m’a régalé.

Pour la fréquence de publication, je n’ai aucun idée de ce que cela pourra donner et il faudra probablement quelques temps pour que cela se stabilise !

Finalement, n’hésitez pas à me retrouver sur Twitter&Cie : Ailleurs sur le web.

]]>
http://clementgrimal.fr/blog/2013/01/16/bonjour-tout-le-monde/feed/ 0