Schedule Your ExoCTO Session

My Coding Journey

To be honest I am best described as a perseverent failure; there are plenty with evidence enough to agree. Though we've all seen enough media to recognize that there can be a value in perseverence. That said, lets us go back to the days of ClarisWorks and Netscape, GeoCities, Angelfire and MySpace ...

She was a teacher, and he in sales; there was enough money to purchase her a computer for maintaining student records, etc. I had the chance to play the X-Wing flyer game, though the computer was a Macintosh 630 Perfoma. Not optimal for running games.

Though there was a game that I did enjoy playing called Ultima Online; it was a Massive World role playing game, a precursor of sorts modern day WoWs, Fortnites and Fables. Build a character, level them up, interact with other players online from around the world, or your group of friends, in the networks to which we had access.

Some kids at school were building websites using this language called HTML; making webpages about their characters, or favorite Star Wars adventurers. I was a socially distant youth, until I became the front-person for a high school band. And every band needs a website. While PhotoShop was nearly as expensive; and there was another program, I wasn't gonna use DreamWeaver. That did cost money I wasn't going to pay, and I didn't like the point and click layout builder.

Arachnophilia baby! One-part text-editor, other part WYSIWYG editor, aimed at building HTML web-pages. All parts freeware!

I didn't stick with this long, to be honest, music, college and then life pulled me in a multitude of directions until some days when I found myself running a sound board for a music venue. And herein played a band, weekly, with a musician who also coded.

We all know I had to ask ... can you help me learn to code ...

To which he kindly obliged. Now I had someone to whom I could ask questions.

A holiday break was coming up, and that meant I would get considerable time alone!

I found an old tower with drive board and monitor; rigged them up and installed my first version of Arch Linux ... GAME ON!

Soon afterwards I converted a MacBook I'd purchased with FAFSA funds into an ArchBook; and I was off to the races!

# Mentorship

My computer science mentor does have a degree in the field, from the late 90's. Though is not in a position to help me land or find jobs. We are lifelong friends at this point in-time working on computer projects, music projects and more, together!

Though I was able to find an entry-level job; sadly there were complications, and this was before diversity or inclusion were anything near buzzwards. There was an inconsistent and nebulously defined Junior/Senior dev structure; and efficiencies were prevented from being manifest. I left.

My next position of employ was using writing SQL code to maintain databases.

I'll be completely honest, I know that a part of it is me; I'm the problem. Ergo, I currently teach English to pay for my living expences. Though back to coding; through all of this I was only ever able to pick up bits and pieces. In the second job, I was exposed to .NET infrastructure, and it didn't take too well. Sorry .NET.

Though I did continue building web applications using Django ... and so now we get into, how I learned how to code ...

# Beginnings

I took statistics in college and was introduced to the R programming language. Aspects of this experience re-enforced later learnings to be sure, though the entire process has been piecemeal.

I knew HTML, and was aware of CSS; I'd heard of BootStrap before; and had attempted to build a Drupal website. But that was still too much point and click. And I had exposure to statisticss; I needed something that would give me access to similar libraries.

Python it was; the next step was to find a web application framework. In my first formal tech job, I worked with Django; it served all of my needs. A robust and extensible framework that is well-maintained. One of the specific differences was, at the time, I didn't want to learn PHP; and so WordPress was not a framework I wanted to explore. I needed to be able to write my own database tables.

At first, Django allowed me to connect the database to the user-interface; where were a series of django-template files. Now, and likely then, frameworks could be melded into the framework; though this is not the route I wanted to go.

# Efficiency and Fluidity

My ideal was to have a complete application, database, server and client. With an API endpoint in the server, so that the client module could retrieve and update information as necessary. Django served as the server, using Django REST Framework to complete this task.

Django's introductory tutorial is really quite good. I was introduced to all the necessary parts of an application ... Django does have it's own structures using Models, Views and Urls; though the trick was to start simple. Create a blog.

For a blog, I'll need a database table, with what information?

Date. Published (True/Falso ~ Boolean). Post Title. Post Content

That's the barebones basics of what's needed to create a blog application. Later we can add things like categories and tags; but I like starting with the basics.

I learned that, with regard to learning Django there are three primary application components I need to learn, a fourth for API endpoints; but we're still good. And then just gotta figure out how the settings are configured.

# Django's 4 App Elements

Models: Models architect our databases. What column names and constraints do we want to place? Do we want the column to be required? Is the column for numbers or characters? Maybe for files? I'll forgo traveling further down the rabbit's hole; though you get the picture.

Views: In Django, files are the mechanics that call the database, and specify the parameters. I would like all blog posts from July 2017 to September 2017. Or, I'd like all blog posts tagged with #updates #cat and #music hashtags. In views, we can set such parameters.

URLs: URLs provide an endpoint to start the entire process. An endpoint is a URL address specifically named and, with Django, connected with a View from the file.

Serializers: Now we are going to added on a new component brought in by the Django REST Framework. REST stands for Representational State Transfer; which basically it transfers state data from one point to another while maintaining a represenational structure. The structure often used is called JSON, JavaScript Object Notation.

Why the Serializer?

Without the serializer our Views would each render an HTML template ... super cool, but I want a bit more flexibility than working with Django, or various other templating structures, might work. I also wanted the excuse to learn more about JavaScript; though instead of trying to learn JS amidst the Django code, I wanted to decouple the server from the client. And so REST framework and Serializers were needed to maintain the state of our data in a readable form.

I've got data, I've got end-points ... and one of Django's most thrilling features!!!

I had an admin portal that was easy to read and navigate; later I would find a BootStrap Admin template; though I've long since forgotten to follow-up with that package. The stock admin interface is solid for building MVP's.

So I've got all the basics, or at least an idea of all the basics ... Now I needed to go build it.

# Minimal-ism

I love minimalism personally; and this transfers into my coding thought as well. That's why I went with Django, each part can be reduced to a specific function and customized as necessary. New dev level achieved!

Now with Django REST Framework I could shape and form each API endpoint only for the data required by that specific call. I had already built by basic blog application by now, and moved on to start working on the original target product. And here arrived the daunting, yet fun part ...

I wanted to learn all of the code, from byte to pixel, or at least have a handle on the process, so that I could be assured of delivering any potential users the most efficient and attuned service as possible. And there would be a considerable amount of data to sift through; optimizing each call, minimizing packet sizes; I wanted to have a grasp of who all of this happens.

# ScreamFreely

The project has it's own brand ScreamFreely; and the application portion of the project uses web-scrapers to obtain information from government web sites. Information such as council event calendars, policy details and official information. We compile all of this information, delving in to school and park boards as wel; providing users with an opportunity to follow only the organizations that interest them the most.

Patreon + Stripe