Louis-Philippe Véronneau - hardwarehttps://veronneau.org/2023-08-04T00:00:00-04:00pymonitair: Air Quality Monitoring Display with MicroPython2023-08-04T00:00:00-04:002023-08-04T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2023-08-04:/pymonitair-air-quality-monitoring-display-with-micropython.html<p>I've never been a fan of IoT devices for obvious reasons: not only do they tend
to be excellent at being expensive vendor locked-in machines, but far too often,
they also end up turning into e-waste after a short amount of time.
Manufacturers can go out of business or simply …</p><p>I've never been a fan of IoT devices for obvious reasons: not only do they tend
to be excellent at being expensive vendor locked-in machines, but far too often,
they also end up turning into e-waste after a short amount of time.
Manufacturers can go out of business or simply decide to <a href="https://www.wired.co.uk/article/sonos-outrage-legacy-speakers">shut down the cloud
servers</a> for older models, and then you're stuck with a brick.</p>
<p>Well, this all changes today, as I've built my first IoT device and I love it.
Introducing pymonitair.</p>
<h1>What</h1>
<p>pymonitair is a MicroPython project that aims to display weather data from a
home weather station (like the ones sold by <a href="https://www.airgradient.com/">AirGradient</a>) on a small display.</p>
<p>The <a href="https://gitlab.com/baldurmen/pymonitair">source code</a> was written for the Raspberry Pi Pico W, the
<a href="https://www.waveshare.com/wiki/Pico-OLED-1.3">Waveshare Pico OLED 1.3</a> display and the <a href="https://revolvair.org/revo1-station-danalyse-de-particules-fines-boutique/">RevolvAir Revo 1</a>
weather station, but can be adapted to other displays and stations easily, as I
tried to keep the code as modular as possible.</p>
<p>The general MicroPython code itself isn't specific to the Raspberry Pi Pico and
shouldn't need to be modified for other boards.</p>
<p>pymonitair features:</p>
<ul>
<li>6 different pages for the supported weather data<sup id="fnref:data"><a class="footnote-ref" href="#fn:data">1</a></sup>, accessible via the
<code>key0</code> button</li>
<li>Alerting<sup id="fnref:alert"><a class="footnote-ref" href="#fn:alert">2</a></sup> on the PM2.5 page when the defined threshold has been
crossed</li>
<li>Automatic screen blanking after a defined amount of time to save the OLED
screen from burn-in</li>
<li>Manual screen blanking using the <code>key1</code> button</li>
</ul>
<p>Here's a demo of me scrolling through the different pages and (somewhat
failing) to turn the screen on and off:</p>
<video src="https://veronneau.org/media/blog/2023-08-04/pymonitair.webm" title="pymonitair demo, where I'm scrolling through the different pages" alt="pymonitair demo, where I'm scrolling through the different pages" height="80%" width="80%" style="margin-left: 10%;" controls></video>
<h1>Why?</h1>
<p>If you follow my blog, you'll know that <a href="https://veronneau.org/weather-station-data-visualisations-using-r-and-python.html">my last entry</a> was
about building a set of tools to collect and graph data from a weather station
my neighbor set up.</p>
<p>Why on Earth would I need a separate device to show this data, when the
<a href="https://air.veronneau.org">website I've built</a> works perfectly fine and is accessible on
any computer or smartphone?</p>
<p>Mostly alerts. When the air quality here dropped following <a href="https://www.cbc.ca/news/canada/montreal/forest-fires-quebec-sept-%C3%AEles-1.6865576">forest
fires</a>, I found out keeping track of if I had to close my windows and
bunker down was quite a hassle.</p>
<p>Air quality would degrade during the day and I would only notice it hours
later. With the pymonitair, I'll have a little screen flashing angrily at me
whenever this happens.</p>
<p>A simpler solution would probably have been to forgo hardware altogether and
code some icinga2 alert to <a href="https://veronneau.org/icinga2-notifications-via-signal-messenger.html">ping me over Signal</a> whenever the
air quality got bad. Hacking on pymonitair was mostly a way to learn to use
MicroPython and familiarize myself with this type of embedded hardware device.</p>
<p>I'll surely blog about this later this year, but I plan to use a very similar
stack to mod my apartment's HVAC unit to stop pulling air from outside when an
air quality sensor detects cigarette smoke (or bad air quality in general).</p>
<h1>Things I've learnt</h1>
<p>This project was super fun and taught me many things:</p>
<ul>
<li>
<p>MicroPython is close enough to regular Python that I don't mind it. The
standard library is much smaller, but there are ways to work around that.</p>
</li>
<li>
<p>The Raspberry Pi Pico W is a fantastic board. At around 10 CAD (~7 USD), it's
much cheaper than anything Arduino offers, much more powerful than those
boards and gives you the option of not having to code in some terrible and
weird C variant. It also has a nice ecosystem of compatible modules and hats.</p>
</li>
<li>
<p>Displays, even if they advertise being "batteries included", often are not. I
had the bad surprise of discovering the MicroPython driver for the Waveshare
Pico OLED 1.3 was pretty bad and lacked a ton of features compared to their
C code driver. Thankfully, I was lucky enough that the OLED panel it uses (the
SH1107) is common enough for folks to have written their own drivers.</p>
</li>
<li>
<p><a href="https://packages.debian.org/bookworm/thonny">thonny</a>, a Python IDE, is probably the best tool to transfer files to the
Raspberry Pico and to debug code, as it provides a file manager and a
shell<sup id="fnref:other"><a class="footnote-ref" href="#fn:other">3</a></sup>. I'm a little annoyed by it not being vim, but I got used to
its quirks fairly quickly.</p>
</li>
</ul>
<div class="footnote">
<hr>
<ol>
<li id="fn:data">
<p>PM1, PM2.5, PM10, Temperature, Humidity and Pressure <a class="footnote-backref" href="#fnref:data" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:alert">
<p>Part of the screen will flash repeatedly <a class="footnote-backref" href="#fnref:alert" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:other">
<p>I did look for other solutions to transfer files to the board, but
none of them were actually maintained. I nearly finished packaging <a href="https://github.com/scientifichackers/ampy">ampy</a>
before realising it was officially unmaintained and its main alternative,
<a href="https://github.com/dhylands/rshell">rshell</a>, has had its last release in December 2021. When I caught myself
seriously considering writing a script to transfer files over the serial
link, I gave up and decided thonny was not that bad after all. <a class="footnote-backref" href="#fnref:other" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>My new friend Ted2023-07-27T00:00:00-04:002023-07-27T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2023-07-27:/my-new-friend-ted.html<p>About 6 months ago, I decided to purchase a bike trailer. I don't drive and
although I also have a shopping caddy, it often can't handle a week's
groceries.</p>
<p><img src="/media/blog/2023-07-27/bike_and_trailer.jpg" width="70%" style="margin-left:15%" title="The trailer, attached to my bike, hauling two storage crates" alt="The trailer, attached to my bike, hauling two storage crates"></p>
<p>Since the goal for the trailer was to haul encumbering and heavy loads, I
decided to splurge and got a <a href="https://surlybikes.com/parts/ted_trailer">Surly …</a></p><p>About 6 months ago, I decided to purchase a bike trailer. I don't drive and
although I also have a shopping caddy, it often can't handle a week's
groceries.</p>
<p><img src="/media/blog/2023-07-27/bike_and_trailer.jpg" width="70%" style="margin-left:15%" title="The trailer, attached to my bike, hauling two storage crates" alt="The trailer, attached to my bike, hauling two storage crates"></p>
<p>Since the goal for the trailer was to haul encumbering and heavy loads, I
decided to splurge and got a <a href="https://surlybikes.com/parts/ted_trailer">Surly Ted</a>. The 32" x 24" flat bed is very
versatile and the trailer is rated for up to 300 lbs (~135 kg).</p>
<p>At around 30 lbs (~13.5 kg), the trailer itself is light enough for me to climb
up the stairs to my apartment with it.</p>
<p>Having seldom driven a bike trailer before, I was at first worried about its
handling and if it would jerk me around (as some children's chariots tend to).
I'm happy to report the <a href="https://surlybikes.com/parts/surly_hitch">two pronged hitch</a> Surly designed works very
well and lets you do 180° turns effortlessly.</p>
<p><img src="/media/blog/2023-07-27/balcony.jpg" width="70%" style="margin-left:15%" title="The trailer on my balcony, ready to be hoisted" alt="The trailer on my balcony, ready to be hoisted"></p>
<p>So far, I've used the trailer to go grocery shopping, buy bulk food and haul
dirt and mulch. To make things easier, I've purchased two <a href="https://www.homedepot.ca/product/hdx-45l-stackable-strong-storage-tote-bin-plastic-organizer-box-black-base-yellow-snap-on-lid/1001057072">45L storing
crates</a> from Home Depot and added two planks of wood on each side of
the trailer to stabilise things when I strap the crates down to the bed.</p>
<p>Since my partner and I are subscribed to an organic farmer's box during the
summer and get baskets from <a href="https://montreal.lufa.com/en/about">Lufa</a> during the winter, picking up our
groceries at the pick-up point is as easy as dumping our order in the storing
crates and strapping them back to the trailer.</p>
<p><img src="/media/blog/2023-07-27/pulleys.jpg" width="70%" style="margin-left:15%" title="The pulleys on the roof of my balcony" alt="The pulleys on the roof of my balcony"></p>
<p>Although my housing cooperative has a (small) indoor bicycle parking space, my
partner uses our spot during the summer, which means I have to store the
trailer on my balcony. To make things more manageable and free up some space, I
set up a system of pulleys to hoist the trailer up the air when it's not in
use.</p>
<p>I did go through a few iterations, but I'm pretty happy with the current 8
pulleys block and tackle mechanism I rigged.</p>
<p><img src="/media/blog/2023-07-27/hoisted.jpg" width="70%" style="margin-left:15%" title="The trailer hoisted to the roof of the balcony" alt="The trailer hoisted to the roof of the balcony"></p>
<p>All and all, this trailer wasn't cheap, but I regret nothing. Knowing Surley's
reputation, it will last me many years and not having to drive a car to get
around always ends up being the cheaper solution.</p>New Keyboard, Who This?2023-06-22T00:00:00-04:002023-06-22T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2023-06-22:/new-keyboard-who-this.html<p><em><strong>Edit:</strong> I learnt the hard way that although "regular" MX-style switches are
all compatible, low-profile ones are not. This means that the Cherry
low-profile switches that came with this board don't have the same pin layout
as the Gateron low-profile switches I was planing to use. I did hack the …</em></p><p><em><strong>Edit:</strong> I learnt the hard way that although "regular" MX-style switches are
all compatible, low-profile ones are not. This means that the Cherry
low-profile switches that came with this board don't have the same pin layout
as the Gateron low-profile switches I was planing to use. I did hack the
Gateron switches for a temporary fix, but eventually ended up replacing them
with TTC KS32 low-profile blue switches, as Cherry does not offer clicky
low-profile switches.</em></p>
<p>My old Thinkpad X220 has been slowly dying<sup id="fnref:die"><a class="footnote-ref" href="#fn:die">1</a></sup> and as much as it makes me
sad, it is also showing its age in terms of computational power. As such, I've
pre-ordered a Framework 13 (the AMD version) and plan to retire my X220 when I
get it.</p>
<p>One thing I will miss from that laptop is the keyboard. At work, I dock it (on
the amazing Thinkpad dock), which lets me use the keyboard while working on a
larger monitor.</p>
<p>I could probably replicate this setup with the Framework, but I'm not a fan of
trackpads. So I built a keyboard. A nice one. One with a trackpoint.</p>
<p><img src="/media/blog/2023-06-22/bare.jpg" width="70%" style="margin-left:15%" title="The bare board in its box" alt="The bare board in its box"></p>
<p>If you follow Debian Planet, you may have seen the Tex Shinobi when Jonathan
Dowland <a href="https://jmtd.net/log/tex_shinobi/">featured it on his blog</a> back in January. It is a Tenkeyless
board (saving me precious space at work) and is everything you would want from
a old-school Thinkpad keyboard replacement.</p>
<p>Since I had no previous experience with "Cherry MX"-style keyboard
switches<sup id="fnref:ibm"><a class="footnote-ref" href="#fn:ibm">2</a></sup>, I decided to go full-bore and buy the <a href="https://tex.com.tw/products/shinobi-diy-type">"DIY" model</a> that
came unpopulated.</p>
<p><img src="/media/blog/2023-06-22/tester.jpg" width="70%" style="margin-left:15%" title="A 35 switch tester board" alt="A 35 switch tester board"></p>
<p>To know what model of switches I wanted, I bought a <a href="https://www.keychron.com/products/gateron-switch-tester">nice switch
tester</a> and played with it for a few days. After having thoroughly
annoyed my SO (turns out 35 different switches on a little board is an
incredible fidget toy), I decided to go with the <a href="https://www.gateron.co/products/gateron-aliaz-silent-switch">Gateron Aliaz 70g</a>.
They are silent tactile switches, similar to the classic Cherry MX Browns, but
with a much nicer sound profile and a much stronger actuation force (55g VS
70g). The end result is somewhat "stiff" keyboard that has a nice "THOCC",
while still being relatively silent: perfect for a shared office.</p>
<p><img src="/media/blog/2023-06-22/switches.jpg" width="70%" style="margin-left:15%" title="The keyboard with the switches, but no keycaps" alt="The keyboard with the switches, but no keycaps"></p>
<p>The only thing left to do on this keyboard is to replace the three soldered
switches that came pre-installed for the mouse buttons. They are Cherry MX Red
low-profile switches and are genuinely terrible<sup id="fnref:linear"><a class="footnote-ref" href="#fn:linear">3</a></sup>. I will be swapping
them for <a href="https://www.gateron.co/products/gateron-low-profile-mechanical-switch-set?variant=40041225060441">Gateron KS-33 low-profile Blue switches</a> when I get the ones I
ordered online.</p>
<p><img src="/media/blog/2023-06-22/complete.jpg" width="70%" style="margin-left:15%" title="My assembled Tex Shinobi" alt="My assembled Tex Shinobi"></p>
<p>Overall, I am very satisfied with this keyboard and I look forward using it
daily when schools starts again in September.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:die">
<p>The power button sometimes does not work at all (for minutes?) and the
laptop has been shutting down randomly (not a heat issue) more and more
often... <a class="footnote-backref" href="#fnref:die" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:ibm">
<p>I am blessed with an IBM M keyboard at home and am in love with those
clicky, very loud buckling springs. <a class="footnote-backref" href="#fnref:ibm" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:linear">
<p>Not only are they linear switches (weird choice for mouse buttons),
but they are very inconsistent. All three switches feel different and make
different sounds. <a class="footnote-backref" href="#fnref:linear" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Solo V2: nice but flawed2023-06-18T00:00:00-04:002023-06-18T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2023-06-18:/solo-v2-nice-but-flawed.html<p><strong>EDIT:</strong> One of my 2 keys has died. There are what seems like golden bubbles
under the epoxy, over one of the chips and those were not there before. I've
emailed SoloKeys and I'm waiting for a reply, but for now, I've stopped using
the Solo V2 altogether :(</p>
<p>I recently …</p><p><strong>EDIT:</strong> One of my 2 keys has died. There are what seems like golden bubbles
under the epoxy, over one of the chips and those were not there before. I've
emailed SoloKeys and I'm waiting for a reply, but for now, I've stopped using
the Solo V2 altogether :(</p>
<p>I recently received the two Solo V2 hardware tokens I ordered as part of their
crowdfunding campaign, back in March 2022. It did take them longer than
advertised to ship me the tokens, but that's hardly unexpected from such
small-scale, crowdfunded undertaking.</p>
<p>I'm mostly happy about my purchase and I'm glad to get rid of the aging <a href="https://veronneau.org/i-am-tomu.html">Tomu
boards</a> I was using as U2F tokens<sup id="fnref:fido"><a class="footnote-ref" href="#fn:fido">1</a></sup>. Still, beware: I am not sure
it's a product I would recommend if what you want is simply something that
works. If you do not care about open-source hardware, the Solo V2 is not for
you.</p>
<h2>The Good</h2>
<p><img src="/media/blog/2023-06-18/side_by_side.jpg" width="70%" style="margin-left:15%" title="A side-by-side view of the Solo V2's top and back sides" alt="A side-by-side view of the Solo V2's top and back sides"></p>
<p>I first want to mention I find the Solo V2 gorgeous. I really like the black and
gold color scheme of the USB-A model (which is reversible!) and it seems like a
well built and solid device. I'm not afraid to have it on my keyring and I fully
expect it to last a long time.</p>
<p><img src="/media/blog/2023-06-18/solo2_shell.webp" width="70%" style="margin-left:15%" title="An animation of the build process, showing how the PCB is assembled and then slotted into the shell" alt="An animation of the build process, showing how the PCB is assembled and then slotted into the shell"></p>
<p>I'm also very impressed by the modular design: the PCB sits inside a shell,
which decouples the logic from the USB interface and lets them manufacture a
single board for both the USB-C and USB-A models. The clear epoxy layer on top
of the PCB module also looks very nice in my opinion.</p>
<p><img src="/media/blog/2023-06-18/capacitive.jpg" width="70%" style="margin-left:15%" title="A picture of the Solo V2 with its silicone case on my keyring, showing the 3 capacitive buttons" alt="A picture of the Solo V2 with its silicone case on my keyring, showing the 3 capacitive buttons"></p>
<p>I'm also very happy the Solo V2 has capacitive touch buttons instead of
physical "clicky" buttons, as it means the device has no moving parts. The
token has three buttons (the gold metal strips): one on each side of the device
and a third one near the keyhole.</p>
<p>As far as I've seen, the FIDO2 functions seem to work well via the USB
interface and do not require any configuration on a Debian 12 machine. I've
already migrated to the Solo V2 for web-based 2FA and I am in the process of
migrating to an SSH <code>ed25519-sk</code> key. <a href="https://blog.frehi.be/2022/08/04/using-the-solo-v2-fido2-security-key/">Here is a guide</a> I recommend if
you plan on setting those up with a Solo V2.</p>
<h2>The Bad and the Ugly</h2>
<p>Sadly, the Solo V2 is far from being a perfect project. First of all, since the
crowdfunding campaign is still being fulfilled, it is not currently
commercially available. Chances are you won't be able to buy one directly
before at least Q4 2023.</p>
<p>I've also hit what seems to be a pretty big firmware bug, or at least, one that
affects my use case quite a bit. Invoking <code>gpg</code> crashes the Solo V2 completely
if you also have <code>scdaemon</code> installed. Since <code>scdaemon</code> is necessary to use
<code>gpg</code> with an OpenPGP smartcard, this means you cannot issue any <code>gpg</code> commands
(like signing a git commit...) while the Solo V2 is plugged in.</p>
<p>Any <code>gpg</code> commands that queries <code>scdaemon</code>, such as <code>gpg --edit-card</code> or <code>gpg
--sign foo.txt</code> times out after about 20 seconds and leaves the token
unresponsive to both touch and CLI commands.</p>
<p>The way to "fix" this issue is to make sure <code>scdaemon</code> does not interact with
the Solo V2 anymore, using the <code>reader-port</code> argument:</p>
<ol>
<li>
<p>Plug both your Solo V2 and your OpenPGP smartcard</p>
</li>
<li>
<p>To get a list of the tokens <code>scdaemon</code> sees, run the following command: <code>$
echo scd getinfo reader_list | gpg-connect-agent --decode | awk '/^D/ {print
$2}'</code></p>
</li>
<li>
<p>Identify your OpenPGP smartcard. For example, my Nitrokey Start is listed as
<code>20A0:4211:FSIJ-1.2.15-43211613:0</code></p>
</li>
<li>
<p>Create a file in <code>~/.gnupg/scdaemon.conf</code> with the following line
<code>reader-port $YOUR_TOKEN_ID</code>. For example, in my case I have: <code>reader-port
20A0:4211:FSIJ-1.2.15-43211613:0</code></p>
</li>
<li>
<p>Reload <code>scdaemon</code>: <code>$ gpgconf --reload scdaemon</code></p>
</li>
</ol>
<p>Although this is clearly a firmware bug<sup id="fnref:trussed"><a class="footnote-ref" href="#fn:trussed">2</a></sup>, I do believe GnuPG is also
partly to blame here. Let's just say I was not very surprised to have to battle
<code>scdaemon</code> again, as I've had <a href="https://veronneau.org/preventing-an-openpgp-smartcard-from-caching-the-pin-eternally.html">previous issues with it</a>.</p>
<p>Which leads me to my biggest gripe so far: it seems SoloKeys (the company)
isn't really fixing firmware issues anymore and doesn't seems to care. The last
firmware release is about a year old.</p>
<p>Although people are experiencing serious bugs, there is <a href="https://github.com/solokeys/solo2/discussions/124#discussioncomment-3584059">no official way to
report them</a>, which leads to issues being seemingly ignored. For
example, <a href="https://github.com/solokeys/solo2/discussions/138">the NFC feature is apparently killing keys</a> (!!!), but no one
from the company seems to have acknowledged the issue. The same goes for my
GnuPG bug, which <a href="https://github.com/solokeys/solo2/discussions/141#discussion-4423876">was flagged in September 2022</a>.</p>
<p>For a project that mainly differentiates itself from its (superior) competition
by being "Open", it's not a very good look... Although “<em>SoloKeys is still an
unprofitable open source side business of its creators</em>”<sup id="fnref:side"><a class="footnote-ref" href="#fn:side">3</a></sup>, this kind of
attitude certainly doesn't help foster trust.</p>
<h2>Conclusion</h2>
<p>If you want to have a nice, durable FIDO2 token, I would suggest you get one of
the many models Yubico offers. They are similarly priced, are readily
commercially available, are part of a nice and maintained software ecosystem
and have more features than the Solo V2 (OpenPGP support being the one I miss
the most). Yubikeys are the <em>practical</em> option.</p>
<p>What they are not is open-source hardware, whereas <a href="https://certification.oshwa.org/us001100.html">the Solo V2 is</a>. As
bunnie <a href="https://www.bunniestudios.com/blog/?p=5706">very well explained on his blog in 2019</a>, it does not mean
the later is inherently more trustable than the former, but it does make the
Solo V2 the <em>ideological</em> option. Knowledge is power and it should be free.</p>
<p>As such, tread carefully with SoloKeys, but don't dismiss them altogether: the
Solo V2 is certainly functioning well enough for me.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:fido">
<p>Although U2F is still part of the FIDO2 specification, the Tomus
predate this standard and were thus not fully compliant with FIDO2. So long
and thanks for all the fish little boards, you've served me well! <a class="footnote-backref" href="#fnref:fido" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:trussed">
<p>It appears the Solo V2 <a href="https://github.com/solokeys/solo2/discussions/141#discussion-4423876">shares its firmware</a> with the
Nitrokey 3, which had <a href="https://github.com/Nitrokey/nitrokey-3-firmware/issues/22">a similar issue</a> a while back. <a class="footnote-backref" href="#fnref:trussed" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:side">
<p>This is a <a href="https://github.com/solokeys/solo2/discussions/124#discussioncomment-3584059">direct quote</a> from one of the Solo V2 firmware
maintainers. <a class="footnote-backref" href="#fnref:side" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
</ol>
</div>Extruded Schiit Stack2022-10-29T00:00:00-04:002022-10-29T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2022-10-29:/extruded-schiit-stack.html<p>I've been a fan of the products manufactured by <a href="https://www.schiit.com/">Schiit Audio</a> for a while
now. They are affordable (for high-end audio gear), sound great, are made in
the USA<sup id="fnref:usa"><a class="footnote-ref" href="#fn:usa">1</a></sup> and I think their industrial design looks great.</p>
<p>I first started with one of their classic "Schiit Stack"<sup id="fnref:stack"><a class="footnote-ref" href="#fn:stack">2</a></sup>, but …</p><p>I've been a fan of the products manufactured by <a href="https://www.schiit.com/">Schiit Audio</a> for a while
now. They are affordable (for high-end audio gear), sound great, are made in
the USA<sup id="fnref:usa"><a class="footnote-ref" href="#fn:usa">1</a></sup> and I think their industrial design looks great.</p>
<p>I first started with one of their classic "Schiit Stack"<sup id="fnref:stack"><a class="footnote-ref" href="#fn:stack">2</a></sup>, but
eventually upgraded to the Modi Multibit (I wanted the TOSLINK input), added a
physical EQ (the <a href="https://www.schiit.com/products/loki-mini-3">Loki</a>) and eventually got a <a href="https://www.schiit.com/products/sys">Sys</a> when I bought a
<a href="https://www.schiit.com/products/vidar">Vidar</a> speaker amp.</p>
<p>The original Schiit Stack — being 2 devices high — was pretty manageable as-is.
With my current 4-high stack though, things became unstable and I had to resort
to finding a way to bolt them together.</p>
<p>Mooching from a friend with a 3D printer, I printed <a href="https://www.thingiverse.com/thing:3207569">this clever mount</a>
from Thingiverse. It worked well enough, but was somewhat imperfect for multiple
reasons:</p>
<ol>
<li>
<p>The plastic tabs had a tendency of breaking in two when the
screws where tight enough for the stack to feel solid.</p>
</li>
<li>
<p>The plastic wasn't really rigid enough to support the 4 devices properly and
the stack, being back-heavy from the cables, was unstable and tipped over
easily.</p>
</li>
<li>
<p>Due to the plastic tabs being fragile, it was pretty much impossible to
disassemble the stack.</p>
</li>
</ol>
<p>This last issue was what killed this solution for me. When I tried to replace my
Modi 2 by the Modi Multibit, the mount pretty much crumbled away. Sadly, my
friend warped a bunch of pieces on his 3D printer while trying to print ABS and
I couldn't have him print me replacement parts either.</p>
<p>After a while, I grew tired of having these four devices laying around my desk
and wasting valuable space. I had tasted the 4-stack and knew how better things
could be!</p>
<p>That's when I realised the solution was to ditch 3D printing altogether, use
aluminum framing extrusions and build my own stack out of metal.</p>
<p><img src="/media/blog/2022-10-29/assembly.jpg" width="70%" style="margin-left:15%" title="The 4 different Schiit devices with the hardware needed to build the extruded frame" alt="The 4 different Schiit devices with the hardware needed to build the extruded frame"></p>
<p>This was my first time working with aluminium frame extrusions and I had tons
of fun! I specced the first version using <a href="https://www.mcmaster.com/aluminum-extrusions/miniature-t-slotted-framing-and-fittings/">10mm x 10mm rails</a> from
McMaster-Carr, but discovered they do not ship to residential addresses in
Canada...</p>
<p>After looking at local options, I then decided to use <a href="https://us.misumi-ec.com/vona2/detail/110300465870/">15mm x 15mm
rails</a> from Misumi. I went with this option since the rails are still
small enough not to be an eyesore, but also because this system uses M3 screws,
which the Schiit mini series also uses, making assembly much easier.</p>
<p>I choose to make the assembled stack quite a bit taller than the previous one
made with 3D printed plastic, as I found the headphone amp got pretty hot
during the summer and I wanted to provide better airflow.</p>
<p>If you are interested in replicating this stack, here are the parts I used, all
from Misumi:</p>
<ul>
<li>4 x <a href="https://us.misumi-ec.com/vona2/detail/110300465870/">HFS3-1515</a> 230mm long rails</li>
<li>16 x <a href="https://us.misumi-ec.com/vona2/detail/110302755570">HPTBS3</a> brackets</li>
<li>1 x pack of <a href="https://us.misumi-ec.com/vona2/detail/110300465710">HNSQ3-3</a> M3 framing nuts</li>
</ul>
<p>I didn't order any since I had some already, but you'll also need M3 screws,
namely:</p>
<ul>
<li>16 x M3-10 screws, to replace the ones in the Schiit devices</li>
<li>16 x M3-6 screws, for the aluminium framing brackets</li>
</ul>
<p>You can also cheap out and use only M3-10 screws (as I did), but you'll have to
use the extra nuts you ordered as spacers.</p>
<p><img src="/media/blog/2022-10-29/stack.jpg" width="70%" style="margin-left:15%" title="The assembled stack, complete with my lucky cat" alt="The assembled stack, complete with my lucky cat"></p>
<p>For the curious ones, the cabling is done this way:</p>
<div class="highlight"><pre><span></span><code> ┌────────────────┐ ┌────────────────┐
│ │ │ │
│ Magni (hp amp) │◄──────┐ ┌─────►│ Vidar (sp amp) │
│ │ │ │ │ │
└────────────────┘ │ │ └────────────────┘
│ │
┌─────┴───┴──────┐
│ │
│ Sys (switch) │◄───────┐
│ │ │
└────────────────┘ │
│
│
┌────────────────┐ ┌────────┴───────┐
│ │ │ │
│ Modi (DAC) ├────────────►│ Loki (EQ) │
│ │ │ │
└────────────────┘ └────────────────┘
</code></pre></div>
<p>The Vidar is not part of the actual stack, as it's a 600W amp that weights 10kg
:D.</p>
<p>The last thing I think I want to change in this setup is the cables. The ones I
have are too long for the stack. Shorter ones would reduce the wasted space in
the back and make the whole thing more elegant.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:usa">
<p>As in, designed, manufactured and assembled in the USA, from parts,
transformers and boards made in the USA. I find this pretty impressive. <a class="footnote-backref" href="#fnref:usa" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:stack">
<p>A <a href="https://www.schiit.com/products/modi-1">USB DAC</a> and a <a href="https://www.schiit.com/products/magni-1">headphone amp</a> you can stack one of
top of the other. <a class="footnote-backref" href="#fnref:stack" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Updating a rooted Pixel 3a2022-06-11T00:00:00-04:002022-06-11T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2022-06-11:/updating-a-rooted-pixel-3a.html<p>A short while after <a href="https://veronneau.org/goodbye-nexus-5.html">getting a Pixel 3a</a>, I decided to root it, mostly to
have more control over the charging procedure. In order to preserve battery
life, I like my phone to stop charging at around 75% of full battery capacity
and to shut down automatically at around 12 …</p><p>A short while after <a href="https://veronneau.org/goodbye-nexus-5.html">getting a Pixel 3a</a>, I decided to root it, mostly to
have more control over the charging procedure. In order to preserve battery
life, I like my phone to stop charging at around 75% of full battery capacity
and to shut down automatically at around 12%. Some Android ROMs have extra
settings to manage this, but LineageOS unfortunately does not.</p>
<p>Android already comes with a fairly complex mechanism to handle the charge
cycle, but it is mostly controlled by the kernel and cannot be easily
configured by end-users. <a href="https://github.com/VR-25/acc">acc</a> is a higher-level "systemless" interface for
the Android kernel battery management, but one needs root to do anything
interesting with it. Once rooted, you can use the <a href="https://f-droid.org/en/packages/mattecarra.accapp/">AccA app</a> instead of
playing on the command line to fine tune your battery settings.</p>
<p>Sadly, having a rooted phone also means I need to re-root it each time there is
an OS update (typically each week).</p>
<p>Somehow, I keep forgetting the exact procedure to do this! Hopefully, I will be
able to use this post as a reference in the future :)</p>
<p>Note that these instructions might not apply to your exact phone model, proceed
with caution!</p>
<h2>Extract the boot.img file</h2>
<p>This procedure mostly comes from the <a href="https://wiki.lineageos.org/extracting_blobs_from_zips#extracting-proprietary-blobs-from-payload-based-otas">LineageOS documentation</a> on
extracting proprietary blobs from the payload.</p>
<ol>
<li>
<p>Download the <a href="https://download.lineageos.org/sargo">latest LineageOS image</a> for your phone.</p>
</li>
<li>
<p>unzip the image to get the <code>payload.bin</code> file inside it.</p>
</li>
<li>
<p>Clone the LineageOS scripts git repository:</p>
<p><code>$ git clone https://github.com/LineageOS/scripts</code></p>
</li>
<li>
<p>extract the boot image (requires <code>python3-protobuf</code>):</p>
<p><code>$ mkdir extracted-payload</code>
<code>$ python3 scripts/update-payload-extractor/extract.py payload.bin --output_dir extracted-payload</code></p>
</li>
</ol>
<p>You should now have a <code>boot.img</code> file.</p>
<h2>Patch the boot image file using Magisk</h2>
<ol>
<li>
<p>Upload the <code>boot.img</code> file you previously extracted to your device.</p>
</li>
<li>
<p>Open Magisk and patch the <code>boot.img</code> file.</p>
</li>
<li>
<p>Download the patched file back on your computer.</p>
</li>
</ol>
<h2>Flash the patched boot image</h2>
<ol>
<li>
<p>Enable ADB debug mode on your phone.</p>
</li>
<li>
<p>Reboot into fastboot mode.</p>
<p><code>$ adb reboot fastboot</code></p>
</li>
<li>
<p>Flash the patched boot image file:</p>
<p><code>$ fastboot flash boot magisk_patched-foo.img</code></p>
</li>
<li>
<p>Disable ADB debug mode on your phone.</p>
</li>
</ol>
<h2>Troubleshooting</h2>
<p>In an ideal world, you would do this entire process each time you upgrade to a
new LineageOS version. Sadly, this creates friction and makes updating much more
troublesome.</p>
<p>To simplify things, you can try to flash an old patched <code>boot.img</code> file after
upgrading, instead of generating it each time.</p>
<p>In my experience, it usually works. When it does not, the device behaves
weirdly after a reboot and things that require proprietary blobs (like WiFi)
will stop working.</p>
<p>If that happens:</p>
<ol>
<li>
<p>Download the latest LineageOS version for your phone.</p>
</li>
<li>
<p>Reboot into recovery (Power + Volume Down).</p>
</li>
<li>
<p>Click on "Apply Updates"</p>
</li>
<li>
<p>Sideload the ROM:</p>
<p><code>$ adb sideload lineageos-foo.zip</code></p>
</li>
</ol>Goodbye Nexus 52022-01-23T00:00:00-05:002022-01-23T00:00:00-05:00Louis-Philippe Véronneautag:veronneau.org,2022-01-23:/goodbye-nexus-5.html<p>I've blogged <a href="/running-android-9-pie-on-a-nexus-5-unlegacy-android.html">a few</a> <a href="/musings-on-long-term-software-support-and-economic-incentives.html">times</a> already about my Nexus 5, the Android device I
have/had been using for 8 years. Sadly, it died a few weeks ago, when the WiFi
chip stopped working. I could probably have attempted a mainboard swap, but at
this point, getting a new device …</p><p>I've blogged <a href="/running-android-9-pie-on-a-nexus-5-unlegacy-android.html">a few</a> <a href="/musings-on-long-term-software-support-and-economic-incentives.html">times</a> already about my Nexus 5, the Android device I
have/had been using for 8 years. Sadly, it died a few weeks ago, when the WiFi
chip stopped working. I could probably have attempted a mainboard swap, but at
this point, getting a new device seemed like the best choice.</p>
<p>In a world where most Android devices are EOL after less than 3 years, it is
amazing I was able to keep this device for so long, always running the latest
Android version with the latest security patch. The Nexus 5 originally shipped
with Android 4.4 and when it broke, I was running Android 11, with the November
security patch! I'm very grateful to the FOSS Android community that made this
possible, especially the LineageOS community.</p>
<p>I've replaced my Nexus 5 by a used Pixel 3a, mostly because of the similar form
factor, relatively affordable price and the presence of a headphone jack.
Google also makes flashing a custom ROM easy, although I had more trouble with
this than I first expected.</p>
<p>The first Pixel 3a I bought on eBay was a scam: I ordered an "Open Box" phone
and it arrived all scratched<sup id="fnref:scratch"><a class="footnote-ref" href="#fn:scratch">1</a></sup> and with a broken rear camera. The
second one I got (from the Amazon Renewed program) arrived in perfect condition,
but happened to be a Verizon model. As I found out, Verizon locks the bootloader
on their phones, making it impossible to install LineageOS<sup id="fnref:bootloader"><a class="footnote-ref" href="#fn:bootloader">2</a></sup>. The
vendor was kind enough to let me return it.</p>
<p>As they say, third time's the charm. This time around, I explicitly bought a
phone on eBay listed with a unlocked bootloader. I'm very satisfied with my
purchase, but all in all, dealing with all the returns and the shipping was
exhausting.</p>
<p>Hopefully this phone will last as long as my Nexus 5!</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:scratch">
<p>There was literally a whole layer missing at the back, as if
someone had sanded the phone... <a class="footnote-backref" href="#fnref:scratch" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:bootloader">
<p>Apparently, an "Unlocked phone" means it is "SIM unlocked",
i.e. you can use it with any carrier. What I should have been looking for is
a "Factory Unlocked phone", one where the bootloader isn't locked :L <a class="footnote-backref" href="#fnref:bootloader" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Grading using the Wacom Intuos S2022-01-10T00:00:00-05:002022-01-10T00:00:00-05:00Louis-Philippe Véronneautag:veronneau.org,2022-01-10:/grading-using-the-wacom-intuos-s.html<p>I've been teaching economics for a few semesters already and, slowly but
surely, I'm starting to get the hang of it. Having to deal with teaching
remotely hasn't been easy though and I'm really hoping the winter semester will
be in-person again.</p>
<p>Although I worked way too much last semester …</p><p>I've been teaching economics for a few semesters already and, slowly but
surely, I'm starting to get the hang of it. Having to deal with teaching
remotely hasn't been easy though and I'm really hoping the winter semester will
be in-person again.</p>
<p>Although I worked way too much last semester<sup id="fnref:work"><a class="footnote-ref" href="#fn:work">1</a></sup>, I somehow managed to
transition to using a graphics tablet. I bought a Wacom Intuos S tablet (model
CTL-4100) in late August 2021 and overall, I have been very happy with it.
Wacom Canada offers a small discount for teachers and I ended up paying 115 CAD
(~90 USD) for the tablet, an overall very reasonable price.</p>
<p>Unsurprisingly, the Wacom support on Linux is very good and my tablet worked
out of the box. The only real problem I had was by default, the tablet
sometimes boots up in Android mode, making it unusable. This is easily solved
by pressing down on the pad's first and last buttons for a few seconds, until
the LED turns white.</p>
<p>The included stylus came with hard plastic nibs, but I find them too slippery.
I eventually purchased hard felt nibs, which increase the friction and makes
for a more paper-like experience. They are a little less durable, but I wrote
quite a fair bit and still haven't gone through a single one yet.</p>
<h2>Learning curve</h2>
<p>Learning how to use a graphical tablet took me at least a few weeks! When
writing on a sheet of paper, the eyes see what the hand writes directly. This
is not the case when using a graphical tablet: you are writing on a surface and
see the result on your screen, a completely different surface. This dissociation
takes a bit of practise to master, but after going through more than 300 pages
of notes, it now feels perfectly normal.</p>
<p>Here is a side-by-side comparison of my very average hand-writing<sup id="fnref:caps"><a class="footnote-ref" href="#fn:caps">2</a></sup>:</p>
<ol>
<li>on paper</li>
<li>using the tablet, the first week</li>
<li>using the tablet, after a couple of months</li>
</ol>
<p><img src="/media/blog/2022-01-10/comparison.jpg" width="70%" style="margin-left:15%" title="Comparison of my writing, on paper, using the tablet and using the tablet after a few weeks" alt="Comparison of my writing, on paper, using the tablet and using the tablet after a few weeks"></p>
<p>I still prefer the result of writing on paper, but I think this is mostly due to
me not using the pressure sensitivity feature. The support in <code>xournal</code> wasn't
great, but now that I've tried it in <code>xournalpp</code> (more on this below), I think I
will be enabling it in the future. The result on paper is also more consistent,
but I trust my skills will improve over time.</p>
<p><img src="/media/blog/2022-01-10/pressure_sensitivity.png" width="70%" style="margin-left:15%" title="Pressure sensitivity on vs off" alt="Pressure sensitivity on vs off"></p>
<h2>Use case</h2>
<p>The first use case I have for the tablet is grading papers. I've been asking my
students to submit their papers via Moodle for a few semesters already, but
until now, I was grading them using PDF comments. The experience wasn't
great<sup id="fnref:ux"><a class="footnote-ref" href="#fn:ux">3</a></sup> and was rather slow compared to grading physical copies.</p>
<p>I'm also a somewhat old-school teacher: I refuse to teach using slides. Death
by PowerPoint is real. I write on the blackboard a lot<sup id="fnref:board"><a class="footnote-ref" href="#fn:board">4</a></sup> and I find
it much easier to prepare my notes by hand than by typing them, as the end
result is closer to what I actually end up writing down on the board.</p>
<p>Writing notes by hand on sheets of paper is a chore too, especially when you
revisit the same material regularly. Being able to handwrite digital notes gives
me a lot more flexibility and it's been great.</p>
<p>So far, I have been using <code>xournal</code> to write notes and grade papers, and
although it is OK, it has a bunch of quirks I dislike. I was waiting for
<code>xournalpp</code> to be packaged in Debian, and it now is<sup id="fnref:thanks"><a class="footnote-ref" href="#fn:thanks">5</a></sup>! I'm looking
forward to using it next semester.</p>
<h2>Towards a better computer monitor</h2>
<p>I have also been feeling the age of my current computer monitor. I am currently
using an <a href="https://www.lg.com/ca_en/tvs/lg-32LE5300-led-tv">old 32" 1080p TV from LG</a> and up until now, I had been able to
deal with the drawbacks. The colors are pretty bad and 1080p for such a large
display isn't great, but I got used to it.</p>
<p>What I really noticed when I started using my graphics tablet was the input
lag. It's bad enough that there's a clear jello effect when writing and it
eventually gives me a headache. It's so bad I usually prefer to work on my
laptop, which has a nicer but noticeably smaller panel.</p>
<p>I'm currently looking to replace this aging TV<sup id="fnref:mom"><a class="footnote-ref" href="#fn:mom">6</a></sup> by something more modern.
I have been waiting out since I would like to buy something that will last me
another 10 years if possible. Sadly, 32" high refresh rate 4K monitors aren't
exactly there yet and I haven't found anything matching my criteria. I would
probably also need a new GPU, something that is not easy to come by these days.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:work">
<p>I worked at two colleges at the same time, teaching 2 different
classes (one of which I was giving for the first time...) to 6 groups in
total. I averaged more than 60h per week for sure. <a class="footnote-backref" href="#fnref:work" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:caps">
<p>Yes, I only write in small caps. Students love it, as it's much easier
to read on the blackboard. <a class="footnote-backref" href="#fnref:caps" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:ux">
<p>Although most PDF readers support displaying comments, some of my more
clueless students still had trouble seeing them and I had to play tech
support more than I wanted. <a class="footnote-backref" href="#fnref:ux" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:board">
<p>Unsurprisingly, my students also love it. One of the most common
feedback I get at the end of the semester is they hate slides too and are
very happy I'm one of the few teachers who writes on the board. <a class="footnote-backref" href="#fnref:board" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
<li id="fn:thanks">
<p>Many thanks to Barak A. Pearlmutter for maintaining this package. <a class="footnote-backref" href="#fnref:thanks" title="Jump back to footnote 5 in the text">↩</a></p>
</li>
<li id="fn:mom">
<p>It dates back from 2010, when my mom replaced our old CRT by a flat
screen. FullHD TVs were getting affordable and I wasn't sad to see our tiny
20-something inches TV go. I eventually ended up with the LG flatscreen a few
years later when I moved out in my first apartment and my mom got something
better. <a class="footnote-backref" href="#fnref:mom" title="Jump back to footnote 6 in the text">↩</a></p>
</li>
</ol>
</div>ANC is not for me2021-10-03T00:00:00-04:002021-10-03T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2021-10-03:/anc-is-not-for-me.html<p>Active noise cancellation (ANC) has been all the rage lately in the headphones
and in-ear monitors market. It seems after Apple got heavily praised for their
AirPods Pro, every somewhat serious electronics manufacturer released their
own design incorporating this technology.</p>
<p>The first headphones with ANC I remember trying on (in …</p><p>Active noise cancellation (ANC) has been all the rage lately in the headphones
and in-ear monitors market. It seems after Apple got heavily praised for their
AirPods Pro, every somewhat serious electronics manufacturer released their
own design incorporating this technology.</p>
<p>The first headphones with ANC I remember trying on (in the early 2010s) were
the Bose QuietComfort 15. Although the concept did work (they indeed cancelled
<em>some</em> sounds), they weren't amazing and did a great job of convincing me ANC
was some weird fad for people who flew often.</p>
<p><img src="/media/blog/2021-10-03/sony.jpg" width="70%" style="margin-left:15%" title="The Sony WH-1000X M3 folded in their case" alt="The Sony WH-1000X M3 folded in their case"></p>
<p>As the years passed, chip size decreased, battery capacity improved and machine
learning blossomed — truly a perfect storm for the wireless ANC headphones
market. I had mostly stayed a sceptic of this tech until recently a kind friend
offered to let me try a pair of Sony WH-1000X M3.</p>
<p>Having tested them thoroughly, I have to say I'm really tempted to buy them
from him, as they truly are fantastic headphones<sup id="fnref:not-a-review"><a class="footnote-ref" href="#fn:not-a-review">1</a></sup>. They are
<em>very</em> light, comfortable, work without a proprietary app and sound very good
with the ANC on<sup id="fnref:powered"><a class="footnote-ref" href="#fn:powered">2</a></sup> — if a little bass-heavy for my taste<sup id="fnref:eq"><a class="footnote-ref" href="#fn:eq">3</a></sup>.</p>
<p>The ANC itself is truly astounding and is leaps and bounds beyond what was
available five years ago. It still isn't perfect and doesn't cancel ALL sounds,
but transforms the low hum of the subway I find myself sitting in too often
these days into a light *<em>swoosh</em>*. When you turn the ANC on, HVAC simply
disappears. Most impressive to me is the way they completely cancel the dreaded
sound of your footsteps resonating in your headphones when you walk with them.</p>
<p><img src="/media/blog/2021-10-03/hd280pro.jpg" width="70%" style="margin-left:15%" title="My old pair of Senheiser HD 280 Pro, with aftermarket sheepskin earpads" alt="My old pair of Senheiser HD 280 Pro, with aftermarket sheepskin earpads"></p>
<p>I won't be keeping them though.</p>
<p>Whilst I really like what Sony has achieved here, I've grown to understand ANC
simply isn't for me. Some of the drawbacks of ANC somewhat bother me: the ear
pressure it creates is tolerable, but is an additional energy drain over long
periods of time and eventually gives me headaches. I've also found ANC
accentuates the motion sickness I suffer from, probably because it messes up
with some part of the inner ear balance system.</p>
<p>Most of all, I found that it didn't provide noticeable improvements over good
passive noise cancellation solutions, at least in terms of how high I have to
turn the volume up to hear music or podcasts clearly. The human brain works in
mysterious ways and it seems ANC cancelling a class of noises (low hums,
constant noises, etc.) makes other noises so much more noticeable. People
talking or bursty high pitched noises bothered me much more with ANC on than
without.</p>
<p>So for now, I'll keep using my trusty Senheiser HD 280 Pro<sup id="fnref:sheepskin"><a class="footnote-ref" href="#fn:sheepskin">4</a></sup> at work
and good in-ear monitors with Comply foam tips on the go.</p>
<div class="footnote">
<hr>
<ol>
<li id="fn:not-a-review">
<p>This blog post certainly doesn't aim to be a comprehensive
review of these headphones. See <a href="https://www.youtube.com/watch?v=MtIYdsp8n1o">Zeos'</a> review if you want something
more in-depth. <a class="footnote-backref" href="#fnref:not-a-review" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:powered">
<p>As most ANC headphones, they don't sound as good when used
passively through the 3.5mm port, but that's just a testament of how a great
job Sony did of tuning the DSP. <a class="footnote-backref" href="#fnref:powered" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
<li id="fn:eq">
<p>Easily fixed using an EQ. <a class="footnote-backref" href="#fnref:eq" title="Jump back to footnote 3 in the text">↩</a></p>
</li>
<li id="fn:sheepskin">
<p>Retrofitted with aftermarket sheepskin earpads, they provide more
than 32db of passive noise reduction. <a class="footnote-backref" href="#fnref:sheepskin" title="Jump back to footnote 4 in the text">↩</a></p>
</li>
</ol>
</div>New Winter Bicycle2021-06-30T00:00:00-04:002021-06-30T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2021-06-30:/new-winter-bicycle.html<p>Although I'm about 5 months early and we're in the middle of a terrible heat
wave where I live, I've just finished building my new winter bicycle!</p>
<p>I've been riding all year round for about 8 years now and the winters in
Montreal are harsh enough that a second winter-ready …</p><p>Although I'm about 5 months early and we're in the middle of a terrible heat
wave where I live, I've just finished building my new winter bicycle!</p>
<p>I've been riding all year round for about 8 years now and the winters in
Montreal are harsh enough that a second winter-ready bicycle is required to
have a fun and safe cold season.</p>
<p>I'm saying "new bicycle" because a few months ago I totaled the frame of my
previous winter bike. As you can see in the picture below (please disregard the
salt crust), I broke the seat tube at the lug.</p>
<p>I didn't notice it at first and while riding I kept hearing a "bang bang" sound
coming from the frame when going over bumps. To my horror, I eventually
realised the sound was coming from the seat tube hitting the bottom bracket
shell!</p>
<p><img src="/media/blog/2021-06-30/old_winter_bike.jpg" width="70%" style="margin-left:15%" title="A large crack my old bike frame" alt="A large crack in my old bike frame"></p>
<p>I'm sad to see this <a href="https://fr.wikipedia.org/wiki/Cycles_Lejeune">Lejeune French frame</a> go, but it was probably
built in the 70's or the early 80's: it had a good life. Another great example
of how a high quality steel frame can last a lifetime.</p>
<p>Sparing no expense, I decided to replace it by a brand new <a href="https://surlybikes.com/bikes/cross_check">Surly
Cross-Check</a> frameset. Surly is known for making great bike frames
and the Cross-Check is a very versatile model. I'll finally be able to fit my
<a href="https://www.schwalbetires.com/marathon_winter_plus">Schwalbe Marathon Winter Plus tires</a> at the front <strong>and</strong> the back
<em>with full length mud guards</em>!!! Hard to ask for more.</p>
<p><img src="/media/blog/2021-06-30/new_winter_bike.jpg" width="70%" style="margin-left:15%" title="A picture of my new winter bike with CX Pro tires" alt="A picture of my new winter bike with CX Pro tires"></p>
<p>Summer has just started and I'm already looking forward to winter :)</p>New Desktop Computer2021-06-10T00:00:00-04:002021-06-10T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2021-06-10:/new-desktop-computer.html<p>I built my last desktop computer what seems like ages ago. In 2011, I was in a
very different place, both financially and as a person. At the time, I was
earning minimum wage at my school's café to pay rent. Since the café was owned
by the school cooperative …</p><p>I built my last desktop computer what seems like ages ago. In 2011, I was in a
very different place, both financially and as a person. At the time, I was
earning minimum wage at my school's café to pay rent. Since the café was owned
by the school cooperative, I had an employee discount on computer parts. This
gave me a chance to build my first computer from spare parts at a reasonable
price.</p>
<p>After 10 years of service<sup id="fnref:1"><a class="footnote-ref" href="#fn:1">1</a></sup>, the time has come to upgrade. Although this
machine was still more than capable for day to day tasks like browsing the web
or playing casual video games, it started to show its limits when time came to
do more serious work.</p>
<p>Old computer specs:</p>
<div class="highlight"><pre><span></span><code><span class="n">CPU</span><span class="o">:</span><span class="w"> </span><span class="n">AMD</span><span class="w"> </span><span class="n">FX</span><span class="o">-</span><span class="mi">8530</span>
<span class="n">Memory</span><span class="o">:</span><span class="w"> </span><span class="mi">8</span><span class="n">GB</span><span class="w"> </span><span class="n">DDR3</span><span class="w"> </span><span class="mi">1600</span><span class="n">Mhz</span>
<span class="n">Motherboard</span><span class="o">:</span><span class="w"> </span><span class="n">ASUS</span><span class="w"> </span><span class="n">TUF</span><span class="w"> </span><span class="n">SABERTOOTH</span><span class="w"> </span><span class="mi">990</span><span class="n">FX</span><span class="w"> </span><span class="n">R2</span><span class="o">.</span><span class="mi">0</span>
<span class="n">Storage</span><span class="o">:</span><span class="w"> </span><span class="n">Samsung</span><span class="w"> </span><span class="mi">850</span><span class="w"> </span><span class="n">EVO</span><span class="w"> </span><span class="mi">500</span><span class="n">GB</span><span class="w"> </span><span class="n">SATA</span>
</code></pre></div>
<p>I first started considering an upgrade in September 2020: David Bremner was
kindly fixing <a href="https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=969430">a bug</a> in <code>ledger</code> that kept me from balancing my books
and since it seemed like a class of bug that would've been easily caught by an
autopkgtest, I decided to add one.</p>
<p>After adding the necessary snippets to run the upstream testsuite (an easy task
I've done multiple times now), I ran <code>sbuild</code> and ... my computer froze and
crashed. Somehow, what I thought was a simple Python package was maxing all the
cores on my CPU and using all of the 8GB of memory I had available.<sup id="fnref:2"><a class="footnote-ref" href="#fn:2">2</a></sup></p>
<p>A few month later, I worked on <code>jruby</code> and the builds took 20 to 30 minutes —
long enough to completely disrupt my flow. The same thing happened when I
wanted to work on <code>lintian</code>: the testsuite would take more than 15 minutes to
run, making quick iterations impossible.</p>
<p>Sadly, the pandemic completely wrecked the computer hardware market and prices
here in Canada have only recently started to go down again. As a result, I had
to wait more time than I would've liked not to pay scalper prices.</p>
<p>New computer specs:</p>
<div class="highlight"><pre><span></span><code><span class="n">CPU</span><span class="o">:</span><span class="w"> </span><span class="n">AMD</span><span class="w"> </span><span class="n">Ryzen</span><span class="w"> </span><span class="mi">5900</span><span class="n">X</span>
<span class="n">Memory</span><span class="o">:</span><span class="w"> </span><span class="mi">64</span><span class="n">GB</span><span class="w"> </span><span class="n">DDR4</span><span class="w"> </span><span class="mi">3200</span><span class="n">MHz</span>
<span class="n">Motherboard</span><span class="o">:</span><span class="w"> </span><span class="n">MSI</span><span class="w"> </span><span class="n">MPG</span><span class="w"> </span><span class="n">B550</span><span class="w"> </span><span class="n">Gaming</span><span class="w"> </span><span class="n">Plus</span>
<span class="n">Storage</span><span class="o">:</span><span class="w"> </span><span class="n">Corsair</span><span class="w"> </span><span class="n">MP600</span><span class="w"> </span><span class="mi">500</span><span class="w"> </span><span class="n">GB</span><span class="w"> </span><span class="n">Gen4</span><span class="w"> </span><span class="n">NVME</span>
</code></pre></div>
<p>The difference between the two machines is pretty staggering: I've gone from a
CPU with 2 cores and 8 threads, to one with 12 cores and 24 threads. Not only
that, but single-threaded performance has also vastly increased in those 10
years.</p>
<p>A good example would be building <code>grammalecte</code>, a package <a href="https://salsa.debian.org/python-team/packages/grammalecte">I've recently
sponsored</a>. I feel it's a good benchmark, since the build relies
on single-threaded performance for the normal Python operations, while being
threaded when it compiles the dictionaries.</p>
<p>On the old computer:</p>
<div class="highlight"><pre><span></span><code>Build needed 00:10:07, 273040k disk space
</code></pre></div>
<p>And as you can see, on the new computer the build time has been significantly
reduced:</p>
<div class="highlight"><pre><span></span><code>Build needed 00:03:18, 273040k disk space
</code></pre></div>
<p>Same goes for things like the <code>lintian</code> testsuite. Since it's a very
multi-threaded workload, it now takes less than 2 minutes to run; a 750%
improvement.</p>
<p>All this to say I'm happy with my purchase. And — lo and behold — I can now
build <code>ledger</code> without a hitch, even though it maxes my 24 threads and uses 28GB
of RAM. Who would've thought...</p>
<p><img src="/media/blog/2021-06-10/htop_ledger.png" title="Screen capture of htop showing how much resources ledger takes to build" alt="Screen capture of htop showing how much resources ledger takes to build" height="80%" width="80%" style="margin-left: 10%;"></p>
<div class="footnote">
<hr>
<ol>
<li id="fn:1">
<p>I managed to fry that PC's motherboard in 2016 and later replaced it with
a brand new one. I also upgraded the storage along the way, from a very cheap
cacheless 120GB SSD to a larger Samsung 850 EVO SATA drive. <a class="footnote-backref" href="#fnref:1" title="Jump back to footnote 1 in the text">↩</a></p>
</li>
<li id="fn:2">
<p>As it turns out, <code>ledger</code> is mostly written in C++ :) <a class="footnote-backref" href="#fnref:2" title="Jump back to footnote 2 in the text">↩</a></p>
</li>
</ol>
</div>Alpine MusicSafe Classic Hearing Protection Review2019-10-12T00:00:00-04:002019-10-12T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2019-10-12:/alpine-musicsafe-classic-hearing-protection-review.html<p>Yesterday, I went to a punk rock show and had tons of fun. One of the bands
playing (<a href="https://jeunesseapatride.bandcamp.com/">Jeunesse Apatride</a>) hadn't played in 5 years and the crowd
was wild. The other bands playing were also great. Here's a few links if you
enjoy Oi! and Ska:</p>
<ul>
<li><a href="https://francbatards.bandcamp.com/releases">Francbâtards</a></li>
<li><a href="https://bauxite.bandcamp.com/">Bauxite</a></li>
<li><a href="https://unionthugs.bandcamp.com/">Union …</a></li></ul><p>Yesterday, I went to a punk rock show and had tons of fun. One of the bands
playing (<a href="https://jeunesseapatride.bandcamp.com/">Jeunesse Apatride</a>) hadn't played in 5 years and the crowd
was wild. The other bands playing were also great. Here's a few links if you
enjoy Oi! and Ska:</p>
<ul>
<li><a href="https://francbatards.bandcamp.com/releases">Francbâtards</a></li>
<li><a href="https://bauxite.bandcamp.com/">Bauxite</a></li>
<li><a href="https://unionthugs.bandcamp.com/">Union Thugs</a></li>
</ul>
<p>Sadly, those kind of concerts are always waaaaayyyyy too loud. I mostly go to
small venue concerts and for some reason the sound technicians think it's a
good idea to make everyone's ears bleed. You really don't need to amplify the
drums when the whole concert venue is 50m²...</p>
<p>So I bough hearing protection. It was the first time I wore earplugs at a
concert and it was great! I can't really compare the model I got (Alpine
MusicSafe Classic earplugs) to other brands since it's the only one I tried out,
but:</p>
<ul>
<li>
<p>They were very comfortable. I wore them for about 5 hours and didn't feel any
discomfort.</p>
</li>
<li>
<p>They came with two sets of plastic tips you insert in the silicone earbuds. I
tried the -17db ones but I decided to go with the -18db inserts as it was
still freaking loud.</p>
</li>
<li>
<p>They fitted very well in my ears even tough I was in the roughest mosh pit
I've ever experienced (and I've seen quite a few). I was sweating profusely
from all the heavy moshing and never once I feared loosing them.</p>
</li>
<li>
<p>My ears weren't ringing when I came back home so I guess they work.</p>
</li>
<li>
<p>The earplugs didn't distort sound, only reduce the volume.</p>
</li>
<li>
<p>They came with a handy aluminium carrying case that's really durable. You can
put it on your keychain and carry them around safely.</p>
</li>
<li>
<p>They only cost me ~25 CAD with taxes.</p>
</li>
</ul>
<p>The only thing I disliked was that I found it pretty much impossible to sing
while wearing them. as I couldn't really hear myself. With a bit of practice, I
was able to sing true but it wasn't great :(</p>
<p>All in all, I'm really happy with my purchase and I don't think I'll ever go to
another concert without earplugs.</p>Am I Fomu ?2019-05-20T00:00:00-04:002019-05-20T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2019-05-20:/am-i-fomu.html<p>A few months ago at FOSDEM 2019 I got my hands on a pre-production version of
the <a href="https://www.crowdsupply.com/sutajio-kosagi/fomu">Fomu</a>, a tiny open-hardware FPGA board that fits in your USB port.
Building on the smash hit of the <a href="/i-am-tomu.html">Tomu</a>, the Fomu uses an ICE40UP5K FPGA
instead of an ARM core.</p>
<p>I've never …</p><p>A few months ago at FOSDEM 2019 I got my hands on a pre-production version of
the <a href="https://www.crowdsupply.com/sutajio-kosagi/fomu">Fomu</a>, a tiny open-hardware FPGA board that fits in your USB port.
Building on the smash hit of the <a href="/i-am-tomu.html">Tomu</a>, the Fomu uses an ICE40UP5K FPGA
instead of an ARM core.</p>
<p>I've never really been into hardware hacking, and much like hacking on the
Linux kernel, messing with wires and soldering PCB boards always intimidated
me. From my perspective, playing around with the Fomu looked like a nice way
to test the water without drowning in it.</p>
<p>Since the bootloader wasn't written at the time, when I first got my Fomu hacker
board there was no easy way to test if the board was working. Lucky for me,
Giovanni Mascellani was around and flashed a test program on it using his
Raspberry Pi and a bunch of hardware probes. I was really impressed by the feat,
but it also seemed easy enough that I could do it.</p>
<p><img src="/media/blog/2019-05-20/jig.jpg" title="My flashing jig" alt="My flashing jig" height="30%" width="30%" style="float:left"></p>
<p>Back at home, I ordered a Raspberry Pi, bought some IC hooks and borrowed a
soldering iron from my neighbour. It had been a while since I had soldered
anything! Last time I did I was 14 years old and trying to save a buck making
my own fencing mask and body cords...</p>
<p>My goal was to test <a href="https://github.com/im-tomu/foboot">foboot</a>, the new DFU-compatible bootloader recently
written by Sean Cross (xobs) to make flashing programs on the board more
convenient. Replicating <a href="https://github.com/im-tomu/fomu-hardware/tree/master/hacker#programming-with-probes-the-poor-mans-version">Giovanni's setup</a>, I flashed the <a href="https://github.com/im-tomu/fomu-pi-gen">Fomu
Raspbian image</a> on my Pi and compiled the bootloader.</p>
<p>It took me a good 15 minutes to connect the IC hooks to the board, but I was
successfully able to flash foboot on the Fomu! The board now greets me with:</p>
<div class="highlight"><pre><span></span><code><span class="p">[</span><span class="w"> </span><span class="mf">9751.556784</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">new</span><span class="w"> </span><span class="n">full</span><span class="o">-</span><span class="n">speed</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">number</span><span class="w"> </span><span class="mi">31</span><span class="w"> </span><span class="n">using</span><span class="w"> </span><span class="n">xhci_hcd</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841038</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">New</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">found</span><span class="p">,</span><span class="w"> </span><span class="n">idVendor</span><span class="o">=</span><span class="mi">1209</span><span class="p">,</span><span class="w"> </span><span class="n">idProduct</span><span class="o">=</span><span class="mi">70</span><span class="n">b1</span><span class="p">,</span><span class="w"> </span><span class="n">bcdDevice</span><span class="o">=</span><span class="w"> </span><span class="mf">1.01</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841043</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">New</span><span class="w"> </span><span class="n">USB</span><span class="w"> </span><span class="n">device</span><span class="w"> </span><span class="n">strings</span><span class="p">:</span><span class="w"> </span><span class="n">Mfr</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span><span class="w"> </span><span class="n">Product</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span><span class="w"> </span><span class="n">SerialNumber</span><span class="o">=</span><span class="mi">0</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841046</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">Product</span><span class="p">:</span><span class="w"> </span><span class="n">Fomu</span><span class="w"> </span><span class="n">Bootloader</span><span class="w"> </span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="w"> </span><span class="n">v1</span><span class="o">.</span><span class="mi">4</span><span class="o">-</span><span class="mi">2</span><span class="o">-</span><span class="n">g1913767</span>
<span class="p">[</span><span class="w"> </span><span class="mf">9751.841049</span><span class="p">]</span><span class="w"> </span><span class="n">usb</span><span class="w"> </span><span class="mi">8</span><span class="o">-</span><span class="mf">2.4</span><span class="p">:</span><span class="w"> </span><span class="n">Manufacturer</span><span class="p">:</span><span class="w"> </span><span class="n">Kosagi</span>
</code></pre></div>
<p>I don't have a use case for the Fomu yet, but I am sure by the time the
production version ships out, people will have written interesting programs I
can flash on it. In the meantime, it'll blink slowly in my laptop's USB port.</p>Razer Deathadder Elite Review2018-12-11T00:00:00-05:002018-12-11T00:00:00-05:00Louis-Philippe Véronneautag:veronneau.org,2018-12-11:/razer-deathadder-elite-review.html<p>After more than 10 years of use and abuse, my old Microsoft IntelliMouse died a
few months ago. The right click had been troublesome for a while, but it became
so broken I couldn't reliably drag and drop anymore.</p>
<p>It's the first mouse I kill and I don't know if …</p><p>After more than 10 years of use and abuse, my old Microsoft IntelliMouse died a
few months ago. The right click had been troublesome for a while, but it became
so broken I couldn't reliably drag and drop anymore.</p>
<p>It's the first mouse I kill and I don't know if I have to feel proud or troubled
by that fact. I guess I'm getting old enough that saying I've used the same
mouse for 10 years strait sounds reasonable?</p>
<p>I considered getting a new IntelliMouse, as Microsoft is reviving the brand, but
at the price the 3.0 model was selling in August (~70 CAD), better options were
available.</p>
<p><img src="/media/blog/2018-12-11/mouse.jpg" title="Picture of the mouse" alt="Picture of the mouse" height="30%" width="30%" style="float:left"></p>
<p>After shopping online for a while, I ended up buying the Razer Dethadder Elite.
Despite the very <em>gamer oriented</em> branding, I decided to get this one for its
size and its build quality. I have very large hands and although I'm more of a
"Tip Grip" type of person, I occasionally enjoy a "Palm Grip".</p>
<p>I have been using the mouse for around 3 months now and the only thing I really
dislike is its default DPI and RGB settings. To me the DPI buttons were
basically useless since anything beyond the lowest level was set too high. </p>
<p>The mouse also has two separate RGB zones for the scroll wheel and the Razer
logo and I couldn't care less. As they are annoyingly set to a rainbow-colored
shuffle by default, I turned them off.</p>
<p>Although Razer's program to modify mouse settings like DPI levels and RGB colors
doesn't support Linux, the mouse is supported by <a href="https://openrazer.github.io/">OpenRazer</a>. Settings are
stored in the mouse directly, so you can setup OpenRazer in a throwaway VM, get
the mouse the way you want and never think about that ever again.</p>
<p>Let's hope this one lasts another 10 years!</p>I am Tomu!2018-08-08T00:00:00-04:002018-08-08T00:00:00-04:00Louis-Philippe Véronneautag:veronneau.org,2018-08-08:/i-am-tomu.html<p>While I was away for DebConf18, I received the <a href="http://tomu.im/">Tomu boards</a> I ordered on
Crowdsupply a while ago while the project was still going through crowdfunding.</p>
<p><img src="/media/blog/2018-08-08/tomu.jpg" title="A Tomu board next to a US cent for size comparison" alt="A Tomu board next to a US cent for size comparison" height="30%" width="30%" style="float:left"></p>
<p>For those of you who don't know what the Tomu is, it's a tiny ARM microprocessor
board which fits in your USB port. There …</p><p>While I was away for DebConf18, I received the <a href="http://tomu.im/">Tomu boards</a> I ordered on
Crowdsupply a while ago while the project was still going through crowdfunding.</p>
<p><img src="/media/blog/2018-08-08/tomu.jpg" title="A Tomu board next to a US cent for size comparison" alt="A Tomu board next to a US cent for size comparison" height="30%" width="30%" style="float:left"></p>
<p>For those of you who don't know what the Tomu is, it's a tiny ARM microprocessor
board which fits in your USB port. There are a bunch of neat stuff you can do
with it, but I use it as a <a href="https://en.wikipedia.org/wiki/Universal_2nd_Factor">U2F token</a>.</p>
<p>The design is less sleek than a <a href="https://www.yubico.com/product/yubikey-4-series/#yubikey-4-nano">YubiKey nano</a> and it can't be used as
a GPG smartcard (<a href="https://github.com/im-tomu/tomu-samples/issues/4">yet!</a>), but it runs free software on open hardware
and everything can be built using a free software toolchain.</p>
<p>It also cost me a fraction of the price of a Yubico device (14 CAD with shipping
vs 70+ CAD for the YubiKey nano) so I could literally keep 1 for me and give
away 4 Tomus to my friends and family for the price of a YubiKey nano.</p>
<p>But yeah, the deal breaker really is the openness of the device. I don't see how
I could trust a proprietary device that <a href="https://www.yubico.com/keycheck">tells me it's very secure</a> when I
can't see what it's doing with my U2F private key...</p>
<h2>Flashing the board</h2>
<p>The Tomu can be used as a U2F token by flashing <a href="https://github.com/im-tomu/chopstx/tree/efm32/u2f">chopstx</a> on it, the
same software used in the <a href="https://www.fsij.org/category/gnuk.html">gnuk project</a> lead by awesome Niibe-san.</p>
<p>Although I had a gnuk token a while ago, I ended up giving it away since I found
the flashing process painful and I didn't really have a use case for a GPG
smartcard at the time.</p>
<p><img src="/media/blog/2018-08-08/toboot.gif" title="A Tomu board in the bootloader" alt="The Tomu board in the bootloader" height="30%" width="30%" style="float:right"></p>
<p>On the contrary, flashing the Tomu was a walk in the park. The Tomu's bootloader
supports <code>dfu-util</code> so it was only a matter of installing it on my computer,
building the software and pushing it on the board.</p>
<p>I did encounter a few small problems during the process, but I sent
<a href="https://github.com/im-tomu/chopstx/pull/6">a series</a> <a href="https://github.com/im-tomu/im-tomu.github.io/pull/13">of patches</a> <a href="https://github.com/Yubico/libu2f-host/pull/104">upstream</a> to try to fix that
and make the whole experience smoother.</p>
<p>Here's a few things you should look out for while flashing a Tomu for to be used
as a U2F token.</p>
<ul>
<li>Make sure you are running the latest version of the bootloader. You can find
it <a href="https://github.com/im-tomu/tomu-bootloader#installing-or-upgrading-toboot">here</a>.</li>
<li>Your U2F private key will be erased if you update the firmware. Be sure to
<a href="https://github.com/im-tomu/chopstx/tree/efm32/u2f#injecting-private-key">generate it on your host computer</a> and keep an encrypted copy of it
somewhere.</li>
<li>For now, the readout protection is not enabled by default. Be sure to use
<code>make ENFORCE_DEBUG_LOCK=1</code> when building the <code>chopstx</code> binary.</li>
<li>Firefox doesn't support U2F out of the box on Debian. You have to enable a
few options in <code>about:config</code> and use a plugin for it to work properly.</li>
<li>You need to <a href="https://github.com/im-tomu/chopstx/tree/efm32/u2f#update-udev-rules">add a new udev rule</a> for the Tomu to be seen as a U2F
device by your system.</li>
</ul>