if you can't fix it, it ain't broke

Christmas Eve, 5pm-ish. The gifts I'm making for my family are still not done. I'm hunched over my laptop, desperately code-golfing to try and shave 20 bytes off my assembly code to fit within the 1kB of program memory on the ATTiny9. How did we get here?

About 5 years ago (I had just graduated high school (I'm done with college now)), I started a project that I thought would be fun: buying a 25 cent computer and some LEDs, and creating handheld games for less than a dollar each. Imagine my disappointment when the custom circuit boards I ordered finally came in, but they didn't work because I made a mistake in the design. Not knowing what to do, and becoming more busy with the start of college, I shelved the project, most likely never to be completed.

Fast forward to a few weeks ago, when I was cleaning out my old electronics bins and I found the old project. I figure that Christmas is coming up and it could be a nice gift for folks, and maybe my computer engineering degree will make it a success this time around. After kicking myself that I didn't write good documentation, I got to work. To my surprise, I was able to salvage the defunct circuit boards by reversing the polarity of some components (sounds like technobabble but it's true in this rare case).

Then it was time to tackle the software. I was working with only 1kB of storage and 32 bytes of memory, so I decided to use assembly. Finally my CMSC216 (Intro to Computer Systems) and ENEE350 (Computer Organization) classes came in handy! Through the next few weeks I created the games and the functions needed to support them. Displaying to the screen? Check. Reading Buttons? Check. “Random” number generator? Check. Simple tests, helper functions, building up to the first game: the stacker (like the arcade game), then whack-a-mole, memory game, etc.

And that brings us to Christmas Eve, 5pm. Ish. All the games are done and tested, but I can't load them all on the handheld because it is just 20 bytes over the 1024 byte storage capacity. I guess you could say I.... BIT off more than I could chew! Badum tssss.... Hmmm... Tough crowd.... Anyway, another problem is that I only have one copy of the hardware built, and it takes about 45 minutes to make each one.

So I'm combing through my code, and at first I'm able to shave off a byte here or there, but I'm finding fewer and fewer ways to reduce it. So I decide to do something crazy: read the manual! Looking through the list of available instructions, instead of being stuck on my existing code, might provide some new inspiration of a different way to do things that I had missed. Then I encounter the two (that's right, not 1 not 255 but 2) majestic guardian angels that would save my bacon, put my ducks in a row, and shelve my elves; the Tweedledee and Tweedledum of assembly; the trifecta without the third one: BST and BLD!

Ok pause, quick side note. You might be wondering why I'm such a nerd that I get excited about some stupid assembly instructions when so many other things are more important. Well, first of all, you have a point, and second of all, I get excited for the same reason I started this project: to learn and explore the world of computers, in and out, for fun and for mastery of technology. If I wanted it to work on the first try, I could have just used an Arduino (which I actually did for prototyping), but I wanted to see if I could squeeze the most out of a 25 cent computer and it turns out, I... couldn't, but later I could! Ok, back to the story.

The clouds parted and BST and BLD shone through! These instructions basically let me copy 1 bit from a variable to any bit of any other variable. Armed with this newfound power, I sliced and diced at the code, finally able to cut with fine-grain accuracy. For example, I could shorten the way pixels are copied from one location on the screen to another. When the dust settled, the byte count was.... 1018! Just under 1024, with 6 bytes to spare. It's a Christmas Miracle™. (Of course then I still had to spend several hours soldering a few copies of the handheld, but that's neither here nor there. Actually it is there. “There” being the soldering station. Or as I call it, Santa's Workshop as a Service (SWaaS).)

And that's the story of the assembly instruction(s) that saved Christmas. More deets about the project here.

I recently got a framework laptop and I have been customizing it, including changing the touchpad swipe gestures and the keyboard layout. I couldn't find an easy guide on how to re-map the right Alt and Ctrl keys to Home and End, so once I figured it out I decided I'd post it here. I also map Caps Lock to Ctrl, so I have included an optional step here to do that as well.

keyboard with remapped keys labelled

Create a file in your home folder called “.Xmodmap” nano ~/.Xmodmap

Put the following as the file's contents:

clear control
clear mod1

! right alt becomes home
keycode 108 = Home Home Home Home

! right ctrl becomes end
keycode 105 = End End End End

add control = Control_L
add mod1 = Alt_L Meta_L

If you also want to map Caps Lock to Ctrl, use these contents instead:

clear lock
clear control
clear mod1

! caps lock becomes right control
keycode 66  = Control_R

! right alt becomes home
keycode 108 = Home Home Home Home

! right ctrl becomes end
keycode 105 = End End End End

add control = Control_L Control_R
add mod1 = Alt_L Meta_L

Reload the keyboard mapping: xmodmap ~/.Xmodmap

My friend recently recommended a series on the sabbath from the Bridgetown Audio Podcast which I have been listening to for the past few weeks and trying to put into practice. Even so far it has been very helpful in improving my mental and spiritual health, and as a result of this I am able to function better on the other 6 days of the week. (Reduced stress can lengthen your life, so I am getting the time back too. :) To paraphrase the first episode, when I face a challenge in the week, I know I can overcome it because I have been refueled by the previous sabbath, and I have the next sabbath to look forward to.

I'm putting the links to all the episodes here to have them in one place that is easy to share. You can listen from the web page, or download the mp3 file. Hope you find it helpful!

  • Rest for Your Soul (January 6, 2019) Part 1 from the series “Sabbath” as part of Practicing the Way. We begin one of the most important practices of Jesus with a big picture look at the restlessness of the human condition, and how it’s exacerbated by the digital age and our consumeristic culture. We contrast that with the restfulness of Jesus, which is more than just a day, but is a spirit we live by all week long.
  • Sabbath as Rhythm (January 13, 2019) Part 2 from the series, “Sabbath” as part of Practicing the Way. In the Genesis story, God worked for six days, and then he rested on the Sabbath. In doing so, he built a rhythm into the fabric of creation. But over the years, we’ve lost this dynamic interplay between work and rest, to our own peril. As H.H. Farmer said, “If you go against the grain of the universe you get splinters.” In this teaching, we begin to lay out a biblical theology of Sabbath, noting six ideas: 1. The Sabbath is built into the rhythm of creation, 2. Blessed, 3. Holy, 4. Not a day off, but a day for worship, 5. Both a command and a gift, and 6. A day we are to remember.
  • Sabbath as Resistance (January 20, 2019) Part 3 from the series, “Sabbath” as part of Practicing the Way. In a society addicted to the twin drugs of accomplishment and accumulation, the Sabbath is an act of resistance. A way of saying, Enough. Pharaoh and his empire are alive and well. Like the Israelites, we must live into our own Exodus, our own freedom.
  • Sabbath & Your Humanity (January 27, 2019) Part 4 from the series, “Sabbath” as part of Practicing the Way. In Sabbath we bring to God our whole selves, believing that he meets us where we are. As we acknowledge our humanity and aches, we create space to encounter the God who longs to meet with us.
  • Subversive Sabbath (February 3, 2019) Part 5 from the series, “Sabbath” as part of Practicing the Way. We live in a 24/7 culture of endless productivity, workaholism, distraction, burnout, and anxiety—a way of life to which we've sadly grown accustomed. This tired system of “life” ultimately destroys our souls, our bodies, our relationships, our society, and the rest of God's creation. The whole world grows exhausted because humanity has forgotten to enter into God's rest.
  • A Sabbath Meditation (February 10, 2019) Part 6 from the series, “Sabbath” as part of Practicing the Way. As we are learning about Sabbath, this week we create a restful experience in our Sunday gathering. With Psalm 23 as a framework, we explore what it means to rest with God as our Shepherd.
  • Stop, Rest, Delight, & Worship (February 17, 2019) Part 7 from the series, “Sabbath” as part of Practicing the Way. As we near the end of our Sabbath series, we finally come to Jesus’ relationship with the seventh day. People often misread Jesus’ teachings on the Sabbath as negative, but nothing could be further from the truth. In Jesus biography, we see him set every seventh day to stop, rest, delight, and worship.

Background (skip if you want)

I use the raspberry pi to connect to my thrift store keyboard with a USB MIDI cable so that I can use better software instruments than the crappy ones built in to the keyboard.

I have made 2 songs using this so far: MIDI Cable Is Here Magically Infinite Dank Inspiration

In addition to plugging in some headphones to the Pi and hearing the sound, I also wanted the option to pipe the audio to another device at the same time. The problem was that the user interface on the Pi only allows you to select one audio output at a time. After some digging online, I found this post on how to output to 2 devices. However this guide was general, and the device names were wrong for the Pi. So I eventually found out that you can do aplay --list-pcms to get the right names, so I put the name for the HDMI device and the audio jack device into the config file.


Edit the .asoundrc file in the home directory and replace the entire thing with this:

# duplicate audio to both devices
pcm.!default plug:both

ctl.!default {
  type hw
  card 0

pcm.both {
  type route;
  slave.pcm {
      type multi;
      #aplay --list-pcm
      slaves.a.pcm "sysdefault:CARD=b1";
      slaves.b.pcm "sysdefault:CARD=Headphones";
      slaves.a.channels 2;
      slaves.b.channels 2;
      bindings.0.slave a; 0;
      bindings.1.slave a; 1;

      bindings.2.slave b; 0;
      bindings.3.slave b; 1;
#      bindings.4.slave b;
# 2;
#      bindings.5.slave b;
# 3;

  ttable.0.0 1;
  ttable.1.1 1;

  ttable.0.2 1; # front left
  ttable.1.3 1; # front right
#  ttable.0.4 1; # copy front left to rear left
#  ttable.1.5 1; # copy front right to rear right

ctl.both {
  type hw;
  card Live;

pcm.onboard {
   type dmix
   ipc_key 1024
   slave {
       pcm "hw:1,0"
       period_time 0
       period_size 2048
       buffer_size 65536
       buffer_time 0
       periods 128
       rate 48000
       channels 4
    bindings {
       0 0
       1 1
       2 2
       3 3

pcm.sblive {
   type dmix
   ipc_key 2048
   slave {
       pcm "hw:0,0"
       period_time 0
       period_size 2048
       buffer_size 65536
       buffer_time 0
       periods 128
       rate 48000
       channels 2
    bindings {
       0 0
       1 1

ctl.onboard {
   type hw
   card 1

ctl.sblive {
   type hw
   card 0

If you ever interact with the audio settings, this file will be overwritten, so make sure to make a copy of the file so you can always restore it. Or you can copy it from here again.

Update! While vgmms is not working yet, you can use jmms in the meantime: Just head to that link and read the instructions for installation. Right now jmms only supports receiving MMS messages (group texts and pictures), not sending.

NOTE: this guide is still a work in progress and while installing vgmms works, sending MMS does not work yet. (although you can send SMS through vgmms).

open bug report for group messages: #23 open bug report for sending photos: #39


  • install the mobian operating system on the SD card
  • create swap space so the build process doesn't run out of memory
  • install dependencies
  • clone vgmms and other repos
  • build ofono, mmsd, and vgmms
  • reboot and run vgmms

Install Mobian Other operating systems might work but I have only tested mobian. You might find it useful to set up an SSH connection to the phone to make it easier to copy/paste these commands.

Create Swap Space


sudo dd if=/dev/zero of="$f" bs=1M count="$mb" status=progress
sudo chmod 600 "$f"
sudo mkswap "$f"
sudo swapon "$f"

Install Dependencies

sudo apt install git curl make gcc automake libtool-bin autotools-dev libudev-dev libdbus-1-dev libglib2.0-dev libcairo2-dev libjpeg-dev libgif-dev libpango1.0-dev libgdk-pixbuf2.0-dev librust-atk-dev librust-gdk-dev libsqlite3-dev mobile-broadband-provider-info

curl -sSf | sh #install rust

Clone the repos

mkdir mms
cd mms
git clone
git clone
git clone
git clone

Build ofono

Note: requires the ell repo to be in the parent directory. (if you ran the git clone commands as above, it will be.) Also, there is an apt package for ofono, but we need to build it manually for it to work.

cd ~/mms/ofono
#instead of running ./bootstrap-configure, run the configure without the --enable-maintainer-mode which will get rid of -Werror and the extra test modem
test -f config.status && make maintainer-clean
./bootstrap && ./configure \
                --enable-debug \
                --prefix=/usr \
                --mandir=/usr/share/man \
                --sysconfdir=/etc \
                --localstatedir=/var \
                --enable-test \
                --enable-tools \
                --enable-dundee \

make && sudo make install

Build mmsd

cd ~/mms/mmsd
sed -i 's/-Werror //g' Makefile #remove -Werror from the Makefile
make && sudo make install

Build vgmms

cd ~/mms/vgmms
cargo update -p rustdoc-stripper --precise 0.1.14 #temporary fix needed for the latest commit as of 2020-09-30, will not be needed in the future
cargo build --release

If the last command uses too much CPU, you can restrict it to 1 core with this command instead:

cargo build -j 1 --release


sudo reboot

Run vgmms

First start the daemons and enable the modem.

sudo service ofono start



Run vgmms itself. A window will pop up on the phone that you can interact with.



Why should we care about privacy? Most importantly, privacy fosters freedom of thought and speech, which greatly strengthens democracy. It does this by allowing us to hold unpopular opinions without fear of being punished or even killed by those in power, something which has happened many times throughout history and continues today. Being free to express discontent with the current elected officials is necessary to keep their power in check. Because the leaders can be replaced, they are motivated to not abuse their power.

Even when privacy is violated to a lesser extent, the harvested information can cause identity theft, blackmail, or subtle manipulation based on someone’s interests or characteristics. This manipulation can and is even being automated – it’s called “targeted advertisements.” It's often been noted that if you told the current state of privacy to someone 30 years ago, they would be shocked. But it happenes so gradually that we've been accepting the loss bit-by-bit. This level of privacy violation and gradual erosion of people’s expectations of privacy can also be a stepping stone toward an oppressive regime.

When it comes to alone time, privacy is instrumental in being productive, creative, and restful. A nagging feeling that you might be watched, recorded, or tracked in some way can interfere with your activities. Imagine trying to write an essay, but your entire edit history is saved and anyone who reads the essay can see all the dumb half-formed ideas, the unfiltered thoughts, the two-day gap in the edits when you should have been working on it, and maybe the accidental password that was pasted in halfway through. You have all this added pressure of what the process might look like to people, not to mention the normal pressure of what the result will look like. I would be tempted to write the entire essay in a separate document and paste it in when I was done! That urge is a desire for privacy, not because I am ashamed of my process, but because I already have enough to think about when writing, and adding more to consider would really slow me down. The observation would alter the result.

You might say, “If I have nothing to hide, then why should I care about privacy?” Well, the best way to convey my reasoning about that sentiment is to paraphrase a quote from Glenn Greenwald’s TED Talk. If you truly have nothing to hide, give me access to all your email accounts, not just your respectable work email, and I will read through all your emails and publish whatever I find interesting. “After all, if you're not a bad person, if you're doing nothing wrong, you should have nothing to hide.” Glenn says that no one has ever taken him up on this offer. It’s interesting that this ideal we have in our heads that an invasion of privacy only affects bad people turns out quite differently when put to the test. None of us want Glenn poking around in our emails, much less someone who doesn’t bother to ask nicely for access. We all want to keep our emails and other information private – maybe it could be misrepresented if published, maybe it was a highly personal moment, maybe we don’t want people to know where we live, or maybe we just don’t want everyone (or an algorithm) to know how slowly we respond to emails sometimes. Privacy gives us room to breathe.


Now that we have discussed why privacy is important, what makes something private, at least in the digital sense? One thing you might have encountered is an app that requires a ton of permissions to install (Figure 1). Many apps don’t need these permissions to operate, and are only asking for them so they can collect your information and sell it to an advertisement company. A request for way too many permissions is a telltale sign that the app probably does not respect your privacy. You can also do some research on the app to see what professionals have found and make a more informed decision whether to install it or not.

Figure 1: The Facebook Android app requires a ton of permissions

Speaking of advertisement companies, another litmus test is the saying, “If it’s free, you are the product.” (In this case, free refers to gratis, free as in “free of charge”, as opposed to libre, free as in “Give me liberty, or give me death!”) Find out how an app makes money, and if it uses targeted ads, it usually sells your data to a targeting company such as Google or Facebook, which builds a profile of you as accurately as possible in order to send you ads for things they think you will want. Facebook even estimates your big 5 personality type to compare you with similar people. This collection of your information can even happen within your operating system, such as in Microsoft Windows, which sends information back to Microsoft anytime your computer is running.

So far, we have only discussed software that doesn’t respect your privacy, so here are some characteristics of software that does. In addition to not requesting excess permissions and not sending personal data back, most privacy respecting software is free (as in libre) and open source (FOSS). This refers to software that publishes the source code, which is like the recipe for making the software. If an app is FOSS, you can see what experts have said about its privacy, and they can check the source code to verify that it does not steal your data. Remember for later in this guide: FOSS means the recipe is available.

Another common aspect of good privacy-respecting software is end-to-end encryption (E2EE). Imagine sending texts, but you have a secret code with your friend. You can send them a message in that secret code, and you know that no one else can read it, not even the app you sent it through. E2EE is that, but with a lot more math – I’ll spare you the cryptographic details. It’s called end-to-end because only you and your friend, the two ends of the communication, can understand the message. This is different from other forms of encryption, which can be confusing, so make sure to look for E2EE specifically on any chat apps you use. Some examples are and Signal. Some apps claim to have E2EE, but have some controversy, such as WhatsApp. The details are more complicated, involving metadata, which is info about who is texting who, and backdoors, which are intentional gaps in security meant for the good guys, but which always get exploited by the bad guys.

I will briefly outline a few other concepts that aid privacy here, but keep in mind that there is much more information on these topics available online. It’s just a quick Google search away, or should I say DuckDuckGo search (Figure 2, Being anonymous means that your activity cannot be linked back to you. Being pseudonymous means mostly the same, but people can tell it was the same unknown person doing the activity each time. An app has amnesia if it forgets about all your activity each time it starts up, which helps with some aspects of anonymity. An app is decentralized if there is no single company, person, government, or other entity controlling it. Rather, each user has a little bit of control and together they steer the platform.

Figure 2: DuckDuckGo, the search engine that doesn't track you.

DuckDuckGo is the most popular alternative to Google search and so it's probably the best for beginners. However, it isn't FOSS, so if you are looking for a FOSS search engine, look into

Easy Steps to Take

So, what can be done to achieve complete online privacy? Well, unfortunately there is no one-size-fits-all snake oil solution, but we’ll start with some simple steps that you can do in just a few minutes, then move to some more comprehensive plans. The most effective step for its simplicity is installing the Tor Browser (Figure 3, on your phone or laptop. To the user, the Tor Browser works just like a normal web browser (such as Chrome or Firefox), where you can search things, click on links, etc. But behind the scenes, it has a lot of good properties we discussed before (it is FOSS, is encrypted, is anonymous, has amnesia, is decentralized, and even uses DuckDuckGo). The biggest downside is that the Tor Browser is slower than a normal browser, but even if you only use it some of the time, it’s a huge improvement over just using a normal browser. Having it installed lets you find information without having to worry about your searches being sold to keep building that detailed profile of your activity. Go ahead and give it a try by installing it on your phone, laptop, or tablet: There are some things to keep in mind when using the Tor Browser. First, if you do anything to identify yourself, such as log in to your email or another account, none of the browser’s protections can keep you anonymous, since you just identified yourself to the website you logged into. Second, this only one step to protect your privacy, as anything you do outside the browser (such as running the Google Maps app on your phone) will of course still be linked to you.

Figure 3: The Tor Browser – Defend yourself against tracking and surveillance. Circumvent censorship.

Another step you can take to increase your privacy is to sign up for and invite your friends and family to sign up for an E2EE chat app or email such as Matrix/ (, Signal (Figure 4,, Tutanota Mail (, or Protonmail ( All of these are available for your phone and laptop. Now you can send messages to each other that only you can read, a policy enforced by the power of mathematics! And the interfaces are simple enough that you don’t need to worry how it works.

Figure 4: Signal – End-to-end encrypted texting

If the Tor Browser doesn’t appeal to you or is too slow, there are some minor changes you can make to your normal browser’s settings to get some privacy, although this will not hide your IP address (which tells your approximate location). The simplest change is to set as your browser’s search engine instead of Google by going to and clicking on “Add DuckDuckGo to .” There are also some browser extensions that will reduce the amount of information that your browser leaks. For Chrome, go to and for Firefox, go to To give your browser amnesia, so that it erases some of its memory every time you open it, search for Cookie AutoDelete and install it. Keep in mind that this will not erase a website’s memory of you completely, because there are other ways of identifying you, but it is a good start. To block ad tracking, use uBlockOrigin (for Chrome) or Adnauseam (for Firefox). To block another kind of tracker that uses font libraries, among other things, use Decentraleyes.

One last easy step if you have an Android phone is to install F-Droid from which is an entire app store of FOSS apps that you can browse. To install it, go to the site and click on “Download F-Droid,” and you will have to enable installing from unknown sources in your phone’s settings. A useful FOSS app in the store is NewPipe, which is a YouTube app without as much tracking and some extra features, but there are many other great apps.

Further Steps to Take

After getting your feet wet with solutions that you can add to your existing setup, let’s take a gander at some solutions that involve subtracting or substituting apps, which will be a little more disruptive, but still doable. Starting off with one of the simpler substitutions is trading out Microsoft Office for LibreOffice (Figure 5, LibreOffice office suite that has all the features that most general users expect from Microsoft Office, at a fraction of the price. And that fraction is zero! LibreOffice is completely free of charge as well as being FOSS, and it can also run on Windows, Mac, and Linux. My family has been using LibreOffice and its predecessor, OpenOffice, for as long as I can remember, and we have saved a lot of money from just not buying Microsoft Office. As an added bonus, there are absolutely no tracking or privacy concerns involved with LibreOffice.

Figure 5: LibreOffice – a free and powerful office suite

Facebook has had so many data breaches over the years, not to mention the tracking of its own users even on the off-days when no hackers are in. If you have a Facebook account, consider reducing your usage until you are at a point where you don’t need it anymore, and can safely delete it. If deleting it is not an option, at least uninstall the phone app, which includes a lot of extra tracking, and install Frost from the F-Droid store, which will allow you to log in and use Facebook without giving it permission to access your contacts, calendar, etc. Better yet, limit your access to only be through the Tor Browser (still works on your phone or laptop), by logging in on Facebook’s dedicated tor website at https://www.facebookcorewwwi.onion/ which you can only get to from the Tor Browser. They still know it’s you because you are logging in with your username, but they don’t know what location you are logging in from. Unless, of course, you post a picture that contains a geotag.

If you reduce usage of Facebook or hopefully delete it altogether, what options are available to replace it? Well, there is a set of FOSS social media sites that are starting to gain users as a replacement for Twitter, Facebook, Instagram, YouTube, etc. They are called Mastodon (Figure 6,, Diaspora (, PixelFed (, PeerTube (, and others. I say “set of sites” because these different sites actually talk to each other. Imagine if you could tweet at a Facebook user, view an Instagram page from Twitter, subscribe to a YouTube channel from Instagram, or even friend a Facebook account from MySpace! The point is that these new social media sites are “federated” which is a form of decentralization similar to email. You have different email providers (Gmail, Yahoo, Hotmail, Protonmail), but you can still send emails to and from any of these, which makes email a federated system. What’s more, each one has multiple instances of the site run independently by different people. I recommend signing up for as a start, since it is the most popular, but you can always migrate your account to another site later if you want.

Figure 6: Mastodon – Social networking, back in your hands

Another possible transition is to sign up for a Nextcloud (Figure 7, account. Nextcloud is basically a complete FOSS replacement of Google Drive and then some, including video calls, file storage, calendar, contacts, online editing, todo lists, notes, forms, music, and countless other apps that are all integrated together into one site. Signing up is relatively easy, and it has apps for iOS, Android, Linux, Windows, MacOS, that can sync all your files, calendar, contacts, etc. to every device you own if you want to. I personally run a Nextcloud server for my whole family and many of my friends, so you can contact me at if you want an account, or you can sign up for one of the many other providers that have a more streamlined process directly through the app, which generally have 5GB of space free. If you want more space, you generally have to pay a small monthly fee depending on the provider.

Figure 7: Nextcloud – The self-hosted productivity platform that keeps you in control

Have you been hearing about the YouTube demonitization recently? Basically, content creators on YouTube are having ad revenue pulled from their videos if they mention certain topics that are not deemed “advertiser friendly.” Of course, you could argue that creators are not entitled to earn money just because they post a video. Or, instead of arguing, you could just tell your favorite creators to sync their videos to LBRY (Figure 8, or, a new site where many YouTubers are already earning money from an alternative cryptocurrency-based (like Bitcoin, but different) system of shared, decentralized storage. Also, in December of 2019, several channels that were talking about cryptocurrency were suddenly deleted by YouTube, despite not breaking any of the community guidelines. Where do you think those nerds went? Right over to LBRY. There are other alternatives to YouTube, such as PeerTube, which is also decentralized, but doesn’t have as many creators as LBRY. If you still want to watch YouTube videos, but want to reduce the amount of tracking, go to which gives you access to all the YouTube videos through a different, more private, interface. You can even subscribe to YouTubers without making an account.

Figure 8: LBRY – a secure, open, and community-run digital marketplace.

Steps that Require More Effort

Now that we have covered some of the more basic replacements, we will take a look at some more things to replace that will require a little more effort, but will make a good impact. First, it’s good to take stock of what accounts you have online. Maybe you have a physical password book that has all your accounts listed. To organize these and also keep track of passwords in a more secure way, you can use a password manager such as KeePassXC, LastPass, DashLane, or BitWarden. I use KeePassXC because it just stores the passwords as a file, with no fancy cloud storage with the increased possiblility of being hacked. Make sure to back up the file in multiple places, otherwise you could lose access to your accounts. Once you have picked a password manager, copy the accounts from your password book. If you don’t have a password book, try to remember as many accounts as you can. There’s not much advice I can give on this step as it depends on how you have been storing passwords until now. But having a password manager makes the next step, transitioning emails, a lot easier.

We should address the elephant in the room, email. If you have a Tutanota (Figure 9, or Protonmail (Figure 10, account, and are looking to transition your old Gmail, Yahoo, or other account, here is how I did it. First, I signed up for both a Tutanota and Protonmail account to see which one I liked better. Then after choosing Tutanota for reasons irrelevant here (both are great and will work for these instructions), I set up forwarding from my old Gmail account to my new Tutanota account. Then I went through my KeePassXC to see what all accounts were associated with my Gmail. I manually logged in to each one and either deleted the account (if I didn’t need it anymore), or set the email address to my Tutanota. Then, every few weeks, I looked at what emails were still forwarded from Gmail, and changed those over to Tutanota as well. At a certain point I sent one bulk email to all my friends and family (from my Gmail so they knew it was me) telling them about my new email address. This whole process didn’t take as long as I thought, especially since I could just wait a few weeks to see if any emails slipped through the cracks to the old address. Now, the effect of all this is that Google no longer has access to all my emails in one place, although they do have a big chunk of my emails since most people send to me using Gmail. The partial solution for this was to get my family Tutanota accounts for Christmas a few years back, which turned out to be a success. Although my family hasn’t fully transitioned to Tutanota like I described here, they routinely use it for sending tax and health forms, and other boring but importantly private information.

Figure 9: Tutanota – the world's most secure email service, easy to use and private by design.

Figure 10: ProtonMail – Secure Your Communications

To upgrade your phone to a more private alternative, you have two options. The first one is to pre-order a PinePhone ( for $150, which is built from the ground up to be privacy-respecting. The other option is to install LineageOS ( on an Android phone. LineageOS is a FOSS operating system that is basically Android minus Google. You can do calls, texts, etc. and you can use the F-Droid store for a more limited set of apps than normal Android. The huge benefit is that you have removed Google from your pocket without spending any money and can still make phone calls, which is quite an achievement in the modern day. Make sure to back up everything on your phone before installing LineageOS.

Now it’s time for the biggest change of them all – switching to Linux (Figure 11)! Don’t be scared, for starters my Mom actually uses Linux right now despite having no technical knowledge. Contrary to some misconceptions, Linux is not a text interface with the matrix letters scrolling past. Rather, it is a FOSS operating system with a point and click user interface like Windows or MacOS. Switching to Linux eliminates any private data collection by the operating system since it is FOSS and the Linux community keeps things accountable. There are many Linux’es to choose from, but to keep things simple, we will use Ubuntu ( The easiest way to try it out is by setting up an Ubuntu virtual machine with VirtualBox, which you can do by DuckDuckGo’ing “setting up an Ubuntu virtual machine with VirtualBox” (beyond the scope of this guide, but shouldn’t take too long). After using Ubuntu in a virtual machine (VM), you might eventually want to install it on a real computer. Again, back up everything before you install. The install process is documented in many places online; all you need is a USB drive and a willing laptop, and you can finally trade that virtual machine for a reality.

Figure 11: Linux – FOSS Operating System


This has been a guide to taking back your online privacy, using some of the many tools that are available online. To continue the journey, you can find more information about privacy at (Encryption and tools to protect against global mass surveillance), and you can find more software alternatives at (Ethical, easy-to-use and privacy-conscious alternatives to well-known software). If you have any comments, questions, or suggestions, contact me securely:

Other Great Articles

The Harm That Data Do by Scientific American – Paying attention to how algorithmic systems impact marginalized people worldwide is key to a just and equitable future Why Your Individual Privacy Matters for the Wider Population by The New Oil

Here are some links to my profile on some private services I use, some of which I mentioned in this guide:

I just got back from Hoya Hacks, a hackathon a Georgetown this past weekend. Someone asked me by email what tips I had to win hackathons (since I have won multiple prizes :), and I responded:

  • Incorporate some hardware, such as Raspberry Pi or Arduino. Hoya Hacks didnt have a prize for best hardware, but some do and either way, hardware usually makes your project stand out.
  • I like to bring my own hardware because the MLH hardware lab sometimes doesn't have a great selection, or they run out. If you come to Bitcamp (at UMD in April), I can lend you some stuff. Make sure hardware works before the event. If you are going to use a Raspberry Pi, for example, make sure it boots up, you remember the password, install updates, etc.
  • Go for the challenges, for example we used MongoDB to store our data even though we could have just put it in a file. We didn't win the MongoDB prize, but I did learn a lot. Also we spent some time brainstorming a domain name, which is how we won the award for best domain.
  • Make something fun: at bitcamp last year, we made a trash can that insults you when you put recycling in, and won most entertaining! (it actually couldn't tell between trash and recycling, so it would always insult you :)
  • Or make something you need/want, that way even if you don't win, you can still use it! One time we made a chatbot, and we didn't win but I still enjoy talking to it sometimes:
  • Add this stuff to your resume, and you can even include a link to the project. Employers will be impressed that not only do you know flask, but you also have a public flask app on the internet to prove it! And if you ask me, getting an internship means you were the real hackathon winner. :)

Here's some upcoming hackathons at umd: Jhacks, in a few weeks: Bitcamp, in April:

Good luck, and let me know if you have any more questions about this stuff! (Same goes to you, the blog reader, feel free to get in touch:

This is copied from my journal that I kept during Bridge DC in summer 2019. More info about Bridge DC.

I thought I heard my name called in the babbling crowd, but it was just an echo. I thought I saw my face reflected in the shifting mass, but it was just an illusion. I thought I sensed my purpose in the wavering sea, but it was just a manifesto.

I took a pause to listen and be still, Away from the voices pulling me every direction but upward. But I hear the music playing, empty of purpose, demanding my attention, distracting my mind from listening. The music, being temporary, fades away, and the listening continues, taking its time.

Look back and see the memories to be grateful for, and the mistakes to be learned from. Look around and feel the peace to rest in, and the lingering tension to resolve. Look forward and envision the dreams to follow, and the suffering to endure with joy.


Build a schedule with Courseoff, find ratings on classes and professors on PlanetTerp, and see what requirements you have left on Degree Audit. Talk to your advisor, but also check what they tell you with more experienced people in your major. Once you have decided what classes you will take, make sure you have no registration blocks at Appointment and Registration Status and register for them using Registration Drop/Add. Use a spreadsheet to keep track of your 4-year plan, and make sure it lines up with the PDF your advisor emails you.


This is a guide on how to use various tools to register for classes at the University of Maryland, College Park (UMD). It is written by me, and although I'm a computer engineering major, I wrote it in a way that it should be useful for people of any major. Also, I am in Gemstone, so I have included some info on Gemstone classes here too.

This guide is based on my experience and advice people have given me. If you have anything to add, contact me and I will add it to this blog post. It was last updated on November 5, 2019.

1-Semester Planning

Testudo Schedule of Classes What is it: This is the official UMD list of classes, where you can look up a class or requirement and see the professors, sections, days and times, prerequisites, requirements it satisfies, how many seats are available (updates once a day), etc. Useful for: finding which professors are available for a class, which sections are still open, which classes fulfill a particular requirement Tips & Tricks: You can click on a GenEd requirement to see all the classes that fulfill that requirement. You can also search for part of a class name, for example searching “CMSC1” will give you all the 100 level CS classes. Testudo Schedule of Classes

PlanetTerp What is it: A site made by UMD students/alums that gives info about and ratings for each class and professor. You can see the grade distributions and which professors have the highest ratings for a particular class. Useful for: Deciding which classes to take so that you don't end up with all you classes having a hard grade distribution, deciding which professor to take for a given class (although you should confirm with people in higher years in your major just to make sure). Tips & Tricks: There is a “View on Testudo” button which sends you to the Testudo Schedule of Classes (described above). This is useful for finding which sections are open once you find a class on PlanetTerp. PlanetTerp Side note: I would definitely recommend HONR218T as a good GenEd — you get to go to DC and see some plays!

RateMyProfessors What is it: A 3rd-party (not made by UMD) tool to find other students' ratings of professors. Useful for: It is not as useful as PlanetTerp, but if a professor isn't rated on PlanetTerp, you can check this site. Tips & Tricks: The site keeps track of the same professor as they move to different schools. RateMyProfessors

Venus What is it: UMD's official schedule builder tool. It auto-generates multiple options based on the classes you input, and several options such as desired start time in the morning. Useful for: Finding a schedule based on the classes you want to take. Tips & Tricks: If you get frustrated with Venus, use Courseoff instead. :) Venus

Courseoff What is it: A 3rd-party class schedule builder tool. You select the classes you want, and it shows you all the sections for each class, which professor teaches each section, and how many seats are open for each. Then you can select the section you want and it will show it on a calendar. You do this for all you classes to make sure that your schedule works, swapping out sections where desired. Useful for: Manually creating a schedule that fits your needs without having to specify requirements like you do on Venus. Tips & Tricks: You can also create multiple alternate schedules to compare them, or as a backup plan in case you don't get the section you want when you go to register later. Courseoff

Degree Audit What is it: An official UMD tool to run through your degree program and find what requirements you have completed, which ones are in progress, and which ones you still have to take in future semesters. Useful for: Seeing if you are on track for graduation in time, seeing what requirements you need to fulfill next, calculating how many credits you need to take per semester. Tips & Tricks: You can click on “Major,” “Gen Education,” or “Gen Elective” to see the results only for that category of your audit. DegreeAudit

Appointment and Registration Status What is it: A simple tool to view your class registration status. It will list any “registration blocks,” which are things that are keeping you from registering for classes. The most common one is your meeting with your advisor. Useful for: Finding your advising deadline, finding your class registration date and time Tips & Tricks: Make sure to register as soon as possible after your allowed registration date. You will register using the Drop/Add tool (see next). Appointment and Registration Status

Registration Drop/Add What is it: The tool to actually register for a class (or drop a class). Useful for: Registering for classes! Also seeing if a class is full (see below). Tips & Tricks: Since Testudo Schedule of Classes only updates once a day, you can use Add/Drop to determine if a class is full. Just try registering for it and it will fail if full and succeed if not full. You can then drop the class if you didn't actually want to register for it. Also, if you aren't 100% sure of your schedule on your registration day, just register anyway and you can drop some and add some later. Registration Drop/Add

4-Year Planning

PDF from Your Advisor

What is it: After you meet with your advisor, they will email you a PDF with your current 4-year plan. The classes you are registering for next semester will be highlighted in yellow. Useful for: Seeing your overall plan, when you will graduate, what requirements you have completed and what you still have left, which classes your advisor thinks you will be taking (make sure that it is correct!) Tips & Tricks: You'll want to save these PDFs that you receive to a folder somewhere so you don't lose them. PDF from Your Advisor

Plain-old Spreadsheet

What is it: A basic spreadsheet that you can edit to keep track of how you will fulfill all the requirements and graduate! You can use Libreoffice (, a free and open source office suite. Of course any spreadsheet software will work fine, but I like to use and support open source stuff where possible. Useful for: Trying out different 4-year plans, making sure you'll complete all the right GenEds, Tips & Tricks: The organization scheme I use is a set of columns (class, credits, requirements, etc.) for each semester, with 1 row for each class. Here's a screenshot: Plain Old Spreadsheet Note that I have color-coded some items blue to note that I have a future class planned to fulfill that GenEd. For example, some of the later Gemstone classes will fulfill several GenEd requirements. Make sure you don't register for extra GenEds that will be completed later!

That was a lot of info! I hope you took the time to read through it and found it useful. If you have any questions, or suggestions on something to add to this post, feel free to contact me. Good luck registering!

tl;dr (short version)

Bridge is a 7-week immersive justice program including an internship (I taught tech classes at Year Up). I learned that serving people can also mean using the gifts God gave me, and doesn't have to be measured in a certain way. I identified some areas where I am self-righteous and became more conscious of what it means to truly love people and not just love part of them. I also realized I joke around too much when discussing serious topics, and I began to be more conscious of how my words affect people. I saw examples from community members and guest speakers of how the Kingdom of God is lived out. I came to a new understanding that loving God, loving your neighbor, and loving yourself are all interconnected and mutually necessary.

Team Photo

What is Bridge DC?

Bridge DC is a justice program run by the InterVarsity (IV) Christian Fellowship where students such as myself go to Anacostia, DC for 7 weeks of learning, discussing, and experiencing the issues that affect DC and how God is working in the city. As part of the program, students are paired with a volunteer internship site — mine was a teaching assistant position at Year Up, which aims to close the opportunity divide by partnering with companies looking for new employees and with young adults who can't afford college and are looking for a job. They teach business and technology classes in a 1-year program, after which the students receive an internship from one of the companies. I attended the program from June 13 to August 1, 2019 and learned a lot! The following are some of the areas of growth that I have reflected on.

Expanded Vision of Service

At DC Plunge, a 1-week spring break trip with similar DNA to Bridge DC, I learned that service is not limited to physical service, but also includes relational service. Some examples are stopping to talk to a person who's homeless, visiting people in prison, being friendly to new neighbors and offering to support them if they need anything. Acts of relational service acknowledge the dignity in a person as a child of God and as a sibling in humanity.

As an introvert, I have a lot of trouble breaking the ice in conversations, and sometimes struggle with knowing what to say, so relational service (as defined above) is difficult for me. What I learned at Bridge is that service can take on other forms, and it can include things I am good at as an individual! A few mornings during the summer, I went to Our Daily Bread, which is a soup kitchen hosted in the basement of a Methodist church. Volunteers not only serve food, but also eat the same food themselves and stick around to talk. It's grown over the years into a supportive community for people who fall on hard times. (One day they even had a doctor come in and do check-ups for free for whoever needed them!)

One morning, I saw someone playing a piano that was over where I hadn't noticed it before, and I went over and asked if I could play when they were done. At the time, I felt like I was running away and avoiding talking to the people, but after I played, folks thanked me for playing and said that it brightened their day! It was a simple event, but it started a shift in mindset that service didn't have to mean doing things I'm bad at, but it could involve using the gifts God gave me to bring joy to people.

A few weeks later, St. Teresa of Avila Catholic Church, which we were attending for the summer, invited me to play the piano for their prelude, and the choir director told me afterward that I should find some outlet, such as a senior home, to play for people who don't get many visitors. Another example of relational service involving things I am skilled at and love doing!

Another thing I did this summer was an internship at Year Up, which teaches technology to people who can't afford college. I was a TA, doing grading and teaching a few lessons. Most days though, there was not much to do except hang around and answer questions that people had. Some people asked me questions about Linux or web servers, which I know a lot about and was able to point them to the right online resources. For example, one guy was creating a website for his friend's business. This is another example of how the pre-defined expectations I had for how I would serve (teaching curriculum, grading papers, etc.) were subverted and the more important thing was spending time with the students to answer questions.

To summarize, my understanding of service broadened: Before, it was just things like feeding people who need food or talking to people who most people pass by. After, it expanded to also include using the gifts God gave me, like playing piano for people or giving advice to someone about how to set up a website.


What is self-righteousness? In the past, I would have described it as “Feeling better than other people because you think you are inherently more right or moral than them.” (I also didn't view myself as self-righteous.) But it has a way of creeping in to my thinking, and this summer I learned another helpful angle to identify self-righteousness in myself: feeling the need to prove that I am justified.

Needing to prove one's self comes from the creation of an “in-group” and an “out-group.” Wanting to be part of the in-group, I realized I was trying to emulate characteristics of someone who cares about justice rather than being OK with looking dumb and focusing on the learning that Jesus is calling me into. I didn't consciously create the in/out groups, and in fact I disliked the us/them mentality. But, subconsciously I put people in the out-group if they were not accepting, not open, had an us/them mindset, etc. In this way, I had turned into exactly the thing I was trying to dissociate from!

Another thing that tipped me off is that I have a problem learning from people when what they're saying makes me feel dumb. On several occasions (see the next section), I said something to offend someone, and it was difficult to admit that I made a mistake and hurt them as a result of my ignorance. (Thank God we were in a house committed to conflict resolution — we got through it!) It was even harder to listen to the person I hurt and accept advice and suggestions for change. It was also hard for me, and still is, to bring up controversial topics such as politics and religion, because I sometimes react badly to disagreement and conflict. As a result of avoiding having the hard conversations, I tend to build up a perception of someone's opinion or what they think of me in my head, which upon talking to them is completely overblown.

I'm still working on dismantling my self-righteousness that has built up unconsciously, and on being able to learn when I feel dumb or attacked. But because of Bridge, at least I am more aware of these characteristics of myself that are not so great, and not ashamed to admit my weaknesses and process them.

Joking on Serious Topics

My sense of humor has always been a way to bond with friends and family. I think I got it from my Dad (who tells some sick dad jokes), and his Dad (who knows some sick limericks that I was inspired by). I also liked to joke around on my high-school robotics team and generally have a good time. Coming to Bridge, however, I realized that I use joking as a coping mechanism for dealing with serious topics.

They say humor is all about timing, well, serious topics are definitely the wrong time to make a joke or jab at someone because they might be processing it in a different way. I ended up making some jokes that were hurtful to people and since our house was committed to growth and openness, I was called out (1-on-1, not in front of everyone thankfully). A verse from the Bible that has been relevant to this is James 3:1-12, which talks about how the tongue is a powerful part of the body for good or evil, and “Out of the same mouth come praise and cursing.”

As I started to become more aware of my insensitive joking, I had to make the choice to continue to bring my whole self to the table, which was necessary if I wanted to deal with deep-seated issues that involved my whole self. I have become a lot more aware of how the things I say affect people, and I have gotten a little better at holding back and considering things more before I say them.

The Kingdom of God

This summer, I read “Irresistible Revolution” by Shane Claiborne, which my grandpa lent me before I went on the trip. It's a collection of life stories from the author, for example, one time there was an abandoned cathedral in Philadelphia that homeless people were staying in while they waited for their applications for housing to go through (It had been months or years for some). The city wanted to kick them out, but a group of college kids occupied the cathedral and made it a media spectacle so that the city was afraid to kick them out and look bad. Multiple different groups got involved and helped out in different ways, and each time the city would try to kick the homeless people out, God would provide in some way to protect them. The book has a lot more stories like these, illustrating what happens when you follow Jesus in radical ways, living out the Kingdom of God with communities that are neglected. One cool idea from the book is that instead of just serving people in need, we should make friends with them and build community together. After all, Jesus was homeless, staying in other people's homes or in the wilderness while he traveled around healing the sick and ministering to the people. This book was really inspirational to me and changed how I think about faith in more of an active mindset. (If you want to borrow the book, contact me and I'd be happy to lend it to you if you are in the area, or I can send it by mail).

During the trip, we heard from many guest speakers who were also living out their faith in Jesus and the Kingdom of God. Dawnielle discussed different types of prayer that are common in different church backgrounds and how we can learn from other denominations. Michael Howard talked to us about the fact that we only know the tip of the iceberg when we know someone and there are good and bad things about everyone. Father East told us about the history of St. Teresa of Avila, the Anacostia area, and some general church history. Branden Polk covered many topics: spending time with people you disagree with to move towards reconciliation; ignorance or pain leads to fear, hyper-vigilance, and control, while curiosity and awe lead to learning, growth, and collaboration. Kathy and Don chronicled their wild adventure in taking on multiple foster kids, and prayed for some of us individually. Pastor Lisa drew up a framework for incarnational ministry — a full picture of the Gospel including proclamation of the word and demonstration of compassion, but also restoration and development (e.g. helping establish grocery stores in food deserts) and confrontation of injustice (e.g. petitioning congress). It was great to hear and see concrete examples of how to live life differently, getting messy and involved on the practical level, and serving the Kingdom of God.

Loving God, Neighbor, and Self

This is a small, but important revelation that I had during a Bible study on the story of the good Samaritan. My mindset beforehand was that loving other people was a bit of a one-way thing, but rewarding because it's the right thing to do. However, the command in that story is not to love others and neglect yourself, but “Love the Lord your God with all your heart and with all your soul and with all your strength and with all your mind; and, Love your neighbor as yourself.” Loving God and yourself are also part of this command, and what I realized is that it is hard to love your neighbor if you don't love yourself, and vice versa. And if you don't put loving God first, you will not be rooted well and will not have the strength to support others.

What Now?

  • Continue to use the gifts God gave me for service
  • Be conscious of my urge to prove myself
  • Be mindful of how my words affect people
  • In service to others, don't neglect to love God and myself
  • Explore the intersections of Jesus, Justice, and Tech through a bi-weekly dialogue on my college campus (blog post coming soon!)