<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>Hyperlink Your Heart - Technology</title><link href="https://blog.hyperlinkyourheart.com/" rel="alternate"></link><link href="https://blog.hyperlinkyourheart.com/feeds/category.technology.atom.xml" rel="self"></link><id>https://blog.hyperlinkyourheart.com/</id><updated>2026-07-10T15:57:00+02:00</updated><subtitle>Until there's nothing left.</subtitle><entry><title>Home Brew Bike Speedometer</title><link href="https://blog.hyperlinkyourheart.com/speedometer.html" rel="alternate"></link><published>2026-07-10T15:57:00+02:00</published><updated>2026-07-10T15:57:00+02:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2026-07-10:/speedometer.html</id><summary type="html">&lt;p&gt;I wrote a speedometer app for an old Android phone to use on my&amp;nbsp;bike.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I have a phone mount on my bike, and one of the things I had a notion to use it for was to use my phone as a bike computer or speedometer. However I read that the vibration can damage a phone&amp;#8217;s accelerometer over time so I was a bit wary of using the phone I use day to day for that. On the rare occasions I need navigation, it will be worth the risk for that, but not just to know my speed on my regular&amp;nbsp;routes.&lt;/p&gt;
&lt;p&gt;Thankfully I have a couple of old phones stashed away. The one I would have preferred to use, due to its relative newness and larger screen, was a Motorola Moto G5, but unfortunately it would no longer power on. I believe the power button was dodgy when I retired it. That left me with the Samsung Galaxy S &lt;span class="caps"&gt;GT&lt;/span&gt;-i9000 (what a mouthful), a 16 year old device with a 4&amp;#8221; screen. And a removable&amp;nbsp;battery!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo of the device with the back cover off and the battery removed" src="https://blog.hyperlinkyourheart.com/images/speedometer/battery.jpg" title="Look at what they took from us."&gt;&lt;/p&gt;
&lt;p&gt;When I powered it on I expected to find Android 2 point something, which I figured might be too old to be useful for anything. It turned out I had installed CyanogenMod on it at some point, but for some reason it was stuck in a boot loop. Once I figured out the three-finger salute to get into the recovery menu (home, power, volume up) I was able to reset it and it booted normally. The version of the Android base was 4.3.1, an improvement over 2.x at least. Nonetheless the prospect of installing an existing speedometer app did not look good. The app store was inaccessible as was much of the web due to a lack of support for &lt;span class="caps"&gt;TLS&lt;/span&gt; 1.2 (I think). I think I couldn&amp;#8217;t find a speedometer app that supported an Android version that old even if I could get an &lt;span class="caps"&gt;APK&lt;/span&gt; of&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;To be honest, I&amp;#8217;m not sure I looked very&amp;nbsp;hard.&lt;/p&gt;
&lt;p&gt;So I fired up Claude and vibe-coded&amp;#8230; &lt;span class="caps"&gt;LOL&lt;/span&gt; jk I would never. I&amp;#8217;m not really a fan of Android development but I can do it when I have to, so I set about building a basic app targeting &lt;span class="caps"&gt;SDK&lt;/span&gt; 18 as required for Android&amp;nbsp;4.3.&lt;/p&gt;
&lt;p&gt;There were some challenges to this, both due to the hardware and the ancient &lt;span class="caps"&gt;API&lt;/span&gt; version. On the hardware side, the &lt;span class="caps"&gt;USB&lt;/span&gt; port is apparently dodgy, and &lt;span class="caps"&gt;ADB&lt;/span&gt; could only occasionally see the device. The &lt;span class="caps"&gt;GPS&lt;/span&gt; is also really crap compared to recent devices. I could not get a signal in my office, or indeed anywhere indoors, and even taking it out on the roof it took quite a while to get a location. Not much of a problem for actually &lt;em&gt;using&lt;/em&gt; the app because I &lt;em&gt;usually&lt;/em&gt; cycle outdoors, but it made testing a real chore. For a while I thought I had no way of even seeing stack traces from crashes, but it seems that when you disconnect and reconnect a device you can see the logs from the period it was disconnected, so that helped a lot once I realised&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;On the software side, the Android Jetpack libraries were not available, and a lot of documentation and advice refers to these rather than the legacy library. For ages I was getting crashes due to a method I had not implemented, &lt;code&gt;onStatusChanged&lt;/code&gt;, because the documentation said it was deprecated. Turned out it was required on Android versions &amp;lt; 11, and even though I had 4.3 as my minimum, Android Studio did not flag its absence as a problem. Ah well. Should have &lt;span class="caps"&gt;RTFM&lt;/span&gt; a little more&amp;nbsp;closely&amp;#8230;&lt;/p&gt;
&lt;p&gt;The &lt;span class="caps"&gt;UI&lt;/span&gt; I implemented emphasises the current speed, but shows the max speed achieved in the session and the current altitude as well. There is also an indicator for if there is a &lt;span class="caps"&gt;GPS&lt;/span&gt; &amp;#8220;lock&amp;#8221; (just goes to false if there hasn&amp;#8217;t been a location update in the last ten seconds). I think it looks pretty&amp;nbsp;elegant.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo of the device displaying the app's UI - white &amp;amp; gray text on a black background. The speed (currently 0.0) is large and centred, with the max speed and current altitude below it." src="https://blog.hyperlinkyourheart.com/images/speedometer/ui.jpg" title="Not subjecting my main phone to all this dust is another advantage of using an old beater."&gt;&lt;/p&gt;
&lt;p&gt;The code isn&amp;#8217;t very interesting or anything, but &lt;a href="https://codeberg.org/khoulihan/speedometer" title="Speedometer project on Codeberg"&gt;here it is&lt;/a&gt; if you&amp;#8217;re curious or have an old Android device you would similarly like to repurpose. I don&amp;#8217;t really have any intention of maintaining it or creating releases of&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;The battery life is actually quite impressive. In some rough testing I did it lasted over 14 hours with the screen on for most of the time, but otherwise idle. I haven&amp;#8217;t tried to determine the effective battery life when using the app, but I think it will be plenty for my&amp;nbsp;purposes.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo of the phone mounted in my cockpit" src="https://blog.hyperlinkyourheart.com/images/speedometer/context.jpg" title="On the road."&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="Selfie of me (middle-aged man) at a cafe after a cycle with a cortado in front of me." src="https://blog.hyperlinkyourheart.com/images/speedometer/selfie.jpg" title="Vibin'"&gt;&lt;/p&gt;</content><category term="Technology"></category><category term="sustainability"></category><category term="cycling"></category><category term="android"></category></entry><entry><title>Framework Pros and Cons</title><link href="https://blog.hyperlinkyourheart.com/framework-pro.html" rel="alternate"></link><published>2026-05-23T18:25:00+02:00</published><updated>2026-05-23T18:25:00+02:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2026-05-23:/framework-pro.html</id><summary type="html">&lt;p&gt;Framework&amp;#8217;s recently announced &amp;#8220;Pro&amp;#8221; model presents a&amp;nbsp;dilemma.&lt;/p&gt;</summary><content type="html">&lt;p&gt;Last month, Framework announced their latest additions to their lineup. The most significant was a &amp;#8220;Pro&amp;#8221; version of the Framework 13, very explicitly modeled on, and compared to, the MacBook Pro, with a fully machined and more rigid aluminium chassis, improved haptic touchpad, and most significantly to my mind, increased battery capacity. Also improved speakers and a touchscreen display - but I don&amp;#8217;t care much about either of&amp;nbsp;those.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo of the Framework Pro taken from their blog post about the launch. It is viewed from one of the rear corners with the lid partly open. One of the part adapters is translucent orange, which seems to be the signature colour of the model." src="https://blog.hyperlinkyourheart.com/images/framework-pro/framework-pro.jpg" title="The new hotness"&gt;&lt;/p&gt;
&lt;p&gt;The increase in battery life is the most significant for me because that has always seemed like an area where the 13 fell short of other laptops. The increase in battery life is partly due to a new mainboard with efficient Intel Core Ultra processors and the use of &lt;span class="caps"&gt;LPCAMM2&lt;/span&gt; memory, and partly due simply to an increase in the battery capacity to 74Wh. Unfortunately this latter change comes at a cost: the new battery is only compatible with the redesigned Pro chassis which was made fuller at the front to accommodate&amp;nbsp;it.&lt;/p&gt;
&lt;p&gt;This presents something of a dilemma for me when considering my upgrade options. I have an original 55Wh battery and would see a big boost in battery life by upgrading to a 74Wh one even without a more efficient processor or &lt;span class="caps"&gt;RAM&lt;/span&gt;, but that upgrade now involves replacing the bottom chassis, input cover, and speakers as well as the battery. That doesn&amp;#8217;t seem worth it when my current battery and chassis are perfectly fine, but it is nonetheless tempting. Will it seem worth it when my current battery is degraded and the only option for my current chassis is 60Wh? When it comes time to upgrade my mainboard (something I hadn&amp;#8217;t planned on for several years yet), am I going to want to put the new mainboard in a chassis that is stuck with a lower capacity battery, where I won&amp;#8217;t see the full possibilities of improved chip&amp;nbsp;efficiencies?&lt;/p&gt;
&lt;p&gt;It&amp;#8217;s good in many ways that they are iterating on their designs and addressing flaws in them. They maintained backwards compatibility for the new mainboards, per their promises. However as I discussed in a &lt;a href="https://blog.hyperlinkyourheart.com/values.html" title="Value and Values post"&gt;previous post&lt;/a&gt;, they are still a tech startup operating under capitalism, and their incentives within that system are in conflict with their stated values. They have to sell new laptops, and upgrades to people who have already bought laptops from them. The idea of piecemeal upgrades to a laptop, a laptop of Theseus as many describe it, is interesting, but with this new model I feel like I am being subtly pushed to buy more upgrades than I need, or eventually just resorting to buying a whole new&amp;nbsp;laptop.&lt;/p&gt;
&lt;p&gt;I would be curious to know if their whole model is resulting in less hardware being produced overall or if it actually results in some components (mainboards) being produced in larger quantities as some people jump on every new upgrade, while others (chassis) have been replaced less frequently, but only because up until now there was no upgrade path for them. I frequently see people on the Framework subreddit talking about having gone through several mainboard upgrades and other upgrades on machines that are only a few years old. What is the net benefit overall? We need some sort of environmental impact metric for Framework purchasers vs purchasers of laptops from other&amp;nbsp;manufacturers.&lt;/p&gt;
&lt;p&gt;For my own part, I think I will resist the upgrade temptation for&amp;nbsp;now.&lt;/p&gt;</content><category term="Technology"></category><category term="framework"></category><category term="sustainability"></category></entry><entry><title>Value and Values</title><link href="https://blog.hyperlinkyourheart.com/values.html" rel="alternate"></link><published>2025-11-30T13:42:00+01:00</published><updated>2025-11-30T17:25:00+01:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2025-11-30:/values.html</id><summary type="html">&lt;p&gt;Some reflections on what tech companies actually value, with particular reference to Framework&amp;#8217;s recent sponsorship choices, but really more generally than&amp;nbsp;that.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I&amp;#8217;ve been a Framework enjoyer for a couple of years now. Indeed, I&amp;#8217;m writing this on my Framework 13. I didn&amp;#8217;t buy it because it occupied the best position in the performance/portability/price matrix of the options available to me. I bought it because it offered decent performance and portability while potentially being significantly more repairable and upgradeable than its competitors, and because they put some effort into ensuring Linux is well supported. In other words, it embodied my values in ways that other laptops did not, and I thought that was worth paying a premium for. The value proposition is in the values of the company. I&amp;#8217;m careful to point this out when recommending it to people because I don&amp;#8217;t want them to think they are buying a &amp;#8220;MacBook but&amp;nbsp;repairable&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="My Framework 13 on a table with its lid slightly open, casting an orange glow on the palm rest. It has an orange bezel and a black DBrand skin." src="https://blog.hyperlinkyourheart.com/images/values/myframework.jpg" title="My Framework 13. Repairable. Not a MacBook."&gt;&lt;/p&gt;
&lt;p&gt;Of course I was aware that there were &amp;#8220;risks&amp;#8221; involved. The main one that came to mind was that they might go out of business at some point and that would likely be the end of any significant repairability advantage, as despite the clever design, it is not commodity hardware as you would find in a desktop &lt;span class="caps"&gt;PC&lt;/span&gt;. Or of course, they might just abandon the model I have eventually, or abandon their current focus altogether. Any of these could happen if their business model and the niche they occupy turns out to not be sustainable, or profitable, or they fail to grow that niche market. In such an event, it would be the same as if I had bought any other laptop. They joke all the time about doing an &lt;span class="caps"&gt;IPO&lt;/span&gt;, something which might significantly effect their ability to stick to their principles, and it comes across very &amp;#8220;ha ha, only&amp;nbsp;serious&amp;#8221;.&lt;/p&gt;
&lt;p&gt;One risk that hadn&amp;#8217;t really occurred to me was that they would &lt;a href="https://community.frame.work/t/framework-supporting-far-right-racists/75986" title="Community forum thread about Framework sponsorship issues."&gt;associate their brand with fascism&lt;/a&gt; in a ridiculous &lt;span class="caps"&gt;PR&lt;/span&gt;&amp;nbsp;own-goal.&lt;/p&gt;
&lt;p&gt;But, why wouldn&amp;#8217;t I have expected something like that? If I could anticipate that they might abandon their stated values for predictable business reasons, why would I not expect that they might betray a set of values that were left unstated, ones that I merely assumed they held as a baseline of decency? Despite presenting themselves as a hacker-friendly, values-forward company doing things in new and different ways in order to tackle an intractable problem, at the end of the day they are still a &lt;span class="caps"&gt;VC&lt;/span&gt; funded Silicon Valley startup. It is a joke at this point how many such entities have abandoned their stated principles or otherwise betrayed their customers and the public in the pursuit of growth, or for political expedience, and many more whose principles were always obvious lies, or based on disingenuous right-wing distortions of values like &amp;#8220;free&amp;nbsp;speech&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;img alt="The &amp;quot;I don't want to play with you any more&amp;quot; meme, with Google and &amp;quot;Don't be evil&amp;quot;" src="https://blog.hyperlinkyourheart.com/images/values/google.jpg" title="The most famous and blatant example"&gt;&lt;/p&gt;
&lt;h2&gt;What &lt;em&gt;Are&lt;/em&gt; Corporate Values&amp;nbsp;Even?&lt;/h2&gt;
&lt;p&gt;While there are sometimes better or worse choices amongst products and services, from an ethical perspective, it is not in the nature of the companies that produce them under the capitalist system to put principles or values above the accumulation of&amp;nbsp;capital.&lt;/p&gt;
&lt;p&gt;&lt;img alt="I don't know the name of this meme, but it's the one with the guy about to smash a card onto the table in a card game. He's labeled &amp;quot;Yo&amp;quot; (me), the table is &amp;quot;Una conversacion casual&amp;quot; (a casual conversation), and his card is &amp;quot;El problema es el capitalismo&amp;quot; (the problem is capitalism)" src="https://blog.hyperlinkyourheart.com/images/values/el-problema.jpg" title="I just can't help myself."&gt;&lt;/p&gt;
&lt;p&gt;One obvious problem with such organisations is of course that they are profit-seeking, and subject to the whims of the market. If a strategy isn&amp;#8217;t working (i.e. is not resulting in growth), a company that doesn&amp;#8217;t adapt will stagnate or wither away to nothing as their competitors crowd them out of the market. If a &lt;em&gt;principle&lt;/em&gt; is an obstacle to that adaptation, then it is likely to be discarded, because holding to it would be an existential threat. This is the main source of the risks I identified above. If they manage to survive and grow to the point where they are dominating or even monopolising their industry, it is likely that any putative values will have long been abandoned. And if they are bought out by a larger company, there is no reason to expect that their values will survive the&amp;nbsp;transition.&lt;/p&gt;
&lt;p&gt;Another problem is that they are hierarchical; private tyrranies in fact. The feelings, opinions, obsessions and values of their owners, &lt;span class="caps"&gt;CEO&lt;/span&gt; and other officers, carry much more weight than anybody working within them, and certainly more than their customers. Sometimes this can work contrary to a company&amp;#8217;s need for growth. A principled owner/&lt;span class="caps"&gt;CEO&lt;/span&gt; could &lt;em&gt;potentially&lt;/em&gt; stick with lower-growth strategies as long as there is nobody in a position to fire them - though I wouldn&amp;#8217;t expect such a situation to last indefinitely. An unhinged &lt;span class="caps"&gt;CEO&lt;/span&gt; on a bender could help elect a fascist who is hostile to his company&amp;#8217;s interests, confident that his cult of personality will protect him from the consequences. Or in a somewhat less extreme scenario, the &lt;span class="caps"&gt;CEO&lt;/span&gt; might just want to help out some of his problematic fave open source developers, and not want to think about why that is a problem for some people, and there&amp;#8217;s nothing that anybody can really do about it except make angry noises online and refuse to buy any more of the company&amp;#8217;s products. We can&amp;#8217;t fork a laptop manufacturer like we can an open source project, unfortunately (and forking a major open source project isn&amp;#8217;t exactly trivial&amp;nbsp;either).&lt;/p&gt;
&lt;p&gt;These people exist in completely different milieu than the rest of us, responsible for millions or billions of &lt;code&gt;${currencyUnits}&lt;/code&gt; worth of undemocratically allocated capital. Our concerns about the swelling tide of racist and queerphobic rhetoric and attacks around the world are abstract to them, mere differences of opinion. They and their peers are concerned about real things, like access to cheap skilled labour, regulations that might reduce their power or increase their costs, and taxes that might shave a few million off their accumulated or potential billions. They&amp;#8217;re more likely to see it as prudent to appease fascist movements than to oppose them, once they come to power. Violent street gangs, uniformed or otherwise, don&amp;#8217;t really affect them. The policy whims of a mercurial leader might. And anyway, if they play their cards right they might get to be the Hugo Boss or &lt;span class="caps"&gt;IBM&lt;/span&gt; of the 21st century. Or get their own government&amp;nbsp;department. &lt;/p&gt;
&lt;p&gt;In the world of capitalist tech companies, stated principles and values are best understood as marketing: nice, cheap, non-binding promises that bring certain demographics to the trough, or make people feel good about their purchases, that they are making responsible choices or contributing to some improvement to the world. It certainly worked well enough on me, for Framework. They can hold to them, or pretend to, as long as they are useful, and abandon them when they become a burden. Their real values emerge from the inhuman machinery of the capitalist system, and the class interests of men twisted by privilege and&amp;nbsp;power.&lt;/p&gt;
&lt;h2&gt;What is to be&amp;nbsp;done?&lt;/h2&gt;
&lt;p&gt;The laptop market is the way it is because it is more profitable to manufacture disposable products and sell replacements for them in the future than it is to make repairable products that you may sell fewer of. Good intentions and green consumerism is unlikely to change that, as admirable as the attempt may&amp;nbsp;seem.&lt;/p&gt;
&lt;p&gt;Not to be all whatabouty, but certainly it is absurd to say that it is &lt;em&gt;bad&lt;/em&gt; to buy a Framework, and &lt;em&gt;good&lt;/em&gt; to buy a laptop from a company with a dismal track record on repairability, which is currently also sucking up to a fascist administration. All for-profit tech companies are somewhere on a spectrum from bad to worse, and there is no ethical consumption under&amp;nbsp;capitalism.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Photo of Tim Apple presenting that engraved glass disc with the golden base to Donald Trump. The disc is foregrounded, with the two men out of focus in the background." src="https://blog.hyperlinkyourheart.com/images/values/timapple.jpg" title="Orange man bad. Apple man also bad."&gt;&lt;/p&gt;
&lt;p&gt;No doubt there are many regulations that could be put in place to increase repairability of all sorts of devices and reduce other sources of e-waste. Stuff along the lines of the &lt;span class="caps"&gt;EU&lt;/span&gt;&amp;#8217;s regulations on &lt;a href="https://eur-lex.europa.eu/eli/reg/2023/1670/oj" title="EU regulation on phone repairability."&gt;phone repairability&lt;/a&gt;, and the &lt;a href="https://commission.europa.eu/news-and-media/news/eu-common-charger-rules-power-all-your-devices-single-charger-2024-12-28_en" title="European Commission article about the common charger rules."&gt;common charger rules&lt;/a&gt; that came into force for most devices in December 2024, and will apply to laptops from April 2026. We should be dictating to the industry the &lt;a href="https://repair.eu/whats-my-right-to-repair/" title="Right to Repair EU's chart of right to repair legislation by device type."&gt;standards of repairability&lt;/a&gt; and sustainability that they have to meet, not hoping for plucky American startups to innovate a new set of norms - and we should be ruthless in our&amp;nbsp;demands.&lt;/p&gt;
&lt;p&gt;In the meantime, and always, we should take the commitments of for-profit companies with a grain of salt, and not allow their products to define us. I maintain that the tech industry will not reflect our values until we own everything, from the chip fabs to the stars, and the profit motive is a thing of the&amp;nbsp;past.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Pixel art portrait of James Connolly" src="https://blog.hyperlinkyourheart.com/images/values/jimmy.png" title="To adapt a phrase..."&gt;&lt;/p&gt;</content><category term="Technology"></category><category term="framework"></category><category term="capitalism"></category><category term="fascism"></category><category term="socialism"></category><category term="politics"></category></entry><entry><title>Syncthing Update</title><link href="https://blog.hyperlinkyourheart.com/syncthing.html" rel="alternate"></link><published>2023-04-08T23:15:00+02:00</published><updated>2023-04-08T23:15:00+02:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2023-04-08:/syncthing.html</id><summary type="html">&lt;p&gt;Joplin sync didn&amp;#8217;t work out long term, but I&amp;#8217;m still using&amp;nbsp;Syncthing&lt;/p&gt;</summary><content type="html">&lt;p&gt;In a &lt;a href="https://blog.hyperlinkyourheart.com/joplin.html" title="Previous Joplin &amp;amp; Syncthing post"&gt;previous instalment&lt;/a&gt;, I described how I used &lt;a href="https://syncthing.net/" title="Syncthing website"&gt;Syncthing&lt;/a&gt; to sync my notes in &lt;a href="https://joplinapp.org/" title="Joplin's website"&gt;Joplin&lt;/a&gt; on my laptop to Joplin on my phone. Unfortunately that arrangement didn&amp;#8217;t last long - updates to different versions of Joplin on different devices resulted in incompatible versions of the notes database being synced, and at one point the Android version became unable to export to the filesystem at all. I never got to the bottom of that, but I had moved to using &lt;a href="https://logseq.com/" title="Logseq website"&gt;Logseq&lt;/a&gt; for most of my notes on the computer anyway, so it didn&amp;#8217;t really matter&amp;nbsp;much.&lt;/p&gt;
&lt;p&gt;I also mostly fell out of using Syncthing, since I no longer required it for its primary purpose. However I got a Framework laptop recently and had the need to sync my Logseq graphs to it, as well as my music collection, work files, etc. It was such a joy to get it set up and watch files start to zip across to the new machine that I once again had to sing the praises of this amazing piece of&amp;nbsp;software.&lt;/p&gt;
&lt;p&gt;Some shares I have set up so&amp;nbsp;far:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The camera roll on my phone&lt;/strong&gt; - send only so that remote devices can&amp;#8217;t add or delete photos. It&amp;#8217;s great to have photos zip across to whichever computer I&amp;#8217;m using without having to involve Google&amp;nbsp;Photos.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The Default sync folder&lt;/strong&gt; - why not? If some random file is needed everywhere it can go in there. It always throws me a bit that these create a common shared folder rather than each device&amp;#8217;s folder being it&amp;#8217;s own thing, but it&amp;#8217;s cool, it&amp;#8217;s fine, I&amp;#8217;ll get used to&amp;nbsp;it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My Logseq graph folders&lt;/strong&gt; - I set these up to backup any changes just in case, because Syncthing will not perform merges. However I&amp;#8217;m not really that worried about it because I will only work on one machine at a time, and if the sync runs regularly it shouldn&amp;#8217;t be a&amp;nbsp;problem.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;My music collection&lt;/strong&gt; - I set this up to ignore &lt;code&gt;*.zip&lt;/code&gt; and &lt;code&gt;*.part&lt;/code&gt; for uh&amp;#8230; reasons. One of the nuisances of a collection of downloaded music is ensuring that every new acquisition gets to every device where you might want to listen to it &lt;em&gt;before&lt;/em&gt; you want to listen to it. Well, problem solved! And no more shaming from Spotify for streaming the same album on repeat for several months! (It was Manu&amp;nbsp;Chao)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Several shares specifically between two particular devices&lt;/strong&gt; e.g. huge desktop replacement laptop to the Framework, for when I want to share files specifically between those but not my&amp;nbsp;phone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#8217;m considering syncing some specific work folders as well so I can more easily untether from my desk, but&amp;#8230; haven&amp;#8217;t decided&amp;nbsp;yet.&lt;/p&gt;</content><category term="Technology"></category><category term="foss"></category><category term="privacy"></category></entry><entry><title>Joplin &amp; Syncthing</title><link href="https://blog.hyperlinkyourheart.com/joplin.html" rel="alternate"></link><published>2021-08-28T15:32:00+02:00</published><updated>2021-08-28T15:32:00+02:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2021-08-28:/joplin.html</id><summary type="html">&lt;p&gt;I recently switched from Evernote to Joplin, using Syncthing to sync my notes between&amp;nbsp;devices.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I&amp;#8217;ve been using Evernote for quite a few years now for keeping work and personal notes, despite never really being happy with it. Aside from the fact of entrusting my data to a private company, most of my issues with it were minor nuisances, and momentum kept me using it because I didn&amp;#8217;t see a good alternative that seemed impressive enough to be worth the hassle of migration. I considered writing my own alternative many times, but of course there were even greater barriers to&amp;nbsp;that!&lt;/p&gt;
&lt;p&gt;A few weeks ago I decided to finally take the plunge and try out &lt;a href="https://joplinapp.org/" title="Joplin's website"&gt;Joplin&lt;/a&gt;, a &lt;span class="caps"&gt;FOSS&lt;/span&gt; note-taking desktop and mobile&amp;nbsp;app.&lt;/p&gt;
&lt;h2&gt;Joplin&lt;/h2&gt;
&lt;p&gt;Migrating to Joplin was relatively easy, as it can import Evernote&amp;#8217;s &amp;#8220;&lt;span class="caps"&gt;ENEX&lt;/span&gt;&amp;#8221; export format. Unfortunately Evernote made me &lt;a href="https://help.evernote.com/hc/en-us/articles/209005557-Export-notes-and-notebooks-as-ENEX-or-HTML" title="How to export notes from Evernote"&gt;jump through a few hoops&lt;/a&gt; to create these files - the web app, which I usually use, wouldn&amp;#8217;t do it, and the export had to be done notebook by&amp;nbsp;notebook.&lt;/p&gt;
&lt;p&gt;Joplin did a fairly good job of converting the formatting to its native Markdown, but my notes were a mess anyway so it hardly mattered. The main thing that seemed to go wrong was headers being converted to bold text instead of actual header lines. I also had to reorganise the notebook hierarchy since the notebooks were exported and imported individually. With that done I was about where I had been with Evernote, albeit only on my main&amp;nbsp;computer.&lt;/p&gt;
&lt;p&gt;Joplin includes both a Markdown editor and a &lt;span class="caps"&gt;WYSIWYG&lt;/span&gt; editor. I haven&amp;#8217;t tried the &lt;span class="caps"&gt;WYSIWYG&lt;/span&gt; editor because I like writing in Markdown these days, and I&amp;#8217;m hoping using it will result in more structured notes than I&amp;#8217;ve been keeping in the past. The default layout has the Markdown and rendered output side by side which I do find a little strange - I can never decide which side I should be reading. However, there is a button in the top right corner of the window to switch between dedicated editing, reading and side-by-side&amp;nbsp;modes.&lt;/p&gt;
&lt;h2&gt;Sync That&amp;nbsp;Thing&lt;/h2&gt;
&lt;p&gt;Joplin can sync between instances using all of the main cloud storage services as well as its own cloud offering. However, the method that appealed to me, because it keeps my notes out of anybody else&amp;#8217;s hands, was to use &lt;a href="https://syncthing.net/" title="Syncthing website"&gt;Syncthing&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Syncthing is a &lt;span class="caps"&gt;P2P&lt;/span&gt; file synchronisation protocol and app that supports all the operating systems that I use (not iOS), and doesn&amp;#8217;t require any complex network&amp;nbsp;configuration.&lt;/p&gt;
&lt;p&gt;Joplin is actually unaware of Syncthing - to use it, you need to select the &amp;#8220;File system&amp;#8221; sync target and point it to a folder. It will periodically export changes to this folder and import any changes it finds&amp;nbsp;there.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Joplin sync settings" src="https://blog.hyperlinkyourheart.com/images/joplin/joplinsettings.png" title="Joplin sync settings"&gt;&lt;/p&gt;
&lt;p&gt;Syncthing is managed via a web interface on localhost port 8384 by default. There are two main tasks to perform here - connecting your devices, and sharing your notes&amp;nbsp;folder.&lt;/p&gt;
&lt;p&gt;Devices in Syncthing are identified by quite unwieldy &lt;span class="caps"&gt;SHA&lt;/span&gt;-256 hashes, but it provides a number of ways to simplify exchanging these. Devices on the &lt;span class="caps"&gt;LAN&lt;/span&gt; are listed in the add device dialog, and if you&amp;#8217;re using it on mobile there is an option to scan a &lt;span class="caps"&gt;QR&lt;/span&gt; code for the device you&amp;#8217;re connecting. Devices have to grant permission to other devices that add them, and once they do you can choose which folders to&amp;nbsp;share.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Add device" src="https://blog.hyperlinkyourheart.com/images/joplin/adddevice.png" title="Add device"&gt;&lt;/p&gt;
&lt;p&gt;Adding a folder is just a matter of entering the path to it on the file system, and giving it a name. You can select existing remote devices to sharing with on the &amp;#8220;Sharing&amp;#8221; tab, or share it later. Devices have to approve shared folders as well, and you will have an opportunity to choose a target location at that point as&amp;nbsp;well.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Add folder" src="https://blog.hyperlinkyourheart.com/images/joplin/addfolder.png" title="Add folder"&gt;&lt;/p&gt;
&lt;p&gt;Syncthing on Android actually has two user interfaces, a native one and the same web &lt;span class="caps"&gt;UI&lt;/span&gt; as is available on desktop, which is a bit confusing. I found I had to drop down to the web &lt;span class="caps"&gt;UI&lt;/span&gt; to approve remote device and folder&amp;nbsp;connections.&lt;/p&gt;
&lt;p&gt;The Joplin configuration should be basically the same on any devices you want to sync - just choose the &amp;#8220;File system&amp;#8221; target and point to the synced notes folder. On desktop there is an option to clear the local notes and take everything fresh from the sync target, but the Android app seems to be missing this. As such, you might end up with multiple copies of Joplin&amp;#8217;s initial documentation&amp;nbsp;notes.&lt;/p&gt;
&lt;h2&gt;Snags&lt;/h2&gt;
&lt;p&gt;There are a few things to watch out for, and a few things that I personally find a bit&amp;nbsp;confusing.&lt;/p&gt;
&lt;p&gt;The first problem I encountered was due to my hesitation about where to have my phone&amp;#8217;s photos stored on my laptop. I accepted the share to one location initially, and when I later deleted and recreated the share in another location I somehow orphaned 33 files. My phone is still stuck at 99% synced as a&amp;nbsp;result.&lt;/p&gt;
&lt;p&gt;One thing that appears strange to me is that you can share a folder from one device to another, and then share it from the second device to a third without the third device being aware of the first. I&amp;#8217;m not sure if there are any consequences to that setup or if i is functionally the same as having all the devices aware of each&amp;nbsp;other.&lt;/p&gt;
&lt;p&gt;On the Joplin side, the formats of the sync repository occasionally need to be updated for new versions of the software. It then becomes unusable by older versions. It remains to be seen how much of an issue this will be - my main worry is that I will update one device beyond what is available on one of the others, or that I will be forced to update at an inconvenient&amp;nbsp;time.&lt;/p&gt;
&lt;p&gt;I have had one newly created note fail to sync to my phone so far, though it went to another device, and notes created subsequently synced to it no problem. This may have been the result of one of the issues described above, but I haven&amp;#8217;t figured it out&amp;nbsp;yet.&lt;/p&gt;
&lt;p&gt;The final thing to be aware of is that Syncthing won&amp;#8217;t try to resolve conflicts between files, instead choosing and renaming a &amp;#8220;loser&amp;#8221; when conflicts occur. I&amp;#8217;m not sure what Joplin will make of the renamed files, but it&amp;#8217;s something to be aware of if you&amp;#8217;re moving between devices and possibly updating the same note before it can be&amp;nbsp;synced.&lt;/p&gt;
&lt;h2&gt;Beyond&amp;nbsp;Notes&lt;/h2&gt;
&lt;p&gt;Syncthing has actually been a revelation for me. As well as my notes I&amp;#8217;ve been using it to sync photos from my phone to my laptop (previously I was relying on Google Photos), and for sending miscellaneous files from my laptop to my phone (previously Google Drive&amp;#8217;s job). I&amp;#8217;ve also been using it to send video files to my phone, something I wasn&amp;#8217;t even bothering with&amp;nbsp;before.&lt;/p&gt;
&lt;p&gt;It feels great to be able to cut Google out of the loop as well as Evernote, and so far it has been working away well in the background without me having to think much about it after the initial&amp;nbsp;setup.&lt;/p&gt;</content><category term="Technology"></category><category term="foss"></category><category term="privacy"></category></entry><entry><title>iRehabilitation</title><link href="https://blog.hyperlinkyourheart.com/mac-rehab.html" rel="alternate"></link><published>2021-06-21T23:55:00+02:00</published><updated>2021-06-21T23:55:00+02:00</updated><author><name>Kevin Houlihan</name></author><id>tag:blog.hyperlinkyourheart.com,2021-06-21:/mac-rehab.html</id><summary type="html">&lt;p&gt;Attempting to keep an old-ish MacBook useful and interesting with&amp;nbsp;Xubuntu.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I&amp;#8217;ve been plagued by temptation lately to buy a &lt;a href="https://www.pine64.org/pinebook-pro/" title="Pinebook Pro"&gt;Pinebook Pro&lt;/a&gt;. My current laptop is really a desktop replacement, a beast that can hardly last an hour untethered from a power socket. It&amp;#8217;s usually not worth the hassle of extracting it from its tangled nest of cables when I want to compute elsewhere, and that&amp;#8217;s fine - it&amp;#8217;s the workhorse. But as a result, the idea of a light, efficient laptop is alluring, especially when it&amp;#8217;s one that runs&amp;nbsp;Linux.&lt;/p&gt;
&lt;h2&gt;Out with the&amp;nbsp;New&lt;/h2&gt;
&lt;p&gt;However, I don&amp;#8217;t really like to buy new devices without good reason. I already have another laptop that meets the criteria of being relatively light and portable - the MacBook Pro that served as my main work machine between 2015 and 2019 when my wife and I were floating around Ireland, France and Spain and living out of the back of our car. I have been using it as a more portable option already on occasion, but it has a few annoying&amp;nbsp;problems:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The battery isn&amp;#8217;t in great shape, so while it&amp;#8217;s a lot better than my main laptop, it&amp;#8217;s nothing like that expected of the Pinebook&amp;nbsp;Pro.&lt;/li&gt;
&lt;li&gt;The &lt;span class="caps"&gt;OS&lt;/span&gt; is outdated. It&amp;#8217;s demanding constantly that I update to a newer version of MacOS, but I don&amp;#8217;t want to. Apparently it could run the latest version, but I don&amp;#8217;t trust Apple to preserve the usability of old&amp;nbsp;devices.&lt;/li&gt;
&lt;li&gt;It runs MacOS. MacOS is fine - it&amp;#8217;s a Unix, it&amp;#8217;s not Windows&amp;#8230; but it still has a lot of little annoyances, it&amp;#8217;s proprietary, and to be honest, I&amp;#8217;m bored with&amp;nbsp;it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Basically it&amp;#8217;s lost its shine, and isn&amp;#8217;t fun to use&amp;nbsp;anymore.&lt;/p&gt;
&lt;p&gt;&lt;img alt="Happier times house-sitting in Belfast" src="https://blog.hyperlinkyourheart.com/images/mac-rehab/early-days.jpg" title="Happier times house-sitting in Belfast"&gt;&lt;/p&gt;
&lt;h2&gt;A Cunning&amp;nbsp;Plan&lt;/h2&gt;
&lt;p&gt;One of Linux&amp;#8217;s oft-heralded killer use-cases is in giving old hardware new life. I&amp;#8217;ve never really used it for that explicit purpose - whenever I use Linux, it&amp;#8217;s just because I prefer to use Linux, even if it happens to be on old or low-powered machines. This one isn&amp;#8217;t exactly an ancient artifact, but I thought maybe installing a Linux distro with a lightweight desktop environment would help stretch the battery life and make it feel a bit snappier, more like a new&amp;nbsp;machine.&lt;/p&gt;
&lt;p&gt;The two distros I considered were &lt;a href="https://elementary.io/" title="Elementary OS"&gt;ElementaryOS&lt;/a&gt; and &lt;a href="https://xubuntu.org/" title="Xubuntu"&gt;Xubuntu&lt;/a&gt;. I&amp;#8217;m not sure how lightweight Elementary&amp;#8217;s &lt;span class="caps"&gt;DE&lt;/span&gt; is, but I liked the look of it, so I decided to try it out with an eye to maybe using it as my main &lt;span class="caps"&gt;OS&lt;/span&gt; some&amp;nbsp;day.&lt;/p&gt;
&lt;p&gt;First impressions were great - it only used &lt;span class="caps"&gt;700MB&lt;/span&gt; of &lt;span class="caps"&gt;RAM&lt;/span&gt; after booting (compared to nearly &lt;span class="caps"&gt;4GB&lt;/span&gt; for MacOS!), and the degree of visual flair and polish were incredibly impressive. Unfortunately a couple of things put me off - when I cut the &lt;span class="caps"&gt;CPU&lt;/span&gt; frequency to 800MHz I began to experience occasional lag, and at one point the shell crashed with no way to recover&amp;nbsp;it!&lt;/p&gt;
&lt;p&gt;I didn&amp;#8217;t have any experiences like that with Xubuntu. I ran it for a whole day from a &lt;span class="caps"&gt;USB&lt;/span&gt; stick, installed a bunch of software, worked on a blog post, and had no issues - so that was that decision made! It&amp;#8217;s definitely not as visually impressive as Elementary, but I&amp;#8217;d rather a responsive system than a pretty one in this&amp;nbsp;case.&lt;/p&gt;
&lt;h2&gt;Installation&lt;/h2&gt;
&lt;p&gt;Installation was pretty smooth, especially compared to installing Linux on PowerPC Macs back in the day. The only snag was with the proprietary wireless driver. This was easily enough installed using the &amp;#8220;Additional Drivers&amp;#8221; settings dialog when running from the &lt;span class="caps"&gt;USB&lt;/span&gt; stick, but after installation the required driver was no longer available. Having no other means to connect to a network, this was a serious&amp;nbsp;problem!&lt;/p&gt;
&lt;p&gt;Solving this involved a couple of steps. First I enabled the &amp;#8220;&lt;span class="caps"&gt;CDROM&lt;/span&gt;&amp;#8221; source in the Software &lt;span class="amp"&gt;&amp;amp;&lt;/span&gt; Updates settings, under the &amp;#8220;Other Software&amp;#8221; tab. This caused the driver to become available in the Additional Drivers dialog, but it wouldn&amp;#8217;t install. The problem was that the live &lt;span class="caps"&gt;USB&lt;/span&gt; stick was mounted somewhere under &lt;code&gt;/media/kevin&lt;/code&gt;, but apt expected it to be mounted at &lt;code&gt;/media/cdrom&lt;/code&gt;, which didn&amp;#8217;t even exist. Unmounting the &lt;span class="caps"&gt;USB&lt;/span&gt; stick and running the following commands sorted it out, and allowed me to connect to the WiFi to install and upgrade other&amp;nbsp;packages.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo mkdir /media/cdrom
sudo mount /dev/sdb1 /media/cdrom
sudo apt install bcmwl-kernel-source
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Results&lt;/h2&gt;
&lt;p&gt;Unfortunately the results were not quite what I&amp;#8217;d hoped. I performed a test where I played a movie and music on a loop under both OSes, and Xubuntu was down to 10% battery in 1 hour 46 minutes, while Mac &lt;span class="caps"&gt;OS&lt;/span&gt; took 2 hours and 28 minutes to reach the same level. This was with all cores throttled to 800MHz under Xubuntu, and MacOS doing whatever it does naturally to save energy, but full screen and keyboard backlight brightness on&amp;nbsp;both.&lt;/p&gt;
&lt;p&gt;While Xubuntu runs great, and is much more pleasant to use for me, it doesn&amp;#8217;t seem to achieve the same battery life under similar loads. I&amp;#8217;m torn now between the user experience I prefer under Xubuntu and the superior energy efficiency of MacOS&amp;#8230; Or perhaps buying a Pinebook after&amp;nbsp;all!&lt;/p&gt;
&lt;p&gt;&lt;img alt="Cheers on a game-jam well done" src="https://blog.hyperlinkyourheart.com/images/mac-rehab/game-jam.jpg" title="Cheers on a game-jam well done"&gt;&lt;/p&gt;</content><category term="Technology"></category><category term="mac"></category><category term="linux"></category><category term="blogging"></category></entry></feed>