714 KB

Local maxima of my input methods NOEXPORT

[2018-12-09 Sun 02:37]

I've previously spent some time writing about my keyboard and its layout. A few years have passed since then, and I've settled in to a sort of local maxima in my keyboard and its layout. I recently purchased a 75keys mechanical keyboard through Massdrop, a 5x15 ortholinear design similar to the XD75Re keyboard. It's a damn fine thing, and the hot-swap switches mean that if a future workplace or public space doesn't like the gateron blue switches, I can swap it with a quiet variety without buying a new keyboard.

I'm going to Homebrew Website Club Seattle! EXPORT

My keyboard layout is still pretty similar to what I wrote about back in 2016, with some minor optimisations. My symbol layer is much more intuitive, and I re-positioned all of the modifier keys. Indeed, the 5x15 layout lets me design my layout exactly how I want: everything that composes with letters or symbols is reachable via both of my thumbs. And I have escape on my thumbs so that vim-emulation in Emacs is sane. :PROPERTIES: :P-RSVP: yes :U-IN-REPLY-TO: :RSS_PERMALINK: 1537305300.0-note.html :ID: dfcb5fac-365d-4185-970a-6caa38e3b5 :SYN-TWITTER: :SYN-FACEBOOK: :END: [2018-09-18 Tue 21:15]

State of the Art EXPORT ATTACH

Looks like we're doing Homebrew up here now. 😺 [2018-08-27 Mon 03:16]

It's been a long while since I've put words in this space. Over a year, really. I've been less busy than I'd like. The creative energy has been low for quite a long while now, and I've been struggling to get it back.

I left the SF Bay Area knowing that leaving wouldn't solve everything, and for a while things have felt better, but the creative energy is still gone. I've tried to be active on a couple of spaces in the Fediverse, namely and to a much lesser extent Glitch Social, and now that ActivityPub is decently along and has a footing, I'll probably want to try to weld Bridgy Fed in to Arcology and use this space some more with direct posting to the Fediverse and comment injection.

Meanwhile, at the top of this post there's some glitch art I've made in the last year. I've also been dabbling in music making with the Teenage Engineering OP-1 and spending a lot of time thinking about my place in the world, but that's a post for another day. I've also spent some time making a Google Pixelbook work as my daily driver and that's been wild.1

Now how many hours will it take for me to figure out how to get Arcology to publish again......

Asynchronous and offline EXPORT ATTACH

[2017-08-08 Tue 21:41]

I've made it a goal of mine to spend less time directly on-line opting for asynchronous, offline things, caching code documentation locally (and preferably accessible to Emacs), making my mail and feeds available offline and generally trying to spend less time wading in the sewage that is The Orange Site and The Robot Site to pass the time. That is to say, I'm trying to compute more and more like rms. I've settled on a Ryan Rix-signature bullshit setup involving a bunch of moving parts and sawblades, and I'm going to talk about some of the sharper pieces now

Back in 2014, I wrote about setting up Gnus to do adaptive scoring of mailboxes, a way of training Gnus to bubble emails you care about towards the top of your inbox, and pushing mails you're less likely to care about downwards, based on who's sent the message, or the subject of the message. This has proven to be a really great way to manage the flow of my email, letting me triage multiple weeks of PTO emails down to 15 or so action items when I return. It's an incredibly powerful tool, and it's flexible given that I can just reach in and define my own scoring rules based on any header or even text in the body. All of my emails are on my local machine, I can inspect exactly why my mail engine thinks the message is important or unimportant and modify that behavior. It's not a magic ML model, it's a brain-dead text-matching engine and that's perfect.

Lately I've begun stretching this system to work with more sources of information, allowing me to push more possible sources of information and let the computer more or less manage that flow for me. Key to this is a piece of software called Universal Aggregator, a small constellation of tools which lets you take feeds of messages and store them in to Maildir format, which is how I consume my email currently. UA is designed to work with RSS, but its composable nature means that you can wire other things up to it pretty easily, as I'll explain below. The most impressive part of UA, in my opinion, is the ability to inline images from the source HTML as mime multipart, which means your mail client can load the images from weird tumblr art blogs.

Gnus already has an RSS backend, but I don't use it. It's slow to fetch (it has to do HTTP requests every time you open Gnus or load the group), and I prefer for things like that to have them batched in to a single group in Gnus without having to fight Virtual Groups. Universal Aggregator provides a simple shell-script configuration interface which horrifyingly enough is actually treated as a shell script in the ggs process manager in Universal Aggregator.


rss() {
    command 2000 "rss2json \\"$1\\" | ua-inline | maildir-put -cache /data/ua-cache -root /data/Maildir-feeds -folder \\"$2\\""

rss "" TechBlog
rss "" TechBlog
rss "" Blogs

It's that simple. You define commands, and then run those commands on URLs. The commands rss2json, =ua-inline= and maildir-put all do what it says on the tin, it's a shell pipeline which turns an RSS feed in to entries in a Maildir. I run this inside of a Docker container with my personal Maildir mounted on to /data, and bob's your uncle.

Expanding on this, I've begun to look at what other data sources I consume would benefit from the offline, scored system that my RSS feeds and mail benefit from. The obvious low hanging fruit was Twitter. I spent an afternoon whipping up this simple Python script using the Tweepy API to push out JSON in the format Universal Aggregator's maildir-put would like them to be in.

import tweepy
from email import utils
import time
import json
import click

auth = tweepy.OAuthHandler("XXX", "XXX")
auth.set_access_token("XXX", "XXX")
api = tweepy.API(auth)
def cli():

def make_2822_date(dt):
    tup = dt.timetuple()
    flt = time.mktime(tup)
    return utils.formatdate(flt)

def render_tweet(status):
    date = make_2822_date(status.created_at)
    references = None
    body = u'<a href="{twuser}/status/{twid}">{twuser}</a>: {twbody}'.format(
    if status.entities.get("media") and len(status.entities["media"]) > 0:
        for medium in (status.entities["media"]):
            body += u'<br/><img src="{twimg}"/>'.format(
    if status.in_reply_to_status_id:
        body += u'<br/> <a href="{twuser}/status/{twid}">in reply to {twuser}</a>'.format(
        references = [status.in_reply_to_status_id_str]
    return {
        'title': status.text,
        'id': status.user.screen_name + "_" + str(,
        'date': make_2822_date(status.created_at),
        'body': body,
        'references': references,
        'authorEmail': status.user.screen_name + ""

def home():
    tweets = api.home_timeline()
    for tweet in tweets:
        print json.dumps(render_tweet(tweet))

@click.option('--owner', type=str)
@click.option('--slug', type=str)
def list(owner, slug):
    tweets = api.list_timeline(owner, slug)
    for tweet in tweets:
        print json.dumps(render_tweet(tweet))

if __name__ == '__main__':

I'm a pretty heavy user of twitter lists, it supports rendering your home timeline and any list your account has access to. Register an application on and put the credentials in and you're off to the races.

twitter_list() {
    command 1800 "python /usr/local/bin/ list --owner \\"$1\\" --slug \\"$2\\" | ua-inline | maildir-put -cache /data/ua-cache -root /data/Maildir-feeds -folder \\"$3\\""

twitter_home() {
    command 1800 "python /usr/local/bin/ home | ua-inline | maildir-put -cache /data/ua-cache -root /data/Maildir-feeds -folder \\"$1\\""

twitter_home Twitter
twitter_list rrrrrrrix artists Twitter
twitter_list rrrrrrrix not-sad-twitter Twitter
twitter_list rrrrrrrix work-peeps Twitter

Overall it's proven to be a very effective way to keep up with current events, and the weird twitter art bots that I enjoy following. Gnus's Adaptive Scoring is weighted towards things that post a lot, naturally given there's no age-based burnoff for the scores, so accounts like @tweegeemee and @archillect which post automatically always bubble up to the top of my "inbox." I make aggressive use of Gnus Limiting to cut down on the number of posts based on date (only show me posts from less than 0.25 days ago2), or score (only show me posts that pass the muster), or by the author of the post. I get roughly 2000 tweets in to this system while I'm asleep, and I can pretty readily "catch up" to that while I'm on the bus on the way in to work, focusing on the 400-500 that Gnus thinks are relevant to me, or I can limit it further when I'm drinking my coffee at work.

This script currently lacks context of quoted tweets, isn't doing OCR on images, etc, but it's a surprisingly effective way to manage these things and actually works compared to the "In case you missed it" that Twitter provides. If I open up twitter dot com I can treat it as a slice of "current time", ignoring anything below the fold and know that the good good good #content that I desire is there waiting for me on my laptop.


And when I'm not on a device that doesn't have access to my Maildir, if I'm out walking or if I don't bring my laptop to work with me, I have no excuse not to pick up a book or open up my Pocket queue instead of enjoying this junk food. I uninstalled twitter and facebook from my phone, let's see how it treats me.

[2017-07-14 Fri 10:16]


From Washington to Chicago EVERYDAY EXPORT ATTACH

#cybrespace, pronounced sigh bray EVERYDAY EXPORT ATTACH

Project: CCTV datalogger EXPORT

(Source: [2017-07-12 06:39] [2017-07-11 14:14] [2017-07-10 18:59] [2017-07-10 Mon 16:41]

Rough project idea which I just purchased parts for: Low-power AVR datalogger with a momentary push button. You push the button, it logs the current time to an SD card and goes back to sleep. Print a small housing for this with a Wii lanyard attached to it.

I press the button whenever you are seen on a security or CCTV camera. I correlate that with the location log that my phone makes every 15 minutes, and publish a heatmap of the locations of CCTV cameras. I bought the parts on Adafruit for 40$ and am writing some trash openscad to make the housing. This should be a fun excuse to get my 3D printer working and to get me back to making weird quantified self/omnicomputing projects.

My Favorite Anime EXPORT ATTACH

[2017-07-10 Mon 15:12]


Just kidding, that would be Mobile Suit Gundam: 08th MS Team. [2017-07-08 Sat 22:55]

(Source: 80stechnology)



[2017-07-07 Fri 21:24] CLOSED: [2017-07-07 Fri 01:29] [2017-07-07 Fri 01:27]

Going to try to do a glitch and upload it to at least my Mastodon, and backfill on to Arcology (and thus Twitter and Facebook) when I have spare cycles. I'm trying to be more creative and a simple thing like this seems easy and fun.

The Right to Be Forgotten -- Laptop 2 EVERYDAY ATTACH

I need to get back in to the groove of working on Gundam models, too. I want to buy a paint setup when I get paid mid-month. [2017-07-06 Thu 22:50]

The issue has arisen from desires of individuals to "determine the development of their life in an autonomous way, without being perpetually or periodically stigmatized as a consequence of a specific action performed in the past."


[2017-07-06 Thu 22:46]




[2017-07-06 Thu 22:41] [2017-07-06 Thu 22:38]

Heart goollllllll-- EVERYDAY EXPORT ATTACH




Sunny day in Japantown EVERYDAY EXPORT ATTACH


I'm at #SGDQ2017 this week!

A city with above-ground walkways to protect the Citizens from the harsh winters. Below, the Forgotten work to keep the city running for Citizens, their lot in life is to be unknown to the people who live in the towers which dominate the downtown skyscape. [2017-07-06 Thu 22:36] [2017-07-06 Thu 22:33] [2017-07-06 Thu 22:30] [2017-07-06 Thu 22:14] [2017-07-06 Thu 22:09] [2017-07-06 Thu 21:56] CLOSED: [2017-07-02 Sun 21:21]

Say hi, or catch me on the stream, I guess. I'm going to be up at 04:00 to catch the Knytt Stories run, which will be hilarious. Watch me fall asleep in the front row, I guess.

Re-hashing my web presence

CLOSED: [2017-07-02 Sun 21:14]

So I moved all of my blog posts from the old org-page powered site and in to Arcology, with terrible manual redirect pages from the old pages to the individual Arcology entries. At some point, they should probably be changed in to actual 301 redirects, but oh well.

    This gives me a chance to turn [[][]] in to a portfolio site. Basically things are as follows:
  • Personal blog:
  • Portfolio site: with old redirects from and

The plan for the portfolio site is to highlight individual projects of mine in a way that a blog doesn't really do justice. It'll still be simple and generated from Org-mode, but with some simple classy CSS.

Some random thoughts on improving self-hosting of software at home.

CLOSED: [2017-04-24 Mon 17:45] [2017-04-24 Mon 16:52]

Self-hosting is hard enough and the business incentives bad enough that people have seemingly given up on this, in spite of the numerous costs of giving your data to companies designed to profit off of them3. Follow me down a rabbit-hole, for a few moments and let me indulge in a bit of mindful fun around this subject. Were I to be working on this problem full-time these are the four domains which I see as the most influential to make this a tractable concern.

Hosting Software: Decidedly Non-trivial

It's 2017 and it's still non-trivial to run persistent services on your home network. Systems like Sandstorm and FreeNAS improve on the state of the world here, but FreeNAS has a fairly limited selection of software it feels like, and Sandstorm makes some interesting architectural decisions which make hosting general-use software non-trivial4.

Docker tries to make inroads here, but only if you're already technically competent. Non-technical folks are entirely incapable of running dockerized services, even though Docker solves the distribution problem handily. Docker also doesn't solve the base-OS, security concerns, system updates, and the likes.

rpm-ostree does some cool things to solve the update distribution and application, giving users atomic updates and rollbacks of the system image. A combination of ostree and strong pins of Docker images (to the SHA256 of the build, not a tag) could provide a certain level of determinism to system images while still allowing easy iteration of service components out of sync with the ostree updates. Wrap this in a simple updater UI served on a host's admin panel and anyone can apply ostree updates to get new versions of their service components.

Serving Software from Home: Somehow Harder

ISPs block interesting ports. NAT punching/UPnP is unreliable. Configuring SOHO and consumer routers is hellish. Debugging this shit when it breaks takes a networking degree from a technical trade school.

I propose abandoning that world altogether, and using decentralized tech that can handle RPC calls, stepping past the network layer entirely. I see two easy solutions to this.

The first is the good old Tor Hidden Service. Clients would be expected to abstract this away, and .onion URLs don't solve the "Human Meaningful" corner of Zooko's Triangle. Something like Namecoin could be used to link a human meaningful name to a Tor Hidden Service but I'm unaware of any solution which currently does this, and I'm unaware of any interface which aims to make Namecoin useful to non-technical folks.

A simpler to implement, yet less fault tolerant solution would be a fleet of homeservers which exist only to provide RPC between applications. Rooms would link a service and a user, as a persistent RPC channel. History could be aggressively trimmed by the clients or modifications of the homeserver, given that looking at old RPC calls is probably not useful, perhaps even undesireable. Making Matrix's axolotl based end-to-end encryption transparent to users would be a prerequisite here: if the server owners now have a full network view of RPC calls, it's not much better than the current state of the world. So maybe that's not more simple.

Recovering From Disaster: The hardest part

Software-as-a-Service providers usually have a team dedicated to making sure their users' data won't disappear in the case of a failed harddisk, meteor, or a mistyped command. I don't have a good answer to this except for incremental backups handled at the OS layer, storing data outside of Docker volume containers in a place where the OS can back them up. Restoring is non-trivial, verifying your backups work even more so since if you're only running a single host, you can't wipe and restore. Running a highly-available cluster of hosts is not something I would wish on anyone running a home-computing setup and makes the network/routing layer even more impossible to deal with. Offiste backups are also a problem which would need to be solved. I doubt folks would be interested in farming out harddisk/bandwidth to something like TahoeLAFS, and so some sort of centralized backup system would be required, and now regular users have to manage encryption keys, and we all know how that goes.

Sharing with Others: Solutions in Flight

A lot of this work, in my opinion, has been worked through the IndieWeb movement, the W3C social working groups, and the open web movement in general. Adoption of these protocols over alternative proprietary (or even non-standardized) protocols makes sharing somewhat future proof, given the standards have the weight of the W3C behind them.

Wrapping up

I took a bunch of photos of my Gundams ATTACH

No one thinks this is an easy to solve problem, because it's not. The institutional and monetary incentives to solve these problems as one don't currently exist, because there's no money to be made. Users largely refuse to pay for software, users largely refuse to care about software, leaving the folks who do in a dangerous minority. [2016-11-06 Sun 19:50]

I busted out a bunch of old action figures that I bought between like 2002 and 2005, when you could buy these suckers at wal-mart and toys r us and such. I even had some Universal Century High Grade kits that I had built, and probably want to clean up and do something with.

In rough order (sorry, making them inline in my blog engine is ... nontrivial):

  • Real Grade Exia
  • Real Grade Zeta
  • Real Grade Mk II (AEUG)
  • A mix of Tamashii action figures from the 00 timeline, and an NG 1/100 Virtue
  • NG 1/100 Virtue without any panel lining or decals
  • A bunch of UC SD-Ex, Full Armor Unicorn, Banshee, Unicorn
  • SD-Ex Sinanju
  • MG RX-79 Ground Type without any panel lining or decals
  • Battle Scarred Wing Zero Custom action figure
  • G-Gundam action figures, some Battle Scarred, some Hyper Mode
  • Wing Gundam action figure
  • MG Heavy Arms
  • Eva Unit 01
  • MG Sazabi Ver ka
  • MG RX-93 Ver ka
  • MG RX-0 Unicorn Full Armor, without any panel lining or decals

That, and an RG RX-78-2 on my desk is the full collection.

I currently have yet to build

  • MG RX-78-2 The Origin
  • MG RX-78 Gp01 FB
  • MG RX-93 Ver Ka

My little roguelike is coming together ATTACH

I've been meaning to take a bunch of photos of these bad boys for a while under proper light, and finally got around to doing it. [2016-10-07 Fri 22:21]

The level generator for my roguelike is coming together. Data structures are making sense, and it's pretty easy to iterate on, once I solved a bug involving swapped variables...

The game is going to be my excuse to finally start writing more and more code, and I'm pretty excited about how it is working so far. It's being written in Clojure, which is a fun little Lisp-like language running on the JVM, and developed to be a modular, fun, sci-fi/cyberpunk roguelike.

The basic premise of the game is a standard Roguelike: Get to the top of the corporation's tower, steal the loot, and get out before the bad-guys kill you. However, I have some really neat ideas that I've been fleshing out for it over the course of a year or so that make it really interesting to build, and hopefully when it's ready interesting to play.

There will be two "worlds": A physical world, and an overlay network world. Imagine running hacks on servers inside of the corporation's tower to disable security, unlock hidden rooms, and make your climb even easier.

When it's done, I want the game frontend to be pluggable: You can play over a terminal, or via a web browser. This is one of the main reasons I wrote the game in Clojure. The web frontend can and probably will be written in Clojurescript, and since they are essentially the same core language, you can pass EDN between the two. Define a sane API between the frontend and the backend, and I could in theory plug any frontend I wanted in to this thing, including Android.

I'm also imagining a sub-set of the levels being in a different environment -- not every game should be a tower climb, I guess? When you start, you start at street level, why can't you go explore the streets, build up your kit and your ICEbreakers for the run before, well, running? There will be NPCs on the street, hacker gangs and police crews duking it out for control, and you can get some great experience and credits by lending your hacking skills to one of the factions.

You wake up in a grungy side-street alley. You've been in The City for three days. And you're still

fucking future shocked.

The City is unlike anywhere else you've been. Energetic, vibrant, and completely insane. Your first

day was spent just trying to figure out the street grid -- from the street level any of these towers

could be UltraCorp's. You need to find your way to UltraCorp's Head Quarters if you want to get Her


You spent day two meeting the locals. There are a couple of street factions out here, the Greens and

the Reds, fighting each other and the police -- known disdainfully as the Blues, just another

corrupt element of The City. All of them are looking for an edge, a way to destroy the other two

once and for all, and take this sector of the city under their own control.

And now it is day 3. You're still looking for that damn building. But you have a plan, and you are

starting to come to understand this place. But you should know, The City evolves faster than humans

can keep up. AIs roam the Net, genetically enhanced rats and genetically enhanced hackers roam the


Getting my Apartment setup to the point where I love it

It'll be a long while before this thing is ready to play, it's going to be my little project for the foreseeable future. I'm not putting my existing side-projects on hold, I'm going to just practice the self-control to not get distracted with new ones for a while. [2016-10-02 Sun 12:50]

Been slowly upgrading my home-computing setup, and I am pretty pleased with how it is coming together.

My work desk. Right now it is an HP Chromebook 13 plugged in to a Dell USB-C port replicator. That is plugged in to a Samsung 28 inch 4k display, my Ergodox -- "The Miami Knight" -- and a Logitech wireless track ball.

A wee little Gunpla, a generic lamp, and some Adafruit WS2812 NeoPixels provide some ambiance. I use these Travelon packing cubes to be able to take everything I need for my work in to and out of my backpack easily. The yellow one has my password store, some headphones, about 400 GiB worth of MicroSD storage, a MiFi hot-spot, etc.

In total I have three desks in my studio, all of them are on casters which makes it easy to wheel whatever i am working on away from the walls and towards the music. The power strip on the floor is detritus and not actually going to the desk.

The music lives on this cubeshelf. cable management back there is still a mess but...

I use my Chromebook as an SSH terminal and web browser -- all of my applications run on that HP Microserver, until I can afford a desktop build. Everything except the Chromebook display routes through Onkyo receiver using the cable shroud on top. I can plug a USB DAC on my desk in to the receiver to pipe the Chromebook audio through the speakers. Or I can plug the HDMI cable in that cable shroud in to the monitor to play PS4, Melee, or watch movies on XBMC.

I'm slowly starting to build up a collection of records, starting with some that really hit home for me -- Anamanaguchi's Endless Fantasy, and three from Aesop Rock: Labor Days, None Shall Pass, and The Impossible Kid

History is written by the winners ATTACH

Having multiple desks means I can just leave projects in place while I am working on them. I have three stacked trays of gundam models that I need to paint, if the weather would ever let me. [2016-09-04 Sun 15:45]

Today I visited the Living Computer Museum, a fun little place in downtown Seattle, with a bunch of old hardware that kids can put their grubby fingers on. It's a really cool place, I even got to see a Data General Nova with a working teletype attached to it, a really fantastic piece of hardware which served as the technical inspiration for a lot of later developments, including the Xerox Alto and Apple I. It's really neat hardware.

There were a tonne of really beautiful DEC machines, the simple design and color schemes of the PDPs are really wonderful, and I didn't take nearly enough photos of them.

The museum was funded by Paul Allen, and that much is clear -- a huge section on Altair, on the PC revolution, etc, very little about computing in Academia, AI research, once things got past the minicomputer era. I would have loved to get my hands on a Lisp Machine, or something out of MIT running ITS, but there was nary a mention of the symbolic-computing branch of computing history and AI research, which I felt was a little bit revisionist, given that AI needs drove the development of computing just as much as business needs.

So @NatlParkService is narrating my trip from Portland to Seattle

[2016-09-02 Fri 16:08]

National Park Service Trails and Rails has a volunteer organization that rides the rails and tells stories and history of the region.

A guy from Portland gave me his yo-yo

Amtrak really makes me proud of this country. [2016-09-02 Fri 15:44]

He dropped an aluminium yo-yo and it rolled under my chair, so we talked about that stuff for a while. On his way out, when we arrived in Portland, he left me a cheap plastic trick yo-yo to practice with, since in the conversation I mentioned how I wanted to get in to it but didn't have the time to research a good starter yo-yo.

And now I have one. And now I'm trying to figure out what cheap fidget I can bring and gift to people. What is this, Good Burning Man?

Woke up this morning looking at this cutie ATTACH

Spent the evening on #Amtrak talking to a really interesting guy from Japan

[2016-09-02 Fri 14:19] ++ Glad I set an alarm for sunrise; missed the sunrise, but I'm currently traveling around Mt. Shasta! :LOGBOOK: CLOCK: [2016-09-02 Fri 07:45]--[2016-09-02 Fri 08:01] => 0:16 :END: [2016-09-02 Fri 07:30]

I really love the serendipity of Amtrak trips; I'm currently on the Coast Starlight headed from Oakland to Seattle for the long weekend, and got to spend the time I would be journaling talking with this fellow named Bill. He'd just retired from teaching in Japan, and was traveling up the coast from Los Angeles spending time with his various family, ultimately ending up in Eastern Washington tomorrow afternoon; his latest stop was visiting his daughter's family, who lives less than a mile from where I live in Oakland. One of the most refreshing things is spending time talking to "regular" people, not about tech, not about computers, not about how computers are bullshit, but just about life. I really need more of it.

A good conversation isn't just about being able to tell a story, or being able to provide insight -- it's just as important to be able to jog the memory of the person you're talking with, to bring forth conversation and stories of their own while telling your own.

Tomorrow I'm going to get lunch with Bill, since we were both yawning and not done talking. It's a great way to start a long weekend. Well, we'll see how I feel after 22 hours in a single seat, but for now I am excited and invigorated. I have a seat that looks east, we'll see how I feel when the sun rises at 06:34, somewhere in Oregon. I just left Sacramento, and am heading north -- I'm going to try to stay awake long enough to see the stars.

It doesn't have a name yet, but here is my Preonic. ATTACH

[2016-07-29 Fri 19:39]

Keyboard Layout Exploration

[2016-07-29 Fri 16:52]

I spend a lot of time typing. It's the easiest way for me to pull my thoughts in to a form that I can share/develop. And of course, I spend a lot of time typing at work, since it's sort of my job, whether it's writing code or (more and more) writing documentation and emails and architecture documents.

As this is the case, I spend a lot of time thinking about how to make that less bad; at work, I have an Ergodox split keyboard which is really great for this stuff when paired with a standing desk. It can be programmed with custom layouts, and I have a layout that is QWERTY with custom symbol placement, and a thumb cluster designed to make editing with Emacs less bad in that the thumb cluster has my Alt Control and Super modifier keys on both, allowing me to easily hit any Emacs death grip combo that I've yet to rebind in to something that I can use.

However, I don't take my Ergodox with me, it lives at work. When I am out and about, I usually have a Ortholinear Keyboards Planck with me, and last week my Preonic arrived. I had to update my Planck firmware to work with the new version of the shared firmware, and thus took some time to really consider how to improve my experience typing in such a constrained setup.

For the most part, I've had a standard QWERTY top layer with a few minor changes, based on my failed experiment with Arensito. In short, my "raised" layer is a full Arensito symbol layer, which was in my opinion the best part of that keyboard. That is mirrored in my Planck, Preonic and Ergodox setup and works quite nicely. When I ported it to the Preonic, I did something that most people would think is strange, and treated the thing as though it was a Planck with a bottom row, rather than a Planck with a top row. This is directly inspired by the Arensito design, where the thumb has access to many more keys than in a normal setup.

There are only one key for the thumbs to access. The thumbs dexterity should make them handle about

4 keys each(?).

The bottom two rows, thus, end up containing function keys on the mostly-useless pinky/ring zones, and a core of modifiers, space and backspace. This means no using my pinkies to find modifier keys, or backspace, tab, that whole lot -- they are readily available with my dexterous index and thumb fingers.

I've also moved my pinkies out to the very outer edge of the keyboard, meaning that the keys which would normally be pinky-hit on each edge (Shift, Tab, Tilde/Grave, Quote, Return and Backspace) are accessible by those same highly dexterous index fingers. Combined with my latest modal editing experiment, we end up with a nice setup, I just need to bind a dexterous key to C-q, or Mail or =Search= or something. The QMK Firmware in the Planck and Preonic have an idea of a Space Cadet Shift lifted from Steve Losh. The implementation itself is something I'm sort of opposed to, especially with a standard 108 key, but the idea is similar to the ADJUST layer in the default Preonic/Planck firmware where if you hit Raise and Lower simultaneously, it moves to ADJUST -- only that would send the Modalka mode toggle in my case.

The end result is something I'm still getting used to but I like it so far:

   * Qwerty
   * ,-----------------------------------------------------------------------------------.
   * |   q  |   w  |   e  |   r  |   t  | Esc  | Esc  |   y  |   u  |   i  |   o  |   p  |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   a  |   s  |   d  |   f  |   g  | Tab  |   '  |   h  |   j  |   k  |   l  |   ;  |
   * |------+------+------+------+------+-------------+------+------+------+------+------|
   * |   z  |   x  |   c  |   v  |   b  |Shift |Enter |   n  |   m  |   ,  |   .  |   /  |
   * |------+------+------+------+------+------|------+------+------+------+------+------|
   * |   F1 |   F2 |Shift |Lower |Backs |Backs |Space |Space |Raise |Shift |   F9 |  F10 |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   F3 |   F4 |Shift | Ctl  | Alt  | Gui  | Gui  | Alt  | Ctl  |Shift |  F11 |  F12 |
   * `-----------------------------------------------------------------------------------'

   * Shifted Qwerty
   * ,-----------------------------------------------------------------------------------.
   * |   Q  |   W  |   E  |   R  |   T  | Esc  | Esc  |   Y  |   U  |   I  |   O  |   P  |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   A  |   S  |   D  |   F  |   G  | Tab  |   "  |   H  |   J  |   K  |   L  |   :  |
   * |------+------+------+------+------+-------------+------+------+------+------+------|
   * |   Z  |   X  |   C  |   V  |   B  |Shift |Enter |   N  |   M  |   !  |   ?  |  \\\\  |
   * |------+------+------+------+------+------|------+------+------+------+------+------|
   * |   F1 |   F2 |Shift |Lower |Backs |Backs |Space |Space |Raise |Shift |   F9 |  F10 |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   F3 |   F4 |Shift | Ctl  | Alt  | Gui  | Gui  | Alt  | Ctl  |Shift |  F11 |  F12 |
   * `-----------------------------------------------------------------------------------'

   * Raise (symbol layer)
   * ,-----------------------------------------------------------------------------------.
   * |   _  |   [  |   ]  |   "  |   #  |   `  |   ~  |   $  |   "  |   <  |   >  |   +  |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   -  |   {  |   }  |   0  |   /  | Tab  |   "  |   |  |   1  |   (  |   )  |   =  |
   * |------+------+------+------+------+-------------+------+------+------+------+------|
   * |   6  |   7  |   8  |   9  |   0  |Shift |Enter |   *  |   2  |   3  |   4  |   5  |
   * |------+------+------+------+------+------|------+------+------+------+------+------|
   * |   F1 |   F2 |Shift |Lower |Backs |Backs |Space |Space |Raise |   %  |   ^  |   &  |
   * |------+------+------+------+------+------+------+------+------+------+------+------|
   * |   F3 |   F4 |Shift | Ctl  | Alt  | Gui  | Gui  | Alt  | Ctl  |Shift |  F11 |  F12 |
   * `-----------------------------------------------------------------------------------'

It'll surely be an interesting experiment, but the nice thing is that with the Preonic I can more or less unify my work and mobile keyboard layouts including the thumb clusters; I can even see myself finally unlocking Arensito again now that I have non-profiled printed keycaps! 🙏

Catastrophic Data Loss and Me

[2016-07-01 Fri 08:55]

So, my server decided to not mount its root partition after moving a mile up the road. This seems like it shouldn't be bad, because we have backups and use them, right?


My /srv/data/ is backed up, but my / was not. And it turns out all of my VMs and containers' persistent data were on that / partition. I lost a fair amount of data by leaning in to an architecture I didn't fully understand, trying to use Btrfs for my server's root partition to (ab)use =systemd-nspawn='s ability to generate containers as subvolumes of a root volume. Create a base install, run containers as subvolumes of that, get all the niceties of COW and dedup without having to deal with Docker or any of that crap. It turns out that at some point, I added a file as a non-loopback device to the volume, in an attempt to fix a full btrfs metadata subvolume. That file, upon inspection on reboot, was all 0's.


Oh well.


I lost a fair amount of stuff, it turns out.

Most importantly, I lost the private keys for the homeserver. I'm now This is incredibly unfortunate, and it's why you should always have backups of your keys. I need to figure out what to do with Kickass Systems Common because the only admin in that room was on Oh well. If you need me, message me on using the link above. You cannot contact me at any more.

I also lost all of the stuff on my git host, anything I didn't have cloned on to my laptop. That's the pits. I replaced my cgit + gitolite setup with Gogs which is publicly accessible on a nice URL now. I'm going to start updating all of the README and, I guess, make Gogs support I'll also need a Gogs Issues<->Org Mode syncer, in general. Luckily I keep most things I care about cloned in to /srv/data/ so I didn't lose that much stuff from my Git repositories, mostly just old things. If by chance someone had actually cloned those things and wants to see them, email me and I might have them in an old backup somewhere.

I lost a bunch of other stuff, too, but nothing irreplaceable. A bunch of old ZNC logs that needed to get purged, along with a Bitlbee setup that needed to get updated. An outdated Gollum wiki that I don't use.

Sad to see @StorehouseHQ will be shutting down on July 15, 2016.

I got lucky, but I also learned my lesson. Revision 3 of my home infrastructure is built on top of Docker, for better or worse. It's quite alright, so far, I was able to bootstrap most of the stuff that I care about fairly quickly, since there are some decent minimal Dockerfile setups for a lot of the things that I am using right now. I built a little script to generate systemd service files for them to keep them running, I just need to make sure /etc/systemd/system gets backed up in my new regiment. Or maybe when I get a new server, I'll just make it CoreOS and be able to express these as a bunch of yaml. The nice thing about Docker, is that I explicitly have to mount state in to the container, which means that I can make sure they are in a directory on my NAS spinning disks that gets backed up by script offsite. [2016-06-14 Tue 04:01]

Storehouse, the company I worked at before moving on to Uber in 2014, is shutting down on July 15. It's sad to see, the product we built while I was there was wonderful, and of course it still is, even with the core changes rolled out in 2.0. I didn't get much of a chance to use the Android version after it rolled out, which is a shame, but it has the same wonderful design vision, paired with enough Android know-how to make it look good on that platform.

I'm glad to hear that the team will migrate to Square and land somewhere quickly, which isn't something I can say about my time after Storehouse, but all in all, I think it worked out quite fine. The folks I worked with, especially on the engineering side are 💯 and I wish them the best.

I'm going to have to figure out how to host some of the stories that I built, finally:

Nervewire, a image deck

It'll be sad to see it go, I think the product was solid, and I wish the folks over there the best at Square :) [2016-06-13 Mon 06:29]

I run a small Matrix to RSS bot with a bunch of cool cyberpunk/scifi/glitch art blogs in it. It's a cool place to just dig through random art, but I also want to present it in other ways.

One way is Nervewire, which coalesces all of these images from the room, and dumps them on to a page so that they can serve as a screensaver or wallpaper.

My instance of Nervewire is hosted at and hosts the aforemented Cyberdelia room. The code lives on my cgit.

The Master Grade RX-93 Nu Gundam is a fun build. #gunpla REVIEW ATTACH

[2016-06-08 Wed 21:26]

Along with Sazabi, I built the RX-93 Nu Gundam, the other main suit from Char's Counterattack. Another absolutely wonderful piece of kit, which was fun to build. I had even more problems with the water slides here, there are a lot of small decals that rub off easily, and I need to figure out how to get a clearcoat done in my apartment.

It's super detailed, it's well portioned and has a shitload of weapons, including the famed fin funnels. It even comes with its own Action Base, with connectors for the fin funnels, like in the shot above. I really love this MS, and I think the kit does a really good job on it. I see myself in a year or two building a set of weathered RX-93 and Sazabi, as they were in Char's Counterattack.

The Master Grade MSN-04 Sazabi is a wonderful #gunpla REVIEW ATTACH

[2016-06-08 Wed 21:00]

For those of you who are (un)lucky enough to follow me on Instagram, I have been working hard on a few #gunpla models in my free time, as time to down-wind and be creative. I've done a few large Master Grade mobile suits, including two of my favorite mobile suits, the first of which is the MSN-04 Sazabi, from the movie Char's Counterattack.

In short, it's a great kit. It's heavy, but comes with a giant pile of weapons and water decals. I mostly got the decals on pretty well, though I feel like I really need to hit it with some clear coat. It certainly does NOT feel like a up-scale High Grade like Heavyarms, it was a beautiful and incredibly detailed piece of kit, and I'd recommend you get one now.

Lunch outside of the @InternetArchive ATTACH

[2016-06-08 Wed 20:59]

Now @KevinMarks running a panel on p2p networks #DWebSummit ATTACH

Lunch outside of the @InternetArchive was great. Really excited for the rest of #DWebSummit. [2016-06-08 Wed 18:52]

#DWebSummit @vgcerf Desirable properties of a self archiving web ATTACH

Now @KevinMarks is running a panel on p2p networks #DWebSummit [2016-06-08 Wed 16:53]

Previous slide included copyright, gain license to run old software, etc.

Vint Cerf is talking about lessons learnt from the first internet and what the second should look like ATTACH

I'm at the @InternetArchive for the Decentralized Web Summit CHECKIN

[2016-06-08 Wed 16:31] [2016-06-08 Wed 16:18]

TIL Twitter blocks bots on

Looking forward to chatting Matrix and IndieWeb with folks. :) [2016-05-19 Thu 02:37]

The implications of this are kind of icky.

@torwegia ohhhhmyyygooddddd REPLY [2016-05-19 Thu 02:25]

Just gave a demo of Arcology at #indieweb Homebrew Website Club and no one laughed at me!

[2016-05-19 Thu 02:16]

@BerlinWalrus Naw man, computers are bullshit. REPLY

[2016-05-19 Thu 01:09]

I'm at another #indieweb homebrew website club! CHECKIN

[2016-05-19 Thu 01:03]

Read Uber + Public Transit: Changing Southern California’s Car Culture — Medium READ

[2016-05-18 Wed 20:23]

This, in short, is why I do what I do. Growing up in Arizona without a car most of my adolescent life and in to University was incredibly difficult, and the lack of mobility was a big factor in my leaving. As a resident of Phoenix in 2012, it was an imperative that you own a car -- I used to wait a half our for taxis in the middle of summer to get to my job, twenty dollars a day spent to keep me from the 45C heat. Car ownership, even in Phoenix, felt immoral, that the cost and stress of single-occupant vehicle ownership was not something I could take part in, so I left and moved to somewhere where probably 3/4 of the places I go to are accessible via rapid transit, and the rest via busses. But car culture is pervasive, and people are averse to public transit even today, and even in the seemingly progressive bay area -- look at the push back on Cal HSR.

A month ago I was in Phoenix, enjoying some time off work, catching up with friends, eating the food and drinking the coffee. Over the course of a week, I probably spent 100 dollars in total on Ubers which constituted half of my getting around; the other half was the light-rail.

And you know what? It was alright.

@torwegia I mean, the canon is that vibranium absorbs sound so that its stronger... not reflects it REPLY

Completed my first Master Grade #gunpla REVIEW ATTACH

[2016-05-16 Mon 18:17] [2016-05-16 Mon 07:05]

Above are some cool pictures of my first Master Grade build, the XXXG-01H Heavyarms Custom from Gundam Wing Endless Waltz. I bought it as a way to sort of practice on a Master Grade build before diving in to the two long-term projects of mine, the RX-93 Nu Gundam v. Ka and the MSN-04 Sazabi v. Ka, which by the looks of it are probably the two best Master Grade kits, and they happen to be two of my top five favorite mobile suits.

All in all, the Heavyarms kit feels like little more than an up-sized High Grade kit. It wasn't a terribly challenging build, and I got the core suit built in a single evening. It has just a handful of weapons, but lots of moving parts. Damn near every flat surface in the thing turns in to missile pods which is pretty cool, but it simply felt unchallenging. It did, however, have water slide decals, which I mostly failed to put on properly, which means that I have some hope of getting the non-sticker decals of the Nu and Sazabi on properly.

The design caught me by surprise, in that it feels decidedly non-canon. It's a strange mashup of the Gundam Wing version of Heavyarms and the Endless Waltz version of Heavyarms.

Design XX
Color XX
Weapons XX XX-ish
    Breaking this down:
  • The colors are that of the Heavyarms from Gundam Wing.
  • The design of the MS itself is that of the EW Heavyarms. That is to say, it looks like this.
  • The weapons are also from Gundam Wing.

It is however canon, just not the canon that folks expect. According to this post, it comes from Gundam Wing - Endless Waltz: Glory of the Losers which is a retelling of Wing. It makes me less caremad about it, but it still doesn't feel "right". There is a 1/100 High Grade of the EW Heavyarms that actually is the canon you want. It's probably about the same difficulty, as well.

As someone who spent most of the last year putting together Real Grade models, I felt like this one was lacking, but if you're new to the hobby or looking for a larger High Grade style kit, this thing is pretty nice, and you can do some fun stuff with it. I used it as a chance to play with some new lining markers that I picked up at Michaels, and I think the effect was pretty nice, though I might have to come back and hit it with a clear coat.

New signal identity

[2016-05-15 Sun 20:37]

New phone, new identity. My Identity on Signal is:

05 af 55 4e 63 85 39 d6 47 53 16 b7 1d 98 db ad cf c8 d1 ad f3 22 b2 4f f7 c2 83 7a bd 69 f4 3c 34

@rrrrrrrix And the good news about going matrix-only is that I can still federate out to IRC and others at will. REPLY

This whole Moxie/Signal thing...

[2016-05-12 Thu 17:18] [2016-05-12 Thu 16:57]

This whole Moxie / Signal thing really just underscores the mindset differences between Free Software and Open Source. It's about developer control and efficiency entirely, and the user freedom is just a handy side-effect.

Open Whisper Systems has done great work to make encrypted-by-default chat easy and accessible, but in doing so have forced users to cede a lot of control over their devices, and some of the UX decisions made are incredibly narrow minded.

tfw your leadership is completely anti-state LIKE

Finished the Real Grade RX-78 Gunpla ATTACH

Meanwhile, the folks over at Matrix are still plugging away at end-to-end federated chats. An open protocol, an open community, a place that is willing to support people without complaining about how annoying real-live-honest-to-god users and usecases are without building a monoculture. And that's the only place I'll be, when end-to-end chat hits and I can figure out how to wedge Olm in to Emacs. [2016-05-05 Thu 21:02] [2016-05-05 Thu 05:59]

This was a fun build, it has a removable core-fighter unit which is super cool, I still need to put decals on it, but I did a pretty good job with the panel-lining. Tried to make it look sort of grungy, like I did with the MS-06s that I assembled.

My coworker gave me some emoji stickers ATTACH

I'll take some action shots once I get the weapons put together and get details on him. [2016-05-02 Mon 22:13]

I am going to Cyberdelia at DNA Lounge! REPLY

Living that life. Also I am on call this week. [2016-04-23 Sat 06:57]

Really cool documentary on the creation of BART

At DNA Lounge, <2016-04-30 Sat 02:30>--<2016-04-30 Sat 10:30> [2016-04-27 Wed 06:05]

It's crazy that this thing that transports hundreds of thousands of people a day still works on the designs from the 60s. Imagine if we'd continued funding on world-class public transit instead of complaining about it every day.

Via Teapot.

Ryan likes LIKE

[2016-04-27 Wed 04:45]

Starting the day off with a bit of home ATTACH

[2016-04-25 Mon 14:18]

<2016-04-25 Mon 13:54> Jump Up and Bounce Down by FantomenK on The Massacre JAM

Cartel direct source Providencia. :3 :PROPERTIES: :TRACKMBID: 86440df1-70b5-4600-b3f9-a561c8d514 :ALBUMMBID: c5339abd-e704-465b-9d8f-f455dd6c0a :ARTISTSMBID: d8e90560-771e-4d67-8fb2-33c9286668 :ID: b941180c9d :RSS_PERMALINK: 1461592440.0-note.html :END:

The perfect song to wake up to

matrix-client.el 1.0.0 released!

[2016-04-25 Mon 05:04]

After a two month refactor, I am pleased to merge and tag matrix-client 1.0.0 which will be available on MELPA sooner or later.

This is a huge refactor that unlocks a lot of features that I've wanted for a while, and makes the codebase a lot more modular.

  • Multiple connections with different usernames and tokens
  • Better error handling and reconnect detection
  • Encapsulated API with EIEIO classes
  • Support for v2 /sync API
  • nixed the emoji, since most people don't have supporting setups, and since sending emoji doesn't
  • even work yet.

"Go outside, fat fuck." ATTACH

I'm pretty excited for this, and am going to start unlocking a bunch of features that I have wanted, like room membership lists and room lists (probably provided by speedbar), and erc-track-score like behavior. [2016-04-25 Mon 00:19]

I bought tickets to a vocaloid show. 🙏 🙏 🙏 REPLY

[2016-04-24 Sun 23:58]


I'll do anything to see the 90s cool boys play. [2016-04-24 Sun 23:33]

<iframe width="560" height="315" src="" frameborder="0" allowfullscreen></iframe>

@Torwegia @BerlinWalrus

@michielscholten Thule is nice, but covered in logo and #brand ( REPLY

I am going to make every effort to go to the next #indieweb HWC 💟 REPLY

[2016-04-24 Sun 23:13] [2016-04-23 Sat 08:21] [2016-04-23 Sat 07:14]

Went up to Torrie Pines today CHECKIN ATTACH

I'll be able to demo Arcology, as well as my integration with Memacs, and next steps with my engine! [2016-04-23 Sat 01:20]

Pretty nice place, wish I'd brought my hiking boots.

@BerlinWalrus yeah, it's still a WIP, but it's coming along REPLY

@BerlinWalrus @Torwegia it's coming from Arcology my #indieweb blog-engine built in ... REPLY

[2016-04-22 Fri 07:44] [2016-04-22 Fri 07:19]

Ryan likes LIKE

@BerlinWalrus We'll need @Torwegia to be a razorgirl. REPLY

Today I bought a new bag

... Emacs Lisp. See Introducing Arcology where I talk about it a bit more and the reasoning behind it. I could have it not include the URLs, but URLs aren't really punished in the character limit that badly, and it's nice to always have the clickthrough to put more words [2016-04-22 Fri 07:14] [2016-04-22 Fri 06:58] [2016-04-22 Fri 06:25]

It's from Pac-safe and has some neat features. I've had an anti-theft messenger from Travelon similar to this one, but it's just a little bit too small for all of my day-bullshit, like my small coffee-shop mechanical, the Planck. All in all, I'm a bigger and bigger fan of using travel bags and bags from travel companies as regular day-bags, though it is worrisome that the Amazon reviews for the pac-safe say that it is not water-resistant. Might have to get a small waterproof cover like this one, which appears to be able to collapse in to water-bottle sized package.

@BerlinWalrus All I've ever wanted in my life is to be a decker 3 REPLY

@huertanix Oh, yeah, it is. I haven't checked my email in like two weeks augh. REPLY

Now that the base of Arcology is working, time to work on design...

Travel-gear, in general, is super low-key because it's designed to blend in (barring things like suitcases, of course). I'm not a huge fan of wearing obviously-branded things like Timbuk2 or Chrome bags, or even things like Jansport, even though they have some fucking gorgeous designs like this purple one I had to get recently when in Arizona. The same goes for, frankly, all of my clothing, I mostly wear plain single-color tee shirts, and pants that don't have the big-ass leather stamps on them that you see on levis, etc. It's nice, though I am going to slowly but surely start phasing in some loud as fuck glitch and *wave clothing when the orders for those things finally make it in. [2016-04-22 Fri 06:05] [2016-04-22 Fri 04:20] [2016-04-22 Fri 01:01]

<2016-04-21 Thu 20:10> Cyberstrike ft. Sabrepulse by Shirobon on The Arcade Dream JAM

:PROPERTIES: :TRACKMBID: 2c433361-221c-45b9-afb0-8e2cd243e2 :ALBUMMBID: 404592ff-aee8-401a-8105-316e8b2172 :ARTISTSMBID: 0a14492b-4f8d-405c-adb5-f3e47b8eda :ID: 857268cb62 :RSS_PERMALINK: 1461269400.0-note.html :SYN-TWITTER: :SYN-FACEBOOK: :END:

@huertanix @willbradley We could exchange Snowdenmail through the Web Of Trust, no? REPLY

Back on Signal (née E2E is a Ghetto)

[2016-04-20 Wed 07:37] [2016-04-20 Wed 01:04]

Through some rube-goldbergian nightmare, I have made it back to Signal, with a new fingerprint. It is tied to my Google Voice number, (602) 633-****, and the fingerprint is as follows:

05 e4 ea ed a3 b3 61 ed 60 1c 3e 64 5c c5 a8 dc 99 a0 b2 c6 4a 5c 82 63 75 44 07 15 34 54 2a b7 30

Getting this in place was a total mess, due to the fact that I am no longer carrying a smartphone, and the fact that WhisperSystems refuses to support tablets. I recently bought a Samsung Galaxy Tab S2 to unify my web-browsing and e-book reading while I am still waiting for my PocketCHIP and CHIP to arrive, and switched to a BLU Samba TV, a great little 20$ number that has a gorgeous camera.

I used a side-loaded application called Market Helper to trick the Google Play web interface in to allowing my tablet to install the Signal application. Installing it was thus mostly easy, though it requires a rooted device, which makes it awkward since I am considering un-rooting my device (a thought for another post, though). It's just a fucking totally shit user experience to have to do this, for an app that works perfectly fine, though without a "tablet-y" interface.

Once you install the app it requires a phone number, because that's of course the only sane way to identify a human being in 2016. It doesn't use the cellular network to push the data, just as an identifier, so I put in the number attached to my Google Voice account, which used to forward along to my Nexus 5 and allow Signal registration by slurping notifications from the default SMS application. I get a push notification on my tablet from the Voice app, and then an SMS on my BLU. Signal sees neither, because it doesn't work with Google Voice. I wait three minutes for the registration to time out, and it offers to call me. It calls me, and I put in the same six digit number that I just had SMSd to me and it generates new keys.

Now... how on earth do I get access to that key's fingerprint so that I can paste it in to a blog post and a few out of band mesages? Good question, the UX basically has no way to do that, so I have to start a conversation which I can then message someone with, but they cannot message me back until they verify my new FP, which is hidden under Three Dot Menu -> Conversation Settings -> Verify Identity on Android.

After that, it'll work. Push notifications, media, contacts, all work just fine, Signal just refuses to support it in a way that isn't, again, a fucking totally shit user experience.

Updated my gpg key's expiration date today

[2016-04-19 Tue 23:57]

I've exported it to and

pub   rsa2048/0x7FF21B69A5FCE951 2015-10-10 [SC] [expires: 2016-10-16]
      Key fingerprint = BFE3 EA10 49EA D5FE CD50  78E5 7FF2 1B69 A5FC E951
uid                   [ultimate] Ryan Rix <>
uid                   [ultimate] Ryan Rix <>
uid                   [ultimate] Ryan Rix <>
sub   rsa2048/0xCC47ADB64C1BBFAD 2015-10-11 [E]
sub   rsa2048/0xC4FB939DEF0F3F8D 2015-10-11 [A]

TIL that surfraw was written by Julian Assange

I have a signed message hosted at with biographical and contact information that should still clear with the new key as well as a Keybase account. CLOSED: [2016-04-19 Tue 20:18] [2016-04-19 Tue 20:18]


Surfraw provides a fast unix command line interface to a variety of popular WWW search engines and

other artifacts of power. It reclaims google, altavista, dejanews, freshmeat, research index,

slashdot, and many others from the false-prophet, pox-infested heathen lands of html forms, placing

these wonders where they belong; deep in unix heartland, as god-loving extensions to the shell.

    Also he was Mendax in /The Underground/

The Miami Knight ATTACH

CLOSED: [2016-04-16 Sat 06:30] [2016-04-16 Sat 06:29]

<2016-04-16 Sat 05:00> Cherry Pepsi by Saint Pepsi on HIT VIBES JAM

I named my keyboard. :PROPERTIES: :TRACKMBID: 12a3eeec-9f7a-4002-b3c8-750235652e :ALBUMMBID: ff881a14-c23e-4728-bfb9-7b11bb5b6e :ARTISTSMBID: 21087a8d-5967-40ce-bd93-ae56c8ab19 :ID: 87c791460f :RSS_PERMALINK: 1460782800.0-note.html :END:

Gonna Laser Etch on to Miami Nights tonight CHECKIN ATTACH

Miami Nights Ergodox ATTACH

CLOSED: [2016-04-16 Sat 00:51] [2016-04-16 Sat 00:50] CLOSED: [2016-04-15 Fri 21:21] [2016-04-15 Fri 21:11]

Helped my friend Prescott pull images from space ATTACH

This week I laser cut my a new housing for my ergodox keyboard, in jet-black acrylic. Paired with my keycaps, Tai Hao's Miami doubleshot keys, it's gorgeous. I had to buy 160$ worth of acrylic to build it, since Port Plastics only sells in 4x4 or 4x8 foot sheets, and I needed three different thicknesses of acrylic to put this together. I cut a few sets, a backup and one for one of my lucky coworkers, and then donated the extra acrylic to HeatSync Labs, the wonderful little hackerspace in which it was cut. CLOSED: [2016-04-15 Fri 20:58] [2016-04-15 Fri 20:54]

Coworking at Cohoots CHECKIN

Probably the most exciting thing that has happened so far in my Arizona Expedition 2016.4 was the day before yesterday when my friend Prescott pulled an image from the ISS, broadcast to earth via Slow-scan television. The image we pulled was so crisp, it was hard to believe that it was broadcast to us over the course of 36 seconds, and captured on a plywood yagi antenna and a 13$ TV tuner dongle. CLOSED: [2016-04-15 Fri 20:51] [2016-04-15 Fri 20:49]

Introducing Arcology

The new midtown cohoots location is neat. CLOSED: [2016-04-15 Fri 20:44] [2016-04-15 Fri 19:32]

Today I got my blog generator Arcology to publish a site to the World Wide Web. Indeed, this very post is being published through Arcology.

From the ground-up Arcology is designed to become a self-sufficient information hub, a way to share various snippets of information in an easy, socially consumable, way. It's built around the work of the IndieWeb movement, as a way to pull my personal information and thoughts out of closed-silos.

The core of Arcology is built around Emacs Org-mode. When I started writing this project, telling people that I was writing a blog engine in Emacs-Lisp, people would bug-eye at me.

"Are you some kind of slimy lisp nerd?"

"Yes, No, idk. I just like what org-mode gives me, and I like its markup syntax"

In short, this blog engine is designed to take a giant pile of Org entries and synthesize a site out of them. And so, by slurping a bunch of information out of the ether, and rendering them in to org-mode files you can create shareable snippets of your life.

It's primarily targeted to sit on top of my slurper of choice, Memacs, and to provide an easy way to "promote" any org-mode heading in to a blog post. All of my random thought snippets, botspam, and Memacs entries can easily be pushed out to my blog to be shared with the world, then syndicated to the Silos of Facebook, Twitter and someday soon hopefully Swarm, Goodreads, and similar other silos.


It is a nice pattern, and built on top of open protocols and formats defined by a two really great communities. CLOSED: [2016-04-13 Wed 21:28] [2016-04-13 Wed 21:27]

Staffing some SRE positions at $DAYJOB

Best hackerspace. CLOSED: [2016-04-06 Wed 05:50] [2016-04-06 Wed 05:32]

Hi, I don't usually do this sort of thing in my web spaces (talk about work) but my team has finally had some much-needed headcount allocated towards an exciting project, and I want to staff it with cool folks ASAP. 😄

First off, I'm a Site Reliability Engineer supporting the Money, Anti-fraud and Finance Engineering teams at Uber, and am looking to bring on some folks to help architect reliable cloud-native infrastructure for our next-gen platforms.

We're leveraging industry standard tooling like Terraform to power the future of Uber infrastructure and particularly Uber's Money platforms -- and I need talented people to help us build it.

If these buzzwords are interesting to you, feel free to use the contact methods below this post to get ahold of me and let me know:

  • AWS
  • Terraform, Packer and all that Hashicorp jazz
  • Docker
  • Golang and Java

"Actually it's GNU+Windows"

Day-to-day will mostly be high-impact greenfield projects, as well as working with the aforementioned teams on projects to enhance reliability and reduce single points of failure for the money, anti-fraud and finance engineering teams' platforms so that we can keep trips flowing at 100% and ensure the wellbeing of the hundreds of thousands of drivers and partners who rely on these systems. CLOSED: [2016-03-31 Thu 17:41] [2016-03-31 Thu 17:35]

Is it weird that the thing that people are most excited for about this in my eyes is everything that GNU has been saying constitutes the GNU part of GNU/Linux for the better part of two decades?

Sure, there is a kernel implementation of POSIX syscall ABI. But there is the ELF executable support provided by glibc But there is the glibc ABI itself But there is the set of GNU coreutils

The Importance of Meditation Spaces

The kernel syscall ABI unlocks these features, but without the glibc and ELF support it's a non-event. [2016-03-25 Fri 04:22]

As of late, I have picked up a habit that some of my friends have said borders on obsessive: The construction of small plastic GUNDAM Models -- Gunpla. I've now built four of them over the last two months, and more and more am starting to realize why I have gravitated towards such a strange hobby, besides the fact that I enjoy giant mechas punching each other in space.

One thing I have always struggled with is the ability to shut my brain out from external thinking and meditate on my own life. It's been much easier for me to look objectively at the problems around me than it has been for me to loo even subjectively at my own state of being.

I found a while ago that the mindless tedium of a task that takes naught more than simple motor skills to complete. Things like folding laundry, baking to a recipe, or building a model kit following the directions perfectly. I've even started to detail my models, giving them "realistic" panel lines and weathering. It is fun and easy.

These spaces give me a way to "turn off" a part of my brain I usually am unable to bargain with, and to focus on the rest of me.

Today I went to the Legion of Honor with @Torwegia ATTACH

Plus, I end up with some cool models afterwards that I can pose in combat. CLOSED: [2016-03-27 Sun 04:27] [2016-03-27 Sun 04:26]

We walked around a lot, and my camera died near the beginning of the walking. Some great views of the Golden Gate Bridge and of 🙏 Sutro Tower 🙏. Looking forward to spending a bit of time tomorrow wandering around Oakland with my camera.

I got a new Olympus Micro 4/3 camera so that I can, you know, actually carry a camera around. I'm going to have to get a pancake lens for it though, so that it can live in my bag without me having to take the lens off. I'll have to save for that though, as the last of what I am willing to spend of my year-end bonus went towards the camera.

Selling a bunch of hobby toys

CLOSED: [2016-03-04 Fri 06:52] [2016-03-04 Fri 06:40]

tl;dr: I am getting rid of a bunch of toys I don't have the money or time to use.

  • sold DJI F550 clone hexacopter for 300$
  • Arcas HV high power rocket for 75$
  • Nike Smoke high power rocket for 100$
  • 6 fin high power rocket for 75$
  • Binder Design Sentinal high power rocket for 100$
  • Black Brant X Kit for 75$

When I moved out here, I had hoped I would use these, that I could have the time and energy to drive down to Mountain View or out to Stockton to make NAR launches happen. I, unfortunately, haven't.

I've had a lot of fun building and flying high power rocketry, but it's incredibly difficult for me to afford flying them while I live in the Bay Area. I spend more than half my income on rent, and can't afford a monthly drive out past Stockton to be able to launch these rockets. I don't have the time or energy to wake up at 5am on a Saturday morning to drive out there or 7am to drive to Sunnyvale to fly my drone safely. I imagine when I have the time and money and am in a place where I have more workspace, I will be able to revisit the hobby but for now it's basically impossible.

High Power Rocketry is super fun, and people who live in the area should get involved with LUNAR. I'm not super interested in bargaining with people on these; they are already getting listed for waaaaay under what I bought them for.

For sale: 54mm Binder Design Sentinel model rocket ATTACH

CLOSED: [2016-03-04 Fri 05:47] [2016-03-04 Fri 05:11]

I am selling my model rocketry equipment.

This is a 54mm Binder Design Sentinel, designed to be a dual-deploy for my NAR Level 2 certification. It is a discontinued Binder Design model, which I purchased from a coworker and assembled. It has never been flown, but is fitted with a 54mm AeroPack motor retainer and has some sort of laundry inside of it.

All in all, ready to fly, for 100$. I will not be shipping this rocket, it is available for local pickup in Oakland, California. Contact if interested. Flying this will require NAR or Tripoli level 1 certification.

For sale: 37mm 6 fin rocket ATTACH

I have a number of other kits in various stages of construction as well. CLOSED: [2016-03-04 Fri 05:46] [2016-03-04 Fri 05:22]

I am selling my model rocketry equipment.

This is a 37mm rocket, assembled and almost ready to fly which I purchased from a coworker's attic in Arizona. You will need to purchase fresh laundry for it, as the elastic cords seem quite brittle. I don't know its origins, or the designer, unfortunately.

All in all, almost ready to fly, for 75$. I will not be shipping this rocket, it is available for local pickup in Oakland, California. Contact if interested. Flying this will require NAR or Tripoli level 1 certification.

For sale: 54mm Black Brant II kit ATTACH

I have a number of other kits in various stages of construction as well. CLOSED: [2016-03-04 Fri 05:43] [2016-03-04 Fri 05:30]

I am selling my model rocketry equipment.

A Public Missles, Ltd Black Brant X kit -- the fins are G10 and the body is plastic. This was intended to be a NAR Level 2 dual deploy when I was comfortable with a less complex model. There was even some crazy ideas to put the Black Brant on top of a Nike stage 1. Oh well, maybe when I am older. It was purchased from an old coworker as a kit.

I am selling this kit for 75$; you will need to purchase a new nose cone for it as I used it on my Binder Design sentinel. I will not be shipping this rocket, it is available for local pickup in Oakland, California. Contact if interested. Flying this will require NAR or Tripoli level 2 certification.

For sale: 54mm Polecat Aerospace Nike Smoke ATTACH

I have a number of other kits in various stages of construction as well. CLOSED: [2016-03-04 Fri 05:45] [2016-03-04 Fri 05:25]

I am selling my model rocketry equipment.

This is a 54mm Polecat Aerospace Nike Smoke. It was originally intended to be a NAR Level 2 rocket, it could be flown as a Level 1 however. I have never flown it myself, as I wasn't interested in hiking two miles through the desert to retrieve it -- You'll want to fit it with a Tender Descender most likely, which I do not have. It has been primed with automotive primer, ready for a full coat of paint and is fitted with a 54mm AeroPack retainer and a full set of fire-safe laundry.

All in all, ready to fly, for 100$. I will not be shipping this rocket, it is available for local pickup in Oakland, California. Contact if interested. Flying this will require NAR or Tripoli level 1 certification.

For sale: 37mm Arcas HV Fibreglass model rocket ATTACH

I have a number of other kits in various stages of construction as well. CLOSED: [2016-03-04 Fri 05:10] [2016-03-04 Fri 05:02]

I am selling my model rocketry equipment.

First off, my Arcas HV Fiberglass rocket. It was my NAR Level 1 certification rocket and is a delight to fly. It is this Madcow kit and has been primed with automotive primer, ready for a full coat of paint. The laundry is included, and it is fitted with a 37mm AeroPack motor retainer.

All in all, ready to fly, for 75$. I will not be shipping this rocket, it is available for local pickup in Oakland, California. Contact if interested. Flying this will require NAR or Tripoli level 1 certification.

For sale: AeroSky 550 hexacopter ATTACH

I have a number of other kits in various stages of construction as well. CLOSED: [2016-03-04 Fri 05:02] [2016-03-04 Fri 04:52]

UPDATE [2016-03-27 Sun 04:31]: This got sold

I am trying to get rid of a bunch of toys and hobby stuff that I don't have the time or money to fully enjoy.

I am selling my hexacopter, a Chinese knockoff of the DJI F550, for 300$ which is half of what you'd find it for on XHeli when it is in stock, and cheaper than on Ebay as well. It is fun to fly, but in a city environment like Oakland it is not something I can easily do, myself. I used to drive down to San Jose to fly, but that costs way too much money to do often enough.

Included is a battery as well as a few packs of extra propellers. It is ready to fly, transmitter and receiver included. It is line of site with no FPV functionality and you will need to register with the FAA to legally fly it. You'll need a balancing charger similar to this one, banana plugs.

It can be shipped in the included box, but shipping costs will be on the purchaser; I prefer pick up in Oakland, CA. Contact if interested.

Apparently I had an evernote account still ATTACH

CLOSED: [2016-02-23 Tue 19:33] [2016-02-23 Tue 19:32]

The Importance of Having a Tribe and a Third Place

Guess I gotta close this out. CLOSED: [2016-02-13 Sat 22:13] [2016-02-11 Thu 02:20]

This year will mark three years since I got up and moved from Phoenix, Arizona to Oakland, California. It's been a long and exhausting set of years, some of the hardest that I have had, but it has been an experience that I wouldn't trade for the world. I have met amazing people, forged close relationships that will last the rest of my life, and had the privilege of working with some of the smartest people I have met on a project that has improved urban life around the world.

But I lost a lot coming out here. Not many people I know now know that I spent three months homeless in Oakland, occasionally living in a warehouse on 15th and Webster with no income and too much depression to fix that easily. Not many people know that my move out here and the stress involved in relocating caused my relationship with my best friend to go to shit so far that it took us two years to reconcile and is a process still continuing.

Most people do know that I am depressed though, that some days it is a very crippling situation for me. It has taken me years to start figuring out why this has happened to me, but I am coming to realize that a large portion of this is due to the fact that I lost my tribe when I left Arizona.

Neotribalism or modern tribalism is a sociological concept which postulates that human beings have

evolved to live in tribal society, as opposed to mass society, and thus will naturally form social

networks constituting new "tribes."


I used to believe that things like neotribalism were goofy things, that we as a society could and should be a single mass; this whole adventure has changed that about me. I used to decry the insularity of tribes that formed within the open source community, but over time I have realized that that was simply my dislike of insularity, not a natural factor of tribes in and of themselves. I don't believe that tribal membership is set in stone, that you "roll with" the same people for your entire social life; indeed, they are overlapping friend circles, a venn-diagram of peer groups that always ensure you are forging new experiences.

In Arizona, I had a tribe of sorts, HeatSync Labs a wonderful hackerspace in Mesa, a mere bus ride and light rail ride from my university dorms. This community became a second family, of sorts, and it was constantly changing due to the way to community was structured. People came, people left, but we were brought together by a shared vision of a cool place that people could safely make and build whatever the hell they wanted to, so long as they did not harm another member. The physical space exists in a storefront on Main Street, in downtown Mesa, where hundreds of people a week walk past and can wander in, ask what the hell is going on, and maybe stay and learn to solder or program. It is hardly a perfect community and since I've left the space seems to have closed in around itself, which is a terrible shame, but few communities are as close and familial as the community I had in Arizona.

HeatSync functioned as a third place perfectly, and gave me a sense of community that kept me meeting new people and forging new experiences. It wasn't even about getting there, necessarily, the online space functioned alongside of the physical space to provide a sense of community even when I was not physically there.

I lost that community and space when I moved out here. The hackerspaces in San Francisco are nice, but due to the tech-centric nature of San Francisco and the bay area as a whole, there is less of a need for a general purpose hackerspace community, and as a result much of the bay area hackerspace scene seems politically motivated, as a system almost to rebel against the technology industry. I am not interested in that, terribly. I want to improve my community but I don't think that anti-capitalist tendencies are the way to go about that. Of course, the tech scene can be just as myopic at times, and so I have struggled to find a group that feels like community to me, a group that wouldn't stop talking to me if I quit my job next week.

And it has been fucking hard to find that. When I was first starting to make plans to come out here, my friend Brian Shaler spent a long time trying to get me to stay. One thing he told me resonates strongly with how I have come to view the bay area hacker community:

The Arizona meetup scene is about people who build cool things in their spare time and get together

to show it all off to each other. The San Francisco meetup scene is about pitching your startup idea

and hoping the person you are explaining it to is your next investor or cofounder.

I shrugged it off at the time, but as I went to more and more meetups out here I start to take it as fact, and have given myself a rule about attending tech meetups out here: if it is sponsored by or hosted at a startup, I won't go. As you can imagine, this has vastly narrowed the set of meetups I am able to go to, since there is not really a good general use event space for informal meetups to take place at.

I used to go to Oakland JS which is a great meetup full of wonderful people, but the location leads to little more than drinking, which is another thing that I have struggled with since coming out here, everyone in my social circles drink all the god damn time, it seems like. And so I stopped doing that and started, until I became too depressed recently to keep it rolling, hosting Emacs SF meetups as a way to bring together a bunch of like-minded folks around a thing as goofy as our choice of writing environment. This has been a great experience but has sort of failed to reach a critical mass so far and it is sort of shelved until I can figure out what to do with it. The most promising group I have found to align myself with over the last few months has been the IndieWebCamp movement. Unsiloing and owning your own data and destiny are things I care deeply about, and this group has been open and friendly, and even have a local meetup,the Homebrew Website Club, where we just talk about IndieWeb happenings, and work on our websites. It's fucking dope. All in all, though, I need more positive communities like this in my life. I have thought about starting up a meetup similar to the HWC for the local community, but shepherding another local community right now is not something that I can think of handling.

Another homebrew website club meeting (@ Mozilla San Francisco in San Francisco, CA)

If there is one thing that I have learned as key to surviving in this crazy fucking place, its to make sure you have friends and a sense of place that isn't work. Work can change in a day, and it is important to make sure that if it does, you don't lose your line of contact with the real-world. It has taken me a long time to figure this out and come to terms with it. CLOSED: [2016-02-11 Thu 02:17] [2016-02-11 Thu 02:13]

Meetup Cancelled: Coffee.el

See the checkin on Swarm CLOSED: [2016-02-07 Sun 22:26] [2016-02-07 Sun 22:25]

Coffee.el, scheduled to occur on Saturday, February 13, 2016 1:00 PM has been cancelled, as well as future Coffee.el events.

As members of the group have noticed, coffee.el and Emacs-SF as a whole have sort of faded out of the collective consciousness; on a personal front work has been a huge time sync for me since mid-November and as a whole, the "core" folks pushing this group forward seem to be in a similar position. This starts to taper off for me in about a month or so, but I've been reminded that this recurring event has been on the calendar without a location or an owner and I've removed it until it can reliably have either.

As always, Emacs-SF is an open group -- if folks want to get together and meet, in a conversational format or presentaional format, don't hesitate to reach out to me to put something on the calendar.

Rethinking how I store and process Quantified Self data

As for keeping some semblance of community during the down-season, we still have the Emacsconf discourse group which we can use as a sort of email list/rich text forum. I'd encourage folks to hop in to there and build the community we want to see happen. CLOSED: [2016-02-07 Sun 22:26] [2016-01-27 Wed 18:24]

As I have written in the past, I feel like 2016 will be the year that I pull more and more of my data in to my own control. I have made great strides in this direction but a lot of work has to come to make this really meaningful this year.

A chunk of making sure this happens is putting the data in my control in some meaningful fashion. Having a blog of files under 20 different formats isn't going to work so well for me, after all, if I can't easily make sense of it all. Of course, there are probably some cloud services around that will make it simple to graph or whatever, but that isn't my style, and I should have some simple scripts written up to make sense of my data in a way that is most useful to me.

The way that I have done this for personal data in the past has been to route it through Org-mode using Memacs to process data streams in to Org-mode headings, and then leveraging either custom agendas or property tables to process the data in interesting fashions.

I am at @MozillaSF for the Homebrew Website Club

This is nice, but it requires some pretty hefty horsepower to process a large amount of data; for example, it can take CLOSED: [2016-01-28 Thu 01:52] [2016-01-28 Thu 01:50]

How to Edit the IndieWebCamp wiki with Emacs

Tonight I'm going to start working on refactoring my org-mode blog to support more microformats in a sane fashion. CLOSED: [2016-01-26 Tue 23:47] [2016-01-26 Tue 23:46]

Bits of the dope-ass set that @Terminal11 played at F8 (via @NicolaSegall)

A little thing I put together when trying to get the IndieWebCamp wiki working in mediawiki.el. Will have to pull this in to CCE when I have the time, but for now it is here and it is %. CLOSED: [2016-01-25 Mon 00:52] [2016-01-25 Mon 00:50]

It seems like my arensito experiment is over ATTACH I am all about this. CLOSED: [2016-01-24 Sun 23:39] [2016-01-24 Sun 17:52]

For the last few weeks, my main keyboard has been an Ortholinear Keyboards Planck, as it is a goregous little keyboard that fits in my daybag and mostly feels solid; It is quite dense due to the fact that the case is aluminium panel. That is pretty easy to fix with a 3D printer and a few hours on OnShape, I just need to get around to printing out a plastic case for it.

But this isn't meant to be a review of the planck, though I should write one of those up. This is about the keyboard layout I have been trying to learn.

Arensito is a great keyboard layout, built for the Kinesis Advantage with a focus on programming (mainly C-style languages) and a distinct symbol layer, which incidentally makes it a great fit for a small non-staggered board like the Planck. The planck is also built with layering in mind, with the keyboard design essentially forcing you to put at least three layers on each key (regular, shifted and symbols). It is really great if you can figure out how to rewire your brain to learn it. It shares little in common with qwerty, as Colemak does, which makes the learning curve, well, steep.

I spent two weeks with low productivity at work, hopping between an Arensito layout with blank keycaps and my Ergodox with a qwerty layout, but today I picked up my NPKC Rainbow Keycaps from Massdrop. I didn't realize until, well, yesterday, that I had purchased keycaps that were OEM profiled and had key legends printed on them. The end result is gorgeous as above, but it basically restricts me to QWERTY or a layout which puts each key on the same row, which is not super useful.

With that in mind I, well, switched back to qwerty. It is a known-shitty layout, but overall arensito has hindered my productivity enough that switching back to qwerty is really my only sane option.

Some things I've learned during this experiment:

  • Learning a new keyboard layout can really only work if you go all in. There are no android soft
  • keyboards that support arensito and it turns out that it is almost impossible to build a custom keyboard layout on Android. AnySoftKeyboard seems to be the easiest -- you 'just' create an XML file and then use an Eclipse project template to generate an APK that ASK can load. No 3rd party keyboard on the market supports Arensito out of the box as far as I can tell. If I had one, I probably could have retrained my brain a lot quicker, but I was fighting an uphill battle as long as my phone and computer used different layouts. Of course I could just stop using Android, I guess... ;)
  • The idea of a dedicated symbol layer is something worth keeping. My current planck configuration
  • is the standard qwerty layer, with the Arensito symbol layer on the 'upper' layer and system controls and function keys on the 'lower' layer. The Arensito symbol is interesting because the numbers dont take the top row, they are l-shaped hanging off the bottom row. You should check out the layout, it is very nice and I wish I could use the whole thing easily.
  • While profiled keycaps are nice, they really only work sanely if you have a 'normal' keyboard or
  • buy them individually. Buying a pack like this on Massdrop just leads to a bit of a hodgepodge as you can see in the image above. For example, literally the only 2U (Two standard keycaps wide) keycap on the 87 key set that it comes with is the backspace, which is out of place. There isn't a good R3 key to use as the 1U enter key, so my enter key's 1) a function key, 2) a different profile than the rest of the keys on that row.

Just pushed matrix-client.el 0.3.0

CLOSED: [2016-01-19 Tue 00:04] [2016-01-18 Mon 15:34]

I added HTML rendering of org.matrix.custom.html matrix events which are used by Vector's markdown feature, primarily. There is no support for sending HTML messages from this thing right now, I may add that in the future.

Also new in this release is a connection watchdog; Previously, if you went offline, you would just silently be disconnected from the event stream. What's worse is that if you reconnected, you would still be able send messages that wouldn't echo back to you! The new feature starts a timer that runs at twice the rate of the maximum event stream timeout. what this means is that if you leave the default 30 second event stream call timeout intact, after 60 seconds the watchdog timer will run and see if there have been any callbacks from the event stream. If there have not been, it will attempt to re-connect the event stream and get you back online.

Matrix-Client.el 0.3.0

As always, let me know on Matrix or via email if you have issues with the release. CLOSED: [2016-01-18 Mon]

I just pushed a new tag to the Matrix-Client repository and the features should be available in MELPA shortly.

I added HTML rendering of org.matrix.custom.html matrix events which are used by Vector's markdown feature, primarily. There is no support for sending HTML messages from this thing right now, I may add that in the future.

Also new in this release is a connection watchdog; Previously, if you went offline, you would just silently be disconnected from the event stream. What's worse is that if you reconnected, you would still be able send messages that wouldn't echo back to you! The new feature starts a timer that runs at twice the rate of the maximum event stream timeout. what this means is that if you leave the default 30 second event stream call timeout intact, after 60 seconds the watchdog timer will run and see if there have been any callbacks from the event stream. If there have not been, it will attempt to re-connect the event stream and get you back online.

As always, let me know on Matrix or via email if you have issues with the release.

Lostpass: Pixel-perfect lastpass phishing

CLOSED: [2016-01-17 Sun 05:52] [2016-01-17 Sun 05:50]

Read Protect yourself with a smart card READ

Uh, welp: Lostpass. These are the sorts of things that moved me on to pass and now towards mooltipass. Can't be helped. CLOSED: [2016-01-15 Fri 20:08] [2016-01-15 Fri 19:59]

Starting to curate a Twitter list of people decentralizing things.

My good buddy Ian documents his smartcard setup, which is very similar to mine. It is really nice to be able to trust that my work SSH keys can't be easily compromised and that I can leave my work machine at the office and get in to production if something is on fire and all I have is my Chromebook and my BCS's Raspberry Pi. CLOSED: [2016-01-10 Sun 22:58] [2016-01-10 Sun 22:53]

I wish there was a decentralized way to do this... Let me know who I am forgetting.

Wow @trklou's CCC talk is powerful. Watch it. BOOKMARK

Basically a list of people who are doing cool things in the space, currently focused on #IndieWeb and Matrix which I consider two of most important decentralization projects right now. CLOSED: [2016-01-10 Sun 07:46]

Watch Crypto Wars Part II BOOKMARK

This talk is my favourite CCC talk so far. CLOSED: [2016-01-10 Sun 05:34]

Watch Collect It All: Open Source Intelligence (OSINT) for Everyone BOOKMARK

Another good CCC talk about government and public rhetoric about encryption. It's something we need to start fighting against, and I have some thoughts on that that'll go on my long-form soon. CLOSED: [2016-01-10 Sun 02:30] [2016-01-10 Sun 02:29]

Read How A Mod Team Helped Age Of Empires 2 Thrive READ

Watch Lifting the Fog on Red Star OS BOOKMARK

This is a really powerful. There's a bit at the end about aaronsw during the questions too :| CLOSED: [2016-01-10 Sun 01:47] [2016-01-10 Sun 01:13] CLOSED: [2016-01-10 Sun 00:25] [2016-01-10 Sun 00:21]

Has the @EFF or anyone thought about making a minimal TAILS or Raspbian image just for GPG key setup?

Very interesting breakdown of North Korea's Fedora-based operating system... CLOSED: [2016-01-09 Sat 22:08] [2016-01-09 Sat 21:43]

I am envisioning a small Rasbian image that supports the Adafruit PiTFT, boots to a script that walks you through setting up the following:

  • Generating a secure master key
  • Backing it up to cold storage
  • Generating subkeys
  • Backing those up
  • Exporting the keys to a smartcard to be used

Afterwards, you destroy the Micro SD card and secure the master and the subkeys in a cold storage.

Fixed a weird interaction issue i was having in #Emacspeak

The basis would be something like the smartcard setup by Tom Lowenthal, or another similar setup. CLOSED: [2016-01-04 Mon 21:47] [2016-01-04 Mon 21:43]

The combination of ido-flx, smex, and emacspeak seems to be really good at causing errors, when you hit RET to call the last thing you called in smex. Essentially, it was trying to remove text-properties from a read only object, and getting this behavior repaired proved to be non-trivial. I have worked around it for now, with the follow advise, but it'd be neat to track it down properly.

(defadvice ido-exit-minibuffer (around emacspeak-no-personality first)
  "Disable voice lock on ido-exit; causes an error."
  (ad-deactivate 'remove-text-properties)
  (ad-activate 'remove-text-properties))
(ad-activate 'ido-exit-minibuffer)

Read Matrix Synapse 0.12 released READ

CLOSED: [2016-01-04 Mon 18:37] :LOGBOOK: CLOCK: [2016-01-04 Mon 18:35]--[2016-01-04 Mon 18:37] => 0:02 :END: [2016-01-04 Mon 18:24]

I'm pretty pumped about this release; the addition of guest accounts and invites to third party IDs makes it easier and easier to onboard friends and family in to Matrix.

Of course, this means I need to update matrix-client.el to the r0 APIs...

I got @sonic_pi working with BCS ATTACH

CLOSED: [2016-01-04 Mon 08:32]

I got Sonic Pi working with my Body Computing System and its external deck. Right now it does little more than show how poor I am with music, however having it integrated in to my core setup in a reproduceable fashion means that I will be able to do more musical things in my downtime. Between this and the pair of analog synths I have, I will have the opportunity to make some neat music in 2016.

What does it want?? ATTACH

It will be interesting to see all these things blend together -- I would love to be able to do live performance using the BCS system, with or without the deck attached to it, and to feed external audio in to this system, like from LSDJ or from the Korgs' ribbon synths. CLOSED: [2016-01-04 Mon 03:29]

Apparently Sonic-Pi uses JACK and I am afraid for what is ahead.

I pushed my #IndieWeb notes generator (the thing creating these posts)

CLOSED: [2016-01-04 Mon 03:09] [2016-01-04 Mon 03:07]

It's rough, raw and gross, but it works for me, and maybe it'll work for someone else.

The TTY Demystified should be required reading

CLOSED: [2016-01-04 Mon 00:09] [2016-01-03 Sun 23:54]

The TTY Demystified:

If there is one thing I would want every application/service developer to read before starting a career in software development, it would be The TTY Demystified. Great post going in to the history and implementation of a core piece of plumbing that most engineers never directly interact with and most users will never see in their lifetimes. You learn two things very quickly:

  • The "standard" UNIX plumbing stack is built on shoestrings and bubblegum. Every single Linux
  • machine relies on emulating properly an actual physical modem link initially designed for teletypes. This is the core of the modern Linux development environment and API, and even if you're only echoing logs out to =stdout= to be pushed in to =syslog= or =journald= the effects of the "terminal" your application is running in can have wide-reaching effects on your process.
  • The "standard" UNIX terminal gives you a lot of really nice features for free. As an application
  • developer I generally don't need to care about things like flow control and process group management. My shell does all the heavy lifting of managing process groups, suspending and restarting jobs and managing pipelines. Only when I reach outside of these things do I really need to care deeply about them, and when I do, there are some pretty janky ways to do them, though they are time-vetted and mostly work. For example, most people assume =SIGSTOP= is what is sent when a user hits =C-z=, when in reality the shell sends an interceptable =SIGTSTP= ;which a process can use for cleanup, and then it re-emits a =SIGSTOP= to *its own process group*. If I am writing a full TUI application without the help of some system like ncurses or Emacs (or even if I am) I can manually intercept =SIGWINCH= and do my re-flow work in that handler.

Did a CAD design for the ergodox deck ATTACH

CLOSED: [2016-01-01 Fri 04:53] [2016-01-01 Fri 04:46]

Dan Luu is a smart person READ

Here it is on OnShape. I am planning to have it milled in wood at TechShop this year; I have a shitty version cut out of plastic and wooden dowels, and it works nicely as a hardboard for the ErgoDox that I use at work; afterwards, my Pi plugs in to it and then we can jam on personal projects. I am pretty excited to have this done. CLOSED: [2015-12-31 Thu 09:28] [2015-12-31 Thu 09:27]

Baby's second korg (cc @emilymhorsman) ATTACH

One of a handful of people who I read everything they post on their site. CLOSED: [2015-12-31 Thu 06:33]


Today I successfully used GPG to communicate securely with another human being.

CLOSED: [2015-12-31 Thu 00:51] [2015-12-31 Thu 00:49]

gpg2 --symmetric --encrypt --armor secrets
scp secrets* rrix@share01:public_html/
ssh share01 rm public_html/secrets

NYE readiness ATTACH

I managed to use the GPG2 porcelain only causing me to make a mistake once. CLOSED: [2015-12-30 Wed 23:01] [2015-12-30 Wed 23:00]

RIP Ian Murdock 😿

CLOSED: [2015-12-30 Wed 19:41] [2015-12-30 Wed 19:39]

In Memoriam: Ian Murdock

Read A survivalist on why you shouldn't bug out / Boing Boing READ

    #hugops to so many people right now. A man who truly changed the world for the better is gone. CLOSED: [2015-12-30 Wed 08:17] :LOGBOOK: CLOCK: [2015-12-30 Wed 08:10]--[2015-12-30 Wed 08:17] => 0:07
  • Refiled on [2015-12-30 Wed 02:35]
  • :END: [2015-12-30 Wed 02:32]

Read Under Watchful Eyes READ

    CLOSED: [2015-12-30 Wed 08:05] :LOGBOOK: CLOCK: [2015-12-29 Tue 23:46]--[2015-12-30 Wed 00:05] => 0:19
  • Refiled on [2015-12-30 Wed 02:35]
  • :END: [2015-12-30 Wed 02:32]

Via Boing Boing.

Those who have exposed the extent of surveillance are fugitives and exiles from our paradise. They

have played the role of the cursed serpent of Eden: the purveyor of illicit knowledge who broke the

harmony between watcher and watched. The rest of us contemplate the prospect of dissent with careful

unease, feeling that our individual and collective security depends on compliance. We are unwilling

to cease our perpetual confessing. That murmuring of our thoughts and experiences into the listening

ears of states and corporations?disguised by the loving online presence of our family and friends,

or concealed by the vast anonymity of the Internet?is one of the great horrors of modernity. We

cannot conceive of how what we reveal now about ourselves and our children might be used in the

future, by the systems of governance that will arise amid the instabilities of a changing

climate. And yet, for all that, the deep narratives of our culture tell us that the lost happiness

of humanity consisted not of the harsh travails of private existence, but of just this: living naked

and innocent within the absolute love of an omniscient watcher.

How many words have been wasted on ten harmless ones that appear once in the message area when starting Emacs? REPLY

CLOSED: [2015-12-30 Wed 02:12]

Publishing Short-notes using org-mode

CLOSED: [2015-12-30 Wed 01:41] [2015-12-30 Wed 01:39]

I have a system that "sort of" works to publish Org-mode entries with some minimal microformat markup; I will probably end up forking the org-html exporter entirely so that I can make it possible to add semantic markup to arbitrary elements easier, because right now it is, uh, janky. Over the long term, I will probably end up moving all of my blog posts over to this system, as it seems like a pretty straightforward way to do it, if it wasn't filled with so many goddamn hacks. I'll blog about this system shortly. Eventually, this will be used to automatically push photos, twits, and facebook posts, but for now it'll just be a sort of space between "tweet" and "blog"

Tonight I wrote a blog generator framework ATTACH

CLOSED: [2015-12-30 Wed 06:38] [2015-12-29 Tue 22:35]

Read Learn The Art Of Following Through: 5 Steps To Ensure You Will Achieve Your Goals READ

It was an accident, I swear. CLOSED: [2015-12-29 Tue 21:57] [2015-12-28 Mon 10:46]

One of my biggest struggles has been follow through, improving this in 2016 is going to be key for me.

Read Six months with a dumbphone / Boing Boing READ

CLOSED: [2015-12-28 Mon 05:24] :LOGBOOK: CLOCK: [2015-12-28 Mon 05:11]--[2015-12-28 Mon 05:24] => 0:13 :END:

Matrix and IndieWeb: A match made in heaven? 👼

This one is interesting; as I wrote recently, I am pretty close to not needing a smartphone anymore. On the one hand, my experiences with a Blu SambaTV have been interesting and enlightening, I still need "smart" aspects given my reliance on services like Uber which do not work via SMS (barring incomplete hackathon projects like Textber.) CLOSED: [2015-12-19 Sat]

One of the core benefits of Matrix is the fact that, at the end of the day, you own any chat room you participate in. There is no central authority that can shutter a chat, if you run your own homeserver, your homeserver and the homeservers of others make sure the rooms you care about stay alive. This is an incredibly important property of any ecosystem I choose to participate in, more and more -- I simply do not trust non-caring third parties to reliably power infrastructure that I build my personal life around. I don't want to trust a Google or a Facebook to not shutter their products in a way that is inaccessible to me, I don't want to trust them to keep my conversations safe and private.

Real time chat has not had the bring-your-own-server philosophy baked in to its core since its beginning the web has. Sure, XMPP tried to instill a sense of ownership, but for all intents and purposes, it has failed in that regard, both technically and philosophically.

The web started out with a bring-your-own-server philosophy and we have lost that over time, though a small group of folks are beginning to bring these ideals back with a focus on modern usability and 3rd Party Integrations via the IndieWebCamp movement. Though my views on usability heavily differ from mainstream consensus, the overarching goals of IndieWebCamp speak to me at the core of my being:

  • Your content is yours
  • You are better connected
  • You are in control

These goals line up tightly with the goals behind Matrix, and I think a point of intersection can be found. Like IndieWeb's "You are better connected", A core tenant of Matrix's design is the ability to bridge other networks, such as IRC and XMPP as a way to create a network effect easily. Indeed, I use my Matrix homeserver as an IRC bouncer, and it has subsumed nearly all of my real-time communication, except for work's chat service and a little bit of Telegram. It can also be looked at as a generic data layer, as polynomial has shown.

In "No More Sharecropping!" Shane Becker writes about his ideal setup for an IndieWeb site. I see many parallels between this and the core ideals that Matrix is striving towards. Matrix is an attempt to reclaim ownership over an incredibly important aspect of our lives and is doing a damn good job at it, at least in my case.

Matrix provides easy upload and storage of images, audio, video and of course text I wouldn't suggest storing long-form inside of a Matrix homeserver, of course, but as a data plane it seems more and more useful. Using Matrix as a data layer for all my communication short-form communication does not seem so out of the question.

I've set up RSS pull-based inbound data to great effect, the opposite is mostly done, as well. As part of my body computing system work, I've a very minimal Org-mode assistant working over Matrix. It is nowhere near ready, but after reading Shane's article, I feel like an additional feature flow could be quite nice:

  • I configure to publish as RSS and HTML per "Blogging from Emacs"
  • I post an image, or audio or short text to the bot
  • The bot creates a note linking to the image, or audio in
  • The bot calls (org-publish-project 'public) which pushes my new image, audio or text to a page
  • with proper [[][h-entry]] tags for notes.

Simple, easy blogging using Matrix and the tools I already use; if I am at a laptop, I can wrap all of this in to a single function easily. Hell, if I was feeling extra crazy, the bot could weasel its way in to the internals of twittering-mode and push tweets or other notes back in to the private chat, providing a two-way gateway that is not reliant on any one service to be up, other than my own Matrix homeserver and my own web server.

This is one small place where Matrix and IndieWebCamp intersect, I feel like finding interfaces between the two of these aren't difficult at all, given they both, at their core, deal with taking control and ownership over your communications in an easy, intuitive fashion.

Apropos to nothing, my blog now supports webmention, as a sort of limited commenting, using and Bridgy to provide these features to my otherwise static site. I'm adding 3rd party dependencies to my site, but this sort of progressive enhancement isn't the worst thing -- if one of these services go down, I just go back to bridging these things myself.

Polynomial: A Decentralized Webring

CLOSED: [2015-12-06 Sun]

I started using a computer right around the time that search engines caught on; in elementary school we were introduced to research using Alta Vista and the original Google. We've come a long way since then and now that it is easy to find information using one of these hulking behemoths, we've lost a cool thing of the past. Webrings

Are you fucking kidding?

No, actually I'm not. Webrings are cool -- a simple registry to find sites written by people who are of the same tribe as the site you're on. It's a nice idea and leads you down some nice rabbit holes when they actually exist. I don't expect anyone to actually care or use them, but there's no reason they can't continue to exist.

Last year, tilde club and its ilk took off for much the same sort of tribal community building that webrings could and should solve for. It's interesting that giving a bunch of like minded people a space to collaborate together like that can evolve in to a real community with its own lore.

So what?

So I made a piece of webring software. Actually, I built one on top of (surprise!) that doesn't have a central point of failure. A set of immortal webrings, if you will, that will persist as long as there is a homeserver willing to host a supernode for them. And I'm hosting at least one, on It's easy to add to your site, a simple iframe. Unfortunately it relies on javascript and doesn't work in EWW but what can ya do?

It's terrible trash javascript, dumb, and silly but I like it and think others should use it and run their own supernode. I started building it after trolling my coworkers with a simple missive: Build a webring without a central point of failure.

The textual web is important, and web sites should not be locked behind walls like Medium and Facebook. Build a site, host plain fucking HTML and let others discover it.

Body Computing System continuations

CLOSED: [2015-11-22 Sun]

Over the last few weeks, I have integrated the Body Computing System more and more deeply in to my workflow and moving more and more systems out of my smartphone and shitty decentralized systems.

The core development that unlocked this for daily usage was giving up on building my own jacket system and instead opting to shell out for a fairly expensive ScottEVest System, which features wiring networks and some fairly huge pockets, allowing me to evenly distribute the weight of two Raspberry Pis and a 1000mAh battery pack. This gives me a full day's power5 and is all-weather: the vest works great even when it is warm out, and as the temperature drops, I can add the sleeves on, and then the windbreaker/rain shell, which all together is probably enough to be comfortable in a Phoenix winter, though probably little more.

Two Raspberry Pis?

You'll notice above, I mentioned running two pis as part of the core jacket system. The reason behind that is that I have used the Pi, a reliable long-term battery,and the data-fabric which my devices communicate over, to build a lifestreaming system that can capture and offload a photo from the surprisingly good raspberry pi CSI camera every $ARBITRARY_AMOUNT_OF_TIME. The benefits that come from having a log of my day in photo form are numerous, and the system is small enough to not be noticeable or create a "glasshole" effect. It gives me, a person with very visual memory, a way to look back at the day and remember where I have been as a way to jog what I have done. The fact that these images just get pushed in to a Matrix room that is non-federated to other servers means that a process running on my compute server could do facial detection and, for example, tag those photos in my BBDB contact database. It is also a trivial step to allow the Matrix pusher to also be able to take commands and, for example, begin recording video for later examination in an emergency situation.

BCS Lifestream images look sort of like this, I need to put the camera in a place that doesn't focus up because of how I wear my vest.


I am still an incredibly visual person when it comes to how I learn and work; an audio-centric workflow is not impossible to use, but it is certainly not yet the most efficient way to do things for me yet. I can write prose in this style -- and indeed I am now -- but I couldn't imagine coding with it, for example, especially in lisp-likes like I have been doing in my free time. Imagine trying to track parentheses, as audio. I have no idea how, for example, T.V. Raman does it when building Emacspeak, it is super impressive.

To unlock my ability to use this system for simple programming tasks, I went down a nice route, inspired by Max Ogden's wireless Kindleberry Pi Hack6. This required me to go down the route of doing a serial jailbreak of my Kindle, which was surprising -- there is currently no software jailbreak for the current Kindle Paperwhite firmwares. It was not difficult to do, but I pulled one of the pads off when trying to hide the breakout cables, which means if I ever lose my root, I will have a hell of a time regaining it. This gave me a screen, via a small terminal that someone wrote called KTerm, I set up the BCS core system to boot to a TTY isntead of X11, and start emacs in a tmux session that multiple clients could attach to. After that, it is a simple matter of attaching a USB keyboard to the Pi, SSHing in on the kindle and running tmux a to get in to the active session. All of this, paired with a cute little weighted stand for the kindle means that I have a small "tabletop" that fits in a daybag. I even got a small "40%" mechanical keyboard called the Planck7 that fits in the same bag without taking up all the table space that the Ergodox does.

The whole set up for mobile work ends up looking like this.

Pondering on Computing Systems

I have successfully built the hardware for a Minimum Viable body compute system, but the software still needs a fair amount of work to be useful. Using Matrix for the data fabric is looking to be smarter and smarter, as the community, spec, and tooling, grows. People are starting to build cool shit on top of it, and it is looking like I can move more and more systems to self-hosted Matrix "apps"; during Thanksgiving I will probably try to build a Twilio appservice so that I can migrate my phone number off of Google Voice. If I can get Twilio SIP to play nicely with Matrix WebRTC, I could even take phone calls over Matrix. Incredibly cool systems can be built with the API and ecosystem that is developing around Matrix.

The data fabric is not the whole story of course. There needs to be things pushing interesting and useful information across the fabric to me. I need to be able to push information in to systems. These are where things are sort of lacking still, and where I am going to begin focusing.

What I really want is a personal assistant bot that can capture notes, todos and calendar events to my Org-mode system, push those events back to me as event notifications and agendas.

What I really want is a system that consumes twitter and pushes them in to Matrix if it thinks I care about them. Brian Shaler worked on this problem in the past as but that project needs to be expanded upon quite a bit to fit my need. In reality, what probably happens is that I build something on top of the Gnus scoring system -- simple "header"-alike matching and applying scores to the headers and the message as a whole. It works great for my email, and could probably work pretty nicely for generic feed-like things like twitter too, if I could get my twitter in to Gnus reliably.

After that, all I need is a way to selectively push message subjects and URLs in to Matrix. Org and Gnus provide a way to open arbitrary messages, and since they would all have unique IDs, it would be trivial to pass the IDs over the wire and have a system in the mobile hun to raise the messages. Wire a fetcher and parser to a timer, and let it run.

    I think that the software things I need to be able to fully move off of my smartphone as a daily computing device are:
  • the ability to request Uber rides; I wrote an Emacs client for Uber's API, but in all honesty,
  • moving that on to Matrix is a much more interesting and valueable task. Once that is done, I can re-write my porcelain to get the information it needs from Matrix.
  • transit notifications and lookups via Nextbus: be able to query arrival times for BART and AC
  • Transit via Nextbus and the BART realtime API; extend that further to set reminders and notifications for when transit is a certain distance away -- "Let me know when I need to leave to catch the transbay NL bus" or the train that isnt super fucking crowded.
  • twitter: despite my best intentions, I am still fairly tied to this platform as a way to get
  • realtime news and information about what is going on in the world and with my social circles, since they are not on Matrix yet. The scoring thing is gonna be a big part of making this useful, being able to filter out the cruft that floods my timeline sometimes is gonna be 🔥.
  • SMS: as I said above, I am still fairly reliant on SMS as the most widely available communication
  • means for my friends and I. Moving that off of Google Voice is going to be really important since the APIs for that are... not great, and it has essentially been abandoned since Google acquired Grand Central.

Hell, once all of these are in place, most of my needs can be handled over any client, which is interesting on its own.

On the Balkanization of my chat communities

CLOSED: [2015-11-01 Sun]

Over on PaulGraham News, there's an ongoing discussion about using Slack for FOSS projects. It's interesting but almost entirely focuses on the technical and UX aspects of why IRC has failed, while ignoring what is in my opinion the most important aspects of a chat platform: The social aspects.

Back in 2006, I got involved in an open source C compiler that ran on PalmOS devices, OnBoard C. Great little piece of kit and was the driving force behind me learning how to program as a middle school student with no reliable access to a single computer, since my parents shared custody over me. OnBoardC was mostly a community that existed on YahooGroups, but I discovered that an offshoot of the community hung out on IRC, in #srcedit (named after the OnBoardC text editor). This led me down the rabbit hole of discovering IRC, installing a client (on my palm T|X as well), and meeting these people from all over the world in real time chat.

Eventually one of the community members got tired of my constantly connecting and disconnecting and gave me a shell account on his server where I could run a persistent irssi in a screen session, and have full-time access to a real Linux server via an SSH client (again, running on my Palm T|X).

Something weird happened when I had a ubiquitous connection to the outside world: I realized it existed. I stumbled in to #teensonlinux a place for high school and middle school students to talk about Linux and Free Software. The owner of the IRC channel and de-facto head of that community lived a 20 minute drive away from me and informed me that there was a group of people who met IRL once a month to talk about Free Software, the Phoenix LUG. Fast forward nearly a decade and I can trace the success of my career as a software engineer, and the path that's lead me to be a leader at one of the most successful tech companies in the world, to my joining a global chat network where tribes mingled freely.

Slack, in my opinion, is killing that by giving each community a walled-garden. Had I joined the OnBoardC Slack, I would have probably gone down an incredibly different path in my life, I would have met different people and who knows if I would even be in software engineering -- I was planning to go to school to become a Civil Engineer back then. IRC-as-a-watering hole was instrumental to my success as a software engineer and free software advocate and it is dying. I'm a member of two Slack communities which I rarely participate in because it doesn't integrate in to my other systems. Sure, I have the IRC gateway set up, but I just connect to ZNC so I have to remember to do that. Their mobile client "works", but I think that engaging in long chat on a phone is terrible.8 As a result, the communities that I used to interact with on IRC, I rarely interact with any more due to the overhead of remembering to connect. With IRC, I was just there. With Slack I have to keep multiple browser tabs open or remember to switch between them, when I don't even want a browser open in the first place.

People say that Slack is winning because of its ease of use and great UX9, but an equally important aspect, especially among the more activist-centric slack communities I've heard about is that it's much harder to bring harassment and spam in to a walled garden. Slack solves the spam problem by walling your tribe off from the other tribes, and while that is a solution, I don't believe its a good solution.

Which brings me to my point, a somewhat better solution.

Over the last few months, I've started using a neat decentralized chat platform called Matrix. It started as "I want to build a distributed RPC for my crazy vest computer", but as I've started to fall in to using it, I've realize that the system as a whole is capable of solving the problems of IRC while keeping the network effects that make it so powerful.

The ickygross protocol is gone, chat history is baked in to the spec, there are some great clients being developed with mobile and push notifications and all the things Slack users love. It's got a great community of developers and power users, and it is decentralized. It's got end-to-end encryption on the way, using an implementation of Axolotl. I built a client in a few weeks. The possibility of push-button chat via OAuth is built in to the spec. It can bridge to other chat networks like IRC.

Most importantly though, it's in a great position to solve the spam/harassment problem by serving as a base for a reputation system by its very nature as a decentralized system. And it's something that the core developers know they have to solve in a way that can keep the system as a whole surviving. And it's something I think they can do pretty easily as either a core part of their DAG or as a side-channel. Imagine being able to set your homeserver to say "only allow new chats from people who my friends and I have decided aren't a total shitbag." Build up enough reputation amongst my tribe in the open watering holes before you're able to spout hateful garbage. People have talked of dogecoin and similar as a Whuffie and in my mind Matrix is a far more interesting platform to build something like that on.

Matrix is the distributed decentralized future that we all deserve.

It's interesting to note that all of these issues are the same issues that Twitter faces as a global watering hole and is why I believe it will also fail in the long term as power users find better mediums.

Mclient.el --- A frontend for Emacs

CLOSED: [2015-10-26 Mon]

Update: This software is unmaintained. Sorry :(

Today I tagged version 0.1.0 of mclient, a client for Emacs and I opened a pull request to have it added to MELPA. I've been incredibly interested in Matrix as an RPC layer for my projects; a decentralized event stream that can be used for text Chat, signaling for WebRTC VoIP calls, and as a data layer for various projects surrounding my Core Computing Environment and Body Computing System. I've written a few toys with it, including a system to control my living room lights over Matrix, but this is a full blown API library and chat client written in pure Emacs Lisp using the wonderful Request.el library.

It comes in two parts matrix.el which is the actual API implementation, and mclient.el which provides matrix-client, an interactive function to launch an interactive chat.

The API library allows me to build, for example, an Org-mode "personal assistant" bot that can use prompt-based capture templates to interact with a remote Emacs instance from my Android.

The chat client is, well, a full chat client. It's really rough right now, and it's completely homebrew, but it works and is full of 🙏 Emoji 🙏, so make sure you have Symbola installed and configured to be used 😄. It doesn't support registration (yet!), so if you don't have a account head over to the Matrix site and get set up with an account or deploy your own homeserver by deploying Synapse.

The Matrix spec itself is a dream to work with, frankly, given how young it is. At its core is an HTTP polling Event Stream protocol which you can just request to and wait for a chunk of events to show up. Those events are individually quite rich with metadata, so the core of mclient itself is essentially a router to a set of event handlers, each of which is able to work with a given Matrix event type. The upshot of this is that the chat porcelain could be genericized enough to act as a chat client for anything that works similar to a comint stream, and as such could be used to build a UI on top of telegram-cli, for example.

Like I said at the top of this post, mclient will be available in MELPA soon, but if you can't wait, clone matrix.el.git and add the directory to your load-path.

Oh, and lastly, I am on Matrix. If you end up trying out mclient and experience any issues, come find me in!

New GPG Key

CLOSED: [2015-10-11 Sun]

Please find attached my new GPG key as well as general identity information.

I have rotated my keys due to ongoing issues with the way I structured my smartcard exports. As
such, the new primary key for the following UIDs should be considered 0x7FF21B69A5FCE951

 - Ryan Rix <>
 - Ryan Rix <>
 - Ryan Rix <>

This document is signed by both the old key and the new key to aid in verification. The previous key
is not signing the new key due to the aforementioned Yubikey issues that have plagued me the last
few months. What follows is general Biographical and Cryptoraphical information which you may use to
verify this information

Feel free to download that file and verify both the old key and the new key:

gpg2 --verify ~/org/new-key.txt
gpg: Signature made Sun 11 Oct 2015 01:06:59 AM UTC
gpg:                using RSA key 0x7FF21B69A5FCE951
gpg: Good signature from "Ryan Rix <>" [ultimate]
gpg:                 aka "Ryan Rix <>" [ultimate]
gpg:                 aka "Ryan Rix <>" [ultimate]
gpg: Signature made Sun 11 Oct 2015 01:07:32 AM UTC
gpg:                using RSA key 0xE5DB00A8DB1B5346
gpg: Good signature from "UberEng <>" [ultimate]
gpg:                 aka "Ryan Rix <>" [ultimate]

Also, if anyone wants to help me figure out why my old key can't sign, that'd be greaaaat.

bash-4.3$ gpg2 --list-keys 24c87ae0
Keyring: /home/rrix/.gnupg/pubring.kbx
pub   dsa3072/0x67F784B924C87AE0 2012-12-31 [expires: 2017-12-30]
uid                   [ultimate] UberEng <>
uid                   [ultimate] Ryan Rix <>
sub   rsa2048/0xE5DB00A8DB1B5346 2014-11-24 [expires: 2015-11-24]
sub   rsa2048/0x08D32BE430DCAF7B 2014-11-24 [expires: 2015-11-24]

bash-4.3$ gpg2 --card-status
Application ID ...: D2760001240102000006030146700000
Version ..........: 2.0
Manufacturer .....: Yubico
Serial number ....: 03014670
Name of cardholder: Ryan Rix
Language prefs ...: en
Sex ..............: male
URL of public key :
Login data .......: rrix
Signature PIN ....: forced
Key attributes ...: rsa2048 rsa2048 rsa2048
Max. PIN lengths .: 127 127 127
PIN retry counter : 3 3 3
Signature counter : 2
Signature key ....: E494 3940 302E 546A 2ADA  A0E8 4AD7 8DC7 5044 6D97
      created ....: 2015-06-04 04:40:25
Encryption key....: ABB6 736F A507 64F3 7ABB  7DF3 08D3 2BE4 30DC AF7B
      created ....: 2014-11-24 07:45:41
Authentication key: 2823 270A 100C 2D85 58A1  4CB6 E5DB 00A8 DB1B 5346
      created ....: 2014-11-24 07:45:30
General key info..: [none]

I am fairly certain that using 0x50446D97 as the Signing key in the Yubikey is causing it to (rightfully) refuse to sign as 0x24C87AE0, but it'd be nice to have confirmation of that.

This new key is nicely backed up in cold storage so hopefully this can't happen in the future. 🙏

Body Computing System: A Redux, and a Dream

CLOSED: [2015-09-13 Sun]

Back before the dawn of mankind, in the month of April, I wrote about10 my struggles with the body computing system and what I was going to do to build a system that actually worked for me; since then, I've gone back to just using my Thinkpad full time, and carrying it in a backpack with my smallbag. I had plans to build, essentially, my own laptop, with my Ergodox and a Raspberry Pi. I've been playing on and off designing something that worked like this, and even came up with some decent solutions. The most promising in recent memory was this briefcase system11 which would have worked and been good but wasn't really the style of something I want to carry every day. I just need a way to mount the screen on the top half, and I could use this today. I've also designed a number of printable Ergodox-computers along lines like this12. Overall they are nice, functional systems, and useful interfaces, but they failed to scratch the real itch that I have: ubiquitous, easy to use personally-controlled computing.

Over the last four months, I've sold, in my head, the issues I've had that led me to a dead-end on the Body Computing System last time:

  • *Power Constraints*: The big issue with the body computing jacket, was that I'd end up carrying
  • high-capacity batteries protected only by a thin layer of fabric; over the last month, I replaced my jean-pockets and small-bag with a fanny pack. First a stupid ridiculous one[fn:4:] that I bought as a joke, but lately a more undertoned[fn:5:] and useful one. This is a great place to hold a high capacity battery, it stays out of the way and is well padded.
  • *InterfaceKit*: This was a really cute custom handheld I was going to build, but it relied on slow
  • systems and was too bulky to be useful. I ended up scrapping this entirely, and moving toward using a pocket bluetooth keyboard and Emacspeak[fn:6:], a great text-to-speech system that is tightly integrated in to Emacs, my computing environment of choice. It's going to take a lot to get used to, but it also solves my notification-sleeve system that I wanted to build, by virtue of my always needing a headphone in one ear; I may get a contact headphone like this one on Amazon[fn:7:], to keep my ears free, but that can be after I verify that this is actually useful.
  • *Dedicated Routable Network*: The fanny pack also can hold a wifi hotspot in it, and without
  • needing an InterfaceKit, I can get away with using the crappy one that I have; it has multiple days of battery life, but it isolates each client on to their own VLAN. To facilitate routing, I've recently embraced a neat system called Matrix[fn:8:] to create a series of peer-to-peer RPC channels that are thinly disguised as chat rooms. I am working on tight integration between the Body Computing System and homehub[fn:9:], another one of my Omega Projects, and Matrix is proving to be a key lynchpin in that system.

With these big issues routed around, I've begun working on my MVP again, and have had some promising first results; I've integrated Emacspeak in to FSEM13 and begun working on good patterns to work with it, and generally starting to understand how fucking hard it is to use computers if you're visually impaired. A post for another time, though. I've also worked on the hardware, with some pretty good first results.

The really really cool part about this implementation is that the HDMI port and USB ports are easily accessible at any time. This means that I could build a dumb terminal with just a display and the Ergodox and just plug it when I want to use it. It's a very promising pattern, if I can put together a small mobile thing that fits those needs, a la the printable computers I am designing.

Essentially this idea of creating a ubiquitous computing platform is starting to become a bigger project than just that -- a compute fabric for all of my systems, not just when I'm on the go. It's also becoming much more attainable system. Matrix has proven14 15 really simple to work with so far, and the effect is nice. I'm excited about this project and am carving out more of my personal time to hit this project as hard as I want to.

At the Emacs-SF Coffee.el meetup last month, I met one of the engineers behind Avegant16 a neat personal projection unit, and I'm really looking forward to seeing that ship, I may even pre-order one and integrate it in to this whole system, at which point I would have a fully-functional personal computing system which even could do display. Exciting times.

Screencasting FSEM?

CLOSED: [2015-09-12 Sat]

More and more, people have been asking me to show more of the setups I've been working on, between FSEM and my Body Computing Systems; With that in mind, would people be interested in weekly screencasts or something? I'd be tempted to start up a Patreon if so.

My Inventory

CLOSED: [2015-07-18 Sat]

I am attempting to build a full inventory of everything I own. It's half a reason to figure out what I use, and what I don't use so that I can minimize and sell/donate things that I don't use, and half as an insurance buffer to know what I lost in some sort of catastrophe scenario (file server disk failure, natural disaster)

I use, naturally, Org mode to build out my inventory. In essence, I have an org_archive file with two headings, a list of Locations where things live, and a list of things. Each thing has a bunch of properties which I can use to filter and calculate on.

Over on Hardcore Freestyle Emacs I am beginning to expand my documentation of my Inventory system, which I am using to catalog the things that I own -- physical objects, mainly but also my eBooks and valuable digital artifacts. It is a system in its infancy, but provides a good example of how nicely the pieces of Emacs infrastructure I'm using are put together -- namely how simple it is to integrate Helm, Org-mode and Org-links together to create something inherently useful

Automatic Workflows in Org-Mode

CLOSED: [2015-08-16 Sun]

I recently implemented a system for automatically moving among a list of Org-mode tasks, which I call TaskFlows. The idea is simple: tag a project as a taskflow, and when you complete a task, it automatically clocks in to the next task.

    There are a few usecases for this where I think it excels in my workflow:
  • Habits with subtasks
  • Preventing distraction with projects

I am a super duper forgetful person in the morning, especially before I've had coffee and so I've augmented my brain with a task flow to keep me moving and non-forgetful in the mornings. I haven't managed to forget my GPG smartcard since implementing this task flow system, which has been super helpful.

 ** INPROGRESS Morning Prep
<2015-07-14 Tue +1d>
:FLOW: t
 *** NEXT Caffeine
<2015-07-13 Mon +1d>
 *** NEXT Shower
<2015-07-13 Mon +1d>
 *** NEXT Brush Teeth
<2015-07-13 Mon +1d>
 *** NEXT Deodorant
<2015-07-13 Mon +1d>
 *** NEXT Review agenda
<2015-07-13 Mon +1d>
 *** NEXT Eat breakfast
<2015-07-13 Mon +1d>

The way this works is simple, I have a standard Bernt Hansen-style org-mode project, with a FLOW: T property set on it; when I mark a project task as done, it will automatically clock me in to the next task. Combine this with a REPEAT_TO_STATE, Efforts and a recurring timestamp and every morning I can be out the door in under 30 minutes without forgetting a thing and with the added bonus that those things are now clocked and optimized.

This system is also super helpful for the way I tackle my email and bootup at work, keeping on task with minimal distraction in meetings, and probably a ton of other situations. Most importantly, it's given me low-friction ways to tackle serial tasks, and that's made it easy to sprinkle in extra things, such as "Stand on the scale and capture it in this Org-mode table" every morning, or "properly clock how much time you spend reading email versus writing email"

How does it work?

I started out by modifying bh/clock-out-maybe, which is called whenever you mark a task as DONE

(defun bh/clock-out-maybe () (when (and bh/keep-clock-running (not org-clock-clocking-in) (marker-buffer org-clock-default-task) (not org-clock-resolving-clocks-due-to-idleness)) (rrix/clock-in-sibling-or-parent-task)))

This overrides Bernt's bh/clock-in-parent-task with my =rrix/clock-in-sibling-or-parent-task=:

(defun rrix/clock-in-sibling-or-parent-task () "Move point to the parent (project) task if any and clock in" (let ((parent-task) (parent-task-is-flow) (sibling-task) (curpoint (point))) (save-excursion (save-restriction (widen) (while (and (not parent-task) (org-up-heading-safe)) (when (member (nth 2 (org-heading-components)) org-todo-keywords-1) (setq parent-task (point)))) (goto-char curpoint) (while (and (not sibling-task) (org-get-next-sibling)) (when (member (nth 2 (org-heading-components)) org-todo-keywords-1) (setq sibling-task (point)))) (setq parent-task-is-flow (cdr (assoc "FLOW" (org-entry-properties parent-task)))) (cond ((and sibling-task parent-task-is-flow) (org-with-point-at sibling-task (org-clock-in) (org-clock-goto))) (parent-task (org-with-point-at parent-task (org-clock-in) (org-clock-goto))) (t (when bh/keep-clock-running (bh/clock-in-default-task))))))))

This function is quite similar in shape the the one it overrides, with some added rules:

  • has sibling && has flow -> clock sibling
  • has parent && (! has flow || ! has sibling) -> clock parent
  • ! has parent -> clock default

How I Created Hardcore Freestyle Emacs

CLOSED: [2015-07-02 Thu]

I've been asked more and more lately how I've gone about creating Hardcore Freestyle Emacs, my literate computing configuration. After all, it's over 100 pages printed, covers damn near everything I use computers for, from chat to email to un-fucking servers to how I remember all of the useless crap that my coworkers love me for knowing. The code itself is mostly the work of others, with my own customizations and improvements and increasingly my own custom ELisp, but the way they fit together is uniquely me.

FSEM was constructed in a declarative fashion; over the course of a week's work trip in Hawaii I broke down exactly the ways I used computers in to broad categories that now form the =H2= headings. In broad strokes, I write code, I manage servers, I track my work very closely, I keep a budget, I read email and blogs and news, and I talk to people a lot on IRC and Twitter, and lastly I blog, I listen to music. That covers, I would say 90% of my computing, the rest of which is probably playing video games or watching videos, neither of which I have found a good way to declaratively reason about yet, and frankly I'm not too worried about that since they mostly take place outside of my primary computing environments.

Once I have those broad categories defined, I can begin to look at both the optimal way in which I would complete those tasks, and how I am currently working through them. Both of these are described more or less completely within the document. Given my Coding environment, for example, I talk a lot of what I should be doing with Phabricator integration, how nice it would be to be able to tie Org-mode tasks to the actual work that other engineers see. Or I have some un-populated =NEXT= headings where I will some day having coding paradigms for given languages, such as the Clojure toying I've been doing over the last few months.

Given these three sets of data, we can begin to fill in how it all should work, adding the actual configurations that make my environment flow. Much of this was directly ported and inserted from both my hand-maintained init.el and Bernt Hansen's Org Mode configration, and when all of this was said and done, there were a lot of blank spaces and a laundry-list of areas that needed to be improved upon. But the end result was that I had a file that could tangle out to an init.el and accurately document just how I used my computer for a variety of tasks.

KDE ActivityManager in Emacs

CLOSED: [2015-06-30 Tue]

Today I whipped up a small Emacs minor-mode to interface with KDE's ActivityManager system. It's my first minor-mode and it's janky as fuck right now, but I'm going to expand on it to eventually be able to filter, for example, to just buffers that are linked to your current activity, pushing me towards a long-standing goal of mine to create a system which flows with what I'm doing, rather than forcing me in to its workflow.

For those out of the know, KDE's got this neat as frick concept called Activities where you can connect windows and files -- and other resources such as web pages -- to an arbitrary UUID, which is then attached to a workspace in KDE Plasma. Think of them as Virtual Desktops that you can shut off, in essence. When I used KDE, this was a super powerful idea, and a really wonderful system, but back then, and even now, it just doesn't play with the wider ecosystem. Unless you use Konqueror, your browser doesn't support it without terrible hacks, your editor probably doesn't support it, unless you're using Ivan's Vim plugins, &c. That'll change soon, I'm pushing my weird little Lisp operating system in to a level of deep system integration and fluidity.

At any rate, if you want to play with this, it's on my public cgit which unfortunately lacks an easy way to git-clone 'cause I'm too lazy to fix git-daemon to properly export the repositories over the public net. For now, curl that file, add it to your load-path and then:

(add-to-list 'load-path "/path/to/kamd.el/") (require 'kamd) (kamd-global-mode)

Let me know if it causes any issues for you; currently it pulls the D-BUS session bus out of the environment, if that doesn't work, it'll probably just silently fail.

Capture All EWW Buffers

CLOSED: [2015-06-28 Sun]

Part of my Expansion technique is to just open a shitload of browser buffers throughout the day and pick through them in my IDLE times. EWW has basically no session support like emacs-w3m does, which is actually Okay given that that didn't serialize out to any format which I can sync between my workstations easily. Instead, I've crafted this function which uses my W buffer capture template to dump every EWW buffer to my refile.

On FSEM, I built a system to capture and kill my EWW buffers in to my Throughout the day, I end up with 20 or 30 EWW buffers for things I want to read at the end of the day, be them from Gnus, Twitter or IRC. I try to not get sucked in to reading them while I'm working, and so these things just get pulled in to a big mess of buffers. By pushing them in to and then killing them, I can force myself to properly clock time spent reading them, as well as making sure they eventually end up in my read list.

As an added bonus, to make this more sane, I wrote my first advice, behind that same URL[fn: I should figure out a sane way to include these snippets directly in my posts, but for now, follow through to FSEM as the canonical location, since a lot of this changes often.], to rename EWW buffers based on the page title; there's not any sort of "page finished displaying" hook in EWW like there is for w3m in w3m-display-hook, so I had to advise a function, which I did with the function that sets the