Image for post
Image for post
Photo by dylan nolte on Unsplash

In 1988, Barbara Liskov first formulated the following principle

Liskov’s notion of a behavioural subtype defines a notion of substitutability for objects; that is, if S is a subtype of T, then objects of type T in a program may be replaced with objects of type S without altering any of the desirable properties of that program (e.g. correctness).

Thereafter referred to as Liskov’s substitution principle, this represents the L in the mnemonic acronym SOLID and is one of five design principles in object oriented programming. …

Last week, I spent most of Wednesday and Thursday completely overhauling my resume and moving my portfolio one-pager from to glitch. The motivating factors and lessons learned will be covered in another blog post but suffice to say, I ended Thursday night feeling rather proud of myself for completing something within a reasonable amount of time and decided that I’d share my tiny victory with social media in the morning.

Image for post
Image for post
Photo by Katie Moum on Unsplash

Then, as I was getting ready for bed, I saw the breaking news of the terrorist attack in New Zealand on YouTube — and to make shit worse, the news coverage I watched showed uncensored footage from the terrorist’s live stream. This then led to me going to sleep mourning New Zealand and then waking up the next morning in a funk. If it weren’t for the ongoing spar challenge between myself and my sister, I’m sure I would have not been out of the house on time. Despite being out of the house on time, my productivity was nonexistent and at some point I remembered the tweet that I had drafted the previous night about the day’s accomplishment. …

Friends let friends work more efficiently

Imagine my dismay when my classmates from Holberton School and I were assigned an article to read entitled “Friends don’t let friends program in shell script” by Liraz Siri. My love of bash scripting and all things command-line interface (CLI) is no secret among my peers. Normally, when I find myself repeating a task more than a handful of times, I try to find a way to either alias the command or automate a series of commands within a script. …

How to sit back and let machines build the environment for you

This is the second of several tutorial blog posts accompanying my end of term project completed for Holberton School. If you have not already read On Choosing Docker, my recommendation is to start there before reading on.

Now that you’ve drunk the container Kool-aid let’s discuss how to set up your own StarCraft II Learning Environment (SC2LE) container.

System requirements

  • Docker for Mac/Windows
  • 5.5 GB free
Image for post
Image for post

Typical installation

I briefly alluded to my own experience of setting up the SC2LE in my previous post and below is an attempt at visually representing that experience.

How I decided to containerize the StarCraft II Learning Environment

This is the first of several tutorial blog posts accompanying my end of term project completed for Holberton School.

On August 16, 2017, Blizzard and Deep Mind collaboratively published a white paper entitled “StarCraft II: A New Challenge for Reinforcement Learning.” The paper introduced the StarCraft II Learning Environment (SC2LE) to the research community and outlined frameworks and resources designed assist in the exploration of deep reinforcement learning algorithms and architectures.

Getting the development environment up and running took about two days of deciphering error messages and sifting through issue requests on GitHub. For many people, however, experiencing difficulty in setting up the SC2 learning environment may cause them simply give up in frustration. …

You’ve read all the tutorials and watched all the videos and now you’re finally ready to write your first JavaScript code!

Image for post
Image for post
Sooooo many JavaScript frameworks!

But wait! If you’re using emacs to write Semi-Standard Styled JavaScript, your code will not pass the linter on first pass.

or: how a fledgling programmer learned to stop worrying and love Python3

Image for post
Image for post
These children’s faces from this classic meme symbolize my own stages of comprehension as I sought to understand object oriented programming


What is an object?

The dictionary definition for object is:

  1. a material thing that can be seen and touched.
    “he was dragging a large object”
    synonyms: thing, article, item, device, gadget, entity
  2. a person or thing to which a specified action or feeling is directed.
    “disease became the object of investigation”
    synonyms: target, butt, focus, recipient, victim
    “he spent five years as the object of a frenzied manhunt”

In programming, this definition of object can be extended — though you may not be see and touch software objects, you can definitely perform actions on objects. …

Image for post
Image for post

Two months ago, I wrote about static libraries in Linux and reasons to use them. In today’s article, I will introduce the concept of dynamic libraries in Linux and aim to cover the following:

  • why, in general, C libraries are used
  • differences between static and dynamic C libraries
  • advantages and drawbacks to each type of library
  • how dynamic C libraries work
  • how to create and use dynamic C libraries in Linux

Why use C libraries?

Creating a library allows users to group together multiple compiled object code files into one file. This allows a user to share functions with multiple applications. …

Or, how to keep your repos from looking like s***

Image for post
Image for post
A sloppy Github repository

Intended audience

Users who are *very* new to Github repository management and/or students at Holberton School.


Linux vagrant-ubuntu-trusty-64 3.13.0–107-generic #154-Ubuntu SMP Tue Dec 20 09:57:27 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

Distributor ID: Ubuntu
Description: Ubuntu 14.04.5 LTS
Release: 14.04
Codename: trusty

Wondering how to generate the above information? In your terminal, type man lsb_release and man uname and find out!

Issue 1.1: Garbage files appearing in repository

Sloppy Github repositories show a lack of attention to detail and detract from your otherwise awesome code. The best way to manage your files and prevent garbage files like the ones in the above screenshot from showing up is by creating a .gitignore

Image for post
Image for post
Sometimes the simplest system calls are the most complex

Brief introduction to Linux kernel and shell

Users new to Linux will want to familiarize themselves with the following:

  • terminal is a program that opens a window and lets you interact with the shell
  • shell is a program that takes commands from the keyboard and gives them to the operating system to perform. Bourne-Again shell, usually referred to as bash, which is the default shell for most Linux distributions. When you first login to a server, you will be dropped into the command prompt, or shell prompt, which is where you can issue commands to the server. The shell will forward its input (usually, from your own key presses) to the running program’s stdin, and it will forward the program’s output (stdout and stderr) to its own output (usually displayed on your screen). …

Elaine Yeung

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store