<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Thor Galle]]></title><description><![CDATA[Thor's posts and "now" entries.]]></description><link>https://thorgalle.me</link><generator>GatsbyJS</generator><lastBuildDate>Sun, 12 Oct 2025 11:53:36 GMT</lastBuildDate><author><![CDATA[Thor Galle]]></author><copyright><![CDATA[cc-by-nc-nd  4.0 | 2025 | Thor Galle]]></copyright><language><![CDATA[en]]></language><managingEditor><![CDATA[Thor Galle]]></managingEditor><webMaster><![CDATA[Thor Galle]]></webMaster><item><title><![CDATA[Apple’s latest petulant reaction to the DMA]]></title><description><![CDATA[Apple recently released the second iteration of their reaction to DMA concerns after continued fines. I'm not too impressed. ]]></description><link>https://thorgalle.me/posts/2025/apples-latest-petulant-reaction-to-the-dma</link><guid isPermaLink="false">/posts/2025/apples-latest-petulant-reaction-to-the-dma</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sat, 28 Jun 2025 14:23:04 GMT</pubDate><content:encoded>&lt;p&gt;Two days ago, in reaction to a &lt;a href=&quot;https://ec.europa.eu/commission/presscorner/detail/en/ip_25_1085?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;€500 EU DMA fine from April&lt;/a&gt;, Apple updated their &lt;a href=&quot;https://developer.apple.com/support/communication-and-promotion-of-offers-on-the-app-store-in-the-eu/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;rules for external payments&lt;/a&gt; in EU App Store storefronts, among &lt;a href=&quot;https://developer.apple.com/support/dma-and-apps-in-the-eu/?ref=web.thorgalle.me#payment-options&quot; rel=&quot;noreferrer&quot;&gt;other changes&lt;/a&gt;.&lt;/p&gt;&lt;h2 id=&quot;the-reason-for-the-fine&quot;&gt;The reason for the fine&lt;/h2&gt;&lt;p&gt;But why were they fined in the first place? Quoting from the fine announcement, this is what they should have allowed, in a nutshell:&lt;/p&gt;&lt;blockquote&gt;Under the DMA, app developers distributing their apps via Apple&apos;s App Store should be able to inform customers, free of charge, of alternative offers outside the App Store, steer them to those offers and allow them to make purchases.&lt;/blockquote&gt;&lt;p&gt;The problem; in January last year, Apple introduced their first set of changes to supposedly comply with the EU DMA regulation. The changes &quot;allowed&quot; external payments providers, but extra fees of 10-27% and reporting requirements made them barely financially interesting for developers. Additionally, they enforced scary-looking intermediate screens and restrictions that made external payment systems look unappealing to end-users. &lt;/p&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://web.thorgalle.me:2366/content/images/2025/06/CleanShot-2025-06-27-at-17.09.37@2x.png&quot; class=&quot;kg-image&quot; alt=&quot;Left scare screen title: This app doesn&apos;t support the App Store&apos;s private and secure payment system. Right title: You&apos;re about to go to an external website. Apple is not responsible for the privacy or security of purchases made on the web.&quot; loading=&quot;lazy&quot; width=&quot;1416&quot; height=&quot;1310&quot; srcset=&quot;https://web.thorgalle.me:2366/content/images/size/w600/2025/06/CleanShot-2025-06-27-at-17.09.37@2x.png 600w, https://web.thorgalle.me:2366/content/images/size/w1000/2025/06/CleanShot-2025-06-27-at-17.09.37@2x.png 1000w, https://web.thorgalle.me:2366/content/images/2025/06/CleanShot-2025-06-27-at-17.09.37@2x.png 1416w&quot; sizes=&quot;(min-width: 720px) 720px&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;Scare screens before the updates. Left: when using another payment provider in-app. Right: when linking out to a payment flow on another website&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;Finally, they also lowered the (artificially high) prices of their own integrated payment flows in EU storefronts in order to out-compete the new external payment options before they were even established.&lt;/p&gt;&lt;p&gt;Needless to say, the EU did not like it.&lt;/p&gt;&lt;h2 id=&quot;the-recent-changes&quot;&gt;The recent changes&lt;/h2&gt;&lt;p&gt;Did Apple solve the problem two days ago, and does it now comply with the spirit of the DMA? I don&apos;t think so.&lt;/p&gt;&lt;p&gt;They made an already complex situation even more hideously complicated.&lt;/p&gt;&lt;p&gt;There are some improvements for developers, but they carry sizable grains of salt:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If you&apos;re OK with tanking your app&apos;s discoverability potential in the App Store, and with disabling automatic app updates for users, you may save some of Apple&apos;s fees, thanks to a &lt;a href=&quot;https://developer.apple.com/help/app-store-connect/reference/store-services-tiers?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;new and degraded &quot;Store Services Tier 1&quot;&lt;/a&gt; option with lower costs.&lt;/li&gt;&lt;li&gt;It looks like you can now communicate about alternative payment options &lt;em&gt;for free&lt;/em&gt; everywhere in-app, as long they are not &quot;actionable&quot; links. (I’m not entirely sure about this, I’m taking this conclusion from the exclusion from fees for non-actionable links in the &lt;em&gt;“StoreKit External Purchase Link Entitlement (EU)&amp;nbsp;Addendum”&lt;/em&gt;).&lt;/li&gt;&lt;li&gt;If you&apos;re not a small business who is exempt from these fees anyway, and you have users who have long-running subscriptions, or who make payments after 6 months, you may save 2% &quot;Initial acquisition fee&quot; after 6 month&apos;s of a user&apos;s usage.&lt;/li&gt;&lt;li&gt;Strict design and reporting restriction on outbound links URLs got lifted. &lt;/li&gt;&lt;li&gt;The warning screens for linking out look considerably less scary, to the point of almost being neutral (see below).&lt;/li&gt;&lt;/ul&gt;&lt;figure class=&quot;kg-card kg-image-card kg-card-hascaption&quot;&gt;&lt;img src=&quot;https://web.thorgalle.me:2366/content/images/2025/06/image.png&quot; class=&quot;kg-image&quot; alt=&quot;&quot; loading=&quot;lazy&quot; width=&quot;552&quot; height=&quot;471&quot;&gt;&lt;figcaption&gt;&lt;span style=&quot;white-space: pre-wrap;&quot;&gt;The new intermediate screens before Apple allows you to link out.&lt;/span&gt;&lt;/figcaption&gt;&lt;/figure&gt;&lt;p&gt;However, the large picture remains the same:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Apple keeps charging significant fees of 10-20% and asks for complex procedures to integrate external payment flows, which combined with the fees of external payment providers, makes the option barely competitive with Apple&apos;s own offering.&lt;/li&gt;&lt;li&gt;Apple keeps its petulant attitude towards EU regulation. They clearly don’t want to engage in good faith to create a level playing field for app distribution &amp;amp; monetization. They propose hideously complex schemes and degraded experiences as a countermeasure to losing the profits stemming from their ecosystem power. &lt;/li&gt;&lt;/ol&gt;&lt;h2 id=&quot;meanwhile-in-the-us&quot;&gt;Meanwhile in the US&lt;/h2&gt;&lt;p&gt;Just one month ago, developers of apps for the US storefront got a much better and simpler deal last month thanks to a &lt;a href=&quot;https://techcrunch.com/2025/05/02/apple-changes-us-app-store-rules-to-let-apps-redirect-users-to-their-own-websites-for-payments/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;judge&apos;s angered reaction&lt;/a&gt; to Apple&apos;s non-compliant behavior after a ruling in the Epic Games v. Apple lawsuit. Today, in the US, linking out to other payment providers, &lt;em&gt;with clickable &amp;amp; actionable links&lt;/em&gt;, is simply allowed, without extra fees or restrictions. Spotify &lt;a href=&quot;https://newsroom.spotify.com/2025-05-01/following-landmark-court-ruling-spotify-submits-new-app-update-to-apple-to-benefit-u-s-consumers/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;immediately made grateful use&lt;/a&gt; of this new provision.&lt;/p&gt;&lt;h2 id=&quot;my-take-on-all-this&quot;&gt;My take on all this&lt;/h2&gt;&lt;p&gt;I’ve been following the related interactions between Apple and regulators in the last years, and as you might have noticed, I fall in the camp that supports the intent of the DMA and equivalent ideas around the world.&lt;/p&gt;&lt;p&gt;Apple and Google, but mostly Apple, have too much power over all aspects of their respective ecosystems. They hold de facto monopolies over the huge markets established by their mobile operating systems. Markets which were perhaps niche and innovative 15 years ago have today become essential to the service industry globally.&lt;/p&gt;&lt;p&gt;I understand that they are owed some fee for providing their services and platforms, but until now, they have been able to charge whatever they want, raking in enormous profits. They charge fees on all sides: large markups on their devices (or Google Service licenses in the case of Android), one-time fees for developers, and commissions on all transactions related to apps. They have also established strong ecosystem lock-in effects which makes it nearly impossible for other marketplaces, operating systems, and payment service providers to enter the market. The result: less innovation from third-party developers and higher costs for consumers.&lt;/p&gt;&lt;p&gt;Regulatory force is warranted to open up these ecosystems for the public good.&lt;/p&gt;&lt;p&gt;Ethically, I’d compare it to the concept of a patent. A patent allows a company to profit exclusively from an innovation for a limited period of time (20 years or so), but after that, it is opened up so the world can freely build upon the innovation. Apple and Google should be given credit for having established these markets, and they have received plenty. Now, they need to give space for new ideas to flourish.&lt;/p&gt;&lt;p&gt;In this fight with the EU regulation, they seem to be testing boundaries, decreasing their defenses against profit loss just enough to hopefully be deemed compliant on paper, but not actually caring to help establish a competitive market for apps &amp;amp; app services.&lt;/p&gt;&lt;h2 id=&quot;the-right-direction&quot;&gt;The right direction?&lt;/h2&gt;&lt;p&gt;In a competitive marketplace, sideloading apps and using alternative payment providers should be allowed to be as easy, convenient and affordable as using the default ones, or better. The fees and procedures that Apple continues to impose still don’t make this a reality. Therefore, I’m not convinced Apple will avoid another fine this time around.&lt;/p&gt;&lt;p&gt;Whatever the final outcome though, we can state that the process is painful.&lt;/p&gt;&lt;p&gt;At &lt;a href=&quot;https://welcometomygarden.org/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;WTMG&lt;/a&gt;, we’ve been planning to build a new mobile app. I’d personally like to support the intent of the DMA by making use of the alternative options it has helped create, but this is not an easy decision. Apple tries its utter best to make alternative options look as unappealing as possible for all parties involved. Moreover, the rules are a moving target due to the legal back &amp;amp; forth, which does not help to make a go-to-market plan, especially for a super small team like us. &lt;/p&gt;&lt;p&gt;Small steps were taken in the right direction however. On the alternative marketplaces side, promising changes seem to be coming early next year, which will make them easier to use. I hope that with more dialogue (and perhaps fines), Apple will eventually concede to its responsibilities.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Now - January 23rd, 2025]]></title><link>https://thorgalle.me/now/2025/01/23</link><guid isPermaLink="false">/now/2025/01/23</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Thu, 23 Jan 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;We moved countries! 🚚&lt;/strong&gt;: a lot has happened since I last logged something here. At the end of November, we moved from Finland to Belgium. It became a tumultuous multi-day undertaking despite long preparations, but luckily we could count on the support of a handful of great friends, who I want to warmly thank once again! 🙏 Helsinki waved us goodbye with some snowfall, and it’s been good to be back in Belgium. In mid-February we will settle into our new long-term Brussels apartment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I’ve been in India 🇮‍🇳&lt;/strong&gt;: for almost a month now, for family matters (a wedding, birth, …), and a small vacation next week (Sri Lanka). Escaping the West-European winter for a while, and entering the realm of the merciless mosquitoes. It’s probably also been my longest stretch of out-of-home remote work so far, and I’m happy with what we’ve achieved last month. The period before hadn’t been easy with our moving preparations, and my colleagues having welcomed a newborn.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emulation &amp;#x26; projects 🎮&lt;/strong&gt;: to cope with the intense fall and winter period of 2024, I let off steam with a temporary obsession for handheld retro gaming. I got &lt;em&gt;XU Mini M&lt;/em&gt; &amp;#x26; &lt;em&gt;Retroid Pocket 5&lt;/em&gt; consoles and re-indulged into childhood favorites such as &lt;em&gt;Pokemon FireRed&lt;/em&gt;, &lt;em&gt;WipEout Pulse&lt;/em&gt; and &lt;em&gt;Shaun White Snowboarding&lt;/em&gt; (PSP). More recently the free-time pendulum swung back into the project sphere, and I built a new version of my &lt;a href=&quot;/projects/no-feed&quot;&gt;2018 “No Feed” prototype&lt;/a&gt;. The angle is slightly different now: I primarily wanted to keep an eye on the things shared by close friends and family without opening algorithmic social media home feeds. This time, I’m using a headless Chromium browser to periodically scrape the social feeds of people, which lets my system know when there is new a new post. Only then, and at my desired frequency, will the system generate a new item in an RSS feed; displaying a list of first names and links to account pages to check. It ties into my habit of opening my RSS feed reader daily. After the first tests I’m optimistic: it helps me keep in touch with close ones, nothing more, nothing less!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;About this feed&lt;/strong&gt;: if you’re reading this in an feed reader (cool!), I just fixed a bug which lead to all my blog post’s Atom &lt;code class=&quot;language-text&quot;&gt;guid&lt;/code&gt;s being the same JS function code. That function had to be called to produce the correct &lt;code class=&quot;language-text&quot;&gt;guid&lt;/code&gt; - whoopsie. This might mean that you’ll see duplicates of my posts, my apologies for that. I’ll try to ensure this is a one-time thing.&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Does Mozilla have its priorities straight?]]></title><description><![CDATA[A reaction to a toot ridiculing Mozilla's investments into GenAI, analytics, and ads.]]></description><link>https://thorgalle.me/posts/2024/does-mozilla-have-its-priorities-straight</link><guid isPermaLink="false">/posts/2024/does-mozilla-have-its-priorities-straight</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Wed, 18 Sep 2024 17:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Today, I saw a seemingly sarcastic &lt;a href=&quot;https://mamot.fr/@ploum/113157578720371648?ref=web.thorgalle.me&quot;&gt;toot from ploum&lt;/a&gt;&amp;nbsp;about&amp;nbsp;&lt;a href=&quot;https://www.mozilla.org/en-US/careers/listings/?ref=web.thorgalle.me&quot;&gt;Mozilla&apos;s career page&lt;/a&gt;&amp;nbsp;listing a considerable number of jobs for&amp;nbsp;&lt;em&gt;Gen AI-&lt;/em&gt;,&amp;nbsp;&lt;em&gt;analytics-&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;ad-&lt;/em&gt;related roles:&lt;/p&gt;&lt;figure class=&quot;kg-card kg-embed-card&quot;&gt;&lt;iframe src=&quot;https://mamot.fr/@ploum/113157578720371648/embed&quot; class=&quot;mastodon-embed&quot; style=&quot;max-width: 100%; border: 0&quot; width=&quot;400&quot; allowfullscreen=&quot;allowfullscreen&quot;&gt;&lt;/iframe&gt;&lt;script src=&quot;https://mamot.fr/embed.js&quot; async=&quot;async&quot;&gt;&lt;/script&gt;&lt;/figure&gt;&lt;p&gt;He contrasted this with&amp;nbsp;&lt;a href=&quot;https://www.theverge.com/2024/9/18/24248142/mozilla-will-shut-down-its-mastodon-server-on-december-17th?ref=web.thorgalle.me&quot;&gt;Mozilla’s announcement yesterday&lt;/a&gt;&amp;nbsp;of shutting down their Mastodon instance. The responses were an outpour of disappointment and criticism towards Mozilla.&lt;/p&gt;&lt;p&gt;I started writing a threaded response, and realized it should probably be a blog post instead, so, here we go!&lt;/p&gt;&lt;p&gt;In short, much of the criticism I read about on Mozilla seems valid, but I don&apos;t know if the critics have a much better plan than complaining. We should consider if we&amp;nbsp;&lt;em&gt;actually&lt;/em&gt;&amp;nbsp;know what&apos;s best for Mozilla and Firefox.&lt;/p&gt;&lt;h2 id=&quot;mastodon-and-meh-products&quot;&gt;Mastodon, and &quot;meh&quot; products&lt;/h2&gt;&lt;p&gt;To start, I understand the sarcasm to some degree. In particular, I&apos;d appreciate&amp;nbsp;&lt;em&gt;more&lt;/em&gt;, not less, investment in the fediverse. The fediverse is a beacon of hope for a more independent and open web, something I thought Mozilla cared about too. Mozilla supporting Mastodon as an alternative for X, Threads and BlueSky sounded logical when they launched the initiative in early 2023. Then again, if they have less than 300 daily active users today, I also understand that the service was considered a failure not worth maintaining.&lt;/p&gt;&lt;p&gt;The question then becomes: did they invest enough in the experiment? Probably not. Beyond a few announcements in the beginning, I didn&apos;t hear much about Mozilla Social. Even in Mozilla&apos;s&amp;nbsp;&lt;a href=&quot;https://web.archive.org/web/20240118175942/https://www.mozilla.org/en-US/firefox/products/&quot;&gt;&quot;All Products&quot; page from January this year&lt;/a&gt;, I can&apos;t find a single mention of the instance. Compare this to Vivaldi, which is promoting its Mastodon instance launched in November 2022 prominently &lt;a href=&quot;https://vivaldi.net/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;on its website&lt;/a&gt; and in its browser. We can also ask if they should have even started the experiment, as opposed to taking on a support role. They could have helped to popularize the concept of the fediverse itself, referring to other servers, while supporting the work of existing moderation communities.&lt;/p&gt;&lt;p&gt;Mozilla had already been criticized several times over for investing in products with questionable added value, or equally, killing liked products. In September 2020, Mozilla&amp;nbsp;&lt;a href=&quot;https://screenrant.com/mozilla-firefox-send-firefox-notes-shutting-down-explained/?ref=web.thorgalle.me&quot;&gt;killed&lt;/a&gt; Mozilla Send, a service I had used and liked. Before that, there was the Lightbeam extension, Firefox OS, and many more (&lt;a href=&quot;https://killedbymozilla.com/?ref=web.thorgalle.me&quot;&gt;the list&lt;/a&gt;&amp;nbsp;is sizeable, but nowhere near&amp;nbsp;&lt;a href=&quot;https://killedbygoogle.com/?ref=web.thorgalle.me&quot;&gt;Google&apos;s track record&lt;/a&gt;&amp;nbsp;of killing products).&amp;nbsp;&lt;/p&gt;&lt;p&gt;Among its current suite of products, Mozilla is pushing a VPN service and a password breach Monitor. I too am asking; does the world really need these services? There are already VPN services aplenty, many of which focus on privacy, and Monitor is a feature implemented by virtually every password manager. These also aren&apos;t adding much value in my opinion.&lt;/p&gt;&lt;h2 id=&quot;firefox-neglected&quot;&gt;Firefox neglected?&lt;/h2&gt;&lt;p&gt;One critique I glean from the toot, which&lt;a href=&quot;https://www.zdnet.com/home-and-office/networking/the-fall-of-firefox-mozillas-once-popular-web-browser-slides-into-irrelevance/?ref=web.thorgalle.me&quot;&gt;&amp;nbsp;reappears&lt;/a&gt;&amp;nbsp;often, is that with these distractions, Mozilla is taking much-needed investments away from Firefox, the one product they have that is precious and unique. It&apos;s the only major browser with an engine that doesn&apos;t have its roots in WebKit, and the only one not owned by a trillion dollar corporation. And, importantly, it has issues that need addressing.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://readup.org/comments/endlerdev/the-dying-web/Dop0j5?ref=web.thorgalle.me&quot;&gt;As a web user, I recently switched by back to Firefox&lt;/a&gt;&amp;nbsp;after years on Google Chrome (of all browsers), and while I&apos;m planning to stick with it, I also have to use Firefox in conjunction with the Chromium-based Vivaldi browser because of...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;decent performance in more complex web apps (so far I&apos;ve noticed issues in&amp;nbsp;&lt;a href=&quot;https://penpot.app/?ref=web.thorgalle.me&quot;&gt;Penpot&lt;/a&gt;, and, not surprisingly, Google Earth, Google Maps and Google Meet)&lt;/li&gt;&lt;li&gt;desktop-integrated Progressive Web Apps (bringing back PWA support is the &lt;a href=&quot;https://connect.mozilla.org/t5/ideas/bring-back-pwa-progressive-web-apps/idi-p/35?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;second-most upvoted&amp;nbsp;issue&lt;/a&gt; with 2278 upvotes&amp;nbsp;in the Mozilla Ideas forum)&lt;/li&gt;&lt;li&gt;some specific developer tools, like&amp;nbsp;&lt;a href=&quot;https://mastodon.social/@davidlantner/113040231429691674?ref=web.thorgalle.me&quot;&gt;Snippets&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href=&quot;https://stackoverflow.com/a/64615976?ref=web.thorgalle.me&quot;&gt;JS/CSS coverage reports&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Firefox works well for most of my daily browsing, but just isn&apos;t up-to-par for some use-cases. This is to say that I too would be happy with more improvements to Firefox&apos; performance and core web feature set, so I can just use one browser (while&amp;nbsp;&lt;a href=&quot;https://endler.dev/2024/the-dying-web/?ref=web.thorgalle.me&quot;&gt;acknowledging&lt;/a&gt;&amp;nbsp;that the problems it has aren&apos;t only Firefox&apos; fault).&lt;/p&gt;&lt;h2 id=&quot;genai-analytics-ads&quot;&gt;GenAI, analytics, ads&lt;/h2&gt;&lt;p&gt;With this in mind, seeing a list of jobs in the realms of&amp;nbsp;&lt;em&gt;GenAI&lt;/em&gt;,&amp;nbsp;&lt;em&gt;analytics&lt;/em&gt;&amp;nbsp;and&amp;nbsp;&lt;em&gt;ads&amp;nbsp;&lt;/em&gt;make it look like improving the Firefox core browsing experience is not enough of a priority of Mozilla, which I understand is disappointing.&lt;/p&gt;&lt;p&gt;For fairness, it should be noted that out of&amp;nbsp;&lt;a href=&quot;https://www.mozilla.org/en-US/careers/listings/?ref=web.thorgalle.me&quot;&gt;35 current openings&lt;/a&gt;, 6 have &apos;gen&apos; in it, 3 &apos;ads&apos;, and 2 &apos;analytics&apos;. That&apos;s 11/35. There is still a majority of job openings that is&amp;nbsp;&lt;em&gt;not&lt;/em&gt;&amp;nbsp;focused on domains considered problematic by critics on Mastodon.&lt;/p&gt;&lt;p&gt;However, I also think critics jump to conclusions too quickly when seeing these words. It is important to evaluate all these job ads in the context of...&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Mozilla consistently receiving 80%+ of its revenue in the last years through a default search engine deal&amp;nbsp;&lt;em&gt;with Google.&amp;nbsp;&lt;/em&gt;That&apos;s an awkwardly existential amount of funding to get from a big player with a different ideology around tech and browsers. I can imagine that many at Mozilla are uncomfortable with this, and would like to find alternative sources of revenue.&lt;/li&gt;&lt;li&gt;Firefox‘ market share is small and dwindling. Clearly, whatever they have been trying in the last decade(s) (that wasn&apos;t a deal with Google), hasn&apos;t been working well.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Here&apos;s my take on these roles.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Advertisement roles:&amp;nbsp;&lt;/strong&gt;I suppose these roles are at least partially related to the ecosystem around the recently released &quot;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/privacy-preserving-attribution?ref=web.thorgalle.me&quot;&gt;Privacy-Preserving Attribution&lt;/a&gt;&quot;, and perhaps too to the sponsored Search Suggestions that have existed for a long time.&lt;/p&gt;&lt;p&gt;If I’d have to choose on what to promote, Mozilla’s spin on attribution sounds like a better plan for privacy than Google&apos;s &quot;Privacy Sandbox&quot; which can still&amp;nbsp;&lt;a href=&quot;https://front-end.social/@benschwarz/113127311078023574?ref=web.thorgalle.me&quot;&gt;expose interests of individuals&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Mozilla is probably trying to check if they can sell their own ad insights. It might be one path to more independence (from Google), but I don’t like it much, because it also represents one step further on the slippery slope of surveillance capitalism.&lt;/p&gt;&lt;p&gt;Regarding the search suggestions; this is also one of the main sources of revenue of Vivaldi. I see a double standard in finding that normal, versus berating Mozilla for it.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;GenAI:&amp;nbsp;&lt;/strong&gt;there is much cynicism and negativity around GenAI on the fediverse, and much of it is warranted. GenAI has huge costs in terms of energy, is kept artificially cheap and ad-free for consumers in a classic bait-and-switch scheme, is dangerously misunderstood, is trained in unethical ways, and is proliferating huge swaths of garbage on the internet. It is overhyped, plugged into products without much thought, and therefore it is a bubble that will pop. There is much to dislike. But unlike the blockchain hype, GenAI also has a serious core of real, obvious value and concrete applications. This core isn&apos;t going anywhere. It reminds me of the dot-com bubble. This bubble also burst, but eventually came to fruition more gradually with the rise of e-commerce and big web tech through the 2000s and 2010s. I see something similar happening with GenAI, with an even faster turnaround. There might be a market correction, but this thing will keep going.&lt;/p&gt;&lt;p&gt;Mozilla investing in GenAI may seem like one of those anti-Firefox distractions, but some forms of GenAI will persist in the main competitors of Firefox.&amp;nbsp;&lt;a href=&quot;https://arc.net/max?ref=web.thorgalle.me&quot;&gt;Summarizing pages&lt;/a&gt;&amp;nbsp;will become a table-stakes feature, just like Chrome made in-browser translation a table-stakes feature (and it took Firefox a long time to provide a halfway decent alternative).&lt;/p&gt;&lt;p&gt;These will become the next &quot;missing features&quot; that make many &lt;em&gt;more&lt;/em&gt; people run away from Firefox. Browsers aren&apos;t only used by tech enthusiasts and privacy nuts. Nurses use browsers, as do bus drivers, lawyers, cooks, ...&amp;nbsp;&lt;em&gt;everyone on the internet uses browsers.&lt;/em&gt;&amp;nbsp;People are getting increasingly hooked on cheap or free GenAI, and Firefox needs to be able to sell a narrative tomorrow to the average browser user that is focused on privacy, but that also doesn&apos;t come with too many concessions on features. Therefore, building GenAI expertise early on might not be that crazy after all; because going about it in privacy-friendly way, like they did with machine translation, will be a serious challenge.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Analytics:&amp;nbsp;&lt;/strong&gt;it&apos;s no secret that Firefox has included various forms of telemetry, to the dismay of many. I believe privacy-preserving analytics aren&apos;t evil per se, and are helpful for sensible, data-driven product decisions. For example, my company is proudly running&amp;nbsp;&lt;a href=&quot;https://plausible.io/?ref=web.thorgalle.me&quot;&gt;Plausible&lt;/a&gt;, which is really helpful for us. At Firefox&apos; scale, you might need some people whose responsibility it is to work with analytics. I hope they keep it anonymous, however.&lt;/p&gt;&lt;h2 id=&quot;to-conclude&quot;&gt;To conclude&lt;/h2&gt;&lt;p&gt;Mozilla and Firefox might not have displayed a coherent or successful vision for a private and open web in the last few years, but I don’t think it helps to just be sarcastic about their attempts to find alternative sources of revenue in a privacy-preserving way, and their attempts to anticipate what&apos;s next for browsers.&lt;/p&gt;&lt;p&gt;What would you do to grow the market share of Firefox, while becoming more independent of Google? To protect the diversity of browser engines, and the open web? It&apos;s probably not easy.&lt;/p&gt;&lt;p&gt;Yes, it is awkward that the millionaire CEO got a fat million dollar raise in 2022, a mere year after 25% of Mozilla&apos;s workforce was laid off, but being outraged at their Silicon Valley salaries also doesn&apos;t help much. Mozilla should have the cash ready to acquire and retain good people to work on their mission (&lt;a href=&quot;https://www.wired.com/story/meredith-whittaker-signal/?ref=web.thorgalle.me&quot; rel=&quot;noreferrer&quot;&gt;just like Signal&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;I hope that Mozilla will find a way to re-focus on the unique value they can provide to the web, and will find a sustainable model for doing so. There is still much to cherish about Firefox and Mozilla, like Gecko, Enhanced Tracking Protection, MDN, ... and the alternatives are still far out. So let&apos;s try to stay constructive.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Now - September 8th, 2024]]></title><link>https://thorgalle.me/now/2024/09/08</link><guid isPermaLink="false">/now/2024/09/08</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 08 Sep 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Weather &amp;#x26; activity&lt;/strong&gt;: temperatures have been hovering around 20°C, which is surprisingly warm for this time of the year. Regardless, fall colors are starting to appear. When it arrives, autumn comes hard and fast in Helsinki, and is also gone in an instant. We’ll probably stop our weekly outdoor basketball sessions soon, and will move to indoor badminton. We rediscovered the sport last year, and I’m already looking forward to starting again!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Website work:&lt;/strong&gt; as I’m writing this, I’m working on a sizeable extension of this personal website. I’ve had concrete plans for a while:
&lt;ul&gt;
&lt;li&gt;to add my recent projects and Readup activity on the home page&lt;/li&gt;
&lt;li&gt;to add a &lt;a href=&quot;https://nownownow.com/about&quot;&gt;Now&lt;/a&gt; page which also features partially on the home page&lt;/li&gt;
&lt;li&gt;to move my blog posts to a separate page, and perhaps,&lt;/li&gt;
&lt;li&gt;to add in some old photography to spice up the look!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I also &lt;em&gt;really&lt;/em&gt; have to add RSS feeds. I’ve gotten very much into RSS consumption over the last months, and I’d love to provide it myself.&lt;/p&gt;
&lt;p&gt;Building your own website is fun, but it also takes time. Today, I started by upgrading my two-year-old Strapi CMS deployment from v4.2.2 to v4.25.10, to take advantage of some new layout features. &lt;a href=&quot;https://docs.strapi.io/dev-docs/migration-guides&quot;&gt;Eight migration guides&lt;/a&gt;, &lt;a href=&quot;https://github.com/strapi/documentation/pull/2199&quot;&gt;one docs PR&lt;/a&gt;, and many hours later, my Strapi is better shape than it ever has been.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Now - August 7th, 2024]]></title><link>https://thorgalle.me/now/2024/08/07</link><guid isPermaLink="false">/now/2024/08/07</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Wed, 07 Aug 2024 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;WTMG:&lt;/strong&gt; despite a good overall response rate from hosts listed on &lt;a href=&quot;https://welcometomygarden.org/explore&quot;&gt;our WTMG map&lt;/a&gt;, it sometimes happens that an often-contacted host is not responding anymore. The annoying experience of being ignored is on top of the list of the feedback we receive from travellers. This month, we want to set up sustainable procedures to soft-unlist abandoned accounts.&lt;/p&gt;
&lt;p&gt;Until now, we’ve unlisted abandoned accounts once per year, with a crude admin script. This time, we’re defining nuanced conditions for these accounts, based on their recent response rate, response time, and more. To implement these, I’m writing the largest SQL queries I’ve ever written, CTE-galore 😄. Using them, we will be able to do a meaningful, semi-automated cleanup more regularly.&lt;/p&gt;
&lt;p&gt;This is also the first application of the Postgres replica of our Firestore, which I might write more about later.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;WWII:&lt;/strong&gt; it was hard to miss that this year marks the 80th birthday of many significant events of World War II. To learn more about its causes and effects, I’ve been listening to &lt;a href=&quot;https://www.noiser.com/d-day-the-tide-turns&quot;&gt;&lt;em&gt;D-Day: The Tide Turns&lt;/em&gt;&lt;/a&gt;, &lt;a href=&quot;https://www.noiser.com/adolf-hitler-rise-and-downfall&quot;&gt;&lt;em&gt;Adolf Hitler: Rise and Downfall&lt;/em&gt;&lt;/a&gt;, two excellent podcasts from the &lt;em&gt;Noiser network&lt;/em&gt;. I can strongly recommend both so far! They’re both engrossing and informative, exploring background factors, as well as driving the narrative of major events with apt sound effects. I also started reading &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Diary_of_a_Young_Girl&quot;&gt;&lt;em&gt;Anne Frank’s diary&lt;/em&gt;&lt;/a&gt; (the &lt;a href=&quot;https://archive.org/details/anne_frank_diaries&quot;&gt;original publication in Dutch&lt;/a&gt;), and I picked up &lt;a href=&quot;https://en.wikipedia.org/wiki/Battlefield_V&quot;&gt;Battlefield V&lt;/a&gt; during a sale. That last one is more for entertainment than for learning, but it is inspired on some lesser-known events of WWII, including &lt;a href=&quot;https://en.wikipedia.org/wiki/Norwegian_heavy_water_sabotage&quot;&gt;the sabotage of Vemork heavy water plant&lt;/a&gt;, which I’ve learned, after reading the previous Wikipedia article, was a grim and eventually impressive series of daring operations.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Readup:&lt;/strong&gt; I’m still dreaming about &lt;a href=&quot;/projects/readup&quot;&gt;Readup&lt;/a&gt;’s potential, particularly about how it might relate to the fediverse. I recently read the &lt;a href=&quot;https://www.w3.org/TR/webmention/&quot;&gt;Webmention&lt;/a&gt; spec (I think it’s the first W3C spec I read from start to finish!). It would be cool to send out webmentions with Readup, but I’m wondering how many sites support it. I also started working on some glue code to put my most recent Readup posts on my site here.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title><![CDATA[Meta's Threads on the Fediverse]]></title><link>https://thorgalle.me/posts/2024/meta-threads-on-the-fediverse</link><guid isPermaLink="false">/posts/2024/meta-threads-on-the-fediverse</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 10 Mar 2024 18:27:00 GMT</pubDate><content:encoded>&lt;p&gt;A &lt;a href=&quot;https://werd.io/2024/the-fediverse-is-really-happening&quot;&gt;short post&lt;/a&gt; from Ben Werdmuller made me aware that Threads is widening tests of its hopefully-upcoming integration with ActivityPub, the microblogging protocol that underpins much of the fediverse, including Mastodon.&lt;/p&gt;&lt;p&gt;It’s been exactly one year since Meta confirmed that it was “exploring a standalone decentralized social network for sharing text updates” (&lt;a href=&quot;https://www.theregister.com/2023/03/11/meta_twitter_rival/&quot;&gt;source&lt;/a&gt;), eight months since Threads was launched, and two months since their &lt;a href=&quot;https://www.theverge.com/2023/12/13/24000120/threads-meta-activitypub-test-mastodon&quot;&gt;first public tests with ActivityPub started&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Ben titled his post “The fediverse is really happening”, implying that the fediverse is not &lt;i&gt;really&lt;/i&gt; happening right now, before Threads, or any other big social media platform, actually joins it.&lt;/p&gt;&lt;p&gt;I follow this sentiment somewhat. The fediverse has been happening for some communities for a long time, but it hasn’t been happening on a larger scale. I think Threads joining the fediverse is good, and I know many don’t agree with this. Here’s my perspective.&lt;/p&gt;&lt;h2&gt;The fediverse has been happening!&lt;/h2&gt;&lt;p&gt;The fediverse has been &lt;i&gt;happening&lt;/i&gt; for a long time, and increasingly so in the last year, with all the drama around X. As a techie, I only &lt;a href=&quot;https://indieweb.social/@thorgal&quot;&gt;joined&lt;/a&gt; a small year ago, after having being fairly inactive on mainstream social media for years.&lt;/p&gt;&lt;p&gt;I’ve since been having a great time in my small, hand-crafted internet bubble on Mastodon. I mostly &lt;a href=&quot;https://indieweb.social/@thorgal/following&quot;&gt;follow&lt;/a&gt; fellow web developers and indie web enthusiasts, along with a &lt;a href=&quot;https://mastodon.online/@philipdutre&quot;&gt;former professor&lt;/a&gt; of mine, and accounts of organizations that I think are worth following.&lt;/p&gt;&lt;p&gt;Mastodon &amp;amp; ActivityPub are already great for tech-adjacent communities, and, as far as I’ve seen, for communities that care less about a wide reach, and more about decentralization, online privacy, and the ability to control and self-moderate their own instances (one example being LGBTQ+ communities). For these communities, the fediverse has already been &lt;i&gt;really happening.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;The concept of federated servers and applications works really well for niche communities. The grassroots, interpersonal, non-corporate retro feel, often combined with a thematic focus of servers, is also what constitutes most of the appeal for me. I enjoy accessing my “non-algorithmic” Mastodon feed through various clients: &lt;a href=&quot;https://indieweb.social/about&quot;&gt;indieweb.social&lt;/a&gt;’s default web client with &lt;a href=&quot;https://github.com/ronilaukkarinen/mastodon-bird-ui&quot;&gt;Bird UI&lt;/a&gt;, &lt;a href=&quot;https://elk.zone/&quot;&gt;Elk&lt;/a&gt;, &lt;a href=&quot;https://www.raycast.com/SevicheCC/mastodon&quot;&gt;Raycast&lt;/a&gt;, Mastodon’s iOS app, all using Mastodon&amp;#39;s open API.&lt;/p&gt;&lt;p&gt;However, I recognize that Mastodon, Pixelfed and Lemmy are still niche technologies supported by a niche protocol.&lt;/p&gt;&lt;h2&gt;Webmail all over again?&lt;/h2&gt;&lt;p&gt;The question is: when is the fediverse &lt;i&gt;really&lt;/i&gt; happening, on a global scale? You could argue that it’s only &lt;i&gt;really&lt;/i&gt; happening when it exits its current niche, and is used as widely as incumbent &amp;amp; centralized social media alternatives like X or TikTok. From looking at estimates today on Wikipedia, the account count of Mastodon servers still represents less than 10% of Threads’ account count, while having existed for six more years.&lt;/p&gt;&lt;p&gt;Decentralization and federation present inevitable technical and conceptual hurdles. I believe it&amp;#39;s improbable for the fediverse to &amp;quot;really&lt;i&gt;&amp;quot;&lt;/i&gt; happen in a global sense to without a company like Meta repackaging it as a simple and centralized service.&lt;/p&gt;&lt;p&gt;There is perhaps one other technology where big corporations repackaged an existing open technology, and then managed to distribute it widely: email.&lt;/p&gt;&lt;p&gt;The analogy with email is helpful, because email has had a long history of being an niche technology used in the military, academia, and business. Then, in the 2000s, big corporate webmail providers like Gmail, Yahoo and Hotmail brought it into the homes of “the public”. It wasn’t only easy to create a new email address with a free inbox, you also didn’t have to install any special software to access this inbox. Email practically got equated with the single web service you used to access it.&lt;/p&gt;&lt;p&gt;In a &lt;a href=&quot;https://ar.al/2022/11/09/is-the-fediverse-about-to-get-fryed-or-why-every-toot-is-also-a-potential-denial-of-service-attack/&quot;&gt;2022 blog post&lt;/a&gt; arguing for more decentralization on the fediverse, Aral Balkan stated this development was bad for email, because it centralized power over email (an open system) to a few entities:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Have you ever heard of a little old email instance called Gmail? (Or perhaps the term &lt;a href=&quot;https://en.wikipedia.org/wiki/Embrace,_extend,_and_extinguish&quot;&gt;“embrace, extend, extinguish?”&lt;/a&gt;)

Do you know what happens to your email if Google says (rightly or wrongly) that you’re spam? No one sees your email.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;There is something here: in practice, email isn’t anymore the decentralized dream it once was believed to be. But, I’m not as pessimistic about ActivityPub following the email precedent. I’m more on the optimistic side.&lt;/p&gt;&lt;p&gt;First, we can ponder the counterfactual: would email have reached the ubiquitous adoption it has today without being carried by webmail providers? The simplicity of Hotmail made it possible for me and my primary school classmates to use email on our parent’s computers before we were ten years old.&lt;/p&gt;&lt;p&gt;By analogy, Threads could introduce millions of people to the fediverse. Many will never understand or care about the difference between @threads.net and @mastodon.social, but some (millions!) will, and they will realize that they can join independent ActivityPub servers too.&lt;/p&gt;&lt;p&gt;Secondly, I think email, in its current state of oligopoly, is still in a better shape than social siloes like Instagram, Snapchat and TikTok that can’t talk to each other at all. When several big platforms are interconnected, there is at least some healthy diversity. And the more interconnected they become, the harder it is for them to break out without alienating their userbase.&lt;/p&gt;&lt;p&gt;Finally, I don’t believe the dreaded “extinguish” phase presents a real danger to the status quo, or to the intrinsic, relatively slow growth of ActivityPub. Here’s a quote from &lt;a href=&quot;https://blog.joinmastodon.org/2023/07/what-to-know-about-threads/&quot;&gt;a post on the Mastodon blog&lt;/a&gt; by founder Eugen Rochko, published on July 5th, 2023, the day that Threads launched (emphasis mine):&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;There was a time when users of Facebook and users of Google Talk were able to chat with each other and with people from self-hosted XMPP servers, before each platform was locked down into the silos we know today. What would stop that from repeating? Well, &lt;b&gt;even if Threads abandoned ActivityPub down the line, where we would end up is exactly where we are now.&lt;/b&gt; XMPP did not exist on its own outside of nerd circles, while ActivityPub enjoys the support and brand recognition of Mastodon.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;As mentioned before, ActivityPub and Mastodon already have found a home in niche communities. I personally am not planning to leave my niche. I’m avoiding corporate algorithmic feeds out of principle, and from a mental health perspective. I have been doing so for some five years now, and I don’t expect my motivations to change soon.&lt;/p&gt;&lt;p&gt;If I can stay in my hand-picked, ad-free, &amp;quot;algorithm-less&amp;quot; Mastodon feed with 90% Mastodon accounts and 10% Threads or Bluesky accounts; I will be happy.&lt;/p&gt;&lt;p&gt;If, after three years, Threads decides to kill its ActivityPub integration, I will be a little bit sad for a while, but mostly still happy, because I mostly want to stay in touch with people who follow the same principles as I do (and are thus on Mastodon, and not on Threads).&lt;/p&gt;&lt;h2&gt;Practicalities&lt;/h2&gt;&lt;p&gt;But how will Threads integrate with ActivityPub, in practice?&lt;/p&gt;&lt;p&gt;From &lt;a href=&quot;https://indieweb.social/@evanprodromou@threads.net/112056448550748474&quot;&gt;Evan Prodromou’s first test post&lt;/a&gt;, as part of a closed beta, it seems that Meta’s ActivityPub implementation works only in one direction today:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Participating accounts on Threads can be seen and followed by followees from the wider fediverse.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Replies from participating Threads accounts can also be seen by the wider fediverse.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;… but if the wider fediverse replies to a Threads posts, those replies won’t be visible in Threads.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This single direction limits the usefulness of the integration today, but better interoperability should come gradually. From &lt;a href=&quot;http://plasticbag.org/archives/2024/01/how-threads-will-integrate-with-the-fediverse/&quot;&gt;a blog post from January by Tom Coates&lt;/a&gt; who met with the team integrating Threads with ActivityPub:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;let’s talk about the roadmap they laid out, which is as follows:
&lt;b&gt; December 2023
&lt;/b&gt;A user will be able to opt in via the Threads app to have their posts &lt;i&gt;visible &lt;/i&gt;to Mastodon clients. People would be able to reply and like those posts using their Mastodon clients, but those replies and likes would not be visible within the Threads application. Threads users would not be able to follow or see posts published across Mastodon servers, or reply to them or like then.

&lt;b&gt;Early 2024 &lt;/b&gt; (Part One) – the Like counts on the Threads app would combine likes from Mastodon and Threads users

&lt;b&gt;Early 2024&lt;/b&gt; (Part Two) – replies posted on Mastodon servers would be visible in the Threads application

&lt;b&gt;Late 2024&lt;/b&gt; – A “mixed” Fediverse and Threads experience where you will be able to follow Mastodon users within Threads, and reply to them and like them

&lt;b&gt;TBD&lt;/b&gt; – Full blended interoperability between Threads and Mastodon&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I am yet to read this post fully at the time of writing, but it looks optimistic!&lt;/p&gt;&lt;p&gt;I think we’re slowly moving towards an interesting, new, social media world order.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[My default apps in 2024]]></title><description><![CDATA[Following a list that's been traveling around the internet, here are the apps I'm using in 2024]]></description><link>https://thorgalle.me/posts/2024/default-apps-2024</link><guid isPermaLink="false">/posts/2024/default-apps-2024</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sat, 24 Feb 2024 10:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Inspired by &lt;a href=&quot;https://danhannigan.dev/post/default-apps-2023/&quot;&gt;Dan Hannigan’s entry of last November&lt;/a&gt; (which was in turn inspired by several others), I’m making a list of the main apps that I use today, and reflecting a little on them too.&lt;/p&gt;&lt;p&gt;Before we dive in:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;App lists are ordered from most to least frequently used.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;I’m adding the categories “Photo Storage &amp;amp; Viewing” &amp;amp; “Video editing”, because those apps deserve a shoutout 🙂&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;hr/&gt;&lt;h1&gt;My default apps in 2024&lt;/h1&gt;&lt;p&gt;📨 &lt;b&gt;Mail Client:&lt;/b&gt; Mail (iOS), Gmail web client (macOS).&lt;/p&gt;&lt;p&gt;📮 &lt;b&gt;Mail Server:&lt;/b&gt; Gmail&lt;/p&gt;&lt;p&gt;📝 &lt;b&gt;Notes:&lt;/b&gt; TextEdit (macOS), Notion (personal &amp;amp; work), Apple Notes, Obsidian.&lt;/p&gt;&lt;p&gt;✅ &lt;b&gt;To-Do:&lt;/b&gt; Apple Reminders, Notion.&lt;/p&gt;&lt;p&gt;📷 &lt;b&gt;Photo Shooting:&lt;/b&gt; iPhone 11 Pro&lt;/p&gt;&lt;p&gt;🎨 &lt;b&gt;Photo Editing:&lt;/b&gt; iOS Photos, &lt;a href=&quot;https://www.gimp.org/&quot;&gt;GIMP&lt;/a&gt;, some tools in SetApp, &lt;a href=&quot;https://www.darktable.org/&quot;&gt;Darktable&lt;/a&gt;&lt;/p&gt;&lt;p&gt;🖼️ &lt;b&gt;Photo Storage &amp;amp; Viewing&lt;/b&gt; Apple Photos, &lt;a href=&quot;https://memories.gallery/&quot;&gt;Nextcloud Memories&lt;/a&gt;, &lt;a href=&quot;https://www.photoprism.app/&quot;&gt;PhotoPrism&lt;/a&gt;, Google Photos (for shares)&lt;/p&gt;&lt;p&gt;&lt;b&gt;🎥 Video Editing:&lt;/b&gt; Kdenlive, iMovie&lt;/p&gt;&lt;p&gt;📆 &lt;b&gt;Calendar:&lt;/b&gt; Apple Calendar (Mac), Google Calendar (iOS)&lt;/p&gt;&lt;p&gt;📁 &lt;b&gt;Cloud File Storage:&lt;/b&gt; Nextcloud (self-hosted), Google Drive, iCloud.&lt;/p&gt;&lt;p&gt;📖 &lt;b&gt;RSS:&lt;/b&gt; &lt;a href=&quot;https://www.freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt;, just switched from &lt;a href=&quot;https://readwise.io/read&quot;&gt;Readwise Reader&lt;/a&gt;&lt;/p&gt;&lt;p&gt;🙍🏻‍♂️ &lt;b&gt;Contacts:&lt;/b&gt; macOS Contacts synced with Google&lt;/p&gt;&lt;p&gt;🌐 &lt;b&gt;Browser:&lt;/b&gt; Google Chrome&lt;/p&gt;&lt;p&gt;💬 &lt;b&gt;Chat:&lt;/b&gt; Signal (preferred), Slack (work), WhatsApp (by necessity), Apple Messages, Facebook Messenger, Discord.&lt;/p&gt;&lt;p&gt;🔖 &lt;b&gt;Bookmarks:&lt;/b&gt; Notion&lt;/p&gt;&lt;p&gt;📑 &lt;b&gt;Read It Later:&lt;/b&gt; &lt;a href=&quot;https://readup.org/&quot;&gt;Readup&lt;/a&gt;, &lt;a href=&quot;https://netnewswire.com/&quot;&gt;NetNewsWire&lt;/a&gt;&lt;/p&gt;&lt;p&gt;📜 &lt;b&gt;Word Processing:&lt;/b&gt; Google Docs, Apple Pages&lt;/p&gt;&lt;p&gt;📈 &lt;b&gt;Spreadsheets:&lt;/b&gt; Google Sheets, Apple Numbers&lt;/p&gt;&lt;p&gt;📊 &lt;b&gt;Presentations:&lt;/b&gt; Google Slides (it’s been a while)&lt;/p&gt;&lt;p&gt;🛒 &lt;b&gt;Shopping Lists:&lt;/b&gt; Reminders&lt;/p&gt;&lt;p&gt;🍴 &lt;b&gt;Meal Planning:&lt;/b&gt; &lt;a href=&quot;https://www.mealime.com/&quot;&gt;Mealime&lt;/a&gt;; including &lt;a href=&quot;https://thorgalle.me/articles/mealime-siri-integration/&quot;&gt;my Siri integration&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;💰 &lt;b&gt;Budgeting and Personal Finance:&lt;/b&gt; &lt;a href=&quot;https://www.firefly-iii.org/&quot;&gt;Firefly III&lt;/a&gt;, Google Sheets&lt;/p&gt;&lt;p&gt;📰 &lt;b&gt;News:&lt;/b&gt; Readup, FreshRSS.&lt;/p&gt;&lt;p&gt;🎵 &lt;b&gt;Music:&lt;/b&gt; Spotify&lt;/p&gt;&lt;p&gt;🎤 &lt;b&gt;Podcasts:&lt;/b&gt; Spotify (every weekday: &lt;a href=&quot;https://www.vrt.be/vrtmax/podcasts/vrt-nws/h/het-kwartier/&quot;&gt;Het Kwartier&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;🔐 &lt;b&gt;Password Management:&lt;/b&gt; 1Password, moving to Bitwarden &amp;amp; Vaultwarden&lt;/p&gt;&lt;p&gt;🧑‍💻 &lt;b&gt;Code Editor:&lt;/b&gt; &lt;a href=&quot;https://github.com/vscode-neovim/vscode-neovim&quot;&gt;VS Code with neovim&lt;/a&gt;, vim&lt;/p&gt;&lt;p&gt;✈️ &lt;b&gt;VPN:&lt;/b&gt; Self-hosted WireGuard PiVPN, ClearVPN (from SetApp), Google One VPN&lt;/p&gt;&lt;h1&gt;Some commentary&lt;/h1&gt;&lt;h2&gt;FOSS + Google&lt;/h2&gt;&lt;p&gt;Fifteen years ago, and for about a decade, I was mostly using Linux on computers. This is where my familiarity with GIMP, Darktable, and Kdenlive comes from. I also only owned Android smartphones throughout that time, and had no budget for software subscriptions. Google’s services worked well cross-platform, and were “free”, so I came to use many of them. I still do today!&lt;/p&gt;&lt;h2&gt;&lt;b&gt;Enter Apple&lt;/b&gt;&lt;/h2&gt;&lt;p&gt;After I started working professionally with design tools in 2017, and appreciating a stable desktop more, Apple increased its footprint on my tech use step-by-step, both in hardware &amp;amp; software.&lt;/p&gt;&lt;p&gt;Here’s a timeline of when I got my Apple hardware:&lt;/p&gt;&lt;p&gt;2010: iPod (Nano, 5th gen)&lt;/p&gt;&lt;p&gt;2017: MacBook (MBP, 13”)&lt;/p&gt;&lt;p&gt;2020: iPhone (iPhone 11 Pro)&lt;/p&gt;&lt;p&gt;2022: iPad (6th gen); new M1 MBP&lt;/p&gt;&lt;p&gt;2023: Apple Watch (Series 9)&lt;/p&gt;&lt;p&gt;Because of the ecosystem effects, I started using Apple services more. But I kept Google services and a suite of other independent software around, because of cross-platform compatibility, and a feeling of unease with a full Apple lock-in.&lt;/p&gt;&lt;p&gt;How do I feel today about Apple today, in short? It’s a love-hate relationship.&lt;/p&gt;&lt;p&gt;On the positive side, it’s absolutely amazing that a &lt;a href=&quot;https://thorgalle.me/articles/upgrading-an-aging-imac/&quot;&gt;Late 2009 (!!) 27” iMac&lt;/a&gt; is still in daily use by my parents for web browsing, web TV, office &amp;amp; email. It still has software and hardware that looks great and works well today. Its speaks to a culture of top-notch design across the stack to make this possible. I also think the work they’ve done recently with things like Focus Modes is a necessary evolution in tech.&lt;/p&gt;&lt;p&gt;Conversely, I absolutely hate Apple’s often-repeated anti-consumerist behavior: their recent plan to petulantly &lt;a href=&quot;https://open-web-advocacy.org/blog/its-official-apple-kills-web-apps-in-the-eu/&quot;&gt;kill PWA’s in the EU&lt;/a&gt;. The impossibility of using Sidecar to extend your display to an iPad connected to a different iCloud account (even if you have access to, and can “trust” said iPad). And so many more…&lt;/p&gt;&lt;h2&gt;Towards self-hosting &amp;amp; independent vendors&lt;/h2&gt;&lt;p&gt;More recently, I’ve become more averse to &lt;i&gt;any&lt;/i&gt; Big Tech provider, especially Google, and especially for personal use. It’s a long-term goal to eventually replace whatever Big Tech services possible with self-hosted or reliable, independent alternatives. My main motivation is to keep control and ownership of my data and freedom in my computing, but cost savings and privacy concerns also play a role.&lt;/p&gt;&lt;p&gt;I’m not rushing this transition though. Practicality remains important.&lt;/p&gt;&lt;p&gt;In terms of &lt;b&gt;photo management,&lt;/b&gt; I’ve recently pushed forward a years-long effort to archive and organize family and personal photos while minimizing Big Tech’s involvement.&lt;/p&gt;&lt;p&gt;It started with fragmented backups on external hard drives and computers, a personal Digikam collection, a 15-year-old Synology NAS, and a handful of Google Photos shares. I’ve now brought this together in two systems:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;a shared family library using &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://www.photoprism.app/&quot;&gt;PhotoPrism&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;a personal photo collection on Nextcloud with &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://memories.gallery/&quot;&gt;Nextcloud Memories&lt;/a&gt;&lt;/p&gt;&lt;p&gt; (also as a service to other family members 🙂)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;These apps (and modern single-board computers) are truly amazing. Both services are hosted on a single Raspberry Pi 4 8GB with 4TB of USB-attached SSD storage, and they are a joy to use. They do not match the Big Tech cloud services on all metrics of usability, but they bring the essence of the feature set: easy access on any device, high capacity, and fast-ish results. And all this without having features you like at the mercy of business decisions, without succumbing to surveillance tech, and without having your photo experiences held hostage by perpetually increasing monthly subscriptions. It takes maintenance work, but I like it.&lt;/p&gt;&lt;h2&gt;What has changed recently&lt;/h2&gt;&lt;p&gt;In the department of &lt;b&gt;news &amp;amp; reading,&lt;/b&gt; I’ve recently cancelled my &lt;a href=&quot;https://readwise.io/read&quot;&gt;Readwise Reader&lt;/a&gt; subscription, which I had kept for several months. I like the app and “all-in-one reader” concept, and mostly used it for RSS intake &amp;amp; highlighting. But I just didn’t use it enough. I still kept reading on &lt;a href=&quot;https://readup.org/&quot;&gt;Readup&lt;/a&gt;, and highlighting in Notion, despite having another paid reading app.&lt;/p&gt;&lt;p&gt;I’m refocussing on open solutions. Two weeks ago, I experimented with NewsBlur and FreshRSS, and decided to set up &lt;a href=&quot;https://www.freshrss.org/&quot;&gt;FreshRSS&lt;/a&gt; on my Raspberry Pi, with the &lt;a href=&quot;https://netnewswire.com/&quot;&gt;NetNewsWire&lt;/a&gt; client on all iDevices. So far, I really like it! I’ve never been this actively using RSS. And it fits together nicely with Readup.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A Mealime - Siri integration]]></title><description><![CDATA[This integration allows you to add items to your Mealime grocery list using a Siri voice command.]]></description><link>https://thorgalle.me/posts/2023/mealime-siri-integration</link><guid isPermaLink="false">/posts/2023/mealime-siri-integration</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sat, 04 Mar 2023 18:00:00 GMT</pubDate><content:encoded>&lt;p&gt;For several years I’ve used the meal planner &amp;amp; grocery list app &lt;a href=&quot;https://www.mealime.com/&quot;&gt;Mealime&lt;/a&gt;. It’s great, since it neatly combines both concepts in a slick app.&lt;/p&gt;&lt;p&gt;However, there was one thing that I have always sorely missed in the app: being able to say “Hey Siri, add apples [or whatever] to my grocery list”, without pulling my phone out.&lt;/p&gt;&lt;p&gt;This feature stayed out, and I kept having occasions where I wanted it to be there.&lt;/p&gt;&lt;p&gt;So, built it myself:&lt;/p&gt;&lt;p&gt;Do you have a Mealime account, a little bit of technical know-how, and would you also like to be able to do this?&lt;/p&gt;&lt;p&gt;You can set this up yourself relatively easily, without coding. I included instructions &lt;a href=&quot;https://github.com/th0rgall/mealime-groceries&quot;&gt;on the open-source GitHub repository&lt;/a&gt;.&lt;/p&gt;&lt;h1&gt;How it works&lt;/h1&gt;&lt;p&gt;The solution consists of, (1) a Shortcut, and (2), a small server application.&lt;/p&gt;&lt;h3&gt;1. The Shortcut&lt;/h3&gt;&lt;p&gt;In the video, “Add groceries” is a simple iOS/ipadOS/macOS Shortcut that listens to what you want to add. It then sends this text verbatim to the &lt;code&gt;/add&lt;/code&gt; endpoint on the server application. The shortcut fits onto one screenshot:&lt;/p&gt;&lt;p&gt;When I say “Hey Siri, Add groceries”, the Shortcuts gets invoked.&lt;/p&gt;&lt;h3&gt;2. The server application&lt;/h3&gt;&lt;p&gt;The server application was a Node.js application that I recently rewrote in &lt;a href=&quot;https://deno.land/&quot;&gt;Deno&lt;/a&gt;. When starting it, you supply the server application with your Mealime username &amp;amp; password.&lt;/p&gt;&lt;p&gt;The server does two things:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;It receives the request from the Shortcut. It does some basic processing on it to recognize multiple items in your query (”apples AND pears”), as well as the product category an item belongs to (”Produce”). For this, it uses a static &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/th0rgall/mealime-groceries/blob/main/src/products.yaml&quot;&gt;YAML database file&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;After the request has been processed, it uses the Mealime username and password to simulate the user logging in on the (old) Mealime web app. From there, it simulates that same user adding the requested items, and voilà!&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The server application can run anywhere where Deno runs, but in particular, it works for free and out-of-the-box on &lt;a href=&quot;https://deno.com/deploy&quot;&gt;Deno Deploy&lt;/a&gt;. There are also &lt;a href=&quot;https://github.com/th0rgall/mealime-groceries/pkgs/container/mealime-groceries&quot;&gt;Docker images&lt;/a&gt; available.&lt;/p&gt;&lt;h1&gt;Caveats&lt;/h1&gt;&lt;p&gt;It works well enough (and I use it often!), but not everything is dandy in this integration.&lt;/p&gt;&lt;h3&gt;&lt;b&gt;Shortcut invocation limitations&lt;/b&gt;&lt;/h3&gt;&lt;p&gt;What unfortunately doesn’t work when invoking the shortcut, are the following more natural and direct expressions:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;“Hey Siri, add apples and pears to my grocery list” → this will add it to Reminders&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;“Hey Siri, add apples and pears to my Mealime grocery list” → this will make Siri attempt to contact the actual Mealime app, which doesn’t have support for it (“Sorry, you’ll need to continue that in the app”)&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Incomplete product database&lt;/h3&gt;&lt;p&gt;The integration can determine the section a product belongs to (”Produce”, “Baking &amp;amp; Spices”, …), but this process currently has limitations, as it is &lt;a href=&quot;https://github.com/th0rgall/mealime-groceries#adding-more-product-mappings&quot;&gt;based on a static mapping file&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;It might be possible to reverse-engineer the search function of the Mealime app, and in that way support all the product-to-section mappings that Mealime understands. However, I didn’t feel this was worth the effort. I only looked at the endpoints used in the web app, where you have to manually specify to which category you want to add your product:&lt;/p&gt;&lt;h3&gt;Possibility that it breaks&lt;/h3&gt;&lt;p&gt;The web app that I simulate will likely be replaced with a new version that is coming up, at some point in the future:&lt;/p&gt;&lt;p&gt;Unfortunately, this new web app does not have the feature yet of manually adding items to your grocery list. I hope it still comes, or that Mealime makes an official Siri integration!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[The Page of Judgement]]></title><description><![CDATA[I made a web page that organizes tweets about good and bad company experiences. Here's why. ]]></description><link>https://thorgalle.me/posts/2021/the-page-of-judgement</link><guid isPermaLink="false">/posts/2021/the-page-of-judgement</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sat, 30 Oct 2021 21:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;Before social media, complaining was harder&lt;/b&gt;. If you wanted to point out a company&amp;#39;s bad practice, you had to use a private channel to contact the customer service department. You may have been able to publicly make a statement if the nature of your grievance was widely relatable, and you had the energy and stature to get your grievance published in a newspaper. But mostly, your complaint was a private matter.&lt;/p&gt;&lt;p&gt;Social media changed this. When Facebook and Twitter reached mass adoption, companies suddenly needed to be in the space where so many existing and potential customers were. They started printing the F-logo and blue bird onto their packaging, jumping on these new marketing channels and buying ads en masse. But these were platforms! They worked in many directions: customers could also reach companies more easily. And what they said could be seen by everyone.&lt;/p&gt;&lt;p&gt;As a customer today I do my research online. Next to internet searching, I may look up a company&amp;#39;s Facebook or Twitter account, and see what other people are asking and telling on those page. What kinds of issues people report, and the responsiveness of companies to these people affects their brand in my eyes. Lousy demonstrated service will detract me. Companies can get away with less - bad experiences spread faster.&lt;/p&gt;&lt;p&gt;The flip side is that good experiences can spread quickly too, and some lucky companies can get a lot of free marketing this way with (viral) user-generated content. In any case, I think faster feedback loops for companies are a win for society.&lt;/p&gt;&lt;p&gt;Today I&amp;#39;m publishing my personal contribution to the feedback-o-sphere of the internet: &lt;a href=&quot;/tweets&quot;&gt;The Page of Judgement&lt;/a&gt;, a living collection of tweets about both good and bad experiences I&amp;#39;ve had with products and companies over the years.&lt;/p&gt;&lt;p&gt;Often they are trifling issues, bug reports and feature requests. Sometimes they&amp;#39;re vague annoyances or happy surprises. Quite regularly, they got a response from a company spokesperson - and sometimes a small discussion even ensued.&lt;/p&gt;&lt;p&gt;This organized tweet collection is yet another perspective on my personal data. We generate so many messages, tweets and posts daily. Incumbent social media companies know what to do with this: use it to understand people, and monetize that understanding by selling personalized ads. But whether past personal data can have value in the present and future, &lt;i&gt;for oneself&lt;/i&gt;, is a matter of constant experimentation that I like to tinker with.&lt;/p&gt;&lt;p&gt;I will reference this list to remember what I publicly &amp;quot;liked&amp;quot; and &amp;quot;disliked&amp;quot;. Maybe someone on the internet finds it fascinating as well.&lt;/p&gt;&lt;p&gt;One insight strikes me so far: I&amp;#39;m praising more online than complaining. Let that be a guiding rule for the future!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[More about me]]></title><description><![CDATA[An introduction of myself, updated until 2022.]]></description><link>https://thorgalle.me/posts/2021/more-about-me</link><guid isPermaLink="false">/posts/2021/more-about-me</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 23 May 2021 21:00:00 GMT</pubDate><content:encoded>&lt;p&gt;👋 Hello internet, I&amp;#39;m Thor!&lt;/p&gt;&lt;p&gt;&lt;i&gt;This introduction used to be on my &lt;/i&gt;&lt;i&gt;/about page&lt;/i&gt;&lt;i&gt;. I updated it a few times during 2021 and 2022, but today it&amp;#39;s in need of a full rewrite. I&amp;#39;ve put the last version up here for archival.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;- Thor, September 16th, 2024&lt;/i&gt;&lt;/p&gt;&lt;hr/&gt;&lt;p&gt;I&amp;#39;m a 20-something he/him dude living in Helsinki. Here&amp;#39;s a little more about me.&lt;/p&gt;&lt;p&gt;If you just want to contact me, &lt;a href=&quot;/contact&quot;&gt;click here&lt;/a&gt;. If you only care about my professional story, well, &lt;a href=&quot;/work&quot;&gt;here you go&lt;/a&gt;!&lt;/p&gt;&lt;h2&gt;🔨 The Name &lt;/h2&gt;&lt;p&gt;First things first. About my name: yes. It directly refers to &lt;a href=&quot;https://en.wikipedia.org/wiki/Thor&quot;&gt;the almighty god&lt;/a&gt;. Indirectly, it is an apt wordplay from my dad on one of his favorite comic book series: &lt;a href=&quot;https://en.wikipedia.org/wiki/Thorgal&quot;&gt;Thorgal&lt;/a&gt; (Thor Galle, Thorgal, get it?). I hold no grudge, it&amp;#39;s a great series.&lt;/p&gt;&lt;h2&gt;🇧🇪 The Formative Years&lt;/h2&gt;&lt;p&gt;Thorgal is also a Belgian series, which brings me to the start of my story: I lived most of my 20-something years in &lt;a href=&quot;https://www.openstreetmap.org/relation/196311&quot;&gt;Leuven, Belgium&lt;/a&gt;. I grew up there happily, went to a fun &lt;a href=&quot;https://en.wikipedia.org/wiki/C%C3%A9lestin_Freinet&quot;&gt;Freinet&lt;/a&gt; primary school (no homework!), a proper Catholic high school (homework!), and finally, a &lt;a href=&quot;https://en.wikipedia.org/wiki/KU_Leuven&quot;&gt;world-renowned university&lt;/a&gt; for my bachelors&amp;#39; in Computer Science.&lt;/p&gt;&lt;p&gt;All that in the same cozy medieval university town. Thus, when graduating from my bachelor&amp;#39;s in 2018, I felt the urge to expand my horizons.&lt;/p&gt;&lt;h2&gt;🇫🇮🇸🇪 The Nordic Years&lt;/h2&gt;&lt;p&gt;I left my dear Belgium, 2500 km &lt;a href=&quot;https://www.instagram.com/explore/tags/thepedalchoiceog/&quot;&gt;by bike&lt;/a&gt;, to pursue an European master&amp;#39;s program in Human-Computer Interaction &amp;amp; Design, &lt;a href=&quot;https://masterschool.eitdigital.eu/human-computer-interaction-and-design&quot;&gt;at EIT Digital&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;My studies brought me to &lt;a href=&quot;https://www.aalto.fi/en&quot;&gt;Aalto University&lt;/a&gt; near Helsinki (Finland) for a year, and &lt;a href=&quot;https://www.kth.se/en/&quot;&gt;KTH Royal Institute of Technology&lt;/a&gt; in Stockholm (Sweden) for another.&lt;/p&gt;&lt;p&gt;In the summer of 2019 I interned at &lt;a href=&quot;https://columbiaroad.com&quot;&gt;Columbia Road&lt;/a&gt; in Helsinki, a digital sales consultancy. I liked the job and stayed on, taking the job with me to Stockholm, where they had just opened a new office. I lived and worked in Stockholm for two years (more &lt;a href=&quot;/work#Columbia-Road&quot;&gt;about that work here&lt;/a&gt;). &lt;/p&gt;&lt;p&gt;In the summer of 2021, I moved back to Helsinki for reasons of ❤️. This coincided with me becoming the Product Lead of reallyreadit, inc., the company behind &lt;a href=&quot;/projects/readup&quot;&gt;Readup&lt;/a&gt; - a role I held for half a year, until funding ran out. Readup was a labor of love, which is why the platform still exists today, maintained by its community (including me). Afterwards, I worked for half a year as a freelance developer and designer via my own firm BitHarmony.&lt;/p&gt;&lt;p&gt;In the autumn of 2022, I became the Chief Technologist of Slowby, the Belgian social enterprise behind &lt;a href=&quot;/projects/welcome-to-my-garden&quot;&gt;Welcome To My Garden&lt;/a&gt;. While still living in Helsinki and working remotely most of the time, this has brought me back closer to Belgium. In these fast-paced times, it&amp;#39;s incredibly rewarding to help thousands of slow travellers and hosts connect with each other, and to build tools to help them plan their journeys.&lt;/p&gt;&lt;h2&gt;🧶 Hobbies&lt;/h2&gt;&lt;p&gt;I like to read regularly, which I often do online &lt;a href=&quot;https://readup.org/@thorgalle&quot;&gt;on Readup&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I find &lt;b&gt;languages&lt;/b&gt; fascinating. I&amp;#39;m currently fluent in Dutch (native) and English. I&amp;#39;m also able to hold a decent conversation in Swedish and French, though I&amp;#39;m not getting much practice as of late. I enjoy hacking on language-learning technology, so I was lucky to be able to do my master&amp;#39;s thesis on this topic, at &lt;a href=&quot;/work/#Sprakkraft&quot;&gt;Språkkraft&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;In general, I like scratching my own technological itches, and doing fun stuff with my personal data (see &lt;a href=&quot;/projects#projects&quot;&gt;my projects&lt;/a&gt;). I also think we could collectively do much more interesting things with our personal data. In 2020 I gave &lt;a href=&quot;https://2020.openbelgium.be/blogpost/big-tech-has-your-data-come-get-it&quot;&gt;a talk about getting your personal data from big tech &amp;amp; doing something with it&lt;/a&gt;. This ties in with an interest in productivity apps and knowledge management tools. My personal &lt;a href=&quot;https://www.notion.so/&quot;&gt;Notion&lt;/a&gt; has become massive since I started it in 2019. I&amp;#39;m looking for ways to publish some notes here in long-lasting, self-owned Markdown.&lt;/p&gt;&lt;h2&gt;🤾‍♂️ Sports&lt;/h2&gt;&lt;p&gt;I enjoy being active, but as someone who also enjoys sitting in front of a computer; there&amp;#39;s always the goal of being &lt;i&gt;more&lt;/i&gt; active.&lt;/p&gt;&lt;p&gt;🧗🏼‍♂️ In my teens, &lt;b&gt;wall climbing&lt;/b&gt; and bouldering represented a considerable part of my week. Since higher education, I&amp;#39;ve had on &amp;amp; off relationship with the sport. The practice never turned super serious; so I&amp;#39;m stuck at a ~6c grade. Bouldering can be an very fun problem solving, away from the computer.&lt;/p&gt;&lt;p&gt;🏃🏼‍♂️ I&amp;#39;m &lt;b&gt;running regularly&lt;/b&gt; for all the good reasons. No races yet, though my first half marathon seems to be approaching. Also, &lt;a href=&quot;https://readup.org/comments/wired/to-run-my-best-marathon-at-age-44-i-had-to-outrun-my-past&quot;&gt;I&amp;#39;m in no hurry here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;🚴‍♀️ A very Belgian thing to do: &lt;b&gt;road cycling&lt;/b&gt;. I miss the days where I&amp;#39;d zoom through the fields of Flanders. I&amp;#39;ve also done my fair share of tour cycling, the most intrepid one being a one-month, 2500km trip that took me from Leuven to Helsinki in 2018. A different beast entirely, but a glorious one. Here&amp;#39;s a collection of &lt;a href=&quot;https://www.instagram.com/explore/tags/thepedalchoiceog/&quot;&gt;Instagram posts&lt;/a&gt; from then.&lt;/p&gt;&lt;p&gt;------&lt;/p&gt;&lt;p&gt;There, now I shouldn&amp;#39;t be a total stranger anymore! Feel free to poke around further on this site, or get in touch. You can find me &lt;a href=&quot;https://readup.org/@thorgalle&quot;&gt;in the comments&lt;/a&gt; on Readup, or intermittently on &lt;a href=&quot;https://twitter.com/th0rgall&quot;&gt;Twitter&lt;/a&gt; and &lt;a href=&quot;https://www.linkedin.com/in/thorgalle/&quot;&gt;LinkedIn&lt;/a&gt;. You can reach me at thorgalle &amp;lt;at&amp;gt; gmail &amp;lt;dot&amp;gt; com.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[A regex puzzle: match a, b, or a and b]]></title><link>https://thorgalle.me/posts/2020/regex-puzzle-either-and</link><guid isPermaLink="false">/posts/2020/regex-puzzle-either-and</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Fri, 10 Apr 2020 14:27:00 GMT</pubDate><content:encoded>&lt;p&gt;For a project I&amp;#39;m parsing a textual representation of a time duration. I stumbled on an interesting regex problem while doing that.&lt;/p&gt;&lt;p&gt;Concretely, I&amp;#39;m parsing these indications on my Audible library page of how long I&amp;#39;ve listened to an audiobook. I want to extract the hours and/or minutes from this duration.&lt;/p&gt;&lt;p&gt;This was my first regex attempt : &lt;code&gt;/(\d{1,2})h(?:\s?(\d{1,2})m)?/&lt;/code&gt;&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://regex101.com/r/Eyyyv3/1&quot;&gt;Regex 101 link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It seemed to work well. But as the regex nerd might see, I soon encountered a bug when there was less than one hour left: the hours had disappeared, and my regex didn&amp;#39;t account for that.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://regex101.com/r/Eyyyv3/2&quot;&gt;Regex 101 link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;So how to solve this issue?&lt;/p&gt;&lt;p&gt;A first idea is to make the hour part and minute part optional with the &lt;code&gt;?&lt;/code&gt; operator:&lt;/p&gt;&lt;p&gt;/(?:(\d{1,2})\s*h)?\s*(?:\s?(\d{1,2})\s*m)?/&lt;/p&gt;&lt;p&gt;This seems to work. And it does, given that the input string is always exactly in the format &amp;quot;8h 2m left&amp;quot;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://regex101.com/r/RynwxI/1/tests&quot;&gt;Regex 101 unit test link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;But one &amp;quot;issue&amp;quot;: this regex isn&amp;#39;t robust in the input it accepts.&lt;/p&gt;&lt;p&gt;If any characters are added before or behind, it will fail. Because &lt;b&gt;it also matches the empty string&lt;/b&gt;!&lt;/p&gt;&lt;p&gt;See this test, note the space in front of the &lt;code&gt;8m&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://regex101.com/r/Ap7C83/1/tests&quot;&gt;Regex 101 link&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Why? Because the regex &lt;code&gt;a?b?&lt;/code&gt; matches either &lt;code&gt;a&lt;/code&gt; or &lt;code&gt;b&lt;/code&gt;, but matching nothing is also OK! And for the quick thinkers: &lt;code&gt;a|b&lt;/code&gt; would in this case not be a solution, because there are capturing groups in a and b.&lt;/p&gt;&lt;p&gt;I&amp;#39;m abstracting &lt;code&gt;a&lt;/code&gt; as the hour-matcher and &lt;code&gt;b&lt;/code&gt; as the minute matcher here.&lt;/p&gt;&lt;p&gt;That&amp;#39;s the problem that intrigued me: &lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;How can you match &amp;#39;a&amp;#39;, &amp;#39;b&amp;#39;, or &amp;#39;a and b&amp;#39; while preserving the same single capturing groups in a and b?&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I took this as a regex puzzle and came up with some solutions:&lt;/p&gt;&lt;h3&gt;Solution 1: Brute force with code&lt;/h3&gt;&lt;p&gt;The first solution is not really a regex solution: use a &lt;b&gt;global&lt;/b&gt; flag on the previous regex, and then to write code to scan for &amp;quot;valid&amp;quot; matches. Empty string matches are discarded, only a filled match is kept.&lt;/p&gt;&lt;p&gt;Works, but I&amp;#39;m looking for a regex-only solution.&lt;/p&gt;&lt;h3&gt;Solution 2: Brute force regex&lt;/h3&gt;&lt;p&gt;A straightforward regex solution is this: &lt;code&gt;a|b|ab&lt;/code&gt;&lt;/p&gt;&lt;p&gt;But I didn&amp;#39;t like this. Because I have a capturing group in both a and b, and by duplicating &lt;code&gt;a&lt;/code&gt; and &lt;code&gt;b&lt;/code&gt; into &lt;code&gt;ab&lt;/code&gt;, that means I&amp;#39;d also duplicate the capturing groups. &lt;/p&gt;&lt;p&gt;Then we go from this simple scenario:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;match group 1 contains hours&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;match group 2 contains minutes&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To this more complicated one:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;match group 1 contains hours &lt;i&gt;if&lt;/i&gt; the string is an hour-only string like &amp;#39;8h left&amp;#39;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;match group 2 contains minutes &lt;i&gt;if&lt;/i&gt; the string is a minute-only string like &amp;#39;8h left&amp;#39;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;match group 3 contains hours &lt;i&gt;if&lt;/i&gt; the string is combined hour-minute string like &amp;#39;8h 3m left&amp;#39;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;match group 4 contains minutes &lt;i&gt;if&lt;/i&gt; the string is combined hour-minute string like &amp;#39;8h 3m left&amp;#39;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;That means the code handling the regex match would need if/else logic to deal with these scenarios. A compromise you might take, but I&amp;#39;m looking for a &amp;quot;regex-only&amp;quot; solution.&lt;/p&gt;&lt;h3&gt;Solution 3: Explicitly &lt;i&gt;not&lt;/i&gt; matching an empty string?&lt;/h3&gt;&lt;p&gt;We could solve this if we could tell the regex that it can &lt;i&gt;never&lt;/i&gt; match an empty string somehow.&lt;/p&gt;&lt;p&gt;I tried to look around for this briefly, but couldn&amp;#39;t find anything that worked.&lt;/p&gt;&lt;p&gt;See &lt;a href=&quot;https://stackoverflow.com/questions/19127384/what-is-a-regex-to-match-only-an-empty-string&quot;&gt;this StackOverflow thread&lt;/a&gt; and let me know if you make it work :)&lt;/p&gt;&lt;h3&gt;Solution 4: Only match when something good lies ahead&lt;/h3&gt;&lt;p&gt;This is the solution that finally worked for me: a &lt;b&gt;positive lookahead&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;This piece of regex &lt;code&gt;(?=\d{1,2}\s*(?:h|m))&lt;/code&gt; in front of the rest tells the matcher that it should look ahead for something with one or two digits and a &amp;#39;h&amp;#39; or &amp;#39;m&amp;#39;. Only when it finds this in front of itself, it can start with the real matching and capturing groups.&lt;/p&gt;&lt;p&gt;It can be abstracted as &lt;code&gt;(?=a|b)a?b?&lt;/code&gt;, but my concrete implementation takes some shortcuts there.&lt;/p&gt;&lt;p&gt;This solution has the robustness against spaces and only 2 capturing groups. I added the global flag in this example to demonstrate what it does:&lt;/p&gt;&lt;p&gt;See &lt;a href=&quot;https://regex101.com/r/nkcZmV/1&quot;&gt;this regex101&lt;/a&gt; for the full regex.&lt;/p&gt;&lt;p&gt;The regex does not support the notion of &amp;quot;days&amp;quot; or &amp;quot;seconds&amp;quot;, or epxressions like &amp;quot;less than one minute&amp;quot;. I hope these will not appear in the Audible page :)&lt;/p&gt;</content:encoded></item><item><title><![CDATA[✅ Voc Enhancer's first feature request]]></title><link>https://thorgalle.me/posts/2019/voc-enhancer-0-6-update</link><guid isPermaLink="false">/posts/2019/voc-enhancer-0-6-update</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 09 Jun 2019 21:43:00 GMT</pubDate><content:encoded>&lt;p&gt;A while ago, a new review came in for &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/vocabulary-com-enhancer/&quot;&gt;Vocabulary.com Enhancer&lt;/a&gt;, an extension I made that adds functionality like translations to the popular English word learning site &lt;a href=&quot;https://vocabulary.com&quot;&gt;vocabulary.com&lt;/a&gt;.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;very useful! can you add the pronunciation button to the &amp;quot;list page&amp;quot;? thank you!&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt; ̶ Yao Xiao, May 19 2019, &lt;a href=&quot;https://chrome.google.com/webstore/detail/vocabularycom-enhancer/diddacjdgklfjgnlmknacnakjcgdiegn&quot;&gt;Chrome&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Reason enough for me to jump back in the development! I feel it&amp;#39;s important to maintain the extension and help users where necessary, especially now that 150 people are using it daily. That&amp;#39;s the only way it will stay relevant, grow and provide more value.&lt;/p&gt;&lt;p&gt;The pronunication button is now there in v0.6, enjoy Yao! And being back in it, I tackled one more task.&lt;/p&gt;&lt;h3&gt;Upping that UX ✨&lt;/h3&gt;&lt;p&gt;For another feature of the extension, a collection of links to external services in a list of saved words, I was annoyed by the repeated icons to external services: they were bloating the page. The words should stay the main content of the page, and this was not the case.
&lt;/p&gt;&lt;p&gt;The solution:
&lt;/p&gt;&lt;p&gt;Now the icon row is collapsible and collapsed by default to avoid visual bloat. I had some fun (and trouble) implementing CSS animations in inline-blocks 🙃. Here&amp;#39;s a little demo of this functionality (or disguised advertisement for Google Define, &lt;a href=&quot;https://youglish.com&quot;&gt;youglish&lt;/a&gt;, and the &lt;a href=&quot;urbandictionary.com&quot;&gt;Urban Dictionary&lt;/a&gt;).&lt;/p&gt;&lt;p&gt;Some trade-offs &amp;amp; decisions I made while designing this change:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;A horizontal collapse with a triangle icon ▸ is not common. They are mostly used to hide and show a vertical content container, like a review with spoilers. In this case, the three-dot &amp;quot;More&amp;quot; burger menu would have been the more standard design pattern. I still chose the horizontal collapse, just because it was fun to implement and to experiment with it.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The &amp;quot;link&amp;quot; 🔗 icon to the left is slightly messy. Omitting it looks better, but it does add necessary meaning to the open/hide triangle button.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;To open the link configuration, the standard settings ⚙️ icon was used because it was available in the existing font symbol set of the site. Otherwise, an editing pen symbol would have been more fitting.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I still want to see how I can visually tune the menu so it looks more organized. If a proper UI designer is reading this, feel free to send help! Feedback is also welcome, always.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Sleep Visualization]]></title><link>https://thorgalle.me/posts/2019/sleep-visualization</link><guid isPermaLink="false">/posts/2019/sleep-visualization</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 26 May 2019 18:22:00 GMT</pubDate><content:encoded>&lt;p&gt;Last week I spent some hours on visualizing my sleep pattern. It is based on 99 days of manually tracked data (yes!). This is a first part of a much larger data tracking project in progress. &lt;a href=&quot;https://web.thorgalle.me/sleepviz1/&quot;&gt;See a rendered full screen version here&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Stylistically I used a minimalistic color scheme that could&amp;#39;ve come straight from Hundred Rabbits&lt;span&gt;type: embedded-entry-inline id: 54vPunvcoYWrcrIolzyRYt&lt;/span&gt;. Obviously, this visualization still misses a legend or visual cues to give meaning to the elements. But maybe the air of mystery around my actual sleep/wake times is not too bad ;) &lt;/p&gt;&lt;h3&gt;A little legend:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;Each vertical white line represents a night, time goes from left to right.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The top red dots are wake-up times. The higher the earlier.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The bottom white dots are sleep times. The lower the later.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;The dotted lines are stay-awake-in-bed times - somehow I found this data interesting - maybe because I want to reduce that time 🙃&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Technically I had fun implementing a parser that could understand my ambiguous notes on sleep &amp;amp; wake times. I used an Airtable&lt;span&gt;type: embedded-entry-inline id: 2sunkozudzV3QvIWtwgnzD&lt;/span&gt;&lt;a href=&quot;&quot;&gt;&lt;/a&gt; spreadsheet with a row for every day and columns for sleep and wake times. The format is not consistent though. I could write &amp;quot;2:15&amp;quot; to mean a bed time at 2:15 AM the next day, or &amp;quot;11&amp;quot; to mean 11 PM that same day. &lt;a href=&quot;https://momentjs.com/&quot;&gt;Moment.js&lt;/a&gt; was helpful. For the visualization itself I  used the JS vector interface library &lt;a href=&quot;http://paperjs.org/&quot;&gt;paper.js&lt;/a&gt; just to try it out. It&amp;#39;s great for what it does - more advanced than the &lt;a href=&quot;https://p5js.org&quot;&gt;p5.js&lt;/a&gt; library I had used before. But I might still replace it it with D3.js as the latter offers more tools for working with data dynamically, as I used in a similar project &lt;a href=&quot;http://thorgalle.me/articles/movieviz&quot;&gt;for visualizing the movies I&amp;#39;ve seen&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;You might already be able to spot that starting a 9 to 5 job had an effect on my sleep stability the last weeks. To be continued!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[6 Reasons Why Finland's Student Restaurants Are Wonderful]]></title><description><![CDATA[Exploring the nice properties of student restaurants in Helsinki and Finland in general. What makes them so good?]]></description><link>https://thorgalle.me/posts/2019/6-reasons-why-finland&apos;s-student-restaurants-are-wonderful</link><guid isPermaLink="false">/posts/2019/6-reasons-why-finland&apos;s-student-restaurants-are-wonderful</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Thu, 09 May 2019 15:35:00 GMT</pubDate><content:encoded>&lt;p&gt;If there is one thing I love about studying in Helsinki, it&amp;#39;s the student restaurants. As a vegetarian I can relish in abundant, healthy and varied meals for ridiculously low prices. What makes it so good here?&lt;/p&gt;&lt;h2&gt;1. Greens go first 🌱&lt;/h2&gt;&lt;p&gt;In many things, Finland distinguishes itself by balancing the free market with strong government support where necessary. For student food this is no different. Finlands&amp;#39; social security institution &lt;a href=&quot;https://www.kela.fi/web/en/meal-subsidy&quot;&gt;Kela&lt;/a&gt; provides private catering companies with a € 1.94 subsidy &lt;i&gt;per student meal&lt;/i&gt;. To enjoy this support, caterers need to comply with a long list of requirements.&lt;/p&gt;&lt;p&gt;One requirement is a salad as part of every meal. Mostly that means the local vegetable staples: lettuce, carrots and some form of cabbage. But I regularly find protein-rich foods such as beans and chickpeas too. And sometimes even pasta dishes complete with sundried tomatoes can be scooped from one of the salad trays. Other times there&amp;#39;s also fruit. In the winter there were canned mango pieces or quarter oranges, now I regularly had watermelon pieces.&lt;/p&gt;&lt;p&gt;Salads can be topped off with an assortment of dressings and seeds depending on the restaurant. One restaurant even has breadcrumbs and fried onions to go with soup or salad.&lt;/p&gt;&lt;p&gt;By requirement, the salad bar comes &lt;i&gt;before&lt;/i&gt; the main meal. This is a prime example of &lt;a href=&quot;https://en.wikipedia.org/wiki/Nudge_theory&quot;&gt;nudging&lt;/a&gt;, it invites the visitors to include more vegetables and legumes on their plate before taking the main meal. A welcome change for student&amp;#39;s health and the environment!&lt;/p&gt;&lt;h2&gt;2.Affordable meals for &lt;i&gt;everyone&lt;/i&gt; 💰&lt;/h2&gt;&lt;p&gt;For everyone. Yes, also for you, you miserable gluten and lactose intolerant vegan who can&amp;#39;t have nuts either. There&amp;#39;s something for you.&lt;/p&gt;&lt;p&gt;The meal offering is varied and there&amp;#39;s plenty of choice. All student restaurants in Helsinki provide a € 2.6 main meal with either meat/fish or a vegetarian option.  At the date of writing there was &lt;i&gt;Chicken tikka masala&lt;/i&gt; in Aalto Valimo, the CS building had &lt;i&gt;Tuna fish lasgnette&lt;/i&gt; while vegetarian resto Kipsari served &lt;i&gt;Brazilian vegetable curry with caribian rice &amp;amp; peas&lt;/i&gt;: there&amp;#39;s something for everyone.&lt;/p&gt;&lt;p&gt;Most restaurants offer a choice between the standard meal and a slightly more expensive à la carte meal for € 4.95. These meals are fancy dishes in fixed, smaller portions. Some restaurants also always have a pizza to choose at that price point: American pan-pizza or flat bottom? You choose. You still can take the previously mentioned salad of course. Oh, before I forget to mention, in some restaurants a salad-only meal is € 1.80.&lt;/p&gt;&lt;h2&gt;3. A personalized meal finder 🔍&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://kanttiinit.fi/&quot;&gt;Kanttiinit.fi&lt;/a&gt;, a handy web app lists all the meal options in the different campuses around Helsinki. It&amp;#39;s &lt;a href=&quot;https://github.com/Kanttiinit&quot;&gt;open-source&lt;/a&gt; and made by students. &lt;/p&gt;&lt;p&gt;With Kanttiinit it&amp;#39;s easy to find what you like. You can highlight menu items that fit your taste, for example by selecting &lt;i&gt;vegan&lt;/i&gt; and marking that you like &lt;i&gt;mushrooms&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s my configuration:&lt;/p&gt;&lt;p&gt;More importantly, &lt;b&gt;you can also filter by allergens&lt;/b&gt;, gluten- and lactose contents. This reflects the clear physical labels that are present next to every food item in the student restaurants: a critical feature to make the lives of students with intolerances more comfortable.&lt;/p&gt;&lt;h2&gt;4. Add-ons included 👌&lt;/h2&gt;&lt;p&gt;The student canteens need to fullfill two other requirements: meals include &lt;b&gt;at least one glass of milk and students can have bread à volonté.&lt;/b&gt; However, some restaurants also provide oat and soy drinks next to regular milk to take everyone into account.&lt;/p&gt;&lt;p&gt;The bread offering varies daily with white bread, baguette-style breads and raisin-breads. The traditional Finnish dark rye bread can always be found. Butter is a requirement too, but regularly other tasteful toppings such as beetroot hummus are offered as an alternative. &lt;/p&gt;&lt;p&gt;Finally, restaurants also have &lt;b&gt;sauces and spices&lt;/b&gt; that can be added onto the meal. I see many students putting tabasco on meals that they find too bland. Otherwise there is salt, pepper, balsamico, olive oil, sweet-sour sauce, … you name it!&lt;/p&gt;&lt;h2&gt;5. (Almost) All You Can Eat 🍽&lt;/h2&gt;&lt;p&gt;Whether you&amp;#39;re trying to gain weight on a heavy workout program or going for a light lunch, you can get just that the amount of food you need. &lt;b&gt;You fill your plate yourself.&lt;/b&gt; You can&amp;#39;t go back to get more salad or a main meal, but as long as you can fit what you want on one plate you&amp;#39;re good. In contrast, the bread bars are practically buffet-style. I often go back for a pumpkin hummus sandwich.&lt;/p&gt;&lt;p&gt;I have to be honest. I over-ate many, many times. But at least I over-ate on tasty vegetables!&lt;/p&gt;&lt;h2&gt;6. Competition for good 🥊&lt;/h2&gt;&lt;p&gt;There is not only choice of meals, there&amp;#39;s also choice of &lt;i&gt;restaurants&lt;/i&gt;. My campus here is about 15,000 people big yet it has &lt;b&gt;13 different student restaurants&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;Caterers here try to win students by putting their signature on their offering. This diversity is for the benefit of students, who can pick what he or she likes. For example, the Swedish student union&amp;#39;s restaurant &lt;a href=&quot;https://www.taffa.fi/home&quot;&gt;Täffä&lt;/a&gt; serves a classic smoked salmon every Friday. &lt;a href=&quot;https://www.fazerfoodservices.com/food-services/fazer-food--co/&quot;&gt;Fazer Food&amp;amp;Co&lt;/a&gt;, a large food company in Finland, started a &lt;a href=&quot;https://www.fazerfoodservices.com/food-services/fazer-introduces-a-new-wicked-rabbit-vegetarian-food-concept/&quot;&gt;&lt;i&gt;Wicked Rabbit&lt;/i&gt;&lt;/a&gt; line in 2017 with the most abundant vegetarian and vegan meals. It reminds me of exclusive vegetarian restaurants in Belgium - except 4 times cheaper. My favorite still is &lt;a href=&quot;http://www.kipsari.com/&quot;&gt;Kipsari&lt;/a&gt;, an independent vege/vegan restaurant originally founded in 1960 (!) by students. They&amp;#39;re small, personal and offer plates with the best flavors from Europe and Asia. But it doesn&amp;#39;t stop there. Internationally known caterer Sodexo is also present and even a lone franchisee of the Subway chain has its place.&lt;/p&gt;&lt;p&gt;Next to that, restaurants &lt;i&gt;care&lt;/i&gt; more. They are feedback machines at most places. A few months ago we could fill in a feedback form in exchange for a little desert. It&amp;#39;s not just a gimmick, they also act on it. A recurring complaint for Fazer Food&amp;amp;Co in last fall was that they were not offering 2.6 euro vegetarian meals. This semester there has been one every day.&lt;/p&gt;&lt;p&gt;They don&amp;#39;t only care about students, they care about the environment too. Many restaurants resell leftover food for reduced prices at the end of the day, with an extra reduction when you bring your own container. And I encountered one where no lunch trays were used. A bit annoying, but it would reportedly save 4000-4500 KWh of power, 12 000 liter of water and 15KG of soap.&lt;/p&gt;&lt;h2&gt;☁️🥗👼 ... a dream come true?&lt;/h2&gt;&lt;p&gt;Needless to say, I&amp;#39;ve had an amazing experience when it comes to eating here as a student. The Finns sometimes complain about their restaurants, but I&amp;#39;m sure that&amp;#39;s only because they don&amp;#39;t know otherwise. As a vegetarian/vegan it&amp;#39;s amazing how many options there are! The salad alone would often be enough for me.&lt;/p&gt;&lt;p&gt;Two years ago in Leuven (Belgium) I co-founded &lt;a href=&quot;http://greenofficeforkuleuven.be/projects/goecolicious&quot;&gt;GO Ecolicious&lt;/a&gt;, a student group at the &lt;a href=&quot;http://greenofficeforkuleuven.be/&quot;&gt;Green Office for KU Leuven&lt;/a&gt; that promoted ecological food in said university. Vegetarian meals at the monopolist student caterer &lt;a href=&quot;https://www.alma.be/&quot;&gt;Alma&lt;/a&gt; were poor and overpiced. Lactose, gluten and other allergens were not properly labeled, always present in the food and vegan meals were never an option. We lobbied for small changes but got little satisfactory response. The futuristic vision we had there is just a reality in Helsinki. It makes me happy to see that it&amp;#39;s possible, but also pains me that Alma is still behaving in prehistoric ways.&lt;/p&gt;&lt;p&gt;So what makes that Alma can not or does not implement these vital changes? In a next article I&amp;#39;ll compare the Finnish system to the Belgian system with Alma&amp;#39;s case specifically. Stay tuned!&lt;/p&gt;&lt;p&gt;Thor Galle&lt;/p&gt;&lt;p&gt;Text &amp;amp; images licensed under &lt;a href=&quot;https://creativecommons.org/licenses/by-sa/4.0/&quot;&gt;CC-BY-SA 4.0&lt;/a&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Disinformation documentaries]]></title><link>https://thorgalle.me/posts/2019/disinformation-documentaries</link><guid isPermaLink="false">/posts/2019/disinformation-documentaries</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Wed, 10 Apr 2019 10:33:00 GMT</pubDate><content:encoded>&lt;p&gt;Today I watched &lt;a href=&quot;https://www.vrt.be/vrtnu/a-z/pano/2019/pano-s2019a9/&quot;&gt;an interesting documentary&lt;/a&gt; (in Dutch) from Flemish public television about Russian disinformation in the US and Europe. Among the cases it explores are Russian blaming of Belgian F-16 fighters for killing civilians in Syria and the defamation of a Finnish reporter that investigated Russian interference in Finland.&lt;/p&gt;&lt;p&gt;The techniques used to disinform are not new however. While social media is the prevalent medium today, masses have been misled or centuries by parties that have incentive to do so. It reminded me of &lt;a href=&quot;https://www.imdb.com/title/tt3675568/&quot;&gt;Merchants of Doubt&lt;/a&gt;, a 2014 feature-length documentary that tells the stories of the tobacco industry fighting medical counterpressure with lies, and climate change deniers tainting scientific consensus with fake science.&lt;/p&gt;&lt;p&gt;The main takeaway is that sowing lies causes people to doubt truths spread in the mainstream media. Little false discourse is necessary to achieve a sufficient level of confusion about eg. climate change. When people are confused, they stick to what they want to believe and ignore information that disconfirms their beliefs (see &lt;a href=&quot;https://en.wikipedia.org/wiki/Cognitive_dissonance&quot;&gt;cognitive dissonance&lt;/a&gt;). That is the goal of the disinformers.&lt;/p&gt;&lt;p&gt;These documentaries remain relevant today with climate change denier Trump in office and the Russians doing their thing as we speak. They teach us to be wary of counter-information, wherever it may come from. Recommended to watch!&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Creating a movie visualization]]></title><description><![CDATA[An interactive visualization of all the movies I've seen since 2015]]></description><link>https://thorgalle.me/posts/2019/movieviz</link><guid isPermaLink="false">/posts/2019/movieviz</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Mon, 18 Mar 2019 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;I created a visualization of all the movies and series I have seen since 2015. &lt;b&gt;You can see it in a browser &lt;/b&gt;&lt;a href=&quot;http://web.thorgalle.me/movieviz/&quot;&gt;&lt;b&gt;here&lt;/b&gt;&lt;/a&gt;&lt;b&gt;.&lt;/b&gt;&lt;/p&gt;&lt;h3&gt;Mini usage guide:&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;It has two views. One shows the movies stacked by release date, the other one shows them stacked by the week that I watched them. Toggle these views from the menu left above or by pressing &amp;quot;R&amp;quot; or &amp;quot;W&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;See movie details and maybe my mini-review by clicking/tapping a movie.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Highlight my favorites by click the menu option or pressing &amp;quot;F&amp;quot;.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;What follows is a little history of the project.&lt;/p&gt;&lt;h2&gt;Watch list frenzy 🤓&lt;/h2&gt;&lt;p&gt;In early 2015 I started keeping a &amp;quot;watch list&amp;quot; with movies and series that were recommended to me in conversations. Some of those I really liked, so soon after I added a &amp;quot;watched&amp;quot; section. With this I could easily do my part in helping others find good content.&lt;/p&gt;&lt;p&gt;And so it happened that, &lt;b&gt;for 4 years&lt;/b&gt;, I faithfully kept noting down the movies I watched. The list looked like this:&lt;/p&gt;&lt;p&gt;In early 2018, while taking a data visualization course, I got the idea to visualize these movies on a timeline. I started by writing a script that parsed my textual movie annotations and converted these to a structured format, readable by a program.&lt;/p&gt;&lt;p&gt;With my fledgling knowledge of the visualization framework &lt;a href=&quot;https://d3js.org/&quot;&gt;D3.js&lt;/a&gt; I got as far as to visualize a dot for every day that I watched a film on a horizontal time scale. Terrific!&lt;/p&gt;&lt;p&gt;But then life threw other things on my plate. I left it there and forgot about the idea.&lt;/p&gt;&lt;h2&gt;Movie Visualization: Reborn ⚡️&lt;/h2&gt;&lt;p&gt;Exactly a year later, I found myself browsing through old project folders. I bumped on the visualized movie dots and got excited again. My studies in Finland are a bit more flexible, so there was time to spare for this project.&lt;/p&gt;&lt;p&gt;I built on the previous work and leveraged my newfound friendly spreadsheet tool &lt;a href=&quot;https://airtable.com/&quot;&gt;Airtable&lt;/a&gt; to collect my movie notes and watch dates in a machine-readable format. Airtable has an intuitive API that can be used to pull the most recent version of the data easily, without worrying about editing, parsing or exporting text files.&lt;/p&gt;&lt;p&gt;Next, I wrote a script that merged these &amp;quot;datafied&amp;quot; notes with information from the &lt;a href=&quot;https://www.omdbapi.com/&quot;&gt;Open Movie Database&lt;/a&gt;, a cool API that gives access to all IMDb information. The visualization was starting to come together now. I kept thinking of things to add.&lt;/p&gt;&lt;p&gt;The coolest by far was an ambient background color effect on movie details. I used &lt;a href=&quot;https://lokeshdhakar.com/projects/color-thief/&quot;&gt;a library&lt;/a&gt; for that and wrapped it with a statistical function that selects the most poppy color from each movie poster. This makes for a real poster palette:&lt;/p&gt;&lt;p&gt;Finally, I presented the visualization to a few movie-junkie friends around here to gauge their reactions. That resulted in the addition of a view to see movies by release date, which I prefer now. I also made it usable on smartphone screens.&lt;/p&gt;&lt;h2&gt;So what? 🤷‍♂️&lt;/h2&gt;&lt;p&gt;What&amp;#39;s the use of it? Not much. Sometimes things don&amp;#39;t need to be useful, they can just be fun to make.&lt;/p&gt;&lt;p&gt;However, I like browsing the visualization and hovering over the titles &lt;i&gt;(NB: in Firefox, there&amp;#39;s more hover effects supported)&lt;/i&gt;. It&amp;#39;s interesting to see that there are some release years from which I didn&amp;#39;t see that many movies, creating holes in the visualization. I&amp;#39;ve lately been catching up with those years by watching their Academy Awards&amp;#39; &lt;i&gt;Best Picture&lt;/i&gt; nominations.&lt;/p&gt;&lt;p&gt;And who knows, maybe someone will get inspiration for a next thing to watch while browsing the grid.&lt;/p&gt;&lt;h3&gt;How can I get this?&lt;/h3&gt;&lt;p&gt;The code is available to use &lt;a href=&quot;https://github.com/th0rgall/movievisualization/&quot;&gt;here&lt;/a&gt; on Github. All you need is basically a list or spreadsheet with movie titles. A properly formatted Airtable document should get you to your own version with minimal effort. Do ask if you need help setting it up, some programming skills are useful.&lt;/p&gt;&lt;p&gt;PS: I&amp;#39;m still open for movie recommendations. You can fill in &lt;a href=&quot;(https://airtable.com/shr9VA8GxYb77zw4U)&quot;&gt;this form&lt;/a&gt; for that. Find out &lt;a href=&quot;https://airtable.com/shrNdB5PAjYU3ZOcA&quot;&gt;here&lt;/a&gt; with Ctrl+F if I&amp;#39;ve seen it already ;) Thank you, thanks Airtable.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[7 Cool things at Slush 2018]]></title><description><![CDATA[Cool things I saw & experienced on Slush 2018 in Helsinki, Europe''s largest start-up event.]]></description><link>https://thorgalle.me/posts/2018/7-cool-things-at-slush-2018</link><guid isPermaLink="false">/posts/2018/7-cool-things-at-slush-2018</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 16 Dec 2018 19:41:00 GMT</pubDate><content:encoded>&lt;p&gt;With about 20,000 attendees, &lt;a href=&quot;http://slush.org/&quot;&gt;Slush&lt;/a&gt; is Europe&amp;#39;s largest start-up event. It&amp;#39;s a three day conference full of talks by technology industry leaders and young start-ups showing off their products. Slush is also the muddy substance you get when snow is partly melted, a common sight in Helsinki in December. For a technology &amp;amp; business student, this is the event of the year. I became a volunteer in the &amp;#39;sustainability team&amp;#39; (we showed people how to sort waste!). Outside my shifts I got the opportunity to wander along the booths &amp;amp; podia. Here are some cool things I saw &amp;amp; experienced.&lt;/p&gt;&lt;h2&gt;CTRL-Labs Neural Interface&lt;/h2&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://www.ctrl-labs.com/&quot;&gt;CTRL-labs&lt;/a&gt; is a startup that is making &lt;i&gt;neural interfaces&lt;/i&gt;, say, a device that will enable mind control. Their vision is to make the human output more efficient. While we are very good at processing incoming information with our brain, we can only do so much with our hand and speeds. They want to allow our brain to do more. That&amp;#39;s a fancy way of saying that they want to make Marvel&amp;#39;s mad scientist visions a reality.&lt;/p&gt;&lt;p&gt;How did they do it? They started by creating an armband that can intercept the neural signals our brain is sending to command our hands. Next, they learned to interprete the meaning of those signals with machine learning. Want to move your middle finger? It&amp;#39;s enough to &lt;i&gt;intend&lt;/i&gt; to do this movement, the signals will already get sent and interpreted. This makes it possible to control a virtual hand without even moving your hand. Or even cooler, to create an imaginary sixth finger and do something with it. It works, as long as you believe it hard enough (check the end of the demo).&lt;/p&gt;&lt;p&gt;They sure made an impression since they got &lt;a href=&quot;https://venturebeat.com/2019/09/23/facebook-acquires-ctrl-labs-to-advance-its-brain-machine-interface-efforts/&quot;&gt;acquired by Facebook&lt;/a&gt; in September 2019.&lt;/p&gt;&lt;h2&gt;E-bin: a waste sorter&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;http://www.bine.world/static/Bin-e_custo1-3e76bb3ebe41eaaa94152c42a6b713e2.png&quot;&gt;http://www.bine.world/static/Bin-e_custo1-3e76bb3ebe41eaaa94152c42a6b713e2.png&lt;/a&gt;&lt;/p&gt;&lt;p&gt;It doesn&amp;#39;t need much explanation: a waste bin that automatically sorts waste. Internally it uses a camera and some AI magic to detect what goes where. The machine reaches an accuracy of about 80%, which is arguably more efficient than what uninformed humans can achieve. We saw it demonstrated at the event.&lt;/p&gt;&lt;p&gt;Check out the Polish startup Bin-E &lt;a href=&quot;http://www.bine.world/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Creating human-protective technology - talk by Aza Raskin&lt;/h2&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;The &lt;a href=&quot;http://humanetech.com/&quot;&gt;Center for Humane technology&lt;/a&gt; is a non-profit that warns about the adverse effects current technology have on our personal lives and society, and finds way to combat it on different levels. It teaches designers to make products that respect human limits, for example, by preventing addiction or time drains. Aza Raskin is the co-founder, and in this talk he explains the attention economy of social media applications, he demonstrates that humans are &amp;quot;hackable&amp;quot; in the sense that they can be influenced to do things that they do not want to do.&lt;/p&gt;&lt;p&gt;Why is it that we spend so much time on Instgram, more than we actually want to? Aza explains:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It&amp;#39;s not that they&amp;#39;re showing us what we want, it&amp;#39;s that they&amp;#39;re showing us things that we can&amp;#39;t help but look at&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I encourage you to check out the full talk above!&lt;/p&gt;&lt;h2&gt;Momo child help application&lt;/h2&gt;&lt;div&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://mindofmyown.org.uk/&quot;&gt;Mind of my Own&lt;/a&gt; (MOMO) is a UK based app developer making apps for child care services and children. They offer easy ways for kids to express their thoughts in a digital format, without too much (intimidating) human contact.. Cool is that the child is in control over who they want to share their thoughts with. Only parents? Or a social worker too? &lt;/p&gt;&lt;p&gt;It reminded me of the start-up &lt;a href=&quot;https://soulcenter.be/&quot;&gt;Soul Center&lt;/a&gt; where I was an intern last year. We helped elderly people  toget their life story to carehome personnel and other stakeholders.
Rolls Royce autonomous ships&lt;/p&gt;&lt;h2&gt;Rolls Royce autonomous ships&lt;/h2&gt;&lt;p&gt;Rolls Royce, fancy cars? Or think, fancy ships. Autonomous ships driven by a plethora of sensors and AI technologies.&lt;/p&gt;&lt;p&gt;With lasers the distance to objects can be accurately measured. And it detects the movement of other boats or objects with cameras and other devices. For objects that don&amp;#39;t emit GPS signals, their course can also be predicted too. Useful for evading the odd blue whale or lumbering icebergs.&lt;/p&gt;&lt;p&gt;On Slush they demonstrated a test drive that was done at sea around Helsinki. They aim to have a fully autonomous ship in the oceans by 2035.&lt;/p&gt;&lt;h2&gt;Futures Platform foresight&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://www.futuresplatform.com/&quot;&gt;Futures Platform&lt;/a&gt; is a Finnish software-as-a-service that helps other businesses to predict the future. It&amp;#39;s not as complicated as it seems: they continuously study literature on emerging technologies and societal trends, and they combine their findings in a visualisation that shows how likely things are going to happen and how far away they are. You can see in a glance what&amp;#39;s coming at us: global warming, flying cars and neural interfaces? It will all be in there. It would be perfect tool for a student to find the next topic of a technology report, but unfortunately it is not targeted at students with its steep pricing plans.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Selecting text where you can't]]></title><link>https://thorgalle.me/posts/2018/selecting-text-where-you-cant</link><guid isPermaLink="false">/posts/2018/selecting-text-where-you-cant</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Wed, 28 Nov 2018 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Sometimes you want to copy-paste text from a web page, but it won&amp;#39;t work. Here are a few common reasons and workarounds.&lt;/p&gt;&lt;h3&gt;1. The text is embedded in a link&lt;/h3&gt;&lt;p&gt;The text might be contained by a link. If you click+drag to select text, you will move the link element! Sometimes it is not visible that the text you&amp;#39;re trying to select is, in fact, a link.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Solution: hold the ALT key while selecting (Option key on Mac)&lt;/b&gt;. This will allow you to select text in a clickable area like a button&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;h3&gt;2. Selecting is intentionally disabled on the site&lt;/h3&gt;&lt;p&gt;The site developer probably does not want you to copy the text. This happens regularly on news websites. They include JavaScript code that captures all your clicks and selections and &amp;#39;kills&amp;#39; these events. &lt;b&gt;Do not try this on a site where you don&amp;#39;t want to lose progress of some sort&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Solution: block JavaScript on the site&lt;/b&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Install the μBlock Origin plugin (&lt;a href=&quot;https://addons.mozilla.org/nl/firefox/addon/ublock-origin/&quot;&gt;Firefox&lt;/a&gt;, &lt;a href=&quot;https://chrome.google.com/webstore/detail/ublock-origin/cjpalhdlnbpafiamejdnhcphjbkeiagm&quot;&gt;Chrome&lt;/a&gt;, &lt;a href=&quot;https://safari-extensions.apple.com/details/?id=com.el1t.uBlock-3NU33NW2M3&quot;&gt;Safari&lt;/a&gt;, &lt;a href=&quot;https://www.microsoft.com/fi-fi/p/ublock-origin/9nblggh444l4?rtc=1&amp;activetab=pivot:overviewtab&quot;&gt;Microsoft Edge&lt;/a&gt;)&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Click on the μBlock icon to scripts for the site 
&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Reload the page&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Copy/pasting is now possible. &lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You want to re-enable the JavaScript after your copy-paste, a lot of sites depend on it today to function properly.&lt;/p&gt;&lt;p&gt;PS: μBloc Origin is a versatile, lightweight and open-source ad-blocker. It is probably better than other adblock plugins you might have installed.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Learn vocabulary from the environment]]></title><description><![CDATA[Learning advanced English vocabulary with vocabulary.com, supported by a plugin]]></description><link>https://thorgalle.me/posts/2018/learn-vocabulary-from-the-environment</link><guid isPermaLink="false">/posts/2018/learn-vocabulary-from-the-environment</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Tue, 01 May 2018 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;&lt;b&gt;TLDR: I made a browser plugin for the English language study tool &lt;/b&gt;&lt;a href=&quot;https://vocabulary.com&quot;&gt;&lt;b&gt;vocabulary.com&lt;/b&gt;&lt;/a&gt;&lt;b&gt;. It supports quick word adding from any site and translation when studying.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Huh, why are you learning vocabulary? Yes! Be it in a paper or a book, I regularly encounter words or expressions I do not yet know, mostly in academic texts.&lt;/p&gt;&lt;p&gt;One option is not to worry and to carry on. &lt;i&gt;I can derive the meaning from the context&lt;/i&gt;. However, you can get a seriously wrong idea of a word with that strategy. For example, for long I thought the word &amp;#39;gloomy&amp;#39; had something to do with &amp;#39;glow&amp;#39;, just because it sounded similar.&lt;/p&gt;&lt;p&gt;Once I finally looked it up, that didn&amp;#39;t seem too right:&lt;/p&gt;&lt;p&gt;I wanted to tackle this problem by keeping track of the words I did not know, and to study them systematically.&lt;/p&gt;&lt;h2&gt;101 quick fix: the spreadsheet&lt;/h2&gt;&lt;p&gt;I made a list. A long list. With the first entry planted in December 2015, it contained &lt;b&gt;540 words (!)&lt;/b&gt; that I did not completely understand yet.&lt;/p&gt;&lt;p&gt;I added on metadata about part-of-speech types, possible synonyms, possible Dutch translations, originating sentence, I-thought-it-meant entries, multiple languages,...&lt;/p&gt;&lt;p&gt;I kept collecting words while reading papers, books, articles, … but it was annoyingto keep track. Waiting until the Google spreadsheet opened to put in a word interrupted the flow of what I was doing. And even worse, it was fruitless. I never took a look at the list to study it.&lt;/p&gt;&lt;h2&gt;Vocabulary.com&lt;/h2&gt;&lt;p&gt;Then I found &lt;a href=&quot;https://vocabulary.com&quot;&gt;vocabulary.com&lt;/a&gt;, it is a web app that&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;. . . combines the world&amp;#39;s smartest dictionary with an adaptive learning game that will have you mastering new words in no time.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;In addition, it features funny and not-so-formal definitions of words. It&amp;#39;s really cool. Spending about 2-3 minutes on it almost daily for half a year, &lt;b&gt;I&amp;#39;ve now &amp;#39;mastered&amp;#39; about 150 words, and added around 400.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;A few things could still be improved. That&amp;#39;s why I made a browser plugin with &lt;b&gt;three main features:&lt;/b&gt;&lt;/p&gt;&lt;h2&gt;1. Adds words fast, everywhere&lt;/h2&gt;&lt;p&gt;You can select any word on any web page and add it to one of you vocabulary.com lists. The plugin will pick up the surrounding sentence and source and include it in the Vocabulary.com list:&lt;/p&gt;&lt;h2&gt;2. Shows translations in the learning game&lt;/h2&gt;&lt;p&gt;Associating a far-fetched English word with their Dutch equivalent helps me to get a grip on the nuances. That&amp;#39;s why it is helpful to show translations next to word definitions, which the addon does. You can select any language by clicking the language abbreviation.&lt;/p&gt;&lt;h2&gt;3. Links to useful services&lt;/h2&gt;&lt;p&gt;For every word, easy clickable shorcuts are shown next to the translations for &lt;a href=&quot;https://images.google.com/&quot;&gt;Google Images&lt;/a&gt; and &lt;a href=&quot;https://duckduckgo.com/&quot;&gt;DuckDuckgo Images&lt;/a&gt; (seeing what a word is can be really useful), &lt;a href=&quot;https://youglish.com&quot;&gt;YouGlish&lt;/a&gt; (for real-life pronounciations) and &lt;a href=&quot;http://giphy.com/&quot;&gt;GIPHY&lt;/a&gt; (for fun).&lt;/p&gt;&lt;h2&gt;Download &amp;amp; install&lt;/h2&gt;&lt;p&gt;The add-on is now enjoyed by some ~400 people! (update: March 2020)&lt;/p&gt;&lt;p&gt;Find it here for your browser:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://chrome.google.com/webstore/detail/vocabularycom-enhancer/diddacjdgklfjgnlmknacnakjcgdiegn&quot;&gt;Google Chrome&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/vocabulary-com-enhancer/&quot;&gt;Mozilla Firefox&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The code is available from my Github page&lt;a href=&quot;https://github.com/th0rgall/voc-adder&quot;&gt;&lt;/a&gt;. It will be published in the add-on stores soon.&lt;/p&gt;&lt;p&gt;&lt;i&gt;Update Nov &amp;#39;18: A cross-desktop platform destkop word adder is in the works. It has some neat features, like a selection of word meaning and integration with OS-wide text on macOS (including .pdf&amp;#39;s in Preview!)&lt;/i&gt;&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Installing your Firefox add-on permanently]]></title><link>https://thorgalle.me/posts/2018/installing-your-firefox-add-on-permanently</link><guid isPermaLink="false">/posts/2018/installing-your-firefox-add-on-permanently</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Mon, 30 Apr 2018 22:00:00 GMT</pubDate><content:encoded>&lt;p&gt;When you&amp;#39;re developing a cross-browser add-on, you probably want to try it out for a while in your daily browser. Unfortunately, contrary to Chrome, if you &lt;b&gt;temporarily load your extension in Firefox, it will be gone after a restart.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;That&amp;#39;s because Firefox &lt;b&gt;needs to sign your add-on before you can install it anywhere&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/Add-ons/Distribution&quot;&gt;The documentation&lt;/a&gt; explains so, but in a convoluted way. It&amp;#39;s actually pretty simple:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;Register at FF&amp;#39;s &lt;a href=&quot;https://addons.mozilla.org/en-US/developers/&quot;&gt;Developer Hub&lt;/a&gt; (top right) if you don&amp;#39;t have a FF account yet.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Go to the &lt;a href=&quot;https://addons.mozilla.org/en-US/developers/addon/submit/distribution&quot;&gt;add-on submission&lt;/a&gt; page.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Choose &lt;b&gt;&amp;#39;on your own&amp;#39;&lt;/b&gt;. This wil &lt;b&gt;immediately sign&lt;/b&gt; your add-on, but it won&amp;#39;t be listed in the add-on site for distribution. Ideal for a test version.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Upload your zipped add-on files.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;Sign, download the &lt;code&gt;.xpi&lt;/code&gt; file &amp;amp; enjoy. It can be installed from &lt;code&gt;about:addons → gear icon → Install Add-on from file&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</content:encoded></item><item><title><![CDATA[Dear Professor,]]></title><link>https://thorgalle.me/posts/2018/dear-professor</link><guid isPermaLink="false">/posts/2018/dear-professor</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Fri, 23 Feb 2018 11:49:00 GMT</pubDate><content:encoded>&lt;p&gt;Like most students, I made a resolution this semester to have a fresh start, to attend all classes and make sure I understand the main points in the lectures. I&amp;#39;ve been able to live up to that promise these two weeks, but I&amp;#39;m afraid you just made me break it.&lt;/p&gt;&lt;p&gt;The reason? It&amp;#39;s not your stuttering, I can live with that. Your verbal skills and physical presence are decent too. The problem is, &lt;b&gt;there is almost zero added value in coming to your class&lt;/b&gt;.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Almost every single word you say is projected black-white next to you.&lt;/b&gt; &lt;/p&gt;&lt;p&gt;Then, what do you expect me to do when sitting there? Should I listen to you, or read the PowerPoint content? When I try to listen, the slides distract me. When I try to read, your talking distracts me. The people around me checking their 9GAG feeds on Facebook don&amp;#39;t help either. I&amp;#39;d rather just browse the slides at home.&lt;/p&gt;&lt;p&gt;This is the prime example of PowerPoint illiteracy. Slides are meant to &lt;b&gt;support your message&lt;/b&gt;, they should not overwhelm everyone with an exhaustive summary of the course content. Do you want to distribute your course notes? &lt;i&gt;Awesome&lt;/i&gt;, just publish them online, thank you. They would form a terrific summary for later reference.&lt;/p&gt;&lt;p&gt;But please, &lt;b&gt;do not project these slides&lt;/b&gt;. They&amp;#39;re the reason I won&amp;#39;t be in your class today.&lt;/p&gt;&lt;p&gt;With kind regards,&lt;/p&gt;&lt;p&gt;Thor Galle&lt;/p&gt;&lt;p&gt;PS: check out &lt;a href=&quot;https://www.youtube.com/watch?v=Iwpi1Lm6dFo&quot;&gt;this&lt;/a&gt; TED talk. It might help you.&lt;/p&gt;</content:encoded></item><item><title><![CDATA[Technology extension opportunities in real life]]></title><link>https://thorgalle.me/posts/2018/technology-extension-opportunities-in-real-life</link><guid isPermaLink="false">/posts/2018/technology-extension-opportunities-in-real-life</guid><dc:creator><![CDATA[Thor Galle]]></dc:creator><pubDate>Sun, 21 Jan 2018 16:24:00 GMT</pubDate><content:encoded>&lt;p&gt;It&amp;#39;s striking how some insights from school can slip into daily life when you least expect them to. Today my sister showed off a Brother LW-20, an electronic typerwriter. She had rescued it from our grandparents who wanted to discard it. It&amp;#39;s a nice example of how a new technology (the computer) substitutes an old one (the typewriter), something I learned about recently.&lt;/p&gt;&lt;p&gt;When hearing &amp;quot;typewriter&amp;quot;, I would think about the mechanical type with pounding metal letter sticks. Yet, this particular model was on the market somewhere in the 90&amp;#39;s: a period were computers were growing fast. A computer had more possibilities concerning word processing than typewriters, Microsoft Word was already available in the 80&amp;#39;s. &lt;/p&gt;&lt;p&gt;And that&amp;#39;s where the insight striked: according to &lt;a href=&quot;https://d1c25a6gwz7q5e.cloudfront.net/reports/2016-02-03-Adner-Kapoor-SMJ-2015_3.pdf&quot;&gt;a paper&lt;/a&gt; of Adner &amp;amp; Kapoor (2015), old technologies can still survive for some time while better technologies are available, given that there is an &lt;i&gt;extension opportunity&lt;/i&gt; for the old technology. More specifically, some innovations for the new technology can be &amp;quot;spilled back&amp;quot; to the old one.&lt;/p&gt;&lt;p&gt;This seems to be the case for the Brother: a &lt;a href=&quot;https://de.wikipedia.org/wiki/Brother_LW-Reihe&quot;&gt;German Wikipedia article&lt;/a&gt; tells us it was marketed as an affordable, dedicated word processor. It had some &amp;quot;modern&amp;quot; features like a screen to edit text on and compatibility with floppy storage for documents: features that got spilled over from computers. &lt;/p&gt;&lt;p&gt;It&amp;#39;s the closest thing to a computer my grandparents have ever owned, and at the same time, it represented the last gasp of the typewriter.&lt;/p&gt;</content:encoded></item></channel></rss>