Benjamin Benetti

Outdated

This site was constructed for my job search after graduating from University. Expect to see a refreshed site here during my next job search.

  Hi, I'm Benjamin, a computer nerd. I've had a passion for programming since the early years of high school. I have continued to nurture that passion over the years, building my skill set. When I'm working for you, I'm not doing it for the money, not for the prestige of being a developer, and not because tech jobs are hot right now. I'm a developer because I love it. Growing up I never had a doubt in my mind as to my goal in life, becoming a programmer. I have followed that path, teaching my self how to program in grade 9 and continuing on to get a degree in Computer Science. Over which time I continually outperformed the majority of students, not because I'm smarter but, because I love programming, and have committed my life to it. When you have me on your team you get a dedicated team member who cares about producing a quality product, not only externally but, internally via highly maintainable and modular code.

  Besides programming I have two other major interests, video games and Making. For video games, I prefer strategy / management games like, TotalWar, Stellaris, and Cities Skylines. As for "Making" or being a "Maker". This means that I play with 3D printing, electronics, and microcontrollers to build projects. Its very addictive, think adult Lego, I always have a project on the go!

Technical Skills

  I've been programming since 2009. In that time I like to think I've learned a thing or two. I've done it all, from the high level world of virtualization and cloud computing, to the low level land of IoT and microcontrollers. Bellow you can see a summary of what I know split in to three categories: technologies I learned and practiced in a professional environment, technologies I learned in my free time or at school, and technologies I have a passing familiarity with. Click on an entry for a detailed description.

Professional

Personal

Passing

Desktop Development

During my time at ACD Systems I worked on their flagship photography suite, ACDSee. ACDSee is a desktop application designed for professional photographers to manage and edit their photos. ACDSee is built on a large C++ code base, and leverages Microsoft's MFC and Direct X APIs. In working on this product I gained valuable experience in working on large object oriented code bases, and in developing Windows desktop applications in general.

MFC

I used MFC extensively while working at ACD Systems to develop the GUI of the flagship product ACDSee.

Web API & Oauth

While working at ACD Systems, I used web APIs from various sites to provide image sharing features for our product, ACDSee. This involved handling both standard REST communication, and the Oauth authentication process.

C++

C++ was the second language I learned after Python. It has been my favorite language for almost my entire life (golang only recently took that title). I used C++ extensively at both, ACD Systems, and AVST to develop their respective products (ACDSee / CX-C).

Visual Studio

Throughout my early programming days and into my time at ACD Systems I have put thousands of hours in to Visual Studio. I will note, that more recently I have moved to an Atom + terminal environment on Linux/Mac.

Agile

At ACD Systems I participated in an agile development team. We had monthly sprints and dally scrums. This experience will help me work effectively in future agile teams.

Perforce

During my time as a developer at both ACD Systems and AVST I worked in teams that used Perforce as a collaboration and code base management tool.

Direct2d & GDI+

At ACD Systems I used both GDI/GDI+ and Direct2d to product custom MFC controls, and image editing features for the ACDSee software suite.

Linux

I used to be a pure Windows programmer. This all changed when I got my possition at AVST. At AVST all the systems run RedHat Linux. This posed a significant challenge to me as a Windows programmer, but I met that challenge. Working at AVST allowed me to develop my ability to work in a Linux environment, and build enterprise class Linux applications (CX-C telephony server). Furthermore, working at AVST allowed me to truly discover the freedom that is Linux. I no longer have a single machine running Windows (real or virtual) and am a huge fan of the GNU organization. I have moved away from monolithic development environments like Visual Studio, toward a Terminal + Make + GCC + Text Editor environment. I feel the move to linux has greatly augmented my capability as a developer and increased my understanding of how operating systems work. I love Linux!

Backend Development

At AVST I worked on an enterprise telephony server application, CX-C. This gave me valuable experience with backend high availability server architectures running on RedHat Linux. This includes concerns of QoS, backups, scalability, security, privacy, availability and disaster recovery.

SQL

SQL is a mainstay in almost every application. At AVST this was no different. Our CX-C product uses SQL as its data storage and recall mechanism. Along with the odd query here and there that one must perform in the development of a server side application, I also was tasked with migrating CX-C from IBM DB2 to MySQL. This involved modification of about 600 stored procedures among other things. I continue to use SQL, most recently in my web server (that is running this site) MicroWeb.

Bash

I often use Bash to stitch together applications, and automate tasks. This is what I did at AVST. This was necessary as CX-C is comprised of multiple binaries, and scripts running from init.d, systemd, and cron. The glue that allows these applications to operate in unison is Bash. For example, the CX-C installer is just one really long Bash script.

Python

I have used Python both at school and at work. During my employment at AVST I used Python as a intermediate language between a full application and a shell script. That is, Python comes in to play when the job is too large for Bash but, too small for C++ . Additonally, CX-C is built using SCons which is a build system like Make but, you use Python instead of Bash.

SCons

At AVST we used SCons as the build system for CX-C. SCons is a build system similar to Make but, it is based on Python.

Networking

During my time at AVST I worked on a networking focused application, CX-C. This application requires 100% up time, often servicing thousands of requests simaltainiously. Thus, having clean, and efficient networking is key. The main networking protocols in use are, SIP, RTP, and HTTP.

VM Environments

While working at AVST I often used multiple virtual machines in my development / testing. I continue to use VMs today, via DigitalOcean

Remote Administration

At AVST there was a server room in the basement. This room housed the development servers equipped with special telephony hardware. CX-C cannot run on a normal computer and must run on these servers. As such I gained valuable experience in administering remote machines via SSH. Today I simply prefer to do all computing tasks through the terminal making remote administration just as easy as local.

Telephony

While working at AVST I gained valuable knowledge as to how, VoIP, and the PSTN work.

Deep Learning

I have taken two classes on Deep Learning at University, Natural Language Processing, and Deep Learning For Image Processing. These two classes have provided me with the foundational skills required to develop Neural Networks in Tensorflow. I was fortunate enough to get a chance to apply these skills when I became a member of a team that submitted a paper to the ACL 2017 conference. Said paper was accepted and we got to send one member over to Denmark for a poster presentation!

3D Graphics

3D graphics started it all. The entire reason I wanted to learn how to program was so that I could make my own game. And that I did, In grade 12 I made a C++ and OpenGL based 3D Multiplayer first person shooter for the yearly GameMaker competition (was the only one who didn't use GameMaker). Moving forward I have continued to build my skills, learning various graphics techniques like, Differed Rendering, Screen Space Lighting, and Shadow Mapping. Additionally I have a firm grasp of 3D Math (Linear Algebra). As for formal education, I have taken both 2D, and 3D graphics courses offered by my University, to high marks.

Golang

I recently picked Golang up after hearing good things about it. I have to say, This is the best language I have ever used! It is just a fantastic design. Not to mention the superb standard library. I have only done one project in Go so far, my "learn Go project". As I learn best through doing, not following step 1,2,3 tutorials I built my web server in Go, MicroWeb (the server running this site).

IoT

I fancy my self a "Maker". What this means is that I tinker with microcontrollers, electronics, and 3d printers to make little projects like, ArmBoy, BuckConverter, SD Card Library, and RF24L01 Library. I have also taken a classes on embedded system programming at my University. Between the classes and my self education I would consider my self quite capable of writing embedded system software.

ARM

I have experience writing software for ARM cortex-M class microcontrollers. Mainly the, Sam3x8e microcontroller found on the ArduinoDue. On this chip I wrote an operating system from absolute scratch (pure C, no Arduino Libraries), armboy-kernel.

AVR

When you don't want the extra capability and complexity of an ARM chip, an AVR chip can be a good choice. I use these chips a lot in my Maker projects (like My Buck Converter). Mostly the atmeg328p due to its low price (I go through them like potato chips).

Unit Testing

I always strive to write code that is as maintainable as possible. One important aspect of code maintainability is units tests as a mechanism to prevent regressions. Thus, I always try to write unit tests where applicable, MicroWeb, Compilator.

Java

I learned Java on my own for the hell of it (I often do projects in new languages to learn them). It proves a robust and well used language. Many University courses are taught in Java. Additionally, its similarity to C++ makes it easy to learn and remember.

Scala

While taking the Compiler course at my University I decided to write my compiler in Scala. I picked Scala because it is a hybrid object oriented - functional language. Having just done a course on functional programming I was excited to have a language that includes my new favorite features, Pattern Matching, Map, Reduce, and Filter!

Make

In my personal projects I routinely use Make as my preferred build tool. I like it because it allows you to specify build steps using normal Bash commands, and it is highly tied in to the UNIX way of doing things.

asm

I have experience in writing assembly code. This experience comes both from University classes teaching AVR assembly programming and from my personal projects with ARMv7 assembly. Such as, my operating system, armboy-kernel.

C

I primarily use C as my language of choice for MCU programming. Then if I need assembly I simply use inline assembly. See the, sam3x8eHardwareAPI for a good example.

git

It should come as no surprise, due to my GitHub activity, that I use git. git is my go to source code management tool. While I have mostly used it alone, I have used it in teams during University group projects.

Web Technologies

I have used the primary web technologies on and off throughout the years. I even worked with HTML, and CSS a little bit while at AVST. This was necessary as the administrator interface for the CX-C server is a website. However, I didn't do much, so I'm keeping this section in the personal column. The biggest demonstrable record of my use of web technologies is this site. Built on HTML, SCSS, Bootstrap, JS, and Go.

Video Encoding

At University I took a course called, "Multimedia Systems". This course provided me with the knowledge to understand video encoding and compression, among other things. As the final project for this course my friend and I made a basic (very basic) live streaming application using VP8/9 and H.264/265.

Operating Systems

I have always been driven by a need to understand and do things myself. I always feel uncomfortable using a library that I do not think I could write. To that end I have always strived to understand, at a deeper level, the operation of a computer. After taking a forth year course on MCU programming, "Real Time Systems" I wrote my own operating system to put in to practice all I have learned and to better understand operating systems.

Compression

A few University classes have touched on compression but the one that did the most has to be, "Multimedia Systems". This class has given me knowledge of lossy and lossless compression for audio, images, and video. Including techniques such as, LZW compression, YUV subsampling, and discrete cosine transform.

Security

Security is an ever growing concern in todays technology driven world. Through University classes and my own self directed learning I have developed the skills necessary to keep an application secure. This includes things like, symmetrical encryption (AES, DES), asymmetrical encryption (RSA), secure hashing and salting (SHA-2), secure key exchange (Diffie Hellman, x.509), web based attacks (XSS, CSRF, SQL injection), and buffer overrun attacks (Stack overflow, heap overflow, return to library code).

JS & jQuery

If your doing any thing on the web you really have no choice but to use JS. Furthermore, if you are not a mad man you must use jQuery, its utility is just too good to ignore. Thus, I have used jQuery and JS to build multiple web sites/applications. For an example see, the site you're viewing right now.

node.js

I know node.js is very popular. I've been rather indifferent toward node.js, preferring compiled languages on the server side for their speed. I have however dabbled with node.js, including Angular. I have an old SENG310 project based on node, UvicGroupFinder, a little too ambitious for the class (we where supposed to make a fake mockup).

Pug

In the instances that I find myself using node.js, my go to template language is Pug (formally known as Jade).

DirectX

In my high school days I dabbled in DirectX to produce various 2D games. Beyond that I have not used it much, If I where to use it today I would have to rely on its similarity to OpenGL, which I know well.

Pure Functional Languages

At University I took, "CSC 330 Programming Languages". I'm sure it changes based on the instructor but, when I took it, it should have been called, "Functional Programming Languages". This class had a major component on sml, a pure functional language quite different from the object oriented languages we are used to seeing.

Education:

Bachelor of Science
Honours Computer Science
Co-op Computer Science
The Univeristy of Victoria.
- Transcripts

Work Experience:

Co-op Developer January 2015 – September 2015
ACD Systems

Co-op Developer May 2016 - Dec 2016
AVST (Now, XMedius)

Awards:

  • Oak Bay Fire Fighters Bursary for Technology.
  • Letter of Commendation for Excellent GPA from Dr. Ulrike Stege.
  • in-course scholarship for the 2016-2017 academic year
    (due to high GPA)

References:

Out of respect for their privacy, references are available upon request.

Contact Me

contact@bbenetti.ca and check me out on github, BenjaminBenetti