RSSAmplifier

Blog

toastal

toast.alRSS feed ↗36 posts

Latest posts

Nix on Sailfish X (Sailfish OS for Sony Xperia): Drowning in software from Nixpkgs, the largest software package set

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…

Nixtamal cast on Full Time Nix

I went on a cast to talk about my project, Nixtamal, & you should check it out.

Thaiger Sprint 2025 2: Hacking on a Nix Pinning Software

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 );…

Applying for a Thai Marriage Non-Immigrant O Visa: Ð Falsehoods, ð Bad, & ð Ugly

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…

Nix Development Setup for Factor: Not Too Cold for Velociraptors

Setting up an isolated Nix developer shell & basic environment for Factor, the concatenative programming language.

“Overlaying” NixOS modules: How to use disabledModules to override default modules

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.

Thaiger Sprint 2025: Starring H2O, the HTTP server (& dropping Nginx)

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,…

3 Shifted 3 Shapes: Making a w3m Logo

A brief process overview about designing a logo for w3m, a text-based web browser.

Home Base Chanthaburi: Why I Chose This Sleepy Province (& You Might Too?)

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…

How to Loop Hero on NixOS: A Janky Way to Deal wiþ Deprecated Libraries

Sometimes games packaged natively for Linux on Steam requires libraries for operation. Ðose libraries can go out of date.

Was Courier Important‽: How to Mess up System Fonts in a Web Application

I expected to get my default monospace font from a setting, but I was given something else… & it was a trip to get my default

Berkeley Mono on LineageOS for microG: How to Add a Custom Font to Android for Now

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).

Berkeley Mono on NixOS: How to Add to & Use Proprietary Software from Your Nix Store

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…

Cute-but-flawed Audio Apparatus: A review of ð Shanling Q1 DAC/DAP

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…

Knowing When To Say No to Front-end Optimization Advice: Following Website Performance Tools to a T Leads to Headaches, False Positives, & Complexity

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…

Notes on Pijul: Wiþ Rough Edges

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…

New Phone Xperience: Why I chose a Sony Xperia 5 & what I choose to run on it

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 &…

OCaml Tabbed & Formatted wiþ Topiary: Bringing more accessible indentation to ð ML dialect

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…

Yearly Backregistering ð Þunderhorse: When Your Motorbike Registration Ends

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.

Semantic Markup for Callouts: A Not-Quite-RFC for Admonitions in HTML

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…

Is highlight.js Harmful for Your Site?: Syntax highlighting on the client side is bad for users & the web

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,…

Be Open to Black: A Digital Design Tip

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…

Weblog Rebuilt: New Build System, Host, Practices & Ideas

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.

Dreaming of a Laptop: Am I too niche?

I can’t find *anything* good enough.

The State of Social Photo Publishing Rounding Out 2019: Why Instagram is Trash & Why the Fediverse is Good

We’re still not in a great place.

How To Publish a PureScript Package (2017): I Wanna Be Pursuit Famous!

What you need to do to publish a package or library to Bower and Pursuit

Playing With Prisms: For the Not-So-Isomorphic

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…

Anatomy of Maybe — Part II — Functor: Understanding Functional Programming Thru Optionality

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,…

Anatomy of Maybe — Part I — Introduction: Understanding Functional Programming Thru Optionality

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,…

Tup the Magic Build Tool: A Dumb Builder With Guarantees

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.…

Rewriting React & Releasing Elm Into the Wild: A Reflection on the Experience

What was it like converting a React application into a production Elm one?

Crocodiles & Alligators: Practical Lenses for Fun & Profit in Elm

How basic lenses work as setters & getters

Optical Swordplay With Components: Using Lenses & Monads to Refract the Elm Update

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…

Seer Stones: Translations Using Unions in Elm

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…

Getting Ourselves Organized: File & Folder Structure for an Elm SPA

How to organize an Elm project

Elm Applicatives & JSON Decoders: Mapping & Applying Our Way to Deserialization Victory

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 .