Category Archives: Languages

Learn Web Development: Front End Certificate – Finished!!!

Dear Reader,

I finally finished the JavaScript front-end course.  That involved two last projects, which I’ll present here.  Warning these are not mobile optimized and look ugly on a phone:

Pomodoro Clock:

Pomodoro clock is count-down clock, which allows you to switch between work and break sessions.  You can adjust the work and play dials to choose how many minutes you want to work or play.  If you press the large Session button, the count down begins.  This project wasn’t that difficult to complete.  The hardest thing was figuring out how to create a circle, center it and then start a timer.


This is a tictactoe board with a very “dumb” AI.  It starts by allowing you to choose Xs or Os.  It then continues until either you win, the computer does or a draw occurs.  The AI plays a rather simple strategy:

  1.  If the AI can win that turn it.  It plays the winning move.
  2. If the AI will lose this turn, it will block the player from winning.
  3. If the AI can’t win or block a losing move, it finds the diagonal, column or row with 1 of it’s own tokens in it and no opposing token.
  4. If the previous 3 positions do not occur, it picks a random diagonal, column or row with no opposing token in it.

At first when I played this AI, I thought it was pretty smart.  I soon realized that playing the bottom 2 corners and one of the top corners results in a win for the player every time (at least for O).

Simon Game:

Simon is an old 1990s Toy that plays a sequence of colors that the player has to match.  It starts with a sequence of 1 color and increases it by one if the player matches the entire sequence without an error.  It does this up to a sequence length of 20 and then declares the player a winner.  The Simon game has a strict mode, which will reset the sequence to 1 on a player error.

This specific implementation took me around 4-5 hours.  The difficulty came from the fact that JavaScript is asynchronous.  This means code that looks sequential in the file executes at the same time.  This came as a shocker to me when I pressed the start button, was immediately declared a winner and then watched the entire circle turn lightblue 2 seconds later.  What had happened is all 20 sequences had played out at the same time including all… 20 + 19 + 18 … 1 button presses (2 seconds later).

To resolve this specific issue. I created an event on the color buttons.  If the player had pressed the correct sequence of colored buttons to match the computer’s color sequence, it would add a new color to the color sequence and repeat it back to the player.  To make sure the play timing of the color/sounds  was correct, I iterated over the index multiplying each index value i by 2000 milliseconds.  This ends up solving all those strange asynchronous bugs and makes the game playable.

After this project, I finally got the front-end certificate for free code camp.  It was a cool 6 weeks of part-time coding.  The last 2 weeks were especially exciting, because I got to do a deeper dive into JavaScript itself.



Learn Web Development: Front End Certificate

Hello Readers,

I’m finally finishing up front-end certificate after spending about 1 months on it (on and off).  Great course if you want to learn some basic Javascript and html manipulation.  Some of the cool little projects you’ll end up doing:

Weather App:

Wikipedia Search:

Twitch TV:

Calculator (note calculator is not responsive):

There is also a nice algorithms section, which has some rather complicated problems.  For example, you need to find all primes within a given number range, calculate the greatest common denominator for a given number and manipulate records.




Learn Web Development: Quick and Simple

Dear Reader,

A non-profit called free code camp provides lessons in JavaScript, HTML and CSS. These are core web technologies. The nice thing about this service is that it is bite size. A lesson might take about 3 minutes to complete. As you go further along, they become progressively harder and tackle more advanced topics:

Most of the lessons explain a very simple concept: How to change the color of a specific component on a website, how to add text to your website or how to make a element shake? Once you get to around lesson 200 or so, you’ll start doing more advanced stuff, like going through arrays of arrays in JavaScript. This is nice, because you’ll get to learn the basics well and then start getting into more challenging topics.

The other nice thing about this program, other than being free, is that you get to do bigger projects. For example, you might end up doing a tribute page to a specific artist, Chester Bennington for me, or make your own web portfolio. These are hosted on

My examples are below:

Tribute Page:

Web Design Page:

50 lessons and you already get some tangible results. Definitely worth it if you are new to web development and want to learn. If you are more advanced, this is a good 3 day course that will let you brush up on basic web technologies and get some practice at JavaScript.


Boston Python Group: Fluent Python and Think Python

Hello Readers,

I tend to have a few books that I really like.  The usual one I recommend for beginners is:

Think Python by Allen Downey.

The one I tend to recommend for advanced Python programmers is Fluent Python:

The later just gets into so many cool little things about the Python language.  Dictionary comprehensions.  How to develop a card deck in a short class (with cool use of list comprehensions) and lots of interesting technicalities.  There is a reason it has 4.9 stars on O’Reilly Media.

Last night I provided some advice to Python beginners and mentioned the above two books.


Managing Networks – Trial and Error

I’ve been playing around in my free-time in automating connections between different AWS instances as a way to learn more about networking.  Currently, it’s been pretty fun.  Last post I mentioned a series of libraries just for networking.

This post talks more about user friendly interface in the form of CLI libraries as well as some interesting topics regarding asynchronous processing in Python.  A bit about the CLI libraries that I really like:

Click –  This is a really great library in that it seems almost a natural way of building up trivial CLI in a quick and efficient manner.

You start with instantiating a, which represents a class to hold all your commands.  You then write functions in python and decorate them with the @cli.command(<help>) python decorator.  Then add @click.arguments(<help>) to add arguments.  The type of arguments available is pretty extensive including the ability to use a file (which it checks if it exists).  The nice thing about this interface is it generates the help menu for you and, if the commands ever get more complex, provides ways to subdivide commands into small groups.  This library is great for centralizing a bunch of commands.  Create a file with an entry point to make the CLI available anywhere within linux with a custom command prompt (I use something like dbops as a prefix).

Cmd – This allows you to create a command line utility using a single class and defining a few methods.  The Cmd.cmd class provides a shell, which takes in user input and then matches it with a set of commands (if they exist).  Commands are specified with def do_<command name>(self,line): where line is the string that excludes the command name (parse this to get arguments).  To make sure that enter key doesn’t execute the previous command make sure to create a method def emptyline() that returns 0 (return 0 re-prompts the command line for a new command, anything else will stop the loop).  I played around with this command prompt as a front to a network management utility and thought it was pretty effective (Cmd.cmd will run asynchronously, which frees you up to develop other services within the application).  I recommend this if you need to get user input and utilize that within the context of a program.

Argparse – Argparse, (not listed here optiparse) are other options that you can also use.  It works by providing a set of rules to handle arguments for a specific command and then assigns those to variables globally.  Good part of argparse is the argument section is very flexible and you can add things like flags.  I think overall it’s a bit harder to implement then the above two cases (but more flexible).  I think this is used mostly with a single file.

Sys/Os – The system and os library is well worth getting to know.  It provides a great way to interact with the operating system.  From checking on files, directories to … doing a stat on a file to …  One of the great uses of Sys and Os commands is the ability to manipulate stdin, arguments and stdout.  I’ve used this to generate python scripts that accept piped results.  Another interesting library to check on for this specifically is subprocess model, which allows you to run commands in the background and provides file like objects for stdin, stdout and stderr (with subprocess.PIPE allowing you to pipe results between subprocesses).

The parallel processing part of my project was pretty cool.  I worked mostly with multiprocessing and the threading library.  Multiprocessing allows you to produce new processes via fork, threading allows for shared memory between processes.

multiprocessing – I really like this library.  You can create a set of workers and provide them a function to do work in parallel.  The join command (similar to bash) waits until they are all done and then continues the process.  The overall command is pretty easy to pick up, you create a multiprocessing process, provide a target function and a set of arguments for the function (typically in list format).   You than just use the start method on the project and it begins to run it in the background.  Other cool things about multiprocessing is the ability to set up queues, pipes (bi-directional communication) and proxy shared-memory manager for dictionaries and lists (didn’t get to work, but see docs).  One thing I did run into is working around shared memory issues (initial fault in not researching threading vs multiprocessing).

threading – The commands are similar to multiprocessing (in terms of setting up), but runs things in a thread instead of a process.  You’ll see threading used a lot in libraries.  TCPServer in the previous post (SocketServer library) uses it in it’s mixing.

Celery – I didn’t get into celery as much as I’d like to.  Mostly due to not wanting to set up rabbitmq or redis for a tiny application (I used sqlite to keep foot print small and set up easy).  It’s still a great tool to look more into as it runs a queue (or set of queues) for you and allows you to execute things asynchronously (use for messaging too).  I will probably look more into this library and the associated products in the future.

The application I developed was a tool for managing database connections.  It was split into 3 parts, a process that polls AWS for connection information, a database for storing that information (sqlite) and a process that managed SQL connections for me (through port forwarding).  This was all controlled via CLI based on Cmd library.  Messages were sent to polling and SQL connection manager via queues (multiprocessing) with each process run within a separate process (multiprocessing).  Within SQL connection manager, I created TCPServer (SocketServer), which I ran in a different thread and added to a class to manage connections.  The threading was done partially to isolate failures due to a computer shutting down or refusing a connection.  This prevents the entire application from failing due to the actions of a single TCPServer.  Overall, I’ve liked the experiment so far, but don’t intend to do much more with it.  It was a experiment to test out a lot of these libraries and get a deeper understanding about things like ssh.