The infra AeroGarden built kinda sucks. Here's the hack I wrote 3 years ago.
2022
My phone’s data plan is 500/MB per month. This low cap makes me think very conservatively about what gets sent across the modem as I’m going about my day. While a good source of information, the OpenStreetMap Wiki is not viewable offline. There is no native app nor a PWA to use. The ZIM files from Kiwix are very outdated (at the time of writing). A clever solution is to retrofit the existing Wikipedia App for Android, which already has a “Save page offline” feature and a very nice interface. It might even be as simple as changing the urls. After all, most Wiki sites share a similar backend and API, called Mediawiki, and I was hoping to hook into this feature. Progress The primary reason for this retrofit’s difficulty is Wikipedia’s different (slightly proprietary) rest API. It isn’t shared with the mediawiki suite. This is outlined very clearly in the API comparison table. OK, so a lot more needs to change for OSM to wriggle its way into this app. ‘Simply’ Changing the URLs I had some promising results after changing the base rest_api URL to the ‘old’ Mediawiki target. Search now works immediately. However, internal pages didn’t work. Each wiki page in the app expects a well formatted summary from the API. I could get around this by changing the request for a /summary to the full /html of that article, and now we’re getting closer. Of course there were some other bugs that needed to be ironed out, but those didn’t seem critical. Mainly CSS and indexing issues. Save to Offline did not work, I’m not sure why yet. What do At this point I’m unsure if retrofitting the Wikipedia app is worth it. Rigging the app enough to do what I want would entail only a few more things: Custom CSS injection to fix the worst of the /html responses. Figure out why Save Offline doesn’t work. I’m working on this now in my little free time. 100% by-the-booke correct To do this properly, and not rigged just enough for Quinn’s phone, we would need way more. All the following: A well-formatted response (or converted response) from the Mediawiki API that is not in a Wiki format nor the ugly HTML. Markdown with inline images would be great. The remainder of the rest_v1 endpoints converted in the App’s RestService.kt and subsequent serializers. Reworking the Save to Offline feature, adapting the new (old) responses to the underlying SQLite schema. I’m not jazzed at those prospects, even less so when you consider keeping up to date with upstream. I’ll continue to try rigging it. My Other Idea for Offline OSM Wiki I’d like to investigate .zim files. How Kiwix packages wikis into openZIM format. If I can do this for OpenStreetMap on a more regular basis. If I can build a slightly nicer app to parse custom .zims. What do .zims know, do they know things? Let’s find out. Relevant links https://github.com/wikimedia/apps-android-wikipedia/blob/dc37d97ec30036a62527fb9896ae2875a12b328f/app/src/main/java/org/wikipedia/dataclient/Service.kt https://wiki.openstreetmap.org/w/api.php?action=help&modules=wbgetentities https://wiki.openstreetmap.org/w/api.php?format=json&formatversion=2&errorformat=html&errorsuselocal=1&action=wbgetentities&titles=Tag:tourism%3Dpicnic_site&sites=wiki https://www.mediawiki.org/wiki/Wikimedia_Apps/Team/Android/App_hacking https://github.com/qcasey/apps-android-wikipedia https://wiki.openstreetmap.org/wiki/Special:Export
2021
Salient Startpage A startpage with light/dark mode, automatic favicons per site, and retained search bar focus. For the latter Chromium new tab focus / custom new tab page, you’ll want these chromium patches. A little advanced, but worth it! This is compatible with Homer, you can copy/paste your sites/urls/icons from there to config.yaml. The startpage itself can be rendered to an .html file with a directory of images. Run with Docker Clone, build, and run the container: git clone https://github.com/qcasey/SalientStartpage && cd SalientStartpage docker build -t salient-startpage . docker run -p 8080:80 --name salient-startpage salient-startpage Just want the HTML/CSS? Keep the container running like above, and copy the files out: docker cp $(docker ps -aqf "name=salient-startpage"):/usr/share/nginx/html ./public You should be able to point a browser to ./public Configuring Rebuild the container above after making changes to config.yml. The docker build step will fetch favicons to the bookmarks you define, and use Hugo to render the final version of your startpage.
Android home and app launcher for large in-vehicle displays.
Quantified Self (QS) is a method of collecting and interpreting your personal data, usually for self improvement. The inputs range from health datapoints like sleep hours or running miles, to media consumption like movies watched or books read. Luckily, I happen to hoard data and lots of it. I’ve done my darndest to Jaws-of-life this data away from corporate silos or simply start collecting it myself. For the most part this data is gathered automatically. There are others who opt for a richer, minute-to-minute, manual data point entry but I don’t think the tradeoff is worth it. Automation rules, manual life-logging drools. I have broken down my QS project into two corresponding phases: Step 1: Collect Step 2: Interpret Report improvement ideas Inspiring Links Inspiring quotes I take an overwhelming amount of inspiration from Julian’s media consumption reports. Step 1: Collect A niche part of the internet has already trailblazed the collection of numerous health, emotion, and habit data. This is a list of what I’m exporting and from where, along with what I’d like to add. ListenBrainz and SimpleScrobbler for music listen history GPSLogger location tracking HoTS game history AntennaPod syncs to GPodder.net for podcast history Habits for custom streak tracking (meditation, exercise, mood, etc) Beancount for personal finance records Miniflux reading time New RSS subscriptions Dead links, with substitute links to my archive Inventory Updates Step 2: Interpret There’s so much we can learn about ourselves, if we take the time to look. Sometimes, our money knows us better than we know ourselves. Tracking our finances can reveal what we are in denial of, […] and what might be holding us back. Robert A. Belle After beginning my data collection habits, I can focus on creating automatic reports of this data. These will aggregate statistics and hopefully help identify trends in my personal behavior. Parsing of this data is done using my QS parsers. Know your wolf. https://ncase.me/mental-health/ Report improvement ideas Music Breakdown by hour, genre? Show map of artist location Yearly overviews with manual interpretations Redacted summaries of journal entries, like Julian’s digital playground. █████████ ████ ████████ ❌ Inspiring Links Visualization https://datasette.io/ https://github.com/heedy/heedy Tools and Data https://github.com/woop/awesome-quantified-self https://anaulin.org/blog/structured-book-data-in-hugo-posts/ Excellent Examples http://feltron.com/FAR14.html https://julian.digital/location/madrid/ https://szymonkaliski.com/stats/ Inspiring quotes “huh, I appear to netflix-binge under certain conditions, despite the fact that I’d rather not. I wonder which conditions, specifically, led to that binge! What were the triggers? How could they have been avoided? What methods might help me avoid binging in the future?” https://mindingourway.com/dont-steer-with-guilt/ to get anywhere I need to record how things felt in the past. https://www.neelnanda.io/blog/35-standards
Digital Garden I like the idea of writing with the garage door open. I write notes to help myself a year from now. But if I publish an obscure thing that helps someone do something cool, I wouldn’t complain. Our natural fear of being judged leads most people to build, learn, and think privately. But seeking validation should not be the goal of learning in public. ~ Anne-Laure Le Cunff My sites are hosted in my Homelab, these notes are written in Dendron. I publish the site using Hugo. Plain text is wonderful. It allows me to easily find ideas, references, links, personals notes, tasks, thoughts and everything else I want to keep handy. Even short jots and thoughts deserve their space. Being useful for me is the primary use case for this space on the internet. It’s not that I don’t care about you, but this is for me. It’s here so I can record what I think and know and preserve it in time and space. It’s my garden, but I’m happy for you to hang around and eat tomatos with me. https://joelhooks.com/on-writing-more In it’s current iteration, digital gardens take active effort on the part of the reader to wade through links to related pieces of content. This is very unlike a real garden: you don’t have to be an expert at horticulture or garden design to appreciate the overall landscape. You can easily engage with many different levels of a real garden at the same time, telescoping in and out at will to first examine the minutae of informational placards or specific plants and then returning to a broad perspective of the scenery as a whole. https://vivqu.com/blog/2020/10/18/digital-gardens/ Links to other gardens nikitavoloboev You and your mind garden Building a digital garden A Renaissance of Open Thinking and Curated Writing on the Web Digital gardens Work with the garage door up brendex beepb00p My blog is a digital garden, not a blog Julian’s lifelog and digital playground Alex’s Notes YouTube Creators Linux The Linux Experiment Linux For Everyone Techno Tim ExplainingComputers Makers Estefannie Explains It All JetsonHacks MickMake N-O-D-E Zack’s Lab Strange Parts Maker’s Muse Make Anything
My custom Chromium patches, including GTK dark mode and an extension-less startpage that maintains its address bar focus.
2020
Modernizing my 2005 BMW by adding oodles of connectivity and custom electronics.
An Android App to share your documents with your Paperless server
Essentially my own implementation of Kill the Newsletter.
Go KBus is a golang module designed to interface with the BMW I/K Bus. It can be used to write, read, and interpret serial commands on this particular wire. It's loosely based on ezeakeal's excellent pyBus.
Intelligent aquarium light control utilizing a full stack of hardware, lower level C, and React Native mobile apps for a unique IoT solution.
A guerilla redesign of AeroGarden's Android app, written in React Native. I built it with a clean but functional aesthetic that reflects the premium brand.
2019
App+Server for shared iCloud streams. It parses Apple's binary plist data, then organizes the Albums, Photos, and Comments into queryable chunks.
I have OpenALPR running on this tiny machine, using two cameras mounted in the lower fog lights as its source.
Some images from my recent fog light camera install. Soon to be used for Automatic License Plate Recognition (ALPR) when the vehicle is running. It appears stable, and relatively watertight.
2018
An ESP-32 programmed to dynamically fetch, cache and distribute a fish tank's temperature and lighting status. A PHP webpage provides control and alerts me on Slack if the temperature becomes unsafe.
A dangling 30c switch seemed kind of janky to me, so I 3D printed this faceplate for two switches, cable routes, and battery level indicator. The installed setup makes a satisfying click noise as if I were piloting a mid 90’s aircraft across the Gulf of Mexico.