Redirect Custom Short URLs with Lambda

An AWS API Gateway proxy resource can be configured to respond to requests using a proxy integration to invoke a Lambda function.

From Set up a Proxy Integration with a Proxy Resource:

With this integration type, API Gateway applies a default mapping template to send the entire request to the Lambda function and transforms the output from the Lambda function to HTTP responses.

This makes it trivial to implement a redirection function for custom short URLs.


Bundle Lambda Functions Using Webpack

Creating a Deployment Package (Node.js) describes how to create a compressed payload that includes the node_modules folder for Lambda functions that require npm modules.

An alternative to including the entire node_modules folder in the payload is to use webpack to bundle the Lambda function code and it’s dependencies into a single file.


Ship Access Logs to CloudWatch

If an S3 bucket or CloudFront instance has access logging enabled, the logs will be delivered as plain text files to the designated target bucket.

Having access logs split into many files in an S3 bucket is not inherently useful but presumably Amazon takes this approach for the flexibility of processing options it affords. Downloading the logs to a local machine for analysis is a bit inelegant; since the logs are already “in the cloud” it is preferable to access them in a searchable manner via a web browser. CloudWatch is a product seemingly tailor made to solve this problem but unfortunately there is no turnkey solution to import access logs from S3. Luckily, it’s not too difficult to roll your own.


Generate Yearly and Monthly Archive Pages with Hugo Sections

This blog, which is now generated with Hugo, uses the permalink structure /:year/:month/:slug (the slug is a url-safe version of the title). There are also “archive” pages, which list the articles posted in a given month or year. These pages have a permalink structure that compliments the post permalinks: /:year/:month and /:year respectively.

Back when this blog was generated with Jekyll, I used a plugin to generate the archive pages but there is no such mechanism in Hugo. It is possible to use taxonomies to accomplish this, but it involves defining a taxonomy for each year in the Hugo config, creating a corresponding layout and also adding redundant frontmatter to each post.

As an alternative, I created 2 new “sections” (top level subfolders in the content folder): archy and archm. archy contains one file per year and archm contains one file per month. These files can be generated automatically (see below).


Write Your Own Coda Plug-In

My love for Coda knows no bounds. Except maybe the bounds of the tab bar.

One especially sprawling project at work brought the problem to a head: switching between all the files had simply become too tedious. Rather than desert Coda (perish the thought) I decided to whip up a plug-in called Wing Man. Panic has a pretty good how to on the basics of plug-in building so I won’t rehash all of that here.


Debian: Beep at Login Prompt

A spare PC that’s been kicking around my apartment recently got a fresh dose of Lenny.

As a headless machine, it’s handy to have the system beep when it reaches the log in prompt to announce that it’s ready to accept SSH connections.


Stop Remote Desktop from Locking the Host

Closing a Windows Remote Desktop connection leaves the host machine locked, but it is possible to create a shortcut that will close the session without locking the screen.


Google Voice + Fluid (SSB)

Google Voice Icon
Google Voice Icon by malabooboo

Google Voice is the eighth wonder of the world.

Mac users lucky enough to have secured an invite might consider creating a Fluid site specific browser to carve out some space for Google Voice on the Dock.

An SSB is quite useful in itself, but even more so when a few CSS tweaks are applied.


Downgrading to Flash Player 9 on Mac OS X

If you’ve noticed Safari crashing more often lately on your PowerPC Mac, you’re not alone.

At first I blamed the Verizon cell data coverage in Las Vegas for the stuttering video and dropped frames that I noticed when tuning into TWiT Live for their CES Coverage, but when the browser started locking up completely I knew it had to be Flash.


SlingPlayer iPhone App Rated 12+?

SlingPlayer Mobile Rating Screenshot
SlingPlayer Mobile App Store Screenshot

After excitedly unwrapping a Slingbox SOLO this holiday season, I decided to have a look at the SlingPlayer Mobile iPhone app. As you might expect, the app lets you watch your SlingBox content on Apple touch devices.

Much has been made of the steep price ($30!) and the fact that AT&T crippled the software by making it WiFi only, but it was the rating for the app on the iTunes Store that caught my eye.