Hosting a Serverless Hapi 17+ API with AWS Lambda

This is an update to my hapi-lambda package on npm and now supports Hapi 17+

npm version


Sort Table Columns with Angular and Typescript

Here is a simple method for adding sorting to any table in Angular 2+. It's a simple approach that allows you to define how the table is filled with data, instead of the table sort forcing you to use either client side or server side.


Intro to UX Accessibility

Web Content Accessibility Guide (WCAG 2.0) is divided into three conformance levels (A, AA, and AAA).

They are organized based on the impact they have on design or visual presentation of the pages. The higher the level, the more restraining it becomes on design. As a rule of thumb, success criteria from level A should be invisible or barely noticeable to the interface. On the other hand, level AAA will have such a high impact on design, that most organizations will not be able to achieve that level (as the compromises on design will be too important).


Hosting a Serverless Hapi.js API with AWS Lambda

CAUTION: This article is for Hapi versions older than 17.x. If you are using a newer version of Hapi, please checkout the new setup here.

A good friend of mine wrote an excellent demo of how to use the Serverless framework to build an AWS Lambda function that can serve more than one request. The folks over at Serverless have named this approach the "Monolithic Pattern" and its a great way to move into serverless hosting without having the sprawl of multiple hosted Lambda functions.

npm version


, , , ,

Make Git Bash Awesome Again

Add some spice to git bash to help battle the cubicle blues.


, , ,

Mule ESB Enterprise in Docker on Openshift 3.x

Here is a useful Dockerfile for running Mule ESB EE in Docker. We are currently running this on Red Hat's Openshift (kubernetes-based) container server and it runs quite well.


, , , ,

REST API Testing with Cucumber and Javascript

There are a great many tools available for testing REST Api's by various vendors, open source plugins, browser plugins, and the old classic curl. If you're looking for a really simple way to test REST Api's that is easy to maintain and entirely automated then you should consider using Cucumber with Javascript.


, , ,

The Soul of a Standup Meeting

The morning standup meeting is a chance for everyone to participate in a conversation that aims to share an understanding of the current objectives, coordinate team efforts, share problems and offer help, and identify potential issues. As a collaboration tool, it offers an opportunity for team members to sync up there work efforts by letting everyone share the work they have been doing and allowing others to ask clarifying questions and offer helpful suggestions. It is invaluable in identifying wasted effort before it happens as team members often gain valuable context during the standup meeting. As a way to coordinate efforts, the standup meeting gives everyone an opportunity to share work that affects other team members in a way that encourages a discussion about the it, which can often alleviate any problems in the upfront.


The Death and Life of a Programming Language

"This is dynamic! It's great! So Simple! None of that overengineered junk!"


Using Opentoken in Hapi.js

This plugin will allow Hapi to authentication against PINGFederate Opentoken endpoints.

npm version


, , ,

Working with Themes in Hapi.js

This plugin will add a view handler to Hapi.js routes to serve themeable content. This allows you serve different stylesheets by theme name, serve different layout files, or whatever you need. Content can be themed by url (default), http header, or a custom function.

npm version


Sailing on 4th of July Weekend 2015

Here is the family sailing on our boat "Venti" 4th of July weekend. We sailed a short hop from Manitowoc to Sheboygan, WI.


, , ,

Working with Ranges in a REST API

A unique way of working with ranges in a more fluent way in a REST API. What is nice about this approach is its easy to hook up to javascript and is still a valid url scheme.


,

Unit Testing in Linqpad

Linqpad is great for writing a quick test or exploring some api features. If you need to write a group of tests, you can use this quick little snippet to run Linqpad like a unit test.


,

Interface Anti-Patterns: The Vagrant

The proliferation of N-Tier architecture has caused a common anti-pattern with the use of interfaces in .NET applications. This anti-pattern often presents itself as a form of dependency injection (DI) with its usage intending to reduce the coupling between applications but often creates the exact opposite situation.


, , , ,

Mirror the Google Glass Display On Your Desktop

To make glass development easier or just set things up for a presentation, you can mirror the glass display on a desktop or laptop using Android Screen Monitor (ASM).


, ,

Brew Bucket 7 Gallon Fermenter Review

The Brew Bucket is a winner, hands down. My only real hold up is the price and the amount of beer that could get left behind when you rack, but otherwise this is a real high quality product clearly designed with homebrewers in mind and not just some scaled down version of what the big boys are using. I'm really looking forward to any other products that might be coming out of their shop in the future.


, , ,

Arduino Interrupts and Timers

Outside of the traditional method of gathering values from Arduino inputs, there are a couple of other excellent tools in the workshop we can use. Interrupts provide the means to allow hardware devices to trigger a routine in your sketch and perform additional processing outside of the main loop. This trigger usually happens when an input changes state, allowing you to monitor an input pin without having to check it each time the main loop runs. Timers provide a way to run code at predefined intervals outside the main loop. Instead of calling millis() during the loop and constantly checking whether enough time has passed, you can create timers to move that logic outside of the main program execution. Just like hardware interrupts, a timer interrupt runs asynchronously and independent of the main loop.


Streaming files to Azure Blob Storage with Node.js

Microsoft has done an excellent job of building a cloud solution that is downright fun to work with, regardless of the language or toolset you want to use. They are regularly releasing updated API's and new cloud service offerings, have remained competitive in their pricing, and have even (wait for it) been called "visionary". The feature that I enjoy the most is the ease of configuration of their various offerings, most can be configured in a couple clicks and up and running in less than a minute. This really helps ease you into a nice deployment cycle right off the bat, especially if you take advantage of automatic Github or TFS deployments. Enough talk! Show us the code!


, , ,

Push Notifications from a Child Process using Node, Angular, and Socket.IO

It seems that every example on the internet involving Node and web sockets is some sort of chat application. Let's break out of the mold for a bit and do something a little different.


,

WPF Autogrid - Drop-in Replacement For Grid

A flexible, easy to configure replacement for the standard WPF Grid control Download WpfAutoGrid from Nuget. AutoGrid lets you reduce the amount of xaml when using grids for layout by allowing you to define rows and columns as simple properties and alleviating you from having to explicitly specify the row and column a child control belongs to. Partially based on work by Rachel Lim.


Oktoberfest 2012

This is a video board created for DuClaw Brewing Company to display what's on tap at the Maryland Brewer's Oktoberfest. Created to run on Xbox 360 or Windows 7 connected to a big ass Flat Panel television and a set of very loud speakers. The board also plays promotional videos on a set schedule and has a few more animations and effects not shown in this clip. The board actually runs on 3 different screens all with their own content, beer selection, videos, etc. We wrote the original for Oktoberfest 2009 and it gets updated each year. It's pretty much a giant video game written with XNA and C#.


Async Query and Batch with Entity Framework

When you're working with WPF or Windows forms one of the common issues that crops up is cross threading in your viewmodels. The following is a simple solution that wraps up a BackgroundWorker in some standalone classes that can be used with your DbContext. The nice thing about this solution is it doesn't require you to inherit any classes and you can stick the code in yuo project where you feel it works best.


,

Create a REST based HttpHandler in C#

Anytime I start a new project I’m usually super pumped to dive into some code and get something done. There I am, a cup of coffee and three energy drinks later, translating the latest business requirement into something simply amazing… or more likely, just another contact management application for the CEO of unnamed company X. But I’m happy, delightfully punching keys on the keyboard, slinging abstractions and enterprise patterns like its just another day. Just one more look at the functional spec and, wait, what is this? That’s right, I just realized that this is not a functional spec at all. This is Functional Spaghetti.


,

Using Dynamic Anonymous Types in Razor

A useful extension for developers that don’t shy away from anonymous types in their viewmodels.


,

XNA Multi Monitor Support

The information that follows pertains to an older version of XNA and may not be applicable Imagine an XNA game running two monitors, one for the 3d game, and a second having a full screen tactical map of the game. The easy part is actually splitting the game windows to multiple monitors, the difficult part is synchronizing the two parts to work together (which I will leave up to you). You can create a simple subclass of GraphicsDeviceManager and then create the two game windows on separate threads. When instantiating the Game class, pass in the index of the monitor you want to target (the index is visible in the display options dialog of your pc).