Open Doors

When I started as a Financial Representative in 2014 I was proud of my Series 7 and 63. The interview process was lengthy and competitive but once brought on board we were more than adequately prepared for our licensing exams. The exhilaration of being a stock broker, unfortunately, was very short lived. “Financial Representative” meant customer service phone associate who also assists with trades. The job was extremely demanding, the pay was poor, but the career growth outlook was positive. The career growth outlook was positive that is until I discovered what it really means to be a Financial Consultant. I began to consider career alternatives but more doors were closed than open given my BBA in Finance paired with the university I had attended. It was time to open doors.

Computer Science was the degree I had considered pursuing my freshman year of college, however my 18 year old shortsighted thinking and frankly utter lack of self confidence led me to pursue a less strenuous path. Starring down the barrel of what life for the average finance major was like I decided to take the Fundamentals of Programming I (C++) and II (Java) at a local college after work. I soon realized that not only did I enjoy programming but I was better at it than I ever would have expected. My mind made up, I applied to OSU’s post bacc program and was quickly rejected. I then retook Precalculus and Calculus as I thought it may be useful to brush up on my math skills as a true adult, was rejected once more by OSU and then finally accepted.

Fast forward fours years. I had stayed with my current employer while attending OSU in order to support my wife and two babies. I am in the Comp Sci Capstone course with a single elective remaining and a 3.98 GPA (4.0 if you include the 92 I received in Discrete Math). As I begin to survey the job market (even despite a looming recession) I am quite hopeful. A plethora of doors that were closed to me are now open. Recruiters are beginning to take notice. I can see a career I enjoy with a starting salary 50% higher than my current. To quote Matthew Mcconaughey, “Green light”.

200 OK

The past few weeks have been fairly successful both at work and in school.

At work my team successfully demoed our Capstone project. Utilizing Camunda, Olympus, JavaScript and a series of internal APIs we were able to successfully automate portions of a time consuming manual process frontline associates have been working through for decades. Whether or not the tools in the long run will work on the scale the company desires is still yet to be seen.

On other fronts, school has been going quite well. In Django I have learned to automatically send users emails. This was a little more challenging than expected due to Google removing a setting allowing for less secure apps. Eventually I found an excellent tutorial on application specific passwords and then you can visit a Google page to unlock captcha. Credit to suhailvs for https://suhailvs.github.io/blog02.html#mail-setup-on-django-using-gmail

While Django makes a lot of difficult tasks simple it sure could improve the database migrations. Without fail, after creating a new model with a foreign key, we’ll be forced to drop the whole database and start from scratch because migrations will not function properly even when all records have been manually deleted. But it’s all a part of the learning process. Without the toil the personal reward would be that much diminished.

Life is good. Programming and learning are rewarding. Here is to another great few weeks.

Django: Learning the Basics

Despite what you may tend to think, capstone projects are not always the presentation of developed skills honed over the course of time. In fact, some capstone projects may require tools and frameworks which are wholly unfamiliar to the student developer.

Django is a web development framework which is intended to make full stack development a much more streamlined process. In order to accomplish this, Django utilizes an ORM (Object Relational Mapper) which transforms your Python code via the use of Django Models into structures for various relational databases such as MySQL and PostgreSQL. Each class within a model maps to a table and the attributes of the class correspond to fields within the table. With this new layer of abstraction, developers are able to manage their backend by creating, reading, updating and deleting data with Pythonic syntax through Django.

Other benefits of Django is the use of urls, templates, forms and views to quickly and *easily map and render web pages to users.

After having completed two Pluralsight courses on Django and creating a handful of practice projects, I can say that it is deceptively easy. Depending on what you want to accomplish it may even be downright easy, but as soon as you go off script you realize this is a complex tool with significant depth.

As with most of life’s endeavors worth completing, practice eventually makes easy. Django is a web development framework worth learning and one I will certainly become more practiced with as CS467 continues.

Until next time space cowboy.

( For those interested in a great beginner Django course I would recommend “Getting Started by Reindert-Jan Ekkerhttps://www.pluralsight.com/courses/django-getting-started )

A First Step: PYNQ-Z2 and OpenCV

The PYNQ-Z2 board, OpenCV and Jupyter Notebooks were all new topics for me a few weeks prior to CS467. That is until I was asked to join an AMD sponsored project for my capstone course at OSU. Our objective: delivery tracker software which would identify a person approaching your residence to drop off a package, snap a photo of the individual, store the photo for later review and notify the homeowners their new fitbit and yoga mat are likely sitting on their doorstep. 

Booting up the PYNQ-Z2 board and accessing the Jupyter Notebook environment for the first time is relatively straightforward if following this setup guide. After reviewing the files in the getting_started directory I moved on to notebooks/base/video where we have interactive python code to implement face detection and video filters. It is both exciting and a source of relief to see what can be accomplished with less than a page of Python code. Following the process of loading the pynq overlay, initializing our video I/O for use with a webcam, capturing a frame, applying face detection and writing the frame to our hdmi out, and there you have a frame of your (certainly) beautiful face correctly identified by OpenCV.

By importing time and looping through portions of the code for a specified number of frames or infinitely until there is an interrupt, we can quickly determine which lines of code are the most resource intensive based on the fps for each trial. The culprit unsurprisingly should be face_cascade.detectMultiScale(gray, 1.3, 5) which is the function responsible for the actual face detection. Through further tests you can quickly identify the scale factor parameter (currently set to 1.3) as one important variable in determining how fast this function runs. While a scale factor of 1.08 will result in a greater number of faces being detected (including false positives), a scale factor of 1.3 will run faster while resulting in fewer detections (including false negatives).

PYNQ-Z2 running Jupyter and executing facial recognition with OpenCV. It is a great place to start the first week of our Capstone project.