Le filtre polarisant Hoya remonté

Mon filtre polarisant Hoya vient de me jouer un tour. Alors que je l’enlevais de mon objectif (il fait de la résistance), la bague externe comprenant la partie optique m’est restée dans la main, séparée de la bague s’attachant à l’objectif.

Que faire, à part maugréer? Selon ce message d’espoir, trouvé sur le Grand Internet, c’est (et ce fut) simple à réparer. Il faut emboîter à nouveau les deux parties, et pousser vers l’intérieur le cercle de couleur dorée (sur mon modèle), que les anglophones appellent «circlip», avec par exemple son ongle pour qu’il disparaisse entre les deux bagues. Et hop, celles-ci restent à nouveau collées ensembles comme au premier jour ou presque.

Sigma, objectif mal fabriqué et mal réparé

Petit coup de gueule ancien. J’avais acheté en 2012 un objectif Sigma 17-70. Au bout d’un mois l’autofocus s’est mis à patiner. Je l’envoie au SAV, et il me revient… avec un problème de front-focus. Les boules. J’en suis maintenant très satisfait, mais d’une part ça n’a pas été sérieux de la part du SAV, et d’autre part je ne trouve pas normal de payer 2 colis recommandés pour mon objectif neuf.

Clavier bépo Typematrix, quelques mois après

Si la quasi-totalité des points (dont les nombreux points négatifs) que j’évoquais dans mon billet précédent sont toujours valides, je peux maintenant dire que ce clavier, avec la disposition bépo, est bien plus efficace qu’un clavier azerty pour l’écriture de textes.

Je n’ai quasiment plus à regarder mon clavier. Mes index se placent automatiquement sur les touches «e» et «t» grâce aux marques et les autres doigts suivent. Les touches «début» et «fin» de ligne sont idéalement placées à coté des flèches de déplacement. Je fais également un bon usage des touches de réglage du volume (également bien placées). Je pense qu’il est mieux d’avoir une touche «fonction» (comme sur un portable) que des touches supplémentaires.

i18n: text expansion for several languages

From the KDE translations, I compiled statistics for text expansion, following the model presented by IBM on this page. So it will tell you for example that if you want to translate a text from English to French, which is between 11 and 20 characters long:

  • if you want 50% of such texts to fit, you will need 24% of additional space (for an English text of 100 pixels, you will need 124 pixels)
  • if you want 80%, you will need 57% of space
  • for 90%: 77%
  • for 95%: 98%
  • for 99%: 150%

Sources and data are available. Please excuse me for the poor HTML design (written in HTML 5, looks like HTML 1.0 ☺), I did not put any effort in it (not my cup of tea), but at least it does the job.

I also wrote another version of the generator using the Go language. I was a little bit disappointed because:

  • I did not get a formidable boost in performance (I should have, I have a 4-core CPU and Python can not fully take advantage of it because of its GIL). In fact, the file parsing part (the most time consuming one) gave similar performance, and the statistic production part was notably faster
  • The GTK/Pango (I used to get text length in pixels) binding for Go was incomplete and boring to complete (even if Go has a really nice support to write C bindings). I also had some crashes (related to GObject reference counting).
  • There is a port of Freetype written in Go, but the code to compute the length of a text was incomplete (it did not cover a given case)
  • At the time I wrote this version, I thought about integrating Fontconfig directly in the program, but it would have taken more time that I wanted to spend on it.

Golang: lack of generics bothers me

I think I will give up Go, mainly because of the lack of generics. What bothers me is that I can’t see how to write all-purpose algorithm functions like the ones C++ have (I love them), like for example «std::remove_if». Without them, you will have to write the same little pieces of code again, and again, and again. Or use cast everywhere (not great for a language with strong static types).
The built-in functions (like «copy») can do such a magic, but you, developer, can’t.
Oh, it’s possible to do like the package sort: provide to the function an interface that will perform the operations on the data (like «Swap», «Len», «Less»). If I want to implement my «remove_if», implementing such an interface will be a drag.
Same problem if you want to create a generic data structure, like a «set» or a b-tree of anything (interface or native type), and keep the type-safety.

That’s a pity, Go has some great features. Maybe I will try Rust.

One-liner: espace-disque occupé par extension de fichier

Un petit one-liner pour avoir l’espace-disque occupé par extension de fichier. Ne marche peut-être pas avec les fichiers dont le nom a un espace.

find . -type f -printf "%s %f\n" | 
awk '{sub(/.*\./,"", $2);st[$2] += $1} END{for(key in st){print key, st[key]/1000000}}' |
sort -n -k2

Starzik, mauvaise gestion des mots de passe

Je viens de me rendre compte que Starzik.com stocke dans leur base les mots de passe de ses clients en clair, vu qu’ils m’ont renvoyé par mail mon mot de passe perdu. Ça craint. Au lieu de ça, ils auraient dû faire comme tout le monde: stocker un hash et en cas de perte de mot de passe, envoyer un mail avec un lien vers une page de changement de mot de passe. (explication-fiction: un responsable de ce site qui n’a aucune notion de la sécurité a demandé cette « fonctionnalité » et les devs n’ont pu que dire « oui, bien-sûr messire »)

Je crois que je vais m’abstenir d’acheter chez eux tant que c’est le cas. (mise à jour janvier 2017: c’est toujours le cas)