Just a collection of stuff (mostly from my old blog)

Keith’s Adventures in DynamoDB Land


After reading the awesome DynamoDBBook from Alex DeBrie, I was prompted to fix a long running design issue with Klayers (a separate project I maintain). Like everybody else that dives into DynamoDB headfirst, I made the mistake of using multiple tables, one for each data entity. After all, a single database consists of multiple tables — so DynamoDB would logically involve multiple DynamoDB...

Playing with files within the memory of Lambda function


A lambda function is a like a little island, surrounded by network. Unlike Fargate containers, of EC2 instances, they do not have EFS, EBS or some other fast storage support. Everything that goes into a lambda, goes in via the network interface (and network only). And hence, since Lambda’s are ephemeral, everything going in and out of the lambda has to transverse that network...



The system, which was introduced on the first day of the 2020 school session yesterday, takes only two seconds to scan a pupil’s face before his personal information, such as full name, pupil number and class, is stored into the school’s database A school in Johor became the first in...

My 2020 resolution: Pay for news!


This year I resolve to support the media that I like, i.e start paying for content I’ve been consuming for free all this time. I believe that if we want better media, we need to start paying for it, and it’s not a matter of quality content, a free and fair media, is an absolute necessity for democracy to operate — after all, people can’t make informed choices if they...

Multi-Accounts for AWS with Google '+' emails.


Last week, I launched a new pipeline for Klayers to build Python3.8 Lambda layers in addition to Python3.7. For this, I needed a separate pipeline because not only is it a new runtime, but under the hood this Lambda uses a new Operating System (Amazon Linux 2 vs. Amazon Linux 1) So I took the opportunity to make things right from an account hierarchy perspective. Klayers for Python3.7 lived in...

Android TV boxes


Android TV boxes, are computers that stream content from the internet onto your TV. The difference between them and your smart-phone is that it has a HDMI connector to your TV, and it usually comes pre-loaded with software to illegally stream content. While the boxes themselves, are general purpose computers running Android (the most popular OS today), the real focus of any regulation should be...

2018 in Review


2018 in review I started the year building out, a site that audits websites for TLS implementation. Overall I curated a list of ~5000 Malaysian government domains through various OSINT and enumeration techniques and now use that list to scan them daily. The project stalled around Jun/July, and it’s basically on auto-pilot till I figure out what to do. The scans still...

Shutting down sayakenahack


Shutting Down!! Sayakenahack was undoubtedly the highlight of my 2017. If you’ve come from, I’m sorry but I’ve shutdown the site :(. I learnt so much from it, and it was even my ticket for presenting at Hack In the Box Singapore … But all good things must come to an end, there’s no point having a site that does nothing but consume my hosting charges...

Introducing potassium-40


Over the past few weeks, I’ve been toying with lambda functions and thinking about using them for more than just APIs. I think people miss the most interesting aspect of serverless functions — namely that they’re massively parallel capability, which can do a lot more than just run APIs or respond to events. There’s 2-ways AWS let’s you run lambdas, either via...

GitHub webhooks with Serverless


GitHub Webhooks with Serverless

Just because you have webhook, doesn’t mean you need a webserver.

With serverless AWS Lambdas you’ve got a free (as in beer) and always on ability to receive webhooks callbacks without the need for pesky servers. In this post, I’ll setup a serverless solution to accept incoming POST from a GitHub webhook.