RSSAmplifier

Blog

Studio Cliffano

Recent content on Studio Cliffano

blog.cliffano.comRSS feed ↗147 posts

Latest posts

Meet Dave The Sumobot

During Little Godzilla’s term 3 school holidays back in October 2024, he joined a 2-day camp where the kids learnt “coding”. I later figured out they they learnt to program an Edison using EdScratch . 
 He wasn’t initially enthusiastic about this coding camp because he wanted to do an animation camp instead but the schedule didn’t work out for us. So I…

Home Studio v0.5

First post since 2018! 
 This long hiatus has been unplanned since the last blog post . This is the result of raising a young child, combined with busier-than-ever work, topped off with COVID-19 . It was challenging to say the least, the toughest part being having to work on tough projects from home while assisting remote preschooler classes in parallel. Nevertheless… we made it through…

Tech Talks


 OpenAPI Generator The Babel Fish of The API World (Paris) - slides | video apidays Live Paris 2021 
 OpenAPI Generator The Babel Fish of The API World (Australia) - slides | video apidays Live Australia 2021 
 A Journey To Improve Infrastructure Compliance With InSpec - slides | video ChefConf ‘21 Online 
 Swagger AEM - An OpenAPI Specification for AEM - slides | video…

Adobe Experience Cloud Meetup - 5th Edition

Wayyy back in May 2018, I presented a talk at Adobe Experience Cloud Meetup - 5th Edition titled AEM OpenCloud . 
 AEM OpenCloud is an open source cloud platform for running Adobe Experience Manager environments on Amazon Web Services . This provides the bells and whistles in terms of auto recovery, failover, blue green deployment, repository migration, back up management, content health…

Little Godzilla Underground Robot Fighting

Milestone: At 30 months old, my son figured out that there’s a future in running an underground robot fighting club. 


Adobe Immerse '18

Back in June 2018 (I should really really really work on my blogging), I presented a talk at Adobe Immerse ‘18 titled Beyond AEM Curl Commands . This is basically the culmination of my effort in tackling the widespread (mis)use of cURL commands for provisioning Adobe Experience Manager environments, and the lack of official AEM web API. 
 This event was promoted as “The global…

ANZ Technology Unconference 2017

Back in November 2017 (I should really work on my blogging), I presented a talk titled How To Play Music On A Vacuum Cleaner at ANZ Technology Unconference 2017 . I gave the audience a walkthrough of my experience with trying to fix a broken circle-dancing Roomba which ended up with utilising the Roomba vacuum cleaner as a music player, some sound tuning tips included. 
 
 Lo and behold,…

Feedpaper in 2017

I hastily wrote Feedpaper in 2011 (was called FeedTouch back then) as an effort to come up with the fastest way for me to speed-read the news from a curated list of websites. Imagine going to the good old brick and mortar book shop and skimmed your favourite newspapers as fast as possible. 
 Lo and behold, it is still up and running in 2017, and it still is the fastest way for me to consume…

Little Godzilla Meets Robot

Milestone: Introduced my son to a robot for the first time when he was 18 months old. 


Jenkins World 2017

I was in San Francisco this week for Jenkins World 2017 where I also gave a talk titled Bringing Jenkins Remote Access API To The Masses . 
 
 Took this opportunity to have few chats in person to a number of people whom I had previously only known from Jenkins/Hudson IRC channel and mailing list. It was also interesting to talk to other Jenkins users with varying use cases and…

Streaming Swagger CodeGen Ruby Client File Download

Few days ago I received an error report about a number of file download failures on one of the applications that I was working on. And after some troubleshooting effort, I found out that the failures happened only on files with size ~2Gb or greater. A colleague also dug up this important clue in one of the log files: failed to allocate memory , but there was no stack trace to be found. Great…

Color Harmony By Hideaki Chijiiwa

My dad is visiting Melbourne and he brought his 1987 copy of Hideaki Chijiiwa’s Color Harmony - A guide to creative color combinations for me to keep. This is one of the many books from his home office’s library in Jakarta which I flipped through far too many times during my childhood. 
 
 This colour combinations knowledge helped me with my first few gigs as a front end…

Adobe Marketing Cloud Community Expo

With the same squad as AWS Chatbot Hackathon , I also participated in another hackathon as part of Adobe Marketing Cloud Community Expo (AMCCE) . 
 We presented Swagger AEM , an ecosystem of AEM API clients that Shine Solutions recently open sourced. The idea is to build an OpenAPI specification for AEM, and then generate a number of API clients in various languages like Ruby, Python, Java,…

AWS Serverless Chatbot Hackathon

Last month me and two buddies from work, Michael Diender and Stephen Shim, participated in AWS Serverless Chatbot Hackathon hosted by Devpost. This hackathon was announced by Jeff Barr on AWS Blog on August 10th this year. 
 Even though they allowed about 1.5 months submission period, our team only spent 8 hours for each person in order to build two entries due to our busy schedules: Chaos…

Some Projects Handover

Due to lack of coding time outside of work hours, I’ve handed some projects over to these intrepid volunteers: 
 
 Repoman is now maintained by Bastian Krol 
 SiteMonitor Plugin is now maintained by Francisco Hernández Suárez 
 
 Some other Jenkins plugins had organically been inherited by the community: 
 
 ChuckNorris Plugin with Baptiste Mathus 
 NodeJS…

Custom AWS AMIs Dependency Tree

As awesome as those AMIs from AWS Marketplace are, it’s often not possible to use most of them AS-IS at various organisations due to policies that enforce: 
 
 Mandated operating system with specific distro and version 
 Blacklisted operating system packages for security reasons 
 Whitelisted versions of various tech stacks, tools, libraries, etc 
 
 I’ve never…

My Ninja Blocks Setup

Now that the fine folks at Ninja Blocks already started shipping their next generation IoT controller, the Ninja Sphere, I better write about my old school Ninja Blocks setup before it gets too late. 
 First off is the Watts Clever socket that I used with Ninja rules to switch a table lamp on at 8.30pm and then switch it off at 10.30pm during weekdays. 
 
 The second socket is used to…

Wrapping AEM cURL Commands With Python

If you ever had the experience (no pun) of using Adobe Experience Manager (AEM), you would already know that curl commands are arguably the de facto way of interacting with AEM over http. 
 Whenever you google for various AEM /CQ HOWTOs, it’s easy to find examples with curl commands: 
 
 
 Adobe CQ- Is it possible to execute CURL command? 
 
 
 How to create pages…

Human-Readable Ansible Playbook Log Output Using Callback Plugin

One problem I’ve had with Ansible playbook since its early 0.x days is with its verbose log output. Jsonified by default, it’s hard to read, and pretty much impossible for a human to review when its stdout or stderr contains tens/hundreds of lines combined into one lengthy string. 
 Here’s how it looks like: 
 
 changed: [ gennou.local ] => { 'changed' : true , 'cmd'…

Roombox - Node Knockout 2013

A few weeks ago I participated in Node Knockout 2013 (NKO4), a 48-hour hackathon with 385 teams competing for the top spot in 7 categories (team, solo, innovation, design, utility/fun, completeness, and popularity). 
 And here’s a video of what I hacked: Roombox , a Roomba vacuum cleaner turned into a boombox using node.js . This demo shows the Roomba playing Rocky theme, Beverly Hills…

NodeUp 53: NodeUp Listeners On NodeUp

About a month ago, I joined D-Shaw, Nizar Khalife, Erik Isaksen, and Matt Creager on NodeUp 53 where we discussed about NodeUp podcast and node.js community from NodeUp listeners point of view, and I also talked a bit about Australia, kangaroos, and node . Thanks to Rodd Vagg for pinging me about this particular episode. 
 Recording the show itself was an interesting experience :). For one, it…

An Old Dryer, A Watts Clever, and A Ninja Blocks

This was another quick weekend hack to fix my old dryer’s busted timer problem (busted timer = having to stay around when it’s time to switch off the dryer). 
 
 Step one was to use Watts Clever Easy-off Remote Control Socket which allowed me to switch the power on and off remotely. This product comes with a remote control which saved me from having to get out of the house to…

Monitor Jenkins From The Terminal

Here’s how I’ve been monitoring my Jenkins setup… 
 
 A combination of Nestor + watch + Terminator » one view for monitoring failing builds, one view for executors status, and one view for job queue. A summary of Jenkins status info on a small screen estate that I can place at the corner of my workspace. 
 If you want to set up something similar, here are the…

DataGen Workers Optimisation

I released DataGen v0.0.9 during lunch break yesterday. This version includes the support to limit how many workers can run concurrently, which is something that I’ve always wanted to add since day one. I finally got the time to do it last weekend, and it turned out to be an easy task thanks to Rod Vagg ’s worker-farm module. 
 Why is this necessary? 
 The problem with previous…

Database Sharding Be Like

Sometimes I get the feeling that people think database sharding is like flipping a switch. 
 
 In reality, I think it’s more like tuning a set of dials.

Jenkins Build Slaves On A Budget

About half a year ago our team started working on a project with micro-service architecture , which means we had a lot of little applications to build as part of our delivery pipeline. One of the reasons why we opted to use this architecture was to gain the ability to replace a piece of component without having to rebuild the whole system, hence enabling faster feedback loop by releasing small…

CITCON 2013

I attended CITCON 2013 in Sydney last February. This year’s sessions covered more non-technical issues compared to CITCON 2010 . Two of the more interesting topics for me were on how devops movement could potentially discourage collaboration, and on how large non-tech companies try and still fail to implement continuous delivery. 
 Those were some of the problems that I’ve been…

Introducing Repoman

Q: _How do you clone 30 repositories from your personal GitHub accounts and 150 repositories from your organisation GitHub accounts in just one line?
_
 A: repoman --github-user myuser1,myuser2 --github-org myorg1,myorg2 config && repoman init 
 Q: _How do you execute a set of commands against all repositories in just one line?
_
 A: repoman exec 'git stash && git pull --rebase…

How To Incorrectly Track The Progress Of A Project

The next time a manager asks you the percentage progress of a task, make sure you reply with a float rounded to 2 decimal places, and say it with full confidence. 
 
 Sometime in mid 2000s, the manager of a project I was working on had to take an emergency leave, so another manager filled in for him. It was an agile project, but somehow this other manager managed to come up with a magical…

Voice-Controlled Lamp Using Ninja Blocks + MacBook

Here’s a video of my latest quick weekend hack, using voice to switch a lamp on and off: 
 
 
 

 Ok, so it’s actually a combination of Watts Clever + Ninja Blocks + Node.js + Automator + Speakable Items . Speakable Items takes the voice commands via MacBook’s internal microphone, then calls the Automator applications, which then runs a Node.js script (which…

Jenkins Build Status On Ninja Blocks RGB LED

Nestor v0.1.2 is out and one of its new features is nestor ninja for monitoring Jenkins and displaying the latest build status on Ninja Blocks RGB LED device (if you have a block, it&rsquo;s the ninja&rsquo;s eyes). &#xA; Here&rsquo;s a usage example:&#xA; export JENKINS_URL=<url> export NINJABLOCKS_TOKEN=<token_from_https://a.ninja.is/hacking> nestor ninja &#xA; Red for build failure, green for…

Akio Morita On Management

For the past few weeks, I&rsquo;ve been reading Made In Japan , a story about Akio Morita &rsquo;s life and the first three decades since the founding of Sony Corporation. &#xA; I haven&rsquo;t finished this book, but the last chapter titled &lsquo;On Management&rsquo; was very interesting and it struck a chord with me. I&rsquo;ve seen enough management decisions that were short sighted and proven…

Private NPM Registry Replicator Document

For my future reference and to help others trying to set up a private NPM registry which sits behind a [corporate] proxy and requires authenticated CouchDB admin access, here&rsquo;s the replicator document that I ended up using: &#xA; {&#xA; '_id' : 'registry' ,&#xA; 'source' : 'http://isaacs.iriscouch.com/registry/' ,&#xA; 'target' : 'registry' ,&#xA; 'user_ctx' : {&#xA; 'name' :…

The Difference Between Dev And Ops

You can tell whether someone is an ops or a dev from the way he/she stops a program&hellip; &#xA;

Home Studio v0.3

This favourite corner of mine in the living room is the latest revision of my home studio.&#xA;My main computer for the past couple of years has been an 11" MacBook Air, codename: kakashi . &#xA; &#xA; The study desk had been disassembled and now rests in the garage.

Roomba Twist Fix Attempt

A few months ago my awesome Roomba vacuum cleaner started dancing instead of cleaning the carpet like it&rsquo;s supposed to. It reversed, then rotated to the right, left, right, left, all the time. I call it &lsquo;doing the Twist&rsquo; (Chubby Checker&rsquo;s). &#xA; The closest explanation I could find on the Internet regarding this problem was something that&rsquo;s commonly known as Roomba…

100 Kiva Loans Later

Today I made my 100th micro loan on Kiva.org . I joined Kiva in July 2007 and today I have $275 across 15 active loans, so I&rsquo;m one of those people with a minimal fund who re-loan as soon as there&rsquo;s enough repayment. &#xA; Here are some stats from my portfolio: &#xA; &#xA; The interesting numbers here are the 1.62% delinquency rate and 0.68% default rate. Yep , default happens in…

DevOps Collaboration Patterns

The good, the bad, and the ugly. &#xA;

Sapi, A Node.js Client For Sensis API

We had a hack day at Sensis a couple of days ago where I ended up writing Sapi , a Node.js client for Sensis API . This module is now available on NPM . &#xA; The latest version (v0.0.5) was tested against Sensis API open beta version ob-20110511. I think I&rsquo;ve got all of its documented features covered. Let me know if I missed anything. &#xA; Sapi module provides a chainable interface to…

DataGen: Generate Large Test Data Files - Like A Boss

A couple of months ago I was doing some volume and performance testing against an application that was expecting a 500% data growth, which meant I had to generate lots and lots of dummy data to test whether the storage would hold up and whether the application itself would still perform well. &#xA; I quickly came up with a script that loops through N times, generates dummy data, and creates an XML…

Publishing Node.js Module To Ivy Repository

Let me guess what you&rsquo;re going to say in 3&hellip; 2&hellip; 1&hellip; &#xA; **WTF??? Why would anyone want to do that?** &#xA; Right? &#xA; Some of us don&rsquo;t have the luxury of a local NPM repository , while some others have their delivery pipeline tightly integrated to an Ivy repository . &#xA; So, for those few who are stuck with the unholy union of Node.js and Apache Ivy, you can…

Apple Facts 95 - PowerBook, MessagePad

Look what I found at my dad&rsquo;s home office in Jakarta? &#xA; &#xA; Apple Facts 8.95 - a concise guide to Apple products offered worldwide. &#xA; &#xA; I didn&rsquo;t know Apple used to have gazillion of products. Apple printers? &#xA; &#xA; Why Macintosh? I started using an Apple MacBook Pro about 2 years ago, and after 6 months I was convinced that it was by far the most productive…

Australia According To NodeUp

I&rsquo;m a fan of NodeUp , a podcast of all things Node.js-related, and a great source of thoughts/opinions from the who&rsquo;s who in Node.js community. &#xA; Putting the serious stuff aside, the show has a running joke where the hosts put on their best effort to prop up Bislr , one of the show&rsquo;s sponsors, by saying hilarious things about Australia. And it actually worked, us Australians…

OSDC 2011

I went to Canberra this week to attend Open Source Developers Conference 2011 and also to give a talk titled Continuous Delivery Using Jenkins . OSDC ran for 3 days, and was held at Australian National University. &#xA; &#xA; OSDC 2011 was very well organised, much thanks to the organisers: Evan Leybourn, Gavin Jackson, and the volunteers squad. It was an interesting grass roots conference with…

Use Jenkins On Firefox By Talking To Your Mac

I was watching I, Robot the other day, and thought how great it would be to use voice to control Jenkins. &#xA; So last night I did a quick read , and then recorded this video.&#xA;This used Mac Speech Recognition, so in theory I talked to my Mac, which then opened Jenkins pages on Firefox. Here are the commands: &#xA; &#xA; &#xA; &lsquo;Open Jenkins&rsquo;: opens Jenkins home page (dashboard)…

Nestor - A Faster And Simpler CLI For Jenkins

It all started because at one point I was using a rather resource-challenged machine running Windows and an Ubuntu VM at the same time, and Firefox froze every so often, rendering Jenkins BuildMonitor and Jenkins web interface useless most of the time. So I looked for an alternative and gave Jenkins CLI a go. &#xA; Like most Java applications, Jenkins built-in CLI also suffers from slow start up…

Mamiya RB67

My earliest memory of real photography was this Mamiya camera my dad used for his work. My dad was an entrepreneur and started a small advertising company in the 80s, which means I grew up surrounded by tons of printing, design, photography, and various other creative works. &#xA; &#xA; &#xA; &#xA; The above pictures were taken at the garage of my parents&rsquo; house back in Jakarta, Indonesia,…

Node.js Presentations

I gave two Node.js-related talks within the past week. &#xA; The first one was titled &ldquo;From Java To Node.js&rdquo;, at Shine Technologies &rsquo; developers meeting on August 5th, 2011. &#xA; &#xA; &#xA;&#xA; The second one was titled &ldquo;JavaScript Everywhere From Nose To Tail&rdquo;, at Melbourne JavaScript usergroup on August 10th, 2011, with Carl Husselbee from Sensis . &#xA; &#xA;…

Using Node.js To Discover Jenkins On The Network

I&rsquo;ve just added a new feature to Nestor to discover Jenkins on the network, and as it turned out, it&rsquo;s pretty simple to do thanks to Node.js Datagram sockets API (hat tip Paul Querna ). &#xA; Jenkins has a discovery feature as part of its remote access API where it listens on UDP port 33848, and whenever it receives a message, Jenkins will respond with an XML containing the…

Kelly Johnson In Skunk Works

I still have 80 pages to go on Skunk Works , but this book has been one of the best I&rsquo;ve ever read. &#xA; The story revolves around an elite group within Lockheed Martin called Skunk Works, who worked on top secret projects and engineered some of the most famous aircraft in the history of aviation. The book was authored by Ben Rich , Skunk Works second director, and central to the story was…