johanv.xyz

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

Overview

  • 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

https://wiki.mobian-project.org/doku.php?id=install 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

f=/swapfile1
mb=1000

dd if=/dev/zero of="$f" bs=1M count="$mb" status=progress
chmod 600 "$f"
mkswap "$f"
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 https://sh.rustup.rs -sSf | sh #install rust

Clone the repos

cd
mkdir mms
cd mms
git clone https://git.sr.ht/~anteater/vgmms
git clone https://git.sr.ht/~anteater/mmsd
git clone https://git.sr.ht/~anteater/ofono
git clone https://github.com/bryanperris/ell.git

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 \
                --disable-datafiles

make && sudo make install

Build mmsd

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

Build vgmms

cd ~/mms/vgmms
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

Reboot

sudo reboot

Run vgmms

First start the daemons and enable the modem.

sudo service ofono start

~/mms/ofono/test/enable-modem
~/mms/ofono/test/online-modem

/usr/libexec/mmsd

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

~/mms/vgmms/target/release/vgmms

Why?

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.

Criteria

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 Element.io 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, https://duckduckgo.com/). 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.

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, https://www.torproject.org/) 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: https://www.torproject.org/download/. 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 Element.io (https://element.io/), Signal (Figure 4, https://www.signal.org/), Tutanota Mail (https://tutanota.com/), or Protonmail (https://protonmail.com/). 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 DuckDuckGo.com as your browser’s search engine instead of Google by going to https://duck.com 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 https://chrome.google.com/webstore/ and for Firefox, go to https://addons.mozilla.org/. 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 https://f-droid.org/ 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, https://www.libreoffice.org/). 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, https://joinmastodon.org/), Diaspora (https://diasporafoundation.org/), PixelFed (https://pixelfed.org/), PeerTube (https://joinpeertube.org/), 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 https://mastodon.social/ 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, https://nextcloud.com/) 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 https://johanv.xyz/contact/ 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, https://lbry.tv/), 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 https://invidio.us/ 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, https://tutanota.com/) or Protonmail (Figure 10, https://protonmail.com/) 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 (https://www.pine64.org/pinephone/) for $150, which is built from the ground up to be privacy-respecting. The other option is to install LineageOS (https://lineageos.org/) 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 (https://ubuntu.com/). 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

Conclusion

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 https://www.privacytools.io (Encryption and tools to protect against global mass surveillance), and you can find more software alternatives at https://switching.software (Ethical, easy-to-use and privacy-conscious alternatives to well-known software). If you have any comments, questions, or suggestions, contact me securely: https://johanv.xyz/contact/

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: https://games.johanv.xyz/carl
  • 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: https://jhacksumd.com/ Bitcamp, in April: https://bit.camp/

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: https://johanv.xyz/contact)

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.

tl;dr

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.

Intro

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

https://app.testudo.umd.edu/soc 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

https://planetterp.com 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

https://www.ratemyprofessors.com/ 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

http://www.sis.umd.edu/bin/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

https://umd.courseoff.com/ 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

https://uachieve.umd.edu/ 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

https://app.testudo.umd.edu/main/regAppt 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

https://app.testudo.umd.edu/main/dropAdd 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 (https://www.libreoffice.org/download/download/), 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.

Self-Righteousness

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

The Backstory

A few weeks ago, I was bemoaning the fact that my website URL was too long (johan.vandegriff.net), so I went on the search for a shorter (and more trendy ;) domain name. I found johanv.xyz on namesilo for only a few dollars a year. Then I decided to use DigitalOcean to host the new website since it's only $5 a month and it provides a lot of flexibility for setting up web services.

As I was creating a droplet (that's what DigitalOcean calls their cloud virtual machines), I noticed a “Marketplace” tab with dozens of preconfigured options! After doing my reading on the ones that seemed interesting, I chose to go with Dokku because it advertised easy installation of separate web apps. And little did I know that I had found my new favorite software project!

As I started to build the site, I was amazed at the awesome features of Dokku. Deploying an app is really easy – just create some files, initialize them as a git repo, and push the repo to Dokku, which takes care of the rest. Each app is on a separate subdomain (e.g. johanv.xyz, blog.johanv.xyz, games.johanv.xyz, etc.), and Dokku manages each one, keeping track of the virtual hosts, docker containers, etc. behind the scenes. It even has a Let's Encrypt module to add https with only two commands!

I haven't been this impressed with a software project since I discovered that you can install almost anything in the Arch User Repository (AUR). Oh wait, turns out Dokku is in the AUR as well – a match made in heaven! Maybe I'll migrate to an Arch server in the future... or install it on Manjaro locally to easily test web apps.

The Update

The first thing I did was log in and update the system:

ssh root@johanv.xyz
apt update
apt dist-upgrade
apt-get install -qq -y dokku herokuish sshcommand plugn
reboot

The Main Site

For the main site, I just copied my old site over and pushed it to Dokku. Most of the links don't work, and I plan to rework it in the future anyway (adding mobile support as well).

mkdir main-site
cd main-site
git init
git remote add dokku dokku@johanv.xyz:main-site
cp /path/to/old-site/johan.vandegriff.net/{index,header,footer}.php .
git add --all
git commit -m "importing php from old site"
git push dokku master

Let's Encrypt!

To enable HTTPS, I had to install a plugin, which is super easy and well documented:

ssh root@johanv.xyz dokku plugin:install https://github.com/dokku/dokku-letsencrypt.git
ssh dokku@johanv.xyz letsencrypt:cron-job --add #auto renew certs

Then I could set the “main-site” app's url to johanv.xyz and enable HTTPS:

ssh dokku@johanv.xyz domains:set main-site johanv.xyz
ssh dokku@johanv.xyz config:set --no-restart main-site DOKKU_LETSENCRYPT_EMAIL=my@email.address
ssh dokku@johanv.xyz letsencrypt main-site

Messing Around

I added and removed some subdomains to get more familiar with Dokku. Here's the process for a subdomain at test1.johanv.xyz serving a static index.html page:

mkdir test1
cd test1
touch .static
nano index.html #add anything
git init
git remote add dokku dokku@johanv.xyz:test1
git add --all
git commit -m "test static site"
git push dokku master
ssh dokku@johanv.xyz config:set --no-restart test1 DOKKU_LETSENCRYPT_EMAIL=my@email.address
ssh dokku@johanv.xyz letsencrypt test1

Adding an SSH Key

At a certain point I wanted to switch to another local computer to continue working on the site, so I had to add another ssh key to Dokku. First, I generated the key:

[new computer] ~$ ssh-keygen -b 4096

Then I logged in as root from the old computer and added the public key to the root account by opening the file in nano and pasting the key as a new line:

[old computer] ~$ ssh root@johanv.xyz
[root@johanv.xyz] ~$ nano /root/.ssh/authorized_keys

Then I still had to add it to the dokku user, which stores it differently, with this command:

[new computer] ~$ cat ~/.ssh/id_rsa.pub | ssh root@johanv.xyz "sudo sshcommand acl-add dokku `hostname`"

WriteFreely

After looking around for things that would run easily on Dokku that I could use to post content to my new website (wordpress, ghost, grav, etc.), I settled on WriteFreely since there was an awesome tutorial by Evan Walsh on how to set it up.

First I created a new directory and some config files:

mkdir blog
cd blog
cat <<EOF >Dockerfile
FROM writeas/writefreely

COPY config.ini .

EXPOSE 8080

CMD ["bin/writefreely"]
EOF

cat <<EOF >config.ini
[server]
hidden_host          = 
port                 = 8080
bind                 = 0.0.0.0
tls_cert_path        = 
tls_key_path         = 
templates_parent_dir = 
static_parent_dir    = 
pages_parent_dir     = 
keys_parent_dir      = 

[database]
type     = sqlite3
filename = db/writefreely.db
username = 
password = 
database = 
host     = localhost
port     = 3306

[app]
site_name         = johanv.xyz blog
site_description  = 
host              = https://blog.johanv.xyz
theme             = write
disable_js        = false
webfonts          = true
single_user       = true
open_registration = false
min_username_len  = 3
max_blogs         = 3
federation        = true
public_stats      = true
private           = false
local_timeline    = true
user_invites      = user
EOF

These were mostly copied from the tutorial, but I changed the site's name, the site's URL, and I set it to a single user instance. Then I created the app:

ssh dokku@johanv.xyz apps:create blog

And set up persistent storage to preserve the database and keys when rebuilding the app:

ssh root@johanv.xyz mkdir -p /var/lib/dokku/data/storage/writefreely/{db,keys}
ssh root@johanv.xyz chown -R bin:bin /var/lib/dokku/data/storage/writefreely/
#https://github.com/dokku/dokku/issues/2215

ssh dokku@johanv.xyz storage:mount blog /var/lib/dokku/data/storage/writefreely/keys:/go/keys
ssh dokku@johanv.xyz storage:mount blog /var/lib/dokku/data/storage/writefreely/db:/go/db
ssh dokku@johanv.xyz proxy:ports-set blog http:80:8080

Now it was time to push the app to Dokku:

git init
git add --all
git commit -m "init"
git remote add dokku dokku@johanv.xyz:blog
git push dokku master #this build fails

After that, the site was visible, but it displayed an internal error. Next I initialized the WriteFreely instance, and viewed the list of commands because I was curious how to manage users:

ssh dokku@johanv.xyz run blog --help
ssh dokku@johanv.xyz run blog --init-db
ssh dokku@johanv.xyz run blog --gen-keys

With the app initialized, I rebuilt it and the internal error was replaced with an empty blog site:

ssh dokku@johanv.xyz ps:rebuild blog

Since I set it up as a single user instance, I had to initialize an admin account to be able to log in (Of course I put a real password instead of just “password” :):

ssh dokku@johanv.xyz run blog -create-admin johanv:password

Lastly, I enabled HTTPS (otherwise anyone could sniff my creds when logging in) and it worked without a hitch!

ssh dokku@johanv.xyz config:set --no-restart blog DOKKU_LETSENCRYPT_EMAIL=my@email.address
ssh dokku@johanv.xyz letsencrypt blog

Conclusion

So, that's how I got this site to its current state, thanks to DigitalOcean, WriteFreely, and most of all, Dokku. I have much migration from the old site to do, and many more subdomains planned. :)

Credits

Comprehensive Dokku Tutorial by Max Schmidt Let's Encrypt Cert for Main Domain WriteFreely for Dokku Permissions Issue in WriteFreely Adding a New SSH Key

Hello, World! I put together this list of cool Linux terminal commands that can be yours today, for the low price of FREE!

Basic

Get the weather.

curl wttr.in

Copy a command output to the clipboard.

cat file.txt | xclip -sel clip

Serve the current directory on port 8000 as a web server.

python -m http.server

(The old way was python -m SimpleHTTPServer, which is how it is in the screenshot)

Visit the web server at http://localhost:8000/ in your browser. Press Ctrl-C in the terminal to stop the server.

python -m SimpleHTTPServer A web server with one command! It can also be accessed by anyone on the same local network (house, school, library, etc.)

Measure the time it takes to run a command.

time find

Display a calendar.

cal

Change the terminal to attack mode!

xtermcontrol –bg ‘#111111’; xtermcontrol –fg ‘#ff0000’

Terminal with Red Text Installing a python package in attack mode!

Re-run the last command as root.

sudo !!

Exit the terminal but leave all processes running.

disown -a && exit

Open a webpage in a text-based browser. Use the arrow keys to navigate, ENTER to click on links, and Shift+B to go back.

w3m duckduckgo.com?q=Terminal+Tricks

Advanced

Set up a Virtual Private Network (VPN) on a remote server such as a DigitalOcean droplet. This will create a file /root/client.ovpn which tells other computers how to connect to the remote server.

user@local:~$ ssh root@remote

root@remote:~$ wget https://git.io/vpn -O openvpn.sh && sudo bash openvpn.sh

Copy the client.ovpn file to the local machine.

user@local:~$ scp root@remote:/root/client.ovpn .

Import the remote openvpn server config into NetworkManager on Linux.

user@local:~$ nmcli connection import type openvpn file client.ovpn

Then use the network system tray icon to connect to the server.

Scan the local network an get a list of the devices, their IP addresses, and mac addresses. Replace “wlan0” with your network device, which you can find with “ip a”. The “tee” command saves the output to a file, while also displaying it to the terminal.

sudo arp-scan –localnet –interface=wlan0 | tee arp-scan.txt

Log in to a Raspberry Pi whose default password has not been changed. Replace the IP address with the actual IP address of the Pi. Let this serve as a warning: Be sure to change your Pi passwords so random folks don’t log in!

ssh pi@192.168.1.99

Password: raspberry

Scan a computer on the network for open ports and other info.

sudo nmap -v 192.168.1.99

Forward local port 3337 to a remote server’s port 6379.

ssh -L 3337:localhost:6379 username@hostname

Set up a proxy on the local port 8000 through a remote server.

ssh -CND 8000 username@hostname

Set your web browser’s proxy settings to “localhost” and “8000” to act as if it was in the same local network as the server.

Surprises…

curl -s http://artscene.textfiles\.com/vt100/globe.vt | pv -L9600 -q
telnet towel.blinkenlights.nl
sl

Big thanks to the internet, including but not limited to climagic and this youtube video.

My Linux Mint Setup

Linux is an operating system, comparable to Windows or MacOS. You can use it to browse the web, run applications, edit files, and all the normal tasks you use computers for. But Linux is fundamentally different from Windows and MacOS in several ways that I find very appealing.

This article covers my reasons for using the Linux, and some cool things you can do with it (such as a keyboard shortcut for an airhorn sound). Along the way, it has links to different tutorials and resources for learning more. If you have a question or a suggestion, don’t hesitate to leave a comment at the bottom of the article and I will be happy to respond.

Why I Love Linux

User Rights

The main reason I love Linux is that it respects the user’s rights. Linux is free and open source software, which means anyone can modify, distribute, and use the source code. Even people like me who are not well-versed in writing operating systems still benefit from the diversity that this creates.

Linux is not run by a single company, but a large number of organizations that maintain distributions, or “distros”. Some examples are Ubuntu, Linux Mint, ElementaryOS, Fedora, and Arch. Because of the separate distros, there is no single company trying to lock you into an ecosystem of services. If one distro tried to do that, people would stop using it and switch to a different one, or someone would create and distribute a copy of it without the restrictive aspects. There are no applications that cannot be removed (unlike Edge on Windows), and components of the system can even be uninstalled and replaced with alternate types to suit your needs. Different distros have different forms of these alternate components to appeal to audiences with specific interests.

Security and Privacy

Linux’s security comes from the fact that it is open source. This might seem counter-intuitive as anyone could examine the code for vulnerabilities. But, since there are more benevolent people examining the code than malicious ones, this has the demonstrated effect of bugs and security holes being found quicker on average than proprietary operating systems. Because it is open source, it is verifiable that no telemetry data is being sent back through the OS to a company to collect and track Linux users.

The actual level of security depends on the distro. There are some security focused distros such as QubesOS, which runs every application in a separate container to keep it isolated from other applications and personal data. Another security distro is Tails, which runs from a USB drive and resets every time you start up (for ultra-paranoid people, or anonymous journalists).

All this being said, no system is completely secure from a determined hacker or government, but Linux has shown itself to be the most secure.

Control of Updates

One of the most freeing things about Linux is that there are no forced updates! You can choose to update whenever you want, or never update at all (not recommended, but possible). You can using the system while it is being updated, and most updates do not require a restart. When updating, you can choose which updates you want, and you can downgrade each application later if you want to.

When a large update is released, such as a significant change to the layout of the desktop, there are usually a group of people who like the old layout better. On other operating systems, they would be out of luck. But on Linux, the programmers among them make a copy of the component (called a “fork”). They are able to maintain that fork and anyone is still able to use it and keep getting updates for it. The two versions then continue in parallel and most everyone is happy.

Customizability

There are hundreds of Linux distros to choose from, dozens of which with a significant number of users. There are also many “desktop environments,” a component that determines the layout of the menus and apps on the desktop.

These are all Linux desktop environments, each with a different layout and workflow suited for different tasks and types of people:

GNOME GNOME – unique setup with a sidebar, and “activities” at the top-left corner

Pantheon Pantheon on ElementaryOS with Leos 7 icon pack – made to look like MacOS

Budgie Budgie on Solus Linux – clean and simple start-menu style interface

XFCE XFCE – lightweight, this particular setup has the menu on the top

MATE MATE on Fedora – fork of GNOME 2, menus on top and bottom in this setup

Cinnamon Cinnamon on Linux Mint – fork of GNOME, start-menu based (I use this one)

i3 i3 tiling window manager – for real hackers (my friend uses this one)

Settings Linux Mint Cinnamon Settings

Within each desktop environment, you can change the position of the menu(s), the theme, the position of buttons on the windows, and much more. Some desktop environments even have extensions that people can write, such as an extension I downloaded to make windows become transparent when being dragged so I can see the window underneath.

I have set up many keyboard shortcuts, ranging from silly sound effects played when I press Shift-F1, Shift-F2, etc (more on how to set this up later in the article!), to application launchers on Super-A (Arduino IDE), Super-B (Web Browser), Super-C (LibreOffice Calc), etc. I also set up shortcuts for moving windows around, like Alt-Left/Right to snap a window to one side of a screen, and Alt-<1-9> with the numberpad to move a window to a corner or edge of the screen.

Bootable USB

You can boot Linux from a USB drive! This is very useful for a variety of tasks. You can troubleshoot computers that won’t boot by booting from the USB drive and running diagnostics. You can remove passwords from Windows computers using a utility. You can retrieve files from any computer you forgot the password to (as long as it is not encrypted). If you accidentally formatted (erased) a hard drive, you may be able to recover it with a bootable Linux USB. It is also great for working with storage devices in general since Linux is compatible with all major file systems, and has some great easy-to-use tools for partitioning. I have put together a USB drive with multiple distros on it with software called MultiBootUSB.

Terminal Stuff

Nethack Nethack, a game that runs in the terminal

A terminal is an application that allows the user to type commands to interact with the system if different ways. Linux comes with a very diverse and useful set of terminal commands for just about anything. Basically, the terminal acts as the glue for the system, giving access to all utilities, and allowing you to write scripts that automate tasks like backup of files, changing desktop backgrounds and themes, or installing apps on a new system. One of my favorite scripts lets me swap between the default skin of Linux Mint and a Windows XP theme that someone made for Linux Mint!

Later in the article I will discuss some of the fun terminal apps you can run.

Lightweight

Linux uses very few system resources. Depending on the distro, it can use about 300 MB (0.3GB) to 800MB (0.8GB) of ram with no apps open, leaving the rest for all those browser tabs that somehow take up 250MB (0.25GB) each… By comparison, Windows 10 uses 1GB to 2GB of ram with no apps open. Linux also uses only a few GB of disk space, and boots very fast (again, depending on the distro).

This makes Linux perfect for…

Old Hardware

A lightweight distro such as Lubuntu or Debian can run on old hardware (or cheap hardware like a chromebook) and still receive security updates. You can finally turn that 10-year-old laptop into a portable emulator for the Atari 2600 (among many others)! This project took a computer from 1989 and put modern Linux on it, and it still gets updates.

Ease of Technical Use

I have tried to install python on Windows before, and it is not a good experience. Linux, on the other hand, has python already installed and even has multiple versions for compatibility with older python programs. Setting up custom networking with a system of servers, or even devices around the home is a lot easier and cheaper (no licences required) in Linux. If you want to set up an audio production machine, you can use the Ubuntu Studio distro, or install the programs it uses on any other distro to create your customized audio setup.

Home Server

While Linux only has 3% market share on personal computers, it dominates the server market, with about 2/3 of the world’s servers running some form of Linux. That means that you most likely use Linux without knowing it every time you use the internet! This makes it the ideal choice for a home server since there is so much high quality server software available for free. You can use Linux to host your own website, store a backup of your laptop, run a minecraft server, act as a DVR, stream music, control home automation, etc. Since most of the world’s servers run Linux, having experience with Linux servers is an important skill to have if you are going into IT or web development.

Cool Things to Do with Linux

Open a terminal in Linux (Ctrl-Alt-T on most systems) and type the following command to install some fun scripts:

apt install hollywood filters nyancat bb libaa-bin oneko toilet fortune lolcat figlet cowsay sl cmatrix

Then type some of these commands in for some surprises:

oneko (press Ctrl-C to exit)
cmatrix (press Ctrl-C to exit)
nyancat (press Ctrl-C to exit)
fortune
fortune|pirate
fortune|lolcat
fortune|cowsay
fortune|cowsay|lolcat
fortune|figlet|lolcat
fortune|rev
fortune|pirate|rev|figlet|lolcat
sl
telnet towel.blinkenlights.nl
bb
hollywood (press Ctrl-C twice, then Ctrl-D to quit)

Mystery Command extra bonus nachos if you can guess what command created this

See the appendix for the links where I found these cool commands.

Keyboard Soundboard

In Linux, you can map key pressed to sound effects! In Ubuntu, click on “Activities,” type “keyboard,” and click on “keyboard” under “settings.”

Step 1

Scroll to the bottom of the list and click on the wide “+” button.

Step 2

Fill in the fields as follows, replacing “johanv” with your username, then click on “Set Shortcut…” and press Shift-F1 (or whatever you want the key sequence to be).

Step 3

Download this sound effect and put it in your home directory.

Step 4

Press Shift-F1 and enjoy! You can add more sounds to the other Shift-F<1-12> keys using the same process. Here is a link to all the sound effects I added.

Conclusion

Thanks for reading (or skipping) all the way to the end! This has been my perspective on the world of Linux. Whether you find Linux appealing, appalling, or somewhere in between, I hope you got something useful out of this article. The appendix has some useful articles on learning more about Linux if you are interested. You can also leave a comment if you have any questions, suggestions, or… well… comments!

Appendix

Here are some tutorials explaining more about Linux and how to use it: https://www.rosehosting.com/blog/intro-to-linux-how-to-learn-linux-as-a-newbie/ http://haktuts.com/Linux/ http://www.jpgtutorials.com/some-basic-linux-commands-everyone-must-know https://www.tutorialspoint.com/listtutorials/linux/basic-concepts/1

Sources for cool things to do in Linux: https://www.quora.com/What-are-some-cool-things-you-can-do-with-Linux-that-you-cannot-with-Windows-or-OSX https://www.quora.com/What-are-some-cool-things-that-I-can-do-on-Linux https://www.tecmint.com/20-funny-commands-of-linux-or-linux-is-fun-in-terminal/ https://lifehacker.com/top-10-uses-for-linux-even-if-your-main-pc-runs-window-1513172815

Screenshot of the Paper

I wrote an essay last semester at UMD about a proposed system for voting that would allow people to vote for a third party without wasting their votes. Voters would indicate their first, second, and third choices for candidates and the system would evaluate the choices so that if a voter’s first choice candidate did not win, the vote would be reassigned to the second choice, and the count would be re-evaluated.

[read the full essay]