self.status = ‘reinvented’

14 Months ago, on November 27, 2016, I published my aspirational statement to enter a software engineering training program.  In that blog post, I used some social work theory to explain the mix of emotions involved with all my fears and sense of loss from beginning to make a complete career reinvention.  Today, I’m more than thrilled to continue in this journey now employed as a full stack software engineer in silicon valley!  The past year and a half of my life has been extraordinarily challenging, requiring some major sacrifices, including almost completely disconnecting from my entire life in the midwest. I thought I would publish this post for anyone interested in learning how this transformation has been for me, and for anyone thinking of making a similar career reinvention. Note: Many thanks to my family, who helped make this possible.  And for those reading this in the tech industry, if we […]

read more

Cogito ergo non sum git

translation: “I think, therefore, I am not a git” It has now been almost 10 months since I’ve been consistently using git with github.com, so I thought I would share my top pointers and lessons that have helped enhance my git experience so that you do not become a git when using git. The lessons are organized by these categories: speed up your work, find a workflow, debugging tips, and tips for early beginners. Speed up your work (0) Simplify Login: If you have typed in your username and password too many times and are ready for a change, use password caching and ssh. Password Caching with timeout of 3 years (or until you restart your OS): $ git config –global user.name [YOUR_NAME] $ git config –global user.email [YOUR_EMAIL] $ git config –global credential.helper ‘cache –timeout=99999999’ If you would like to manually perform these steps, simply add the following code […]

read more

python object oriented programming

: behavior of data types and operations for mutable and immutable objects in python language The examples and explanations in this post have the following specifications: environment: vagrant virtual machine with linux 14.04.5 LTS for Ubuntu language: Python 3.6.1 (default, Nov 17 2016, 01:08:31) compiler: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 Python docs at docs.python.org describes: all data in a python program is represented by objects or by relations between objects. docs.python.org, further explains this concept in reference to PyObject and PyVarObject: PyObject All object types are extensions of this type. This is a type which contains the information Python needs to treat a pointer to an object as an object. In a normal “release” build, it contains only the object’s reference count and a pointer to the corresponding type object. It corresponds to the fields defined by the expansion of the PyObject_HEAD macro. PyVarObject This is an extension of PyObject that adds the ob_size field. […]

read more

arsine, a custom shell command line interpreter

:a step by step process of how the custom shell, arsine, processes the input command ‘ls -l‘ and returns output in a terminal emulator Co-Authored with: Bobby Yang, follow @glyif on twitter and github. For reference to the code of arsine, it is hosted on github (@glyif , repo simple_shell): https://github.com/glyif/simple_shell These beginning steps until the custom _getline() function all occur for all processes and all inputs into arsine including ls -l, and so therefore, there is no specific explanation of what happens in the case of ls -l until the _getline() function explanations. arguments inventory The major component of the initialization of arsine occurs in a function that builds a struct termed the arguments inventory. This arguments inventory has almost all of the major variables utilized within arsine; also, many of the functions in arsine take the arguments inventory as input parameters. It was a concept that was implemented in […]

read more

can’t see the forest through the trees

:on the kernel | linux vs. unix | operating system vs. ubuntu vs. virtual machine | shell vs. bash | command line vs. terminal As daunting as I imagined the task of writing this article would be, it wasn’t worse than the feeling I continually face of having to learn to program software without a solid grasp of the meaning of the aforementioned components and applications. I often feel confused as to the differences between each of the above listed components and systems. My main problem is that I miss the big picture of how my computer software that I utilize is structured and connected to the rest of my computer. This also creates problems for how I communicate about what I’ve coded on my computer, especially for people that use different software and different machines. Not being able to explain how I’ve been using a computer is at least unflattering and certainly […]

read more

what not to do is as important as what to do

:on how and why C language allocates memory Special thanks to Lisa Leung for her editions.  You can follow her on github here. In learning C language, in our studies as Software Engineering students at a bootcamp, we use the GCC (i.e. GNU Compiler Collection) compiler to convert our C language code into an executable file of code in binary system (i.e. 0’s and 1’s) because 0’s and 1’s can be easily translated into on and off transistors of a circuit board.  For more on GCC compiler, check out my article: Computer Compilers: brief introduction.  So, when a transistor is off, that translates to a ‘0’ (zero), and a transistor that is on (having electric current flow) translates to a ‘1’ (one). Binary is the link between human legible code and the machine that contains transistors in the Central Processing Unit or CPU.  Once one has a basic grasp of this concept, it […]

read more

what the f*Lib.a?

:C language libraries, part 1, static librariescompiler: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4environment: vagrant virtual machine with linux 14.04.5 LTS for Ubuntulanguage: C languageHave you been learning C language and using #include <stdio.h> and have no idea what is happening with that? If so, then this post is for you! I will be discussing C language static libraries, why to use libraries, how they work, how to create them, and how to use them. For background information on the subject, it’s helpful to understand what happens when C language files are compiled; for more information  on that, check out my other blog post: Computer Compilers: brief introduction, which helps to explain how the gcc compiler works. As this is the first blog of a two part series, please refer to my other post on libraries: what the f*Lib.so? for more on dynamic libraries.In the above referenced post on computer compilers, you will see that during the gcc compiling process, the […]

read more

computer compilers: brief introduction

:on how a compiler works, using the GNU Compiler Collection gcc as an examplecompiler: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 environment: vagrant virtual machine with linux 14.04.5 LTS for Ubuntu language: C languageIf you have begun to experiment with and learn about computer code and software languages, after the early 1980’s, it is very likely that you began using higher level languages, and much later learned about compilers. At least this is how I have begun to learn to code computer languages. I have been touching the surface of html, css, javascript, and PHP for almost 2 years, and I never knew what a compiler was. This is because these languages are interpreted by a browser or another lower-level environment instead of being compiled. The browser or other environment reads the instructions and uses its own logic and mechanisms to interpret and respond to the input codes. Did you ever wonder how a browser […]

read more

links: hard vs. symbolic

:using the ln command in bash to distinguish between hard and symbolic linksStated below is an excerpt from the unix BSD General Commands Manual on ‘ln’. In the description, I have only copied one option, which is relevant to this tutorial, and I have left out the majority of the content from the manual. NAME: link, ln — make links SYNOPSIS: ln [-Ffhinsv] source_file [target_file] DESCRIPTION: The ln utility creates a new directory entry (linked file) which has the same modes as the original file. It is useful for maintaining multiple copies of a file in many places at once without using up storage for the “copies’’; instead, a link “points’’ to the original copy. There are two types of links; hard links and symbolic links. How a link “points’’ to a file is one of the differences between a hard and symbolic link. The options are as follows: -s […]

read more