HTTP/1.1 200 OK
Date: Sat, 27 Dec 2025 07:14:23 GMT
Server: Apache/2.4.66 (Debian)
Upgrade: h2,h2c
Connection: Upgrade
Last-Modified: Sun, 24 Nov 2024 13:04:01 GMT
ETag: "71e6-627a83ffa47d5-gzip"
Accept-Ranges: bytes
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 7895
Content-Type: application/xml
Edward Betts
https://edwardbetts.com/
enSun, 24 Nov 2024 13:04:01 -0000Sun, 24 Nov 2024 13:04:01 -00001440MkDocs RSS plugin - v1.16.0A mini adventure at MiniDebConf ToulouseConferenceDebianGastronomyMiniDebConfToulouseTravel<h1 id="a-mini-adventure-at-minidebconf-toulouse">A mini adventure at MiniDebConf Toulouse</h1>
<p>Last week, I ventured to Toulouse, for a delightful mix of coding, conversation, and crepes at <a href="https://wiki.debian.org/DebianEvents/fr/2024/Toulouse">MiniDebConf Toulouse</a>, part of the broader <a href="https://capitoledulibre.org/">Capitole du Libre conference</a>, akin to the more well-known <a href="https://en.wikipedia.org/wiki/FOSDEM">FOSDEM</a> but with a distinctly French flair.</p>
<p>This was my fourth and final MiniDebConf of the year.</p>
<p><img alt="no jet bridge" src="../../img/MiniDebConf_Toulouse_2024/no_jet_bridge.jpg" /></p>
<p>My trek to Toulouse was seamless. I hopped on a bus from my home in Bristol to the airport, then took a short flight. I luxuriated in seat 1A, making me the first to disembark—a mere ten minutes later, I was already on the bus heading to my hotel.</p>
<h2 id="exploring-the-pink-city">Exploring the Pink City</h2>
<p><img alt="pink" src="../../img/MiniDebConf_Toulouse_2024/pink.jpg" /></p>
<p><img alt="img 29" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241118_073600454.jpg" /></p>
<p><img alt="duck shop" src="../../img/MiniDebConf_Toulouse_2024/la_canarderie.jpg" /></p>
<p>Once settled, I wasted no time exploring the charms of Toulouse. Just a short stroll from my hotel, I found myself beside a tranquil canal, its waters mirroring the golden hues of the trees lining its banks. Autumn in Toulouse painted the city in warm oranges and reds, creating a picturesque backdrop that was a joy to wander through. Every corner of the street revealed more of the city's rich cultural tapestry and striking architecture. Known affectionately as 'La Ville Rose' (The Pink City) for its unique terracotta brickwork, Toulouse captivated me with its blend of historical allure and vibrant modern life.</p>
<h2 id="minidebcamp">MiniDebCamp</h2>
<p><img alt="FabLab sign" src="../../img/MiniDebConf_Toulouse_2024/fablab_sign.jpg" /></p>
<p><img alt="laptop setup" src="../../img/MiniDebConf_Toulouse_2024/laptop_setup.jpg" /></p>
<p>Prior to the main event, the MiniDebCamp provided two days of hacking at <a href="https://artilect.fr/">Artilect FabLab</a>—a space as creative as it was welcoming. It was a pleasure to reconnect with familiar faces and forge new friendships.</p>
<h2 id="culinary-delights">Culinary delights</h2>
<p><img alt="lunch 1" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241114_120950197.jpg" /></p>
<p><img alt="img 14" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241115_121046396.jpg" /></p>
<p><img alt="img 15" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241115_121048745.jpg" /></p>
<p><img alt="img 16" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241115_121051060.jpg" /></p>
<p><img alt="img 17" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241115_121053183.jpg" /></p>
<p><img alt="cakes" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241114_120943389.jpg" /></p>
<p>The hospitality was exceptional. Our lunches boasted a delicious array of quiches, an enticing charcuterie board, and a superb selection of cheeses, all perfectly complemented by exquisite petite fours. Each item was not only a feast for the eyes but also a delight for the palate.</p>
<h2 id="wine-and-cheese">Wine and cheese</h2>
<p><img alt="wine and cheese 1" src="../../img/MiniDebConf_Toulouse_2024/wine_and_cheese_1.jpg" /></p>
<p><img alt="wine and cheese 2" src="../../img/MiniDebConf_Toulouse_2024/wine_and_cheese_2.jpg" /></p>
<p>Leftovers from these gourmet feasts fuelled our impromptu cheese and wine party on Thursday evening—a highlight where informal chats blended seamlessly with serious software discussions.</p>
<h2 id="the-river-at-night">The river at night</h2>
<p><img alt="night river 1" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241113_181805670.jpg" /></p>
<p><img alt="night river 2" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241114_195254165.jpg" /></p>
<p><img alt="night river 3" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241114_195304174.jpg" /></p>
<p><img alt="night river 4" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241114_195934574.jpg" /></p>
<p>The enchantment of Toulouse doesn't dim with the setting sun; instead, it transforms. My evening strolls took me along the banks of the Garonne, under a sky just turning from twilight to velvet blue. The river, a dark mirror, perfectly reflected the illuminated grandeur of the city's architecture. Notably, the dome of the <a href="https://en.wikipedia.org/wiki/Hôpital_de_La_Grave">Hôpital de La Grave</a> stood out, bathed in a warm glow against the night sky. This architectural gem, coupled with the soft lights of the bridge and the serene river, created a breathtaking scene that was both tranquil and awe-inspiring.</p>
<h2 id="capitole-du-libre">Capitole du Libre</h2>
<p><img alt="making crepes" src="../../img/MiniDebConf_Toulouse_2024/making_crepes.jpg" /></p>
<p>The MiniDebConf itself, part of the larger Capitole du Libre event, was a fantastic immersion into the world of free software. Unlike the ticket-free FOSDEM, this conference required QR codes for entry and even had bag searches, adding an unusual layer of security for a software conference.</p>
<p>Highlights included the crepe-making by the organisers, reminiscent of street food scenes from larger festivals. The availability of crepes for MiniDebConf attendees and the presence of food trucks added a festive air, albeit with the inevitable long queues familiar to any festival-goer.</p>
<h2 id="velotoulouse">vélôToulouse</h2>
<p><img alt="bike" src="../../img/MiniDebConf_Toulouse_2024/bike.jpg" /></p>
<p><img alt="cyclocity" src="../../img/MiniDebConf_Toulouse_2024/cyclocity.jpg" /></p>
<p>The city's <a href="https://velotoulouse.tisseo.fr/">bike rental system</a> was a boon—easy to use with handy bike baskets perfect for casual city touring. I chose pedal power over electric, finding it a pleasant way to navigate the streets and absorb the city's vibrant atmosphere.</p>
<h2 id="markets">Markets</h2>
<p><img alt="market" src="../../img/MiniDebConf_Toulouse_2024/market.jpg" /></p>
<p><img alt="flatbreads" src="../../img/MiniDebConf_Toulouse_2024/flatbreads.jpg" /></p>
<p>Toulouse's markets were a delightful discovery. From a spontaneous visit to a market near my hotel upon arrival, to cycling past bustling marketplaces, each day presented new local flavours and crafts to explore.</p>
<p>The <a href="https://en.wikipedia.org/wiki/Za'atar">Za'atar flatbread</a> from a Syrian stall was a particularly memorable lunch pick.</p>
<h2 id="la-brasserie-les-arcades">La brasserie Les Arcades</h2>
<p><img alt="img 25" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241117_154629340.jpg" /></p>
<p><img alt="img 26" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241117_161745843.jpg" /></p>
<p><img alt="img 27" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241117_190824847.jpg" /></p>
<p>Our conference wrapped up with a spontaneous gathering at La Brasserie Les Arcades in Place du Capitole. Finding a café that could accommodate 30 of us on a Sunday evening without a booking felt like striking gold. What began with coffee and ice cream smoothly transitioned into dinner, where I enjoyed a delicious braised duck leg with green peppercorn sauce. This meal rounded off the trip with lively conversations and shared experiences.</p>
<h2 id="the-journey-back-home">The journey back home</h2>
<p><img alt="img 30" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241118_074432773.jpg" /></p>
<p><img alt="img 31" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241118_093612068.jpg" /></p>
<p><img alt="img 32" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241118_100249404.jpg" /></p>
<p><img alt="img 33" src="../../img/MiniDebConf_Toulouse_2024/PXL_20241118_105457861.jpg" /></p>
<p>Returning from Toulouse, I found myself once again in seat 1A, offering the advantage of being the first off the plane, both on departure and arrival. My flight touched down in Bristol ahead of schedule, and within ten minutes, I was on the A1 bus, making my way back into the heart of Bristol.</p>
<h2 id="anticipating-debconf-25-in-brittany">Anticipating DebConf 25 in Brittany</h2>
<p>My trip to Toulouse for MiniDebConf was yet another fulfilling experience; the city was delightful, and the talks were insightful. While I frequently travel, these journeys are more about continuous learning and networking than escape. The food in Toulouse was particularly impressive, a highlight I've come to expect and relish on my trips to France. Looking ahead, I'm eagerly anticipating <a href="https://debconf25.debconf.org/">DebConf in Brest next year</a>, especially the opportunity to indulge once more in the excellent French cuisine and beverages.</p>
https://edwardbetts.com/blog/a-mini-adventure-at-minidebconf-toulouse/
Sun, 24 Nov 2024 12:42:01 +0000Edward Bettshttps://edwardbetts.com/blog/a-mini-adventure-at-minidebconf-toulouse/Fish shell now has underscore as a number separator (my feature request)feature-requestfish<p>In November 2021 I filed a feature request for the fish shell to <a href="https://github.com/fish-shell/fish-shell/issues/8496">add underscore as a thousand separator in
numbers</a>. My feature request has been implemented and is available
in <a href="https://fishshell.com/docs/current/relnotes.html#fish-3-5-0-released-june-16-2022">fish 3.5.0</a>, released 16 June 2022.</p>
<p>The fish shell supports mathematical operations using the <code>math</code> command.</p>
<div style="background: black; padding: 5px; width:800px; margin: auto" class="mb-3">
<pre style="color: white">
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~</font>> <font color="#A1B56C">math</font> <font color="#D8D8D8">2_000</font> <font color="#D8D8D8">+</font> <font color="#D8D8D8">22</font>
2022
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~</font>>
</pre>
</div>
<p>The underscore can be used as a thousand separator, but there are other uses for a number separator. Here's a list taken
from a <a href="https://v8.dev/features/numeric-separators">post by Mathias Bynens</a> about the number separator in JavaScript:</p>
<div style="padding: 5px; width:800px; margin: auto" class="mb-3">
<pre>
<font color="#0000FF"><i>// A decimal integer literal with its digits grouped per thousand:</i></font>
1_000_000_000_000
<font color="#0000FF"><i>// A decimal literal with its digits grouped per thousand:</i></font>
1_000_000.220_720
<font color="#0000FF"><i>// A binary integer literal with its bits grouped per octet:</i></font>
0b01010110_00111000
<font color="#0000FF"><i>// A binary integer literal with its bits grouped per nibble:</i></font>
0b0101_0110_0011_1000
<font color="#0000FF"><i>// A hexadecimal integer literal with its digits grouped by byte:</i></font>
0x40_76_38_6A_73
<font color="#0000FF"><i>// A BigInt literal with its digits grouped per thousand:</i></font>
4_642_473_943_484_686_707n
</pre>
</div>
<p>Programming languages are gradually adding a number separator to their syntax, I think Perl was the first. Most are
languages use underscore, but C++ 14 uses an apostrophe for the number separator.</p>
https://edwardbetts.com/blog/fish-shell-underscore-number-separator/
Fri, 07 Oct 2022 13:05:45 +0100Edward Bettshttps://edwardbetts.com/blog/fish-shell-underscore-number-separator/Find link needs a rewrite, the visual editor broke ittoolswikipedia<p>Find link is a tool that I wrote for adding links between articles in Wikipedia. Given an article title, find link will find other articles that include the entered article title but no link to the article. There is the option to edit the found articles and add the missing link.</p>
<p>For example, you might want to <a href="https://edwardbetts.com/find_link/Gig_economy">find missing links to the gig economy article</a>.</p>
<p><img alt="gig economy" src="../../img/find-link-needs-a-rewrite/find_link_gig_economy.png" /></p>
<p>I originally wrote the tool in 2008 when the <a href="https://en.wikipedia.org/wiki/MediaWiki">MediaWiki software</a> didn't have a rich-text editor. Wikipedia articles were edited by writing wiki markup in <a href="https://www.mediawiki.org/wiki/Help:Formatting">MediaWiki syntax</a>. Since then MediaWiki has evolved and now has rich-text editing via the <a href="https://www.mediawiki.org/wiki/VisualEditor">visual editor</a>. Users don't need to know how to write wiki markup to modify an article. </p>
<p>Within MediaWiki there is a user preference to disable the visual editor and stick with editing via the original wiki markup.</p>
<p>Find link edits articles by taking the article text, adding the missing link, and sending the user to the changes view of the modified article on Wikipedia, if they're happy with the change they hit save. This only works with the original editor, it doesn't work with the visual editor.</p>
<p><img alt="temporary work edit preview" src="../../img/find-link-needs-a-rewrite/find_link_temporary_work_edit_preview.png" /></p>
<p>English Wikipedia has had the visual editor enabled by default since 2016. For somebody to use find link they need to disable the visual editor in their Wikipedia preferences first.</p>
<p>Fixing this bug means quite a significant change to how the tool works.</p>
<p>My plan is to rewrite find link to save edits directly without needing to send the user to Wikipedia article edit change view page to make the edits. Users will authenticate with their Wikipedia account via <a href="https://www.mediawiki.org/wiki/Help:OAuth">OAuth</a> and give permission for find link to edit articles on their behalf.</p>
<p>Some of my other tools use OAuth for editing OpenStreetMap and Wikidata, so I'm confident about using it to edit Wikipedia.</p>
<p>The <a href="https://github.com/EdwardBetts/find_link">source code for find link</a> is on GitHub.</p>
<p>I'll post updates here as I make progress on the rewrite.</p>
https://edwardbetts.com/blog/find-link-needs-a-rewrite/
Wed, 15 Jun 2022 23:22:19 +0100Edward Bettshttps://edwardbetts.com/blog/find-link-needs-a-rewrite/Fixing spelling in GitHub repos using codespellcodespellgithub<p>Codespell is a spell checker specifically designed for finding misspellings in source code.</p>
<p>I've been using it to <a href="https://github.com/pulls?q=author%3AEdwardBetts+spelling+OR+typo">correct spelling mistakes in GitHub repos</a> sine 2016.</p>
<p>Most spell checkers use a list of valid words and highlighting any word in a document that is not in the word list. This method doesn't work for source code because code contains abbreviations and words joined together without spaces, a spell checker will generate too many false positives.</p>
<p>Codespell uses a different approach, instead of a list of valid words it has a dictionary of common misspellings.</p>
<p>Currently the codespell dictionary includes 34,466 known misspellings. I've <a href="https://github.com/codespell-project/codespell/pulls?q=author%3AEdwardBetts">contributed 300
misspellings</a> to the dictionary.</p>
<p>Whenever I find an interesting open source project I run codespell to check for spelling mistakes. Most projects have spelling mistakes and I can send a pull request to fix them.</p>
<p>In 2019 <a href="https://blogs.windows.com/windowsdeveloper/2019/03/06/announcing-the-open-sourcing-of-windows-calculator/">Microsoft made the Windows calculator open
source</a> and uploaded it to GitHub. I used codespell to find some spelling mistakes, sent them a <a href="https://github.com/microsoft/calculator/pull/106">pull request</a> and they accepted it.</p>
<p>A great source for GitHub repos to spell check is Hacker News. Let's have a look.</p>
<p>[!flarum hacker news]</p>
<p>Hacker News has a link to forum software called <a href="https://github.com/flarum/flarum">Flarum</a>. I can use codespell to look for spelling mistakes. When I'm looking for errors in a GitHub repo I don't fork
the project until I know there is a spelling mistake to fix.</p>
<div style="background: black; padding: 5px; width:800px; margin: auto" class="mb-3">
<pre style="color: white">
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling</font>> <font color="#A1B56C">git</font> <font color="#D8D8D8">clone</font> <font color="#D8D8D8">git@github.com:flarum/flarum.git</font>
Cloning into 'flarum'...
remote: Enumerating objects: 1338, done.
remote: Counting objects: 100% (42/42), done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 1338 (delta 21), reused 36 (delta 19), pack-reused 1296
Receiving objects: 100% (1338/1338), 725.02 KiB | 1.09 MiB/s, done.
Resolving deltas: 100% (720/720), done.
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling</font>> <font color="#A1B56C">cd</font> <font color="#D8D8D8"><u style="text-decoration-style:single">flarum/</u></font>
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (master)> <font color="#A1B56C">codespell</font> <font color="#D8D8D8">-q3</font>
<font color="#A2734C">./public/web.config</font>:<font color="#A2734C">13</font>: <font color="#C01C28">sensitve</font> ==> <font color="#26A269">sensitive</font>
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (master)> <font color="#A1B56C">gh</font> <font color="#D8D8D8">repo</font> <font color="#D8D8D8">fork</font>
<font color="#26A269">✓</font> Created fork <b>EdwardBetts/flarum</b>
<font color="#33DA7A"><b>? </b></font><b>Would you like to add a remote for the fork? </b><font color="#2AA1B3">Yes</font>
<font color="#26A269">✓</font> Added remote <b>origin</b>
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (master)> <font color="#A1B56C">git</font> <font color="#D8D8D8">checkout</font> <font color="#D8D8D8">-b</font> <font color="#D8D8D8">spelling</font>
Switched to a new branch 'spelling'
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)> <font color="#A1B56C">codespell</font> <font color="#D8D8D8">-q3</font>
<font color="#A2734C">./public/web.config</font>:<font color="#A2734C">13</font>: <font color="#C01C28">sensitve</font> ==> <font color="#26A269">sensitive</font>
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)> <font color="#A1B56C">codespell</font> <font color="#D8D8D8">-q3</font> <font color="#D8D8D8">-w</font>
<font color="#26A269">FIXED:</font> ./public/web.config
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)> <font color="#A1B56C">git</font> <font color="#D8D8D8">commit</font> <font color="#D8D8D8">-am</font> <font color="#F7CA88">"Correct spelling mistakes"</font>
[spelling bbb04c7] Correct spelling mistakes
1 file changed, 1 insertion(+), 1 deletion(-)
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)> <font color="#A1B56C">git</font> <font color="#D8D8D8">push</font> <font color="#D8D8D8">-u</font> <font color="#D8D8D8">origin</font>
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 360 bytes | 360.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
remote:
remote: Create a pull request for 'spelling' on GitHub by visiting:
remote: https://github.com/EdwardBetts/flarum/pull/new/spelling
remote:
To github.com:EdwardBetts/flarum.git
* [new branch] spelling -> spelling
branch 'spelling' set up to track 'origin/spelling'.
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)> <font color="#A1B56C">gh</font> <font color="#D8D8D8">pr</font> <font color="#D8D8D8">create</font>
Creating pull request for <font color="#2AA1B3">EdwardBetts:spelling</font> into <font color="#2AA1B3">master</font> in flarum/flarum
<font color="#33DA7A"><b>? </b></font><b>Title </b><font color="#2AA1B3">Correct spelling mistakes</font>
<font color="#33DA7A"><b>? </b></font><b>Choose a template</b><font color="#2AA1B3"> Open a blank pull request</font>
<font color="#33DA7A"><b>? </b></font><b>Body </b><font color="#2AA1B3"><Received></font>
<font color="#33DA7A"><b>? </b></font><b>What's next?</b><font color="#2AA1B3"> Submit</font>
https://github.com/flarum/flarum/pull/81
<font color="#33DA7A">edward</font>@x1c9 <font color="#26A269">~/spelling/flarum</font> (spelling)>
</pre>
</div>
<p>That worked. I found one spelling mistake, the word "sensitive" was spelled wrong. I forked the repo, fixed the spelling mistake and submitted the fix as a <a href="https://github.com/flarum/flarum/pull/81">pull request</a>.</p>
<p><img alt="flarum pull request" src="../../img/fixing-spelling-in-github-repos-using-codespell/flarum_pull_request.png" /></p>
<p>The maintainer of Flarum accepted my pull request.</p>
<p>Fixing spelling mistakes in <a href="https://github.com/twbs/bootstrap/pull/24778">Bootstrap</a> helped me unlocked the <a href="https://github.com/EdwardBetts?tab=achievements&achievement=mars-2020-contributor">Mars 2020 Contributor</a> achievements on GitHub.</p>
<p><img alt="github mars badge" src="../../img/fixing-spelling-in-github-repos-using-codespell/github_mars_badge.png" /></p>
<p>Why not try running codespell on your own codebase? You'll probably find some spelling mistakes to fix.</p>
https://edwardbetts.com/blog/fixing-spelling-in-github-repos-using-codespell/
Mon, 13 Jun 2022 16:03:29 +0100Edward Bettshttps://edwardbetts.com/blog/fixing-spelling-in-github-repos-using-codespell/