Over the 18 years of my software development career, I have worn many hats. I have worked with "front-end" javascript, created "back-end" services, developed mobile applications, deployed and organized Continuous Integration systems, drilled deep down into Windows Installer to improve product delivery and deployment, and created architectural strategy for internal tools. The wide range of software practices under my belt have helped me identify cross-disciplinary patterns, and in turn, given me a broader understanding of the software development process on my path to being a well rounded engineer.
Focus on code quality and developer experience, I got to dig deep into development patterns that created code smells and enable an increase in team feature delivery velocity.
As a senior software engineer on the Services Delivery team, my responsibilities centered around the development of processes and tools to transition the team to a cloud and self-service model.
As a software engineer on the product development team, my responsibilities include development of new workflows and features, bug fixes, and guiding the product team towards cleaner and simpler product delivery.
As a software engineer on a service delivery team, my responsibilities included implementation of special application requirements, packaging custom configuration, and general oversight of tech-related issues for each of our clients. As the senior engineer on the team, I was also responsible for setting the strategy for the team to solve less trivial problems.
Worked on a small development team as a .NET C# developer, but like most members of a small teams, wore many hats in the process. Under the guidance of the Sr. Engineer, gained a finer appreciation for elegant and simple solution design.
As one of three developers in the company at the time, I had the opportunity to work and many differing capacities, which was a great learning experience for this early time in my career. Cosential was my first job on a strictly web based application and it was here where I was exposed to asynchronous javascript request. Seeing the importance and impact of the technology, AJAX and front end engineering became a focus of personal growth.
Starting work while still taking classes at college, I was lucky to have played chess with the CTO at a local coffee shop. After winning against Joe, he invited me for an interview at his company and took a risk on me after looking at some PHP scripts of questionable quality. In the time I worked under Joe, his decades of experience and wisdom were a strong influence on my development as an engineer.
No markup language required to build tests, instead ZeUnit focuses on easily consuming outside data sources.
Built on the principles of progressive enhancement allowing users to start with simple tests and scale the complexity for system wide integration.
Test functions return the results, not 'spooky action as a distance' to mutate execution state making asynchronous testing easy to support.
Replaced hard coded functions to render static css and js content with a composable document builder.
Exposed the newly created document builder to enable side-loading additional content into the generated HTML reports.
Default behavior of the existing system remained unchanged by the pull request, expanding functionality without breaking backwards compatibility.
All additional code written has 100% unit tests coverage.
The platform that this blog utilizes is ghost , a really simple an bare-bones blog. The main reason for this publishing engine over the pletera of choices out there... Markdown. I get to write everything in markdown, and ghost will go about making it pretty. Especially if you throw some prismjs in for code highlighting. But is pretty code enough??? Rhetorically answering this with a resounding NO... the code also needs to be correct. And how do we as software engineers make sure code is correct? That's right, unit tests. Which got me thinking a bit... Given I am already in a javascript runtime, can't I just inline my unit tests right into the blog it self? This post is a biproduct of the a couple of nights of tinkering with jasmine, iframes and events between… »
Geeks like to tinker. And we really like our new toys. So when my girlfriend asked me to put together simple tool for her grandfathers business, I thought this was a great opportunity to learn something new: Polymer . The internet seemed full of glee for it; what could go wrong. {<1>} Well... Since my last post was well over three month six months ago, it is clear that this strategy went over about as well as a two front war for Germany. Quoting the project at about 80 hours, with the learning curve I was expecting to spend about 120 hours, My baptism by fire wasn't to be the concern of my patron. 150+ hours in, and at a second dead end after a full re-write from scratch. I was beaten, bruised and defeated, and I crawled back to the tried and true Bootstrap… »
I have heard it said that learning a second language is pretty hard, but learning subsequent languages gets progressively easier. Already an ESL (English as a Second Language) student in high school, I was forced to attempt a 3rd language, Spanish courses that were mandated for graduation. I merely muddled through it. "That galaxy is signaling in binary. I should signal back, but I only know enough binary to ask where the bathroom is." Bender ( Futurama - S4E8 - Godfellas ) My excuse for my limited Spanish acquisition is that perhaps I'd been diverting my learning toward computer programing languages instead. "I dedicate this performance to the lovin' memory of Microsoft QBasic. Keepin' it real." Futuristic Sex Robotz But the excuse is only an afterthought. I only… »
Every now and again you hear developers at some programming event talking about this fabled myth of a function, the understanding of which will transcend you to a new plane of programming. Well, challenge accepted. Spoiler, I am still among us mortals. Thinking About the Problem The first place you go: wiki . If you are anything like me, lambda calculus hurts your head and only paints a fuzzy picture. Heavy math aside, what problem does it solve? It lets us have recursion of anonymous functions. Factorial function to the rescue To define recursion you must first define recursion. But seriously, in order to be able to make this function anonymous, we need to get rid of our dependency on " factorial " I agree, crazy. But lets give it a try. Some closure… »
We all know the secret to responsive ng-view s, right? Well, it isn't really a secret. I am talking about routeProvder.when resolvers for pre-loading asynchronous server data. You really don't want your view sitting empty. resolve - {Object.< string, function >=} - An optional map of dependencies which should be injected into the controller. If any of these dependencies are promises, the router will wait for them all to be resolved or one to be rejected before the controller is instantiated. If all the promises are resolved successfully, the values of the resolved promises are injected and $routeChangeSuccess event is fired. If any of the promises are rejected the $routeChangeError event is fired. The map object is: key – {string}: a name of a dependency to be… »
Every now and again, my boss asks my team and me to sharpen our minds by writing fiction. These brainstorming assignments are designed for team building and to unleash creative thought. The topic of this daydream is: What do you think is going to be the role of medical technology in 2030? It started as "Folding At Home," a crowd-sourced project to map protein folding. For just a few watt hours a month, a home computer would think about the problem of protein folding while idle--a very ambitious project at a time in which the rate of technological change was still expected to follow Moore's law. "Moore's law" is the observation that, over the history of computing hardware, the number of transistors in a dense integrated circuit doubles approximately every two years. The… »
If you have never watched/read anything by/about Richard Feynman you need to stop reading this post right now! There is a marathon to be done. He was a brilliant man with an amazing ability to de-construct complicated concepts into laymen-friendly terms. In this video , he talks about the difference between knowing something and knowing the name of something. But he also points out the importance of having a common language. 5:14 - what he forgot to tell me was that the knowing the names are things is useful if you want to talk to somebody else. So it isn't surprising that a lot of people, including yours truly, do the following google search before going on job interviews. Ideally, this is simply a lexical refresher for the abstractions and concepts you… »
Note, this post has been edited on 12/11/2014 and 01/12/2015. These changes were made to keep the code base changes to handle routing and directives. A previous post talked about a general idea behind data annotation and the ability to mark up classes. But the example was far from being real world or useful. Today we are going to explore the way that data annotation can be used to decouple business logic with angular bindings. We are in search of a simpler solution to ES6 modules or RequireJS and Angular modules. Module Pattern and Angular ES6 brings us modules and the "import" keyword for better composition management, which basically means that this code: transforms into RequireJS code that creates a dependency and on './ngBase Nicely enough, ngBase becomes the… »
While everyone is fawning over Angular 2.0, it isn't something we can really use for a while. But Tracuer and @script are here, and--as long as you support IE9 and up--they are here for you today. The Angular team published a playground for @script: https://github.com/angular/atscript-playground So why is annotation-oriented programing so much win? The quick answer is meta programing. Buzz word alert : The basic idea is that you can mark up some object in your code with additional meta-information. And the cool part: parse that mark up at runtime to give your application additional intelligence. But lets take a quick look: An annotation is really just the instantiation of some class that can be bound to an 'annotations' property on the target class. The above code… »
Why do I code? I get paid for it. I like the creativity it unleashes. I seek to communicate (with computers). I played with legos as a kid, and programing is damn close. Originally I started coding because I wanted to be like my dad. This is shortly after I wanted to be a fireman and cosmonaut. One day, Dad showed up with a computer from work, and that night we "pair programmed" a times table program. A life long love was born. My hope is that, as a reader, you are here because you too share a fanatical dedication to your craft. Conventions MS Bob When dealing with programing concepts, every now and again the bad ideas need to be highlighted. What better scapegoat then MS Bob . »