My current customer has what we call “configuration sprawl”: many types of configuration supporting many different environments living in many different places. They have hundreds of environments supporting a suite of applications, each supported by a diverse collection of infrastructure and release tools. The configuration supporting these environments is being duplicated across components and stored in many different ways which means that updating something as simple as a server credential is extremely risky. Below is a high-level overview of the problem and how I’m tackling it.
My initial goal was small: Automate smoketests. The customer was manually running…
Software development is tough, but software delivery is tougher. Development is just the tip of the iceberg; delivery involves coordination between people across testing, QA, UI/UX, product management, project management, database administration, architecture, business analysis, infrastructure, and of course — the end users of the software you’re building. Figuring out how to orchestrate software delivery across these roles in a manner that maximizes your team’s ROI is what DevOps is all about. Maximizing ROI means reducing costs while increasing value. This can be achieved through:
GuardMyPad is a web application that allows you to turn the devices you already own into a home security solution. This means you can use any of the following to remotely monitor your space:
This is really exciting because it significantly reduces the cost of security setup. You can now secure and monitor your space as easily as you can watch Netflix — no installations, no phonecalls, no shipping hardware. …
WebRTC is exciting technology. It’s lowering the cost of communications by equipping browsers with peer-to-peer technology that supports voice and video transmission without the overhead of VoIP hardware and its integration costs.
I wanted to get my feet wet with WebRTC; I learn by building so I decided to apply the technology to the home security domain. The result: GuardMyPad.com.
GuardMyPad is a web application that allows you to repurpose the devices you already own into a free home security solution.
My mission was to offer a beautiful, easy-to-use, free core product that offers the following:
One of my apps uses Markdown for content editing, just like StackOverflow. Fortunately, the folks over at SO decided to open-source their code for that feature set. It’s broken into two parts:
So, why do we need both of these?
Well, you could just stick with pagedown, store the markdown in your server, and serve the markdown back up to browsers for them to render every time they load some markdowned content. But there are a few problems with this:
In summary: Start with EF when you need to remain nimble. Move to Dapper when you’re ready to commit to your business logic and optimize performance.
Entity Framework vs Dapper. Which do you pick?
Entity Framework and other ORMs are convenient, but they come with a catch. Performance isn’t all that great if you’re comparing them to raw SQL due to the costs of abstraction.
Dapper might not be as accessible, but it’s a step away from stored procedures in terms of performance and a couple steps away from ORMs in terms of developer experience (you have to know a…
Busting cache in MVC is pretty easy stuff — just leverage .NET MVC bundling to detect changes and append a unique identifier to your bundles.
Things get trickier when users aren’t always refreshing though. Consider the following scenario:
One of my colleagues fell in love with this photo gallery: Gamma Gallery
It uses the device width to determine which images to load to achieve a fluid, responsive, mobile-friendly image grid. Cool stuff. But it requires that seven different sizes be available for each image. For him, that meant manually resizing around 100 photos, or trying to find a tool that could do it. We couldn’t find anything so I created a script for it.
If you look at the plugin, it requires the following:
Release Management brings a lot to the table as far as DevOps go. Automating and controlling your releases is hairy business; this tool takes a swing at making it easy. While the original on-prem product is a bit rough around the edges, it’s good enough that we use it for my current customer — a school district serving almost a million students.
One feature of Release Management is Tokenization. This is an alternative to Web.config transforms and allows you to leverage Release Manager’s component paradigm to — in its most common use-case — define web.config …