Tinkering with Ubiquiti EdgeRouter Lite

I have been tinkering with my home network for a while now. Over time I have settled on some requirements:

  • Low power usage
  • Almost zero noise
  • Three or more gigabit (or higher) network interfaces
  • Support for multiple operating systems (OS)
  • Optional but highly desired: supported by FreeBSD, OpenBSD, or NetBSD

Ubiquiti EdgeRouter Lite (ERL for short) is a small and lightweight device that fits all these requirements.

Read more …

How I "Adopted" Seagull

I don't work with Seagull anymore. I don't know how to develop in C++. I have absolutely no interest in maintaining this open source project. Yet when you Google seagull linux or seagull protocol my GitHub repo for the project shows up on the first page. How did I end up in this situation?

Read more …

Role of Judiciary in Pakistan

Judiciary in Pakistan has seldom -- if ever -- appeared to be independent and empowered. All major national events involving the Supreme Court have ended with egg on the faces of justices. From the hanging of Zulfiqar Ali Bhutto to the widespread fraud in 2013 elections, judges have opted to placate the most powerful figures in national politics. Justice makes way for political gain. Is this about to change when the new Chief Justice of Pakistan's Supreme Court takes oath on December 31, 2016?

Read more …

Unix Shell Programming: Lessons Learned

I have been writing tiny shell scripts for many years now. It was always with the help of DuckDuckGo searches and places like StackOverflow. I never grasped the history, features, syntax, etc. of shells. This all changed when I got serious about learning Unix shell programming.

Read more …

Follow Conventions to Build Infrastructure

Any sufficiently large software system depends on a lot of third-party artifacts, from operating systems to libraries to pre-built packages and everything else in between. For example, to deploy a single web server running a Django application requires a developer to pull in a Linux OS, Python, Django, Gunicorn, nginx, etc. Whether this complete package is deployed on a VM under your control or your customers', you want to follow conventions in the entire lifecycle of the application.

Read more …

Lessons from a Releng Sprint

I will recount the original CI process and the work that went into refactoring it. Although my role is quality assurance (QA) I had to don my release engineering (releng) hat for a few sprints. I could have let things be as they were but they were a hindrance to my work of testing and test automation. Rather than wait for the DevOps team to tackle the technical debt in our releng processes as time permitted, I decided to take this head-on as "step zero" in the long list of steps needed to make our continuous integration (CI) process efficient and fast.

Read more …

Port Shell Scripts to Python

make is a legendary tool to build software and is equally notorious at the same time. It is really good at what it does and has been forked many times to fix its many flaws and papercuts.

There are alternatives implemented with or without custom domain specific languages (DSL). Some are implemented in Python, such as SCons, pymake, Waf, BuildIt, and Invoke. Some are implemented in other languages like cmake, RAKE, Ninja, and Blur. The question to ask is: which would you use to solve what problems?

Read more …

What About DevScale?

The word DevScale has been rattling in my head for a while now. With my increasing interest in Raspberry Pi, FreeBSD, and Erlang -- combined with the rise in Internet of Things (IoT) -- the word DevScale has started taking a bit more shape.

Read more …

Lessons the West Indies Cricket Teams Taught Us

West Indies are World T20 Champions yet again. Only this time they won in three different tournaments: Women, Men, and Under-19. This is unprecedented success for any country, let alone a collective of countries that form a single team.

Read more …

Package and Distribute Your Test Suite

Automated test suites must be packaged for installation and distributed just like your other build artifacts. They are not some special things that live in a code repository (repo) separate from the rest of your code.

My team was writing tests and keeping them all in a git repo. The repo would be cloned and then PyTest would run these tests. All users of tests - from developers to Continuous Integration (CI) and everyone else in between - would run steps akin to:

git clone git@github.com:username/testrepo.git
cd testrepo
git checkout main
pip install -r requirements.txt
py.test tests/

This worked for a while but was not a good fit as time progressed for these reasons:

Read more …