Comment je me passe (ou presque) de Google et des autres.

L’actualité des derniers mois dans le mode du logiciel libre en France a été marqué par la campagne « Dégooglisons Internet » de Framasoft. Je ne peux que saluer leur initiative, les remercier pour les articles du Framablog (dont je suis avide lecteur) et leur souhaiter une bonne route (longue mais libre).

Le libre; je suis définitivement tombé dedans depuis maintenant six années environ. Tout commence par le navigateur, ensuite le système d’exploitation, puis avec les années, on ressent le besoin d’aller plus loin. De se passer progressivement de tous ces services en ligne gratuits dont nous sommes le produit, ou de simplement ne pas y mettre les pieds.

Faisons le point.

Aujourd’hui, je reste encore « lié » à deux acteurs majeurs: Google et Twitter. Je me suis débarrasser des autres, comme Dropbox que j’ai utilisé pour partager des documents avec mes collègues de projets durant mes études d’ingénieur. Tout le monde n’étant pas prêt à écrire un rapport de projet en LaTeX et à utiliser git pour gérer ses versions, même en filière informatique.

Côté réseaux sociaux, j’avais toujours pensé ne jamais créer de compte Facebook, j’ai pourtant fini par le faire avec méfiance. Celui-ci a duré une année avant que je finisse par en demander la suppression. Je reste plus tolérant avec Twitter. Bien sûr, il serait préférable d’héberger soi-même ses tweets, mais les messages étant publics et avec ce principe en tête, on sait que les choses que l’on publie pourront être utilisées par tout un chacun. Les problèmes de « vie privée » interviennent donc beaucoup moins, ce que l’on écrit, on est prêt à le partager avec internet.

Venons-en maintenant à Google… Si je dispose bien d’un compte Google dont je peux tout juste vous donner l’adresse mail, c’est que j’ai toujours limité mon utilisation des services Google au strict minimum, c’est-à-dire : l’accès au PlayStore depuis mon téléphone Android. Je n’utilise pas leur service de mail, ni leur réseau social, m’abstiens de synchroniser quoi que ce soit et ne stocke pas de document sur leurs serveurs.
Actuellement, ma principale préoccupation se situe du côté d’Android, Google étant en train de verrouiller le code des applications de base du téléphone. De plus, j’ai récemment appris que Google me géolocalise périodiquement dès que j’active la fonctionnalité GPS (maps.google.com/locationhistory pour voir vos déplacements). Par ailleurs, j’utilise assez peu d’applications provenant du PlayStore, mon dépôt de référence étant F-Droid, d’où proviennent 90% des applications que j’utilise quotidiennement. Je surveille également avec intérêt l’évolution de FirefoxOS, quitte à tenter le portage du système sur mon téléphone si l’occasion se présente.

Côté mail, je dépends pour le moment d’un fournisseur d’accès internet auquel je fais de moins en moins confiance pour la gestion de ma correspondance numérique. J’envisage donc à terme d’héberger mon propre serveur mail et espère que CaliOpen pourra faire l’affaire. Le mail restant un service critique, je continue la phase d’étude pour le moment.

Enfin, évoquons rapidement la recherche en ligne. Se passer de Google reste difficile car celui-ci propose généralement les résultats les plus cohérents. J’utilise donc DuckDuckGo comme moteur principal et, lorsque celui-ci ne fait pas l’affaire, l’ajout d’un simple !g me permet d’être redirigé en toute simplicité vers les résultats Google.

Résumons à présent les outils qui me permettent de pratiquement me passer de ces grands fournisseurs de services.

  • Owncloud: Pour le stockage et le partage de fichiers en ligne, la synchronisation des contacts et de l’agenda, et également comme gestionnaire de flux RSS.
  • Etherpad: Pour l’édition collaborative de document en ligne.
  • Diaspora*: Comme réseau social décentralisé mais que j’utilise peu pour le moment.
  • Gitlab: Pour la gestion de code source et la création de dépôts privés.
  • F-Droid: Pour l’accès à des applications téléphones sous licence libre.
  • Wallabag: Comme outil de Read-it-later.
  • OpenStreetMap: En lieu et place de Google Maps.
  • DuckDuckGo: Pour la recherche en ligne.

Je pense avoir atteint un premier stade dans ma quête de décentralisation. J’ai assez peu d’interactions avec tous ces cultivateurs de données personnelles. Il me reste néanmoins du pain sur la planche pour continuer à me libérer de tous ces services privateurs, notamment pour le mail, l’OS téléphone et la recherche en ligne. Le voyage se poursuit, mais l’avenir semble prometteur.

Flux RSS des vidéos d’une chaîne Youtube

Le premier article de 2015 concernera Youtube et les flux RSS avec l’astuce toute simple que voici. Si vous souhaitez suivre les vidéos d’une chaîne en particulier dans votre lecteur de flux RSS préféré, il suffit d’utiliser l’url suivante pour récupérer le flux RSS des vidéos d’un utilisateur. On remplacera bien sûr <USERNAME> par l’identifiant de la chaîne.

https://gdata.youtube.com/feeds/base/users/<USERNAME>/uploads

 

Illustration avec la chaîne Data Geule. Voici l’url que l’on obtient si on se rend sur la page Youtube:

https://www.youtube.com/user/datagueule/featured

On voit clairement le nom d’utilisateur, ici datageule. On constate parfois que le nom de la chaîne est complètement différent du nom d’utilisateur présent dans l’url; ce n’est pas le cas ici. On obtient donc l’url suivante pour les flux RSS de Data Geule sur Youtube:

https://gdata.youtube.com/feeds/base/users/datagueule/uploads

Bon visionnage!

Maj 23/05/15

Comme l’indique Damien dans les commentaires, l’url ci-dessus n’est désormais plus valide. En effet, suite à la mise à jour de l’API YouTube Data, Google a commencé à supprimer l’ancienne version à compter du 20 avril 2015. La nouvelle url à utiliser est donc la suivante:

https://www.youtube.com/feeds/videos.xml?user=<USERNAME>

Soit en reprenant notre exemple:

https://www.youtube.com/feeds/videos.xml?user=datagueule

Merci à lui!

Maj 23/05/16

Comme précisé par Doumé dans les commentaires, le paramètre à utiliser est différent lorsque l’url ne contient pas le nom d’utilisateur, mais l’identifiant de la chaîne Youtube. C’est le cas par exemple de la chaîne Veritasium dont l’url est la suivante :

https://www.youtube.com/channel/UCHnyfMqiRRG1u-2MsSQLbXA

Pour obtenir le flux RSS d’une chaîne, nous utiliserons donc la même url que précédemment, mais avec le paramètre channel_id, soit :

https://www.youtube.com/feeds/videos.xml?channel_id=<IDENTIFIANT>

Ce qui nous donne pour Veritasium :

https://www.youtube.com/feeds/videos.xml?channel_id=UCHnyfMqiRRG1u-2MsSQLbXA

Merci à Doumé pour cette précision !

[SQL] Count results from stored procedure (without return)

It’s been a while since I haven’t used SQL. Now that I’m using it on a daily basis at work, I may write a little more about SQL than before. So here is an article the aim of which is to show how to find the number of results returned by a stored procedure. It’s in fact a problem which can be easily solved.

So let’s say we have a table containing animals names. Nothing fancy, just something like this:

name
----
Cat
Dog
Rabbit

That’s it for the table. Now we need a stored procedure, so let’s assume we have one : findNameLike which take letters as parameter and returns animals names beginning with these letters.

EXEC findNameLike @beginWith = N'C'

Cat.
Yes, the above call will return Cat.

So, if we want to know how much results were found, we will just write the following code:

DECLARE @numberOfMatch INT
EXEC findNameLike @beginWith = N'C'
SELECT @numberOfMatch = @@ROWCOUNT

The number of results is now available in variable numberOfMatch.

That’s it.
But maybe you also don’t want the stored procedure to return results when you call it. So we need to modify our code a little so that results will be stored in a temporary table and thus not returned, but rather stored in the table.

DECLARE @numberOfMatch INT
DECLARE @tmpTable TABLE (
    name VARCHAR(25)
)

INSERT INTO @tmpTable 
EXEC findNameLike @beginWith = N'C'
SELECT @numberOfMatch = @@ROWCOUNT

I think we’re done here. In a few lines, we’re able to count the results from a stored procedure as well as suppressing its return.

Proxy

Lorsqu’on travaille derrière un proxy, on se retrouve vite à devoir configurer nos outils pour être certain que leur trafic passera bien par celui-ci. Voici donc quelques paramètres de configuration pour répondre à ce problème.

GNU/Linux

Les variables d’environnement qui nous intéresse sont les suivantes:

  • http_proxy
  • https_proxy
  • ftp_proxy
  • no_proxy

On peut également les retrouver en majuscule: HTTP_PROXY par exemple.

La configuration s’effectue de la manière suivante dans un terminal:

export http_proxy=http://yourproxyaddress:proxyport
export no_proxy='127.0.0.1, *.local'

Pour visualiser le contenu d’une variable:

echo $http_proxy

GNOME

gsettings set org.gnome.system.proxy ignore-hosts "['127.0.0.1','*.local' ]"

APT-GET/APTITUDE

Si aptitude n’utilise pas le proxy défini au niveau système pour une raison ou une autre, on peut modifier le fichier /etc/apt/apt.conf pour y ajouter la ligne suivante:

Acquire::http::Proxy "http://yourproxyaddress:proxyport";

GIT

git config --global http.proxy http://yourproxyadress:port
git config --global https.proxy http://yourproxyaddress:port

Si le proxy bloque le protocole git://, on force l’utilisation de http:// :

git config --global url."http://".insteadOf git://

Et en cas de problème avec le protocole https://, on peut envisager :

git config --global http.sslVerify false

WINDOWS

NPM

Dans le fichier .npmrc, ajouter les lignes:

proxy=http://yourproxyadress:port
strict-ssl = false

BOWER

Dans le fichier .bowerrc, ajouter les lignes:

{
  "proxy":"http://yourproxyadress:port",
  "https-proxy":"http://yourproxyadress:port"
}

[Xorg] no screens found

During my previous installation of Arch Linux, I encountered the « error no screens found » when trying to launch X graphic server. It took me a couple hours to understand that my motherboard had « embedded graphic functionality ». So in order to solve my problem, I had to deactivate Intel pilot from the motherboard in the BIOS, so that the system would use the graphic card instead. So an easy solution in my case, but it seems that this error can be obtained in a wide variety of case. If you’re reading this having a similar problem, I hope you’ll find a solution.

Useful command to see graphic cards detected by the system:

lspci | grep VGA