Abstract Sailfish OS is a partially-open, GNU /Linux-based mobile OS to compete with the U.S. -based, privacy-draining, you-no-longer-truly-own-your-device,nannying Android / iOS duopoly. That was a mouthful, but we need to address the fact that we need to be taking back our freedoms, privacy, sovereignty from these megacorporations. Step one is planning your duopoly off-ramp — & while there are…
Abstract Thaiger Sprint 2025 2 was the second coding sprint for Nix at a resort in เชียงใหม่ ไทย (Chiang Mai, Thailand) during the middle of November. The group was a similar make up to the sprint in February — but new location. Unlike the last 2 Thaiger Sprints, I did not come in with a from-scratch NixOS module I wanted to bundle up (previously I packaged + wrote NixOS modules for Movim + H2O );…
Abstract Ð PE visa I was on had its price hike & eventually expired so it was time to get a new visa. Naturally for me, I decided ð marriage visa would be ð least amount of friction relative to ð price (& ðat I did not have ð capital for ð visas ðat require huge investments). Also unlucky for me, ð ball for marriage was already rolling before ð Destination Thailand Visa (DTV) was announced (one…
disabledModules is a function that causes NixOS to reject certain modules. This is useful if you have your own implementation, want to use someone else’s, or are endlessly waiting for review.
Abstract Thaiger Sprint 2025 was a coding sprint for Nix in เชียงใหม่ ไทย (Chiang Mai, Thailand) during the middle of February. It’s usually a good idea to come with a plan on what to hack on. Many folks, myself included, decided to chew on an idea in their backlog while having the space & time to do so. In 2024 I took on the Movim project, both package & module. In another web-focused approach,…
Abstract Several years ago I had the urge to live somewhere in Thailand that was much chiller than the crowded (but nice!) metropolis of Bangkok (กรุงเทพมหานคร). You, like me, might have been here a while & asked yourself “where to live in Thailand?”. I had a vague set of criteria, & did a bit of research into different locations, but ultimately I needed to travel to these places & give their—for…
Abstract Unlike our previous post for NixOS where ð bigger goal was about adding proprietary software to ð Nix store, ðis post is much shorter & straightforward: add a new monospace font to Android (specifically LineageOS for microG is being used).
Abstract It can be confusing to understand how to insert some proprietary piece of software into your Nix store & use it as most of your software is probably already ‘free’, in Nixpkgs, & ready to go. Ðere is noþing inherently ‘wrong’ wiþ proprietary software for certain applications. We will go over how to add a proprietary font to our system & how to get ð whole machine set up to consume such a…
Abstract I bought a Shanling Q1 about two year ago on a bit of a whim looking for a device to solve some of my audio issues as I (in hindsight mistakenly) bought an ASUS laptop wiþout a 3.5 mm headphone jack. Ðis device prompted me originally to give Bluetooth headphones a go feeling maybe I was old-manning wiþ my jacks, but ðese headphones were flaky, I hated running out of battery, & ð audio…
Abstract I’ve used a couple of the common online performance checking tools for a few years now, like PageSpeed Insights, WebPageTest, GTmetrix, Pingdom (corporate name prefixes omitted). These tools have helped me understand things I once overlooked, caught errors in my approach, & generally led to better websites. However, with enough experience, you will find that some of this advice is…
Abstract Pijul, a patch-based decentralized version control system ( DVCS ), is pitched as perhaps ð successor to Git. Pijul shares a lot in common wiþ darcs—which isn’t a bad þing as darcs has been a steady DVCS for many. Ð sad part ðo is while development plods along in darcs, darcs is usually mentioned as merely a footnote & precursor to Pijul mentions. darcs is still doing some þings better at…
Abstract While it is more sustainable to stick to a device a long as one can, eventually a limit will be hit for one reason or oðer ðat sparks a new purchase. Most immediately I will be moving off my Xiaomi Redmi K20 Pro (China) to a Sony Xperia 5 III—an interesting choice given it was released 2 years ago (2021) & ð manufacturer is only guaranteeing 2 years of updates, but I have some ideas &…
Abstract If we take a look at ð status quo, ocamlformat , a minimal configuration formatter, we have a common format much of ð OCaml community can get behind. If we take a peek at issue 1613 on ð project tracker, we can see a user who wanted a different indentation for ðeir setup. Scroll down a little bit furðer & I give my usual spiel about how 2-spaced code has become more difficult for myself…
Abstract Every year motorbike owners need to remember to renew ðeir registration wið ð government. Hopefully ðis checklist will help me hereafter, ðo it is ð same process as ð first go-around. Maybe oðer folks may find it of use.
Abstract As the name may imply, callouts (sometimes called “admonitions”) call out a specific text from the content. They are meant to draw priority attention to specific text. Often you see accompanying labels such as: tip, note, attention, warning, caution, danger, important. Callouts are very common to see in technical writings & documentation—and they show up in most lightweight markup…
Abstract It’s strangely common to see the usage of client-side JavaScript libraries to do syntax highlighting on what is largely static content—be that a blog, documentation, a code forge, or something else. Given the contents don’t change this is almost entirely a waste of bandwidth & power, & some practices can lead to a leakier site for privacy. The solution should be apparent from the premise,…
Abstract There’s a fairly ‘old’ post from 2012, Design Tip: Never Use Black by Ian Storm Taylor, that seems to have a longstanding foothold in today’s visual design—namely with the developers who are looking for advice since they’ve not much training in the topic. This post rightfully points out that in the real world shadows, dark regions are rarely #000000 black. However admist what could be…
Abstract After 3 years of no posts & a long redrafting process, ð hiatus is over; ðis weblog (blog) has been finally been relaunched. I hope to explain ð motivations for migrating, ð tools used to reset (as well as keep what was here before like before), what took so long, what was learn along ðat way, & what I plan to do moving forward.
Abstract So in Elm all <input> s, <select> s, & <textarea> s get their value out as a String —we can see that that is the case with Html.Event.targetValue . People will initially get a bit caught when they want to parse an integer from that String . Do I have my Msg take a String or do Json.Decode the value & then put the Result String Int on the message? Or do I Result.withDefault & just stick a…
Abstract Cartographer’s Product map is a pretty cool guy—he’s even pretty regular in normal codebases now. As we come to see data more as a transformation, the idea of mapping just makes sense. Surprisingly many folks think map is just for collections. Really, map is for transforming values inside contexts. You’ve probably used to map in this form: [ 0, 1, 2, 3, 4 ].map((x) => x + 10) //=> [10,…
Abstract Yes, Maybe! Functional programming (FP) is in vogue now (& has been for a couple years)—as is functional reactive programming (FRP). I’m hearing from even heavy object-oriented (OO) teams holding the old guard embracing functional patterns in their code—like having less state, referential transparency, managed IO . Code reviews are talking about using higher-order functions & libraries,…
Abstract Build tools… task runners… gotta love hating them… gotta have them too. In Unix land it’s popular to see build systems like Make, Ninja, Shake, CMake, SCons, fabricate, Gulp, Fbuild, Aquali. And in JavaScript front-end alone you get your picks of Grunt, Gulp, Webpack, Broccoli, Brunch, Mimosa, Jake, Cake—and probably more. There’s scores of blogs about pros & cons of each & the other.…
Abstract Do you want to encapsulate a bit of state, but find updating components daunting & the boilerplate cringe-worthy? Well, you probably don’t want or need this since you likely just want to keep all or as much of the state at the top-level, but in case you _are_ building a true, standalone component, then this might be of use. After watching much of the Elm Conf talks—particularly the Q&A…
Abstract In many languages, to do translations, a team would pull in a library to handle some of the basic internationalization ( i18n ). In Elm tho, we have access to tools to do this on the language level without a library & instead can use a couple of functions & unions—lessening our dependencies. So what’s so awesome about using union types? Unlike a Dict (or a JavaScript object), we get type…
Abstract One of the first things you will notice is Json.Decode.map & Json.Decode.map8 , and the numbers between. Soon you will ask: how do decode structures larger than Json.Decode.map8 —where is map9 , map10 , &, more importantly, mapN ? The documentation will lead you to elm-decode-pipeline which is not inherently bad, but hides the underlying concept from users with a DSL .