Sharing Our Passion For Technology
& continuous learning
  • Event Sourcing

    Software development teams are responsible for building a wide variety of software to solve a wide variety of problems. Many of these software development projects implement business flows that have defined activities completed by specific parties. An architecture that implements these flows by mixing validation logic with record updates becomes...
  • Node Reference - Conclusion

    Prerequisites This article builds on the prior article: The “Join” Problem. Conclusion In this series, we walked the reader through the considerations of building a production-ready microservice. More important than the tools we used (e.x. NodeJS, AWS) were the questions we asked. You may choose different tools and libraries for...
  • Node Reference - Change Events

    The “Join” Problem Modern applications no longer exist in a silo. They need to integrate with other systems within the organization. In a microservice architecture, this is even more valid since very few business processes can be completed by involving only one service. Let us suppose that our product service...
  • Node Reference - Delete

    Prerequisites This article builds on the prior article: Node Reference - History. Deleting Humans make mistakes. Your users are humans, and sometimes they will create a product by mistake and will need to delete it. For that scenario, we need a DELETE REST endpoint. There are two main classes of...
  • Node Reference - History

    Prerequisites This article builds on the prior article: Patch. Tracking History The way our service is currently built, all modifications (PATCH requests) happen in-place to records in DynamoDB. It is common in most production applications that someone will want to know the history of a record. A business user may...
  • Node Reference - Patch Product

    Prerequisites This article builds on the prior article: Node Reference - Get Product by Id. Supporting Updates Sooner or later, there will be a need to modify a product. Except in the case of immutable data stores, rarely are there entities that are truely “insert only”. In order to support...
  • Node Reference - Get Product by Id

    Prerequisites This article builds on the prior article: Node Reference - Listing. Add Get By Id At this point, we have only one way to get Products. We have to list all products and page through them to find the one we want. However, a lot of the time, a...
  • Node Reference - List Products

    Prerequisites This article builds on the prior article: Node Reference - Monitoring. Add listing Clients of our service will need a way to find products. For that, we need a product listing service. DynamoDB provides an operation for listing the contents of a table called a ‘scan’. (As a table...
  • Node Reference - Introduction

    Summary Most AWS microservice articles only show you the tip of the iceberg. We certainly can’t blame the article authors. For starters, the SAM squirrel mascot is so darned cute! But more importantly, we all know that standing up a production web service involves far more considerations than you could...
  • Hard Drive Sustainability

    Your hard drive with very important family pictures has just failed, and now all data is lost forever. Could you have prevented this from happening? This article is a quick walk though of how to detect hard drive errors before the disk is unusable. At the end of this article, you...
  • How RAID 5 Works at a Bitwise Level

    RAID 5 is a pretty magical thing overall, though a large portion of its magic lies in how it works on a bitwise level. But before I get into the bitwise sorcery, I’d like to briefly explain what RAID5 is. RAID stands for Redundant Array of Inexpensive (or Independent) Disks....
  • The Easiest Way to Organize Zimbra Email

    If you’re like me, receiving 30-40 emails is par for the day. Because Source Allies provides consulting services for companies wishing to implement or better take advantage of Zimbra, it is also the mail server we use at our company. Zimbra has incredible search capabilities, but my OCD tendencies still...
  • Ubuntu Live Network Boot using PXE

    Requirements Linux server with NFS (or compatible) TFTP server DHCP server syslinux / pxelinux files To simplify these instructions we are going to make the following assumptions. DHCP server is 10.0.0.2 TFTP server is 10.0.0.3 NFS is a Ubuntu server at 10.0.0.4 In reality it’s likely your TFTP and NFS...
  • Creating Services using SMF in OpenSolaris

    OpenSolaris has by far, one of the best service management interfaces that I have used. Below I am going to go over a simple way to turn in shell script into a service managed by the OS. Step 1: Create the Service Manifest <?xml version='1.0'?>; <!DOCTYPE service_bundle SYSTEM '/usr/share/lib/xml/dtd/service_bundle.dtd.1'> <service_bundle...
  • Who Bound Port 8080

    "Port 8080 required by Tomcat v6.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s)." I have...
  • Unplugging an LVM partitioned USB drive

    Recently I had the heartbreaking experience of having to reboot a Linux server. Normal usage should almost never require you to reboot the OS like you have to so frequently in Windows. In this case I had an external USB drive partitioned with LVM humming along on a Linux server....
  • Apache/Tomcat with Failover and Load Balancing in 20 minutes or less...

    In order to get this done, you’ll need Apache, Tomcat, and the MOD_JK connector library. I’ve included the Windows binaries below, as I’m writing this blog post from a Windows machine. Feel free to swap out these downloads with whatever RPM, YAST, APT, etc. commands you want. Also, you’ll need...
  • GlusterFS Replication for Clustering

    I recently was searching for a way to simulate shared physical storage in a VPS environment for clustering purposes. In an enterprise data center we can expect some type of SAN available to provide shared physical storage. GFS is a simple solution in this case to create a shared file system that...
  • Using Conga Web Configuration with Red Hat Cluster Suite

    Overview Red Hat Cluster Suite provides high availability and clustered storage for RHEL platforms. Unfortunately the configuration management for each node can be tedious as the /etc/cluster/cluster.conf file must be copied to each as changes are made.  Conga makes life a little simpler. http://sourceware.org/cluster/conga/ Conga provides a client/server architecture for cluster...
  • Open Source Router, Proprietary Cake

    Keeping with SAI’s proclivity toward open source software, I present to you Vyatta. Vyatta is a small company with the goal of taking down Cisco by offering an open source router that can run on standard x86 hardware. With the prevalence of virtualization, one could realistically open a branch office using just...
  • Open Source Enterprise Search

    Has locating information across a multitude of systems on your corporate network finally made you consider an enterprise search appliance? Our company has a number of systems in place designed to capture corporate knowledge and subject matter expertise. Once it became too time consuming to find information across these systems...
  • Internet Routing Tables Reaches 300,000

    A few weeks ago the global routing table reached its 300,000th route.  Below is a graph showing the exponential growth over the last 15 years. BGP Table (Yearly) Let’s do a little math: Assuming all 4.3 billion IPv4 addresses are used (which isn’t quite true), each route represents approximately 4,294,967,296...