johanv.xyz

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

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 Urban 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]

Protonmail Inbox

Friends, Romans, Internet Users, lend me your screens.

I have known for a while that Google is one of the largest companies with most of us using their services daily. But recently I have realized the extent which they use those services to track you, and some of the negative impacts. One example of this is shown by a tool built by Carnegie Melon called AdFisher, which sends out “hundreds or thousands of automated Web browsers” to build up a profile of interests with ad-targeting networks. The tool found that fake users who were male job seekers were more likely than equivalent female job seekers to be shown ads for high-paying jobs. (Full Article: https://www.technologyreview.com/s/539021/probing-the-dark-side-of-googles-ad-targeting-system/) Another reason I switched is on the principle of supporting the “little guy” rather than super-large corporations.

So, I decided to start making small incremental steps away from Google’s services, the first of which being Gmail. My new email uses ProtonMail, which I set up a while ago but recently started using more frequently, then bought a custom domain and made the switch. (I still have my Gmail account set up to forward to the ProtonMail for people who still have my old email.) ProtonMail uses end-to-end encription so that no one can read your messages on their way to the recipient, not even ProtonMail itself! They also have apps for iPhone and Android.

You might think that the Google search engine might be the hardest to stop using, but I found an alternative called DuckDuckGo, “The search engine that doesn’t track you.” It is almost as good as Google at searches and there have only been a few instances where the results have missed the context and I had to add a few keywords. A small price to pay for Google knowing less about you per day.

Google Drive, Calendar, and Hangouts/Video Calls can be replaced with a service called NextCloud, which you can host yourself for free or pay for a company to host it for you. I am currently testing it on a Raspberry Pi to see if I like it, and so far it’s been great!

I currently have an Android phone, but I found a Linux-based privacy-focused phone that comes out in Jan 2019 made by Purism, a company that has made secure Linux Laptops in the past (https://puri.sm/shop/librem-5/).

The last few services that will be hard or impossible to switch away from are Google Maps, Translate, YouTube, Google Groups (when joining a club, organization, etc.). I don’t see a problem with using a few Google services as long as Google doesn’t have access to all my emails, files, calendars, and searches.

UPDATE: A great alternative for Google Maps is OpenStreetMap, which has an app for Android and a custom website for iOS.

That’s all folks; thanks for reading. I’ll leave you with this limerick taken from my last post:

Johan’s become opposed to Google, The Internet kit and caboodle. He wants to stop being tracked, And get privacy back, But all of it’s just too dang useful.

Here are some limericks that I wrote for an assignment to tell my story.

Johan is one quarter Lebanese, And three quarters white as swiss cheese. He’s spent so long in MoCo, That he’s started to go loco, And he plans to take a trip overseas.

In 5th grade he became a Boy Scout, And liked to make fires and camp out. He advanced up in rank, Supportive family to thank, And got Eagle before the time ran out.

In High School he built many a robot, But never gave the plan enough forethought. They were piles of metal, Duct taped to a tea kettle, But they advanced to Worlds on a longshot.

Tinkering is Johan’s main token. From this there’s a proverb he’s spoken: For in work or in playing, He lives by the saying, If you can’t fix it, it ain’t broken.

When he was bored he played board games, In Dominion and Boggle he scored claims, But when railroads got gold studded, Monopoly got cold-blooded, And the friendships descended toward flames.

On February 14, what’s he doing? Not sending cards, giving candy, or wooing. He’s in his room with a CD, Reading a tutorial wiki, Installing Arch Linux on his PC.

Johan’s become opposed to Google, The Internet kit and caboodle. He wants to stop being tracked, And get privacy back, But all of it’s just too dang useful.

Now Johan’s a college freshman, Studying for a lofty profession. He’ll be a double E, Hitting the books with glee, Until he runs into crippling depression. (Just kidding :)

FTC Team 7393 Robot

The following is a log of the FTC meetings at the electron Volts. Our website is at gearbox4h.org

#################################################################
#                                                               #
#                        Coder's Log.e()                        #
#                                                               #
#################################################################

An account follows of the myriad of adventures I have had with the electronVolts. My aim is that the narrative shall be as accurate as possible and will serve useful in reference during future events.

Saturday, October 1, 2016

We were visited by a band of rookies. They do not perceive the insurmountable tasks that lie ahead of them. I attempted to affright them by disclosing to them the monster that is The Code, but alas, they took an interest in this beast. I fear there is no way to warn them; their days ahead appear grim.

The Great Git attacked our code today. I researched its weaknesses in the Archives of Google and found individuals who were in a similar predicament. Armed with this knowledge, we were able to send it howling back from whence it came.

Sunday, October 2, 2016

I found it necessary today to journey into the desert of robot wiring. There are wires in every direction, extending out into the distant horizon. The shortage of water and software for three hours is starting to affect my sanity.

Tuesday, October 4, 2016

The wiring problem has been worsening. Connectors spew forth from every surface of the modules. Fortunately, I have discovered a solution. Unfortunately, the aforementioned solution requires an expedition into the jungle of printed circuit board design. The prospect of water makes the adventure more appealing.

This evening I spent a good while researching a mysterious artifact called the Chunk of Modularity. Legend has it that the Chunk can be constructed by connecting a set of modules in a vertical manner, with one large module running perpendicular to the rest. My first attempt at creating this enigmatic system was incomplete, but after a trip to the Amazon, I will finally have the components I need. The trip is scheduled to depart on the morrow and return within one fourth of a fortnight.

Wednesday, October 5, 2016

A portion of my crew sailed across the ocean to visit our backers today. They showed the backers the robots we have built. Whilst they were gone, I deemed it important to reorganize the software. As William once said, “Everything’s going swimmingly.”

Saturday, October 8, 2016

We are embarking on today’s journey with high hopes and a long trek ahead. The hardware team is scheduled to have some simple mechanisms built by the end of today.

As we reach the midpoint of our voyage, the hardware team is drawing out charts and diagrams.

During today’s expedition, the hardware team lagged behind and the rest of us had to wait for them. Typical.

There have been more developments on the Chunk of Modularity today. The trip to the Amazon has returned with some of the components. Now we plan to additively manufacture an enclosure for the chunk through the ancient ritual of “3D printing”.

Sunday, October 9, 2016

The printed circuit board design has been completed and now all that remains is to have it procured.

Tuesday, October 11, 2016

I sorted our collection of small engines, perceptive devices, and other curiosities. The rest of the team worked on building components of the robot’s hardware. We requested the printed circuit board to be constructed at the end of today’s gathering.

Wednesday, October 12, 2016

I have finally solved the servo inits, an issue that has been plaguing us since last year. They will be a bother to us no longer.

They have bothered their last bother. Their bothersomeness will have lasted the first botherer. You get it.

Headway is being made on the collector. We performed a test and recorded it with a device that is called a “Cam Ra”.

Saturday, October 15, 2016

Our shipment from Mr. Andy Mark arrived with the new gearboxes, which we secured to the test bot. Then we contrived a means of activating the beacons during the autonomous mode. Subsequently, a run of tests for the code was in order. The teleoperator mode is in fine condition. The task designation system and the operator option selection require more attention. I have succeeded in creating version one point oh of The Chunk of Modularity. The hardware team has done a quite excellent good job with the prototype collector. It performed very well at collecting particles at a rapid rate of speed.

Tuesday, October 18, 2016

Today’s effort was expended in recording the various and sundry functions of the code for other persons to research. The hardware team attempted to position the collector such that the robot shall fit into the standard space required.

Saturday, October 22, 2016

Disaster strikes!

My latest escapade was to wire the beacons together to be powered from one source. It became apparent that the wall adapter offered a supplementary four volts in addition to the twelve promised on the label. This unfortunate overabundance caused the beacons to become not unlike expensive bricks. I spent the remainder of the day repairing said bricks by replacing the innards with an Arduino device.

Tuesday, October 25, 2016

The unfortunate mishap involving the beacons has been mitigated. All the innards have been replaced and revitalized. The surplus meeting time was applied to the hardware efforts. Deadeye Mike lined up some perfect launches with the catapult. Unfortunately, none of them came to fruition.

Saturday, October 29, 2016

Today I showed to my apprentice Divya the mysterious process by which the code is modified. The hardware team busied themselves by improving the catapult to improve the consistency of their launches.


Tuesday, November 1, 2016

I coupled the line sensor array to the test robot.

Sunday, November 6, 2016

Divya and I activated the line sensor array. Then we tested the encoder boards and sent in an order for 500 to give to other teams.

Monday, November 7, 2016

Birthday

Set up vuforia to feed frames to opencv

Calibrated the distance sensors

Tuesday, November 8, 2016

Wrote beacon color detection

Saturday, November 12, 2016

Removed the defunct distance sensor and calibrated the other distance sensor

Monday, November 14, 2016

Michael sent a motivational email

Tuesday, November 15, 2016

Tested the autonomous

Improved the vision processing

The line sensor broke

Wednesday, November 16

Tested line up — center of mass calculations are wrong

Saturday, November 19, 2016

Meet the field day:

Helped one team rotate the opencv frame

Second team had multiple dex files — started fresh

Team 3&4 were completely new to it and went through the whole process

Team meeting:

Fixed center of mass calculations

Fixed line sensor array

Tuesday, November 22, 2016

Tested the line up – doesn’t work that well

Wednesday, November 23, 2016

Attached the chunk

Friday, November 25, 2016

Met for 12 hours

Built shooter

William stayed the night and played Dominion

Saturday, November 26, 2016

Finished shooter

Built collector — has problems

Attached line sensor and phone case

Thursday, July 20, 2017

It has been quite some time since I last put into writing the various and sundry misadventures that have befallen me as a volt of electrons. I will preface by remarking that much has gone on that I fail to recall during that time. However, some of our exploits are as follows.

Gone are the glorious days of the Chunk of Modularity, the epic tales of Deadeye Mike, the frequent and costly expenditures to Mr. Andy Mark, who never rests. Those days of hope and expectation for successful ventures are gone, for we have brushed infinitesimally close to the line sensor threshold of success, but have fallen into the Integer.MIN_VALUE of failure. At the state tourney in Mary’s land, we were distraught at the insufficiency that was contained in one infernal machination known only as…

“THOSE DANG ROOOOOLLLLLLEEEEEERRRRRRSSSSS!!!!!!”

Darkness. A long pause. A point of light in the distance. It moves closer and closer. Could it be? No, certainly not. But as it approaches, it is unmistakeable. Yes, surely… We have our lives back. Our grades begin to improve. Free time becomes more than a concept. The servo inits are no longer a problem. And, more importantly, I am able to speak and write modern English properly.

Log.d()

We needed a break. While we were in the thick of it, we wanted to win, but looking back, going to Super-Regionals would have been more stressful. The new team members would not have the motivation that they do now to get there on their own if we had made it to Worlds. We wouldn’t have had the time needed to train people before the next season. Lastly, it reminded us that we value learning over winning, which we had forgotten while being so desperate to win.

After that, we found out about the 4-H Robotics Challenge, which takes place during the summer and uses a similar field to FTC. Since the teams are 2-4 people, we decided to split into three teams: Kelvin and Hobbes, Sherlock Ohms and Doctor WATTson, and the Crown Joules (which I am on).

I decided to work on a control system to use instead of the Modern Robotics system, since the other two teams would be using up the modules anyway. It uses an arduino on the robot which communicates with a Raspberry Pi on the driver station. After I started building it, FTC announced that they would be using the Rev Robotics Expansion Hub next season, so all my work on the system was unnecessary. I decided to use it anyway since I had already ordered the parts.

You might think that the FTC season was completely over at this point, and you would be technically right. But there was one more unofficial tournament, the Maryland Tech Invitational, that we signed up for. It was a two day event, with judging and qualifying matches on the first day, and the rest of the qualifying matches, finals, and awards on the second. Several companies had sponsored the event and provided cash prizes for various awards.

There were teams there who had gone to worlds, teams with amazing robots, and teams from New Hampshire, Iowa, and many other states who had all done very well. Then there was us. We hadn’t modified our robot since states, where we fixed the rollers after our last match. We realized from the start that we had no chance at winning, except maybe a small chance at the Sensor Fusion award, and we went just for fun.

I enjoyed talking to other teams about their robots, FTC, and robotics in general, especially the coaches of the Iowa team, the Cybots. We came up with an idea for an Arduino battery internal resistance sensor.

We did very well in the qualifying matches, and only lost 2, even though every match came very close. We ended up in 2nd place! Our first pick was Mechanical Paradox. When it came around to us again, our second pick, Gluten Free (from New Hampshire), was still available since we did our scouting well.

We recognized that we were the weak link in the alliance, so we ran the other two teams as much as possible. Mechanical Paradox had some hardware issues at one point, but they fixed it just in time for the match. We won the semi-finals against the 3rd seed alliance, but watching the scores other semi-finals made us anxious. They even had a tie and had to go to a 4th match!

In the finals, we and Mechanical Paradox ran first and lost. Then MP and GF won the second match. We were all nervous about the last match, and all eyes were fixed on Gluten Free’s robot as they autonomously… pressed the wrong color beacon!!! That was a big disappointment, and watching the numbers of shots, we weren’t exactly making up the difference in that department. Then end game rolls around and both teams pick up the large particles (as the announcer called them). Then the opposing team dropped the ball! Literally and figuratively! The gears turned on the field and in our brains trying to calculate our score based on the missed autonomous, the number of shots, and the dropped cap ball. It still didn’t seem like enough, when everyone looked down and saw that ALL the beacons were blue! We had definitely won the match! “We” meaning the teams we picked in alliance selection, anyway.

During the awards ceremony, while we were still trying to comprehend what had just happened in those last 10 seconds of the match, we were surprised to get the judges award! It came with a free Rev Expansion Hub, which was strange since we had just sent an extra one back in the mail a few weeks before.

There was a lot of luck involved, but two things (maybe the only two things) that were not luck were our scouting and our reliable autonomous. This tournament was a fantastic end to my last season of FTC.

And they all rode off into the sunset. [Fade to black.]

[The camera pans up from behind a table in the garage as team members are frantically trying to build their 4-H challenge robots. Various remarks are heard.]

“We said we would DESIGN it this time.”

“Man, we should have been working this hard 2 months ago.”

“I thought this 4-H thing would be easy!”

“Hey, pass the pizza. Do we have any pepperoni left?”

[Overhead rotating shot of people running around, grabbing parts, fastening bolts, fake-typing on keyboards, and the obligatory sparks flying from the grinding wheel.]

Narrator: Here we observe the robotics team in its natural habitat. Its diet consists of pizza, oreos, and, as it would seem, scrap metal. This amazing creature, while smart, is prone to procrastination. Little is known about how it manages to complete its tasks at the last possible minute, or how it turns stock metal into swiss cheese.

Narrator: And that’s all for now. Tune in next time where we dissect the inner workings of a dysfunctional bureaucratic government agency.

[Credits roll.]