Sunday, January 10, 2016

Twice the bits, twice the fun!

$ dpkg --print-architecture
amd64
I guess it was time for me to finally join the 21st century!

The process was not as painful as I had feared, but not nearly as painless as I would have hoped either.  (Still, it wasn't much worse than what I've endured over the years with a half-multi-archified setup.  I probably would have spared myself a lot of trouble by switching much earlier.)

Thursday, September 10, 2015

Desjardins: Vos transactions en ligne... par téléphone

Je n'ai pas pu m'empêcher de sourire devant cette contradiction:


Il s'agit probablement d'un bête oubli; la version anglophone est (surprenamment) plus complète :


(Et l'option est véritablement à trois clics, et non un seul, du sommaire où pointe le lien.)

Saturday, August 1, 2015

PayPal: No, we mean it, we really hate you

I have previously complained about PayPal disabling cut-and-paste for password entries.  Apparently, this is also the case for the destination entry, when sending money without an invoice:
That "Email or mobile number" field up there?  The one where one typo can result in your money being gone forever?  Yeah, cut-and-paste didn't work; you have to type that shit manually.

Sometimes I wonder if they're not deliberately trying to drive me insane.

(Actually, the part that pisses me off the most is that my own browser obeys to this stuff.)

Saturday, December 13, 2014

Don't ever leave Try::Tiny behind

Hit a bug at work a few days ago; it looked as if Try::Tiny was not doing its job of catching an exception, letting it pass right through instead.  The exception was thrown several layers below the try, which itself was also several layers deep, with lots of evals in-between.  It took me quite a while to prune away all the unrelated bits, until the problematic part of the code was pared down to its simplest expression:
try { die } catch { warn };
Huh?  This piece of code should catch the die and emit a warning instead, but here it was, dying on me.  What was going on?

Actually, there's nothing wrong with that code, and it will do exactly what it is meant to do.  Unless you forget the use Try::Tiny.  Then all hell breaks loose.

In most cases, failing to use a module will typically result in a "Undefined subroutine" or "Can't locate object method" error message that will point to your mistake in an obvious manner.  But in this case, the manifestation can be quite puzzling.

At first, I figured that maybe perl was parsing the first block (i.e. the first argument of the try subroutine) as an anonymous hash; since the try prototype hasn't been declared yet, there's no way to know that this argument is actually a block.  The die will then be executed during the evaluation of the try arguments.

Close, but no cigar.  Turns out that perl is indeed parsing it as a block -- just not in the context we expect:
$ perl -MO=Deparse -e 'try { die } catch { warn }'
do {
    die
}->try(do {
    warn
}->catch);
Here's the indirect object syntax rearing it ugly head; Perl assumes that try is actually a method to be called on whatever class/object the following block will return.  Yuck.  (Notice that the same also applies to catch.)

(Maybe this will finally push me to break the habit of using that syntax for class methods.  Yeah, I know it's unhealthy, but I can't resist...)

Saturday, November 29, 2014

PC Plus : Des heures de plaisir à s'inscrire

Eu beaucoup de plaisir l'autre jour à m'inscrire au programme PC Plus du Choix du Président (maudit que ça se dit mal).  Le programme lui-même mériterait un autre billet, mais restons-en à l'inscription.
Allons-y!
Non.  Sérieux.  On parle d'une entreprise qui doit brasser des millions au Québec.  Pas pouvoir mettre d'accents, c'est comme pas pouvoir donner un numéro de téléphone dans le 418.  Non -- juste, non.

(soupir)  Bon, poursuivons quand même...
Euh, je crois que c'est l'adresse que l'on confirme ici, et non pas un courriel en soi.
Tiens, un autre mot de passe avec une limite arbitraire.  Pourquoi 8?  Bah, pourquoi pas.  (J'admet toutefois que c'est bien assez pour protéger une simple liste d'épicerie.)
Oh, wow!  Comme un magazine en papier -- ça prend un certain temps pour imprimer les étiquettes, j'imagine.
Uh-huh.  (À noter que leur captcha n'est que du texte noir sur un fond rouge.  Probablement plus difficile à lire pour un humain que pour un robot.)


Euh, "accéder" à mes données?  Elles sont directement dans le formulaire que j'essaie de vous soumettre, mes amis.

(C'est comme ça, leur site jamme de temps à autre.  Un rien comparé à leur application mobile.)

Bon, peut-être que l'inscription a passé quand même, et que c'est simplement le login automatique qui a planté.  Vérifions en demandant notre mot de passe par courriel.
Je vous assure qu'il s'agit d'une adresse courriel parfaitement valide; elle ne figure simplement pas dans vos dossiers.  (Et pas sûr que ça donnerait grand chose de réessayer.)

Heureusement, leur système a fini par prendre du mieux, et j'ai enfin pu m'inscrire et loader ma carte.
Tiens, une offre pour le beurre.  N'importe quel beurre?
Ça a le mérite d'être clair.



Sunday, November 2, 2014

Those goddamn copy-protected password fields

Fuck you, PayPal, for deliberately preventing me from pasting in the password field.  These stupid "security" measures actually entice me to choose a shorter, simpler password, because who wants to painstakingly type 20 gibberish characters one by one -- twice?

I take solace in the fact that my frustration is shared by many other people.  (Here's a much more eloquent rant on this matter.)

Friday, October 31, 2014

CrashPlan: Our watch is stuck on 2003

CrashPlan has this cool feature where it watches for new and changed files (and directories) in real-time; it immediately notices when there's something new, and schedules it for the next backup.

On Linux, this is done with inotify.  This usually requires a little bit of fiddling with sysctl(8), since the default maximum number of watches allowed per user is typically much lower than the number of entries in the backup file selection.

However, you may find that this feature still cannot be enabled, no matter how high you raise that maximum number.  Turns out that CrashPlan first checks the kernel version for inotify support (which was introduced in 2.6.13), and cannot parse a version number with only two components.

Guys, seriously?  Seriously?  It's been more than three years since 3.0 was released.  This should have been fixed a long time ago, and I most certainly shouldn't have to write a goddamn uname library wrapper to make it work.

(sigh)

That being said -- once you've finally got it working, it's really cool, and well worth the effort.