<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Golang on Experiment, Fail, Learn, Repeat</title>
    <link>https://www.hairizuan.com/tags/golang/</link>
    <description>Recent content in Golang on Experiment, Fail, Learn, Repeat</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Copyright © 2026 Hairizuan Noorazman</copyright>
    <lastBuildDate>Sat, 02 May 2026 23:13:05 +0800</lastBuildDate><atom:link href="https://www.hairizuan.com/tags/golang/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Adding SSO to MCP Grafana Server</title>
      <link>https://www.hairizuan.com/adding-sso-to-mcp-grafana-server/</link>
      <pubDate>Mon, 25 May 2026 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/adding-sso-to-mcp-grafana-server/</guid>
      <description>&lt;p&gt;The MCP Grafana server previously relied on static API keys or basic auth for authenticating requests to Grafana. This works fine for local development or single-user setups, but falls apart once you have multiple users who each need their own Grafana permissions. Passing around shared API keys is a security concern and means everyone operates with the same access level regardless of their actual role.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building a code assessment tool but in Kubernetes</title>
      <link>https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/</link>
      <pubDate>Sun, 10 Nov 2024 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/</guid>
      <description>&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#container-based-security-measures&#34; &gt;Container based security measures&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#smaller-images-for-code-execution-platform&#34; &gt;Smaller images for code execution platform&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#not-running-the-container-as-root&#34; &gt;Not running the container as root&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#kubernetes-related&#34; &gt;Kubernetes related&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#run-the-deployment-in-different-namespace&#34; &gt;Run the deployment in different namespace&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#setting-up-a-new-service-account-in-kubernetes&#34; &gt;Setting up a new Service account in kubernetes&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#ensuring-service-account-token-is-not-mounted-in-potentially-vulnerable-pods&#34; &gt;Ensuring service account token is not mounted in potentially vulnerable pods&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#ensuring-that-the-container-is-started-with-non-root-access&#34; &gt;Ensuring that the container is started with non-root access&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#ensuring-resource-limits-are-set&#34; &gt;Ensuring resource limits are set&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#set-security-context&#34; &gt;Set security context&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#setting-network-policy&#34; &gt;Setting network policy&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#using-a-stricter-seccompapparmor-profile&#34; &gt;Using a stricter seccomp/apparmor profile&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#tool-related&#34; &gt;Tool related&lt;/a&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#ensure-limited-logs-sniffed&#34; &gt;Ensure limited logs sniffed&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#ensure-that-there-is-a-time-limit-of-code-executions&#34; &gt;Ensure that there is a time limit of code executions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.hairizuan.com/building-a-code-assessment-tool-but-in-kubernetes/#future-efforts&#34; &gt;Future efforts&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I had previously attempted to build a code assessment tool in docker. That involves doing the following:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Nginx as API Gateway - focusing on auth_request directive</title>
      <link>https://www.hairizuan.com/nginx-as-api-gateway-focusing-on-auth_request-directive/</link>
      <pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/nginx-as-api-gateway-focusing-on-auth_request-directive/</guid>
      <description>&lt;p&gt;On virtual machine&#xA;How to &amp;ldquo;protect&amp;rdquo; api requests&#xA;&lt;a href=&#34;https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://www.nginx.com/blog/deploying-nginx-plus-as-an-api-gateway-part-1/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Mostly is the &lt;code&gt;auth_request&lt;/code&gt; directive&lt;/p&gt;&#xA;&lt;p&gt;Microservices are a software architectural style that structures an application as a collection of loosely coupled, independently deployable services. Each service in a microservices architecture represents a specific business capability and communicates with other services through well-defined APIs (Application Programming Interfaces). These services are designed to be small, focused, and can be developed, deployed, and scaled independently. Its a somewhat common architectural pattern that many companies go to when it comes to scaling out their development teams to build out their product.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Cloud Run without Serverless VPC Access Connectors but via VPC</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-cloud-run-without-serverless-vpc-access-connectors-but-via-vpc/</link>
      <pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-cloud-run-without-serverless-vpc-access-connectors-but-via-vpc/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Previously, Serverless VPC Access connector is a commonly used solution to connect Cloud Run to Cloud SQL securely. This option is still available for use today but with all the previous blog posts that cover how we can:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Multiple Database Support - MySQL and SQLite support</title>
      <link>https://www.hairizuan.com/multiple-database-support-mysql-and-sqlite-support/</link>
      <pubDate>Wed, 04 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/multiple-database-support-mysql-and-sqlite-support/</guid>
      <description>&lt;p&gt;I intend to try out the &lt;a href=&#34;https://turso.tech/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Turso&lt;/a&gt; service in order to see if there is any other potential serverless database that would have pretty decent type of billing for small projects. There isn&amp;rsquo;t a proper SQL based database that can be billed in a similar way to the Cloud Run product - it&amp;rsquo;ll be great if the billing of the database product would be along the amount of data being stored or amount of read/write requests done for the data instead of the usual charged based on how long the instance being run (based on how Cloud SQL is billed).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Serverless Applications with Cloud Run with Serverless MySQL from PlanetScale</title>
      <link>https://www.hairizuan.com/serverless-applications-with-cloud-run-with-serverless-mysql-from-planetscale/</link>
      <pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/serverless-applications-with-cloud-run-with-serverless-mysql-from-planetscale/</guid>
      <description>&lt;p&gt;Serverless computing, as seen in platforms like Cloud Run or AWS Lambda, allows developers to run code without managing the underlying infrastructure. This is achieved by automatically scaling the resources based on the incoming requests, and users are billed based on the actual execution time and resources consumed during each function or container invocation.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Kubernetes Cluster without Cloud SQL Proxy</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-kubernetes-cluster-without-cloud-sql-proxy/</link>
      <pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-kubernetes-cluster-without-cloud-sql-proxy/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Similar to my previous blog post, we would usually be connecting Google Kubernetes Engine (GKE) clusters to Cloud SQL databases by using the Cloud SQL Proxy. However, we can now use  Private Service Connect, which allows for private communication between different Google Cloud services, similar to how we did for connecting our application in Google Compute Engine (VM) to a Cloud SQL instance.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Compute Engine without Cloud SQL Proxy</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-compute-engine-without-cloud-sql-proxy/</link>
      <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-compute-engine-without-cloud-sql-proxy/</guid>
      <description>&lt;p&gt;Traditionally, when connecting a Google Compute Engine instance to a Cloud SQL database, the Cloud SQL Proxy was commonly used to facilitate secure connections. The Cloud SQL Proxy acted as an intermediary between the application running on a Compute Engine instance and the Cloud SQL database. It helped to secure the connection by using the Cloud SQL IAM database authentication and provided a way to connect to the database using a Unix socket.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Storing Helm in Docker Registries</title>
      <link>https://www.hairizuan.com/storing-helm-in-docker-registries/</link>
      <pubDate>Wed, 23 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/storing-helm-in-docker-registries/</guid>
      <description>&lt;p&gt;We can apparently now store helm charts in Docker registries - this was made available via helm commands since v3.8.0. &lt;a href=&#34;https://helm.sh/docs/topics/registries/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://helm.sh/docs/topics/registries/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Now with that being available for use, we can now use it across a variety of storage mechanism (as compared in the past when the artifacts produced through it has to be managed in some of file system and would require some of index file to list all available helm charts available).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Python call Golang functions via Wasm/Wasi</title>
      <link>https://www.hairizuan.com/python-call-golang-functions-via-wasm/wasi/</link>
      <pubDate>Wed, 16 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/python-call-golang-functions-via-wasm/wasi/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Inspirations&#xA;    &lt;div id=&#34;inspirations&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#inspirations&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;While I was watching the following video of a talk by Richard Feldman: &lt;a href=&#34;https://www.youtube.com/watch?v=zX-kazAtX0c&amp;amp;ab_channel=ChariotSolutions&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://www.youtube.com/watch?v=zX-kazAtX0c&amp;ab_channel=ChariotSolutions&lt;/a&gt;. He was covering a pretty interesting concept/topic of how would one &amp;ldquo;slowly&amp;rdquo; migrate codebases from one language to another. Let&amp;rsquo;s say the codebase for an application is pretty large - how would we safely move it over and change it without increasing the deployment targets? Let&amp;rsquo;s say we&amp;rsquo;re not in microservices land and it is difficult for us to do the whole deployment for a whole other server just to begin the migration of languages.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Writing code to store items in memory with Golang but with maps</title>
      <link>https://www.hairizuan.com/writing-code-to-store-items-in-memory-with-golang-but-with-maps/</link>
      <pubDate>Wed, 09 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/writing-code-to-store-items-in-memory-with-golang-but-with-maps/</guid>
      <description>&lt;p&gt;The following blog post is a continuation of the previous blog post on &lt;a href=&#34;https://www.hairizuan.com/writing-code-to-store-items-in-memory-with-golang&#34; &gt;Writing code to store items in memory with Golang&lt;/a&gt;. The previous blog post was mostly to cover simpler cases where we storing something simple like data in a single array/slice. However, let&amp;rsquo;s say if we were to expand our use case to store in some sort of map instead (I know there is a concurrent hashmap version but let&amp;rsquo;s pretend it doesn&amp;rsquo;t exist here). How shall we build a store which uses hashmap to store key value pairs.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Writing code to store items in memory with Golang</title>
      <link>https://www.hairizuan.com/writing-code-to-store-items-in-memory-with-golang/</link>
      <pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/writing-code-to-store-items-in-memory-with-golang/</guid>
      <description>&lt;p&gt;I have a small tiny application that is a http api server that is meant to store data temporarily in memory. There is no need to persist data into any file or even database. The data that is to be stored doesn&amp;rsquo;t need to persist across restarts - hence, making it nonsensical to rely on files or databases.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Emulators for testing Google Cloud Datastore integration</title>
      <link>https://www.hairizuan.com/using-emulators-for-testing-google-cloud-datastore-integration/</link>
      <pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-emulators-for-testing-google-cloud-datastore-integration/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Motivation for finding emulator for Google Cloud Datastore&#xA;    &lt;div id=&#34;motivation-for-finding-emulator-for-google-cloud-datastore&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#motivation-for-finding-emulator-for-google-cloud-datastore&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Many applications out there in the real world would require the use of databases to persist data. In the cases where an application depends on databases such as mysql or mariadb or postresql, we can create some form of &amp;ldquo;staging&amp;rdquo; server where we can test that the application works as expected. Additionally, we can even test to make sure that any database migration works as well without too much issues - we can import in some of the data from production and import it into the staging environment to make sure that it works.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Heap datastructure with Slices/Arrays in Golang</title>
      <link>https://www.hairizuan.com/heap-datastructure-with-slices/arrays-in-golang/</link>
      <pubDate>Wed, 19 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/heap-datastructure-with-slices/arrays-in-golang/</guid>
      <description>&lt;p&gt;Part of the software engineer journey is to learn data structures - especially if one were to go for the software interviews. Surprising, data structures knowledge and familiarity with it becomes somewhat important in them - with knowledge with certain data strucutre, certain problems become somewhat easier (also, sometimes, all one can do is simply stare in wonder at the algorithms and data structures that people in the past created)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Deploy Golang Apps that interact with headless service in Kubernetes</title>
      <link>https://www.hairizuan.com/deploy-golang-apps-that-interact-with-headless-service-in-kubernetes/</link>
      <pubDate>Wed, 12 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/deploy-golang-apps-that-interact-with-headless-service-in-kubernetes/</guid>
      <description>&lt;p&gt;In certain application scenarios - there is a need to have applications that need to do client side load balancing to a bunch of servers. Such cases are pretty rare - but we won&amp;rsquo;t be covering the exect reasons or scenarios or when these are needed. Instead, we will cover how we can do so with Golang applications in Kubernetes cluster.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Redis vs Memcached via Golang</title>
      <link>https://www.hairizuan.com/redis-vs-memcached-via-golang/</link>
      <pubDate>Wed, 05 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/redis-vs-memcached-via-golang/</guid>
      <description>&lt;p&gt;This is often a question that often comes up during system design interviews. If one were to design a system that requires the use of cache - one common question that comes up would be whether to use memcached or to use redis. On initial thought - both are kind of doing the same thing; both store stuff in memory which gives them pretty fast response times; however, both tools have entirely wildly different implementations and philosophies when it comes to the product - thereby - requiring developers to make tradeoffs when choosing between them.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying to create MariaDB replica server</title>
      <link>https://www.hairizuan.com/trying-to-create-mariadb-replica-server/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-to-create-mariadb-replica-server/</guid>
      <description>&lt;p&gt;A common architectural pattern for relational databases is to create an additional replica server. This pattern usually come up due because most applications are usually read heavy - data is usually read to be presented to users.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Replicating golang interfaces with static python, run with mypy</title>
      <link>https://www.hairizuan.com/replicating-golang-interfaces-with-static-python-run-with-mypy/</link>
      <pubDate>Wed, 21 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/replicating-golang-interfaces-with-static-python-run-with-mypy/</guid>
      <description>&lt;p&gt;After coding in both Python and Golang, I now have a very strong preference for strongly typed languages. There is a certain charm and beauty in being able to have the IDE that I&amp;rsquo;m working in able to provide good autocomplete suggestions for the code - there is less for a need to keep moving files in the codebases just to ensure that the function spelling and params are correct etc. For smaller programs, dynamic types languages are still ok but they get very unwieldy once they go pass the hundreds of lines of code mark.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Running database migrations in Helm chart</title>
      <link>https://www.hairizuan.com/running-database-migrations-in-helm-chart/</link>
      <pubDate>Wed, 07 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/running-database-migrations-in-helm-chart/</guid>
      <description>&lt;p&gt;In many examples for helm charts, the general focus is on the &amp;ldquo;2nd&amp;rdquo; day operations of having applications running without too much issues. In the case for usual web developers, that would mean applications handled with kubernetes deployment objects which would run a set number of replicas (or handled via HPA) in the kubernetes cluster.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using smaller base images for applications, slim images? alpine images? distroless images</title>
      <link>https://www.hairizuan.com/using-smaller-base-images-for-applications-slim-images-alpine-images-distroless-images/</link>
      <pubDate>Wed, 31 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-smaller-base-images-for-applications-slim-images-alpine-images-distroless-images/</guid>
      <description>&lt;p&gt;When building applications in docker images, there is sometimes a need to consider the size of the containers. There are multiple reasons for us to monitor and check this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In the case where our container registry is actually by us rather than the on public registries. The size of the container would affect the cost of storing all those artifacts. Let&amp;rsquo;s say we are to look at some of the private container registries that we can setup on public clouds such as Google Cloud - there is a pricing set on per GB of storage as well as networking costs for shifting the container images out of the container registry.&lt;/li&gt;&#xA;&lt;li&gt;A smaller image is simply faster to move around. Let&amp;rsquo;s say if we have a Kubernetes cluster that would need to run the container and let&amp;rsquo;s also say that we need the container be run on multiple nodes of the cluster. Evidently, a container with a smaller footprint will take a way shorter time to pull the images from the registry. A larger container that could easily be in the Gigabyte range - e.g. images that container language runtimes etc. would take a way longer time to download as well as startup.&lt;/li&gt;&#xA;&lt;li&gt;One can kind of argue that the less stuff inside the container, the smaller the container would contain an application that has a security loophole.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With that, it is beneficial for us to build &amp;ldquo;smaller&amp;rdquo; container images - the benefits would be more evident more so for the infrastructure teams rather than the application teams. To application teams, we would probably have to suffer quite a bit since smaller container images would mean &amp;ldquo;useful&amp;rdquo; stuff would be removed from the container.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Altering outputs of helm installations with post-renderer via kustomize</title>
      <link>https://www.hairizuan.com/altering-outputs-of-helm-installations-with-post-renderer-via-kustomize/</link>
      <pubDate>Wed, 24 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/altering-outputs-of-helm-installations-with-post-renderer-via-kustomize/</guid>
      <description>&lt;p&gt;When one thinks of Kubernetes and deploying stuff into Kubernetes, one of the usual ways to get such stuff into Kubernetes is through the use of Kubernetes manifest files. Kubernetes manifest files describe various different resources in Kubernetes cluster - some primary examples that are often used are &lt;code&gt;Deployment&lt;/code&gt;, &lt;code&gt;Configmap&lt;/code&gt;, &lt;code&gt;Secret&lt;/code&gt;, &lt;code&gt;Service&lt;/code&gt; and even &lt;code&gt;Ingress&lt;/code&gt; Kubernetes resources/objects.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Updating configuration in Kubernetes pods managed via Helm</title>
      <link>https://www.hairizuan.com/updating-configuration-in-kubernetes-pods-managed-via-helm/</link>
      <pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/updating-configuration-in-kubernetes-pods-managed-via-helm/</guid>
      <description>&lt;p&gt;When building an application, a common way to alter and set the running properties of the application is to use configuration files that could be written with JSON or Yaml files. This is the same even if the application is simply deployed in a Virtual Machine or even in a container within a Kubernetes Cluster. The general assumption is that the configuration file does not change that often - if the configuration files is to be change, the usual way to have the application conform to the new configuration file would be stop the currently running the application and start it once more.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Consistent Hashing Implementation in Golang</title>
      <link>https://www.hairizuan.com/consistent-hashing-implementation-in-golang/</link>
      <pubDate>Wed, 10 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/consistent-hashing-implementation-in-golang/</guid>
      <description>&lt;p&gt;In the real world, we often have to deal with such large traffic loads that it is almost necessary to know that there is possibility that we might need to get data stored in a cluster of machines. In the case if we have applications that barely need to deal and manage data, we can simply on existing products out there that can simply scale out the number of replicas of the application which it can simply serve pretty easily. However, what about applications that rely on database? We need our database server cluster to also scale out accordingly as well (there are limits to scale vertically in most cloud providers after all)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Rethinking migrations in Golang Applications</title>
      <link>https://www.hairizuan.com/rethinking-migrations-in-golang-applications/</link>
      <pubDate>Wed, 03 May 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/rethinking-migrations-in-golang-applications/</guid>
      <description>&lt;p&gt;This is more of a reminder post for me that every aspect of application development is critical and sufficient thought should be put behind it. This time around, it&amp;rsquo;s on database migration within applications.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Writing Rego Policies for authorization in Golang Apps</title>
      <link>https://www.hairizuan.com/writing-rego-policies-for-authorization-in-golang-apps/</link>
      <pubDate>Wed, 26 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/writing-rego-policies-for-authorization-in-golang-apps/</guid>
      <description>&lt;p&gt;When building login systems in applications, there are generally two parts to it; authentication and authorization. Authentication is the step to provide and identify who the user that is attempting to use the system. Authorization is the step to decide whether user that is using the system is &amp;ldquo;allowed&amp;rdquo; to access or modify a particular resource on a system.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Serving Videos with Golang via HLS</title>
      <link>https://www.hairizuan.com/serving-videos-with-golang-via-hls/</link>
      <pubDate>Wed, 05 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/serving-videos-with-golang-via-hls/</guid>
      <description>&lt;p&gt;I was watching a bunch of tiktok and youtube videos  recently and kind of started to wonder how such companies serve videos to their consumers. That is where I started to going down the rabbit hole of how videos are served and how to try to ensure the possibility that videos can be played without requiring to download the entire video.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying cooklang with Golang to document recipes</title>
      <link>https://www.hairizuan.com/trying-cooklang-with-golang-to-document-recipes/</link>
      <pubDate>Mon, 20 Mar 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-cooklang-with-golang-to-document-recipes/</guid>
      <description>&lt;p&gt;For many people, cooking is not just a means of sustenance but a beloved hobby and a way to express creativity in the kitchen. However, one of the biggest challenges for home cooks is keeping track of their recipes and possibly the list of interesting recipes from other people. In my opinion, it&amp;rsquo;s general a good idea to have a copy of such information on hand (since websites/videos hosting such recipes can eventually disappear). However, recording such information in plain text might be a tad &amp;ldquo;boring&amp;rdquo; - it&amp;rsquo;s also harder to kind of parse as well as process further. In this blog post, we will explore using cooklang as a possible tool to &amp;ldquo;standardize&amp;rdquo; such information.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Custom Endpoint for Google Analytics data with Golang</title>
      <link>https://www.hairizuan.com/custom-endpoint-for-google-analytics-data-with-golang/</link>
      <pubDate>Tue, 28 Feb 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/custom-endpoint-for-google-analytics-data-with-golang/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;I used to work with Google Analytics to obtain site analytics for websites and android application. Technically, the current blog is monitored using Google Analytics. Monitoring of website data is generally useful as it provides information to the authors of the website/website owners on what particular content that website visitors find the most useful. With such information, it makes easier for the owner to try to add new content that attempts to provide such relevant content to visitors which would hopefully spur a virtuous cycle of gaining more audience for the website.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying out Google Cloud Workflows</title>
      <link>https://www.hairizuan.com/trying-out-google-cloud-workflows/</link>
      <pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-out-google-cloud-workflows/</guid>
      <description>&lt;p&gt;Over the recent weekends, I&amp;rsquo;ve decided to take a gander and try another &amp;ldquo;serverless&amp;rdquo; tool called Google Cloud Workflows. The tool&amp;rsquo;s appeal is to be able coordinate a bunch of services in order to achieve a particular goal. The coordination effort (or workflow) can easily get pretty complex -&amp;gt; one way would be to script but if we want to have the capability to have the button to run the entire workflow from start to end with logging in place as well as capability to run the workflow based on particular triggers.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Leader Election in Kubernetes via Kubernetes Configmaps and Leases</title>
      <link>https://www.hairizuan.com/leader-election-in-kubernetes-via-kubernetes-configmaps-and-leases/</link>
      <pubDate>Sun, 28 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/leader-election-in-kubernetes-via-kubernetes-configmaps-and-leases/</guid>
      <description>&lt;p&gt;The leader election mechanism is a somewhat complex thing to kind of code up for an application. There are various Golang libraries that assist with this but it would be nicer if there were mechanisms within the environment that the application operate in which can help with this. In the case for the Kubernetes ecosystem - we can actual rely on the fact of how Kubernetes would usually etcd that does this leader election dance on our behalf. If we can tap on this mechanism, we can avoid introducing this mess of a complexity within our application.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Continuous Profiling of Applications in Kubernetes via Pyroscope</title>
      <link>https://www.hairizuan.com/continuous-profiling-of-applications-in-kubernetes-via-pyroscope/</link>
      <pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/continuous-profiling-of-applications-in-kubernetes-via-pyroscope/</guid>
      <description>&lt;p&gt;The whole process of profiling an application is an attempt to identify hotspots within the application which consumes more resources or takes too much time - knowing this would allow us to identify how to further improve the code within the applications that we build in order to build applications that consume less resources or would respond better to external inputs. Profiling of an application is just another aspect to improve observability of application&amp;rsquo;s performance on top of the common usual tooling such as distributed traces, metrics and logs. Tools such as distributed traces, metrics and logs only can capture part of the picture of how an application performs within an environment but is different for profiling. Profiling would point out what is happening &amp;ldquo;internally&amp;rdquo; within the application such as amount of memory being allocated for particular functions, how much CPU time is being taken for a particular function, thereby providing even more visiblity to how the application works.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Fake Redis Server built with Golang</title>
      <link>https://www.hairizuan.com/fake-redis-server-built-with-golang/</link>
      <pubDate>Wed, 20 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/fake-redis-server-built-with-golang/</guid>
      <description>&lt;p&gt;A friend of mine once mentioned about one of the tasks that he had to go through during his programming days was to build out a server which would respond to the redis-cli tool and I started to think - &amp;ldquo;that&amp;rsquo;s something I&amp;rsquo;ve never done before&amp;hellip; I wonder how hard it is?&amp;rdquo; After a day of tinkering around - it&amp;rsquo;s definitely something that&amp;rsquo;s not &amp;ldquo;intuitive&amp;rdquo; to immediately get done; there are definitely some concepts that I&amp;rsquo;m not super clear about but it&amp;rsquo;s definitely something that can be slowly built out while learning various concepts.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Coding out Self Balancing Tree data structures</title>
      <link>https://www.hairizuan.com/coding-out-self-balancing-tree-data-structures/</link>
      <pubDate>Thu, 07 Jul 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/coding-out-self-balancing-tree-data-structures/</guid>
      <description>&lt;p&gt;Over the past month, I decided to go down the rabbit hole of exploring an example of a self balancing tree data structure. I generally don&amp;rsquo;t need to handle data structures on a day to day basis - I mostly deal with integration of tools as well as deployment of tools into a Kubernetes cluster. However, even if I don&amp;rsquo;t deal with that side of things, I do find that some of the thought process behind the data structures and algorithms are pretty interesting. (I&amp;rsquo;m still kind of waiting for a moment where I can actually utilize it in my work for real in a way)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Debugging Distroless Kubernetes Pods</title>
      <link>https://www.hairizuan.com/debugging-distroless-kubernetes-pods/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/debugging-distroless-kubernetes-pods/</guid>
      <description>&lt;p&gt;There is a trend of images that follow the philosophy of minimizing the size of image by removing almost everything out of image. This helps with getting image downloaded more quickly by kubelet into the nodes as well as possibly reducing the attack surface of the container even further (I suppose it&amp;rsquo;s harder to do things in a container if utilities like shell or bash don&amp;rsquo;t exist within it). You would probably see errors such as this for those containers that have somewhat remove the shell/bash:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes Ingress for applications with branded links on GKE</title>
      <link>https://www.hairizuan.com/kubernetes-ingress-for-applications-with-branded-links-on-gke/</link>
      <pubDate>Sun, 13 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/kubernetes-ingress-for-applications-with-branded-links-on-gke/</guid>
      <description>&lt;p&gt;While dealing with branded links during my course of work, I kind of wondered how it can be tackled if I were to do it in a Google Kubernetes Engine Cluster. The situation I would imagine that would need to solve is this:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bus Arrival App - Singapore</title>
      <link>https://www.hairizuan.com/bus-arrival-app-singapore/</link>
      <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/bus-arrival-app-singapore/</guid>
      <description>&lt;p&gt;This is a quick sample tool to retrieve bus arrivals in Singapore. In order to use it, we would need to find for the Bus Stop ID or Bus Stop Code from where we&amp;rsquo;re taking the bus from. After keying it, it would fetch the records from LTA Datamall&amp;rsquo;s real time bus arrival API and present those records in this tool.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database migration via Cloud SQL Proxy for Cloud SQL in Google Compute Engine VM</title>
      <link>https://www.hairizuan.com/database-migration-via-cloud-sql-proxy-for-cloud-sql-in-google-compute-engine-vm/</link>
      <pubDate>Mon, 17 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/database-migration-via-cloud-sql-proxy-for-cloud-sql-in-google-compute-engine-vm/</guid>
      <description>&lt;p&gt;Database migration is kind of a critical bit when it comes to running and operating applications. In Golang, it is kind of appealing to rely on ORM (Object Relational Mapping) libraries. It allows one to kind of map structs to tabular structures within the database storage. One such example of an ORM library that I&amp;rsquo;ve found on the first page of Google is &lt;a href=&#34;https://gorm.io/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;GORM&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>CORS with Golang Microservices and Elm Frontend is difficult</title>
      <link>https://www.hairizuan.com/cors-with-golang-microservices-and-elm-frontend-is-difficult/</link>
      <pubDate>Sun, 02 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/cors-with-golang-microservices-and-elm-frontend-is-difficult/</guid>
      <description>&lt;p&gt;I am still building up my personal pet project: &lt;a href=&#34;https://github.com/hairizuanbinnoorazman/slides-to-video;&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://github.com/hairizuanbinnoorazman/slides-to-video;&lt;/a&gt; the aim of this project is a personal one - to build up a set of microservices that is able to be deployed in various ways such as locally via Docker Compose or even to Kubernetes or the serverless Cloud Run platform on Google Cloud Platform. There was a previous blog post describing an initial part of this journey: &lt;a href=&#34;https://www.hairizuan.com/lessons-from-building-slides-to-video-app-part-1/&#34; &gt;Lessons on building the project - Part 1&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Build Chat App with Golang Websocket and Elm Frontend</title>
      <link>https://www.hairizuan.com/build-chat-app-with-golang-websocket-and-elm-frontend/</link>
      <pubDate>Mon, 20 Dec 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/build-chat-app-with-golang-websocket-and-elm-frontend/</guid>
      <description>&lt;p&gt;While building Elm based frontends, I decided to take the opportunity to learn on how to craft a chat application. Truthfully, I&amp;rsquo;ve never really built one before (nor do I need to). But it does seem like an interesting programming exercise to kind of go thru - in order to understand how such applications are built, deployed, scaled and managed. For the frontend, I&amp;rsquo;m mostly set to use Elm (probably you&amp;rsquo;ve seen a &lt;a href=&#34;https://www.hairizuan.com/elm-frontend-in-hugo-static-site&#34; &gt;previous post&lt;/a&gt; on my &amp;ldquo;dislike&amp;rdquo; for other Javascript based frameworks, which is essentially all the popular ones in the market). For backend, I will probably stick to Golang since that is the language I&amp;rsquo;m most comfortable with (all hail statically typed languages)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using systemd to manage services</title>
      <link>https://www.hairizuan.com/using-systemd-to-manage-services/</link>
      <pubDate>Thu, 10 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-systemd-to-manage-services/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;What and why systemd?&#xA;    &lt;div id=&#34;what-and-why-systemd&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-and-why-systemd&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Systemd is a convenient set of tooling that can be used to manage services and applications on a linux server. When we are managing applications on a server, we would want the following properties automatically for most application - the requirements are somewhat for most applications:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Lessons from building Slides to Video App - Part 1</title>
      <link>https://www.hairizuan.com/lessons-from-building-slides-to-video-app-part-1/</link>
      <pubDate>Sun, 28 Feb 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/lessons-from-building-slides-to-video-app-part-1/</guid>
      <description>&lt;p&gt;A long time back, sometime in 2019 (which is almost an eternity ago ), I kind of did up an application that can take some slides saved in a pdf file and generate a video out of it. I kind of talked about it in a lightning session during the following event at Google Devspace &lt;a href=&#34;https://events.withgoogle.com/la-kopi-serverless/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://events.withgoogle.com/la-kopi-serverless/&lt;/a&gt;. The input to the application would be the slides in a pdf format as well as some sort of &amp;ldquo;script&amp;rdquo;. The words in the script would be used to generate the voiceover and then it would be used as part of the video. Essentially, the aim of the app would be create a &amp;ldquo;presented&amp;rdquo; version of the slides in a video form without requiring a person to present it. Everything about it is just generated via tools/products available on GCP.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Automating the admin work when organizing webinars in a meetup group</title>
      <link>https://www.hairizuan.com/automating-the-admin-work-when-organizing-webinars-in-a-meetup-group/</link>
      <pubDate>Thu, 01 Oct 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/automating-the-admin-work-when-organizing-webinars-in-a-meetup-group/</guid>
      <description>&lt;p&gt;There is actually plenty of work that needs to be done in order to continuously and consistently organize webinars in a meetup group. I am involved in one of them and it takes quite a bit of effort to maintain such effort to ensure that the group look &amp;ldquo;alive&amp;rdquo; with webinars being continuously churned out during this unique situation.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Implications for having switchable loggers</title>
      <link>https://www.hairizuan.com/implications-for-having-switchable-loggers/</link>
      <pubDate>Sun, 16 Aug 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/implications-for-having-switchable-loggers/</guid>
      <description>&lt;p&gt;Loggers in codebases are generally code that is just taken for granted. We would usually imagine that we&amp;rsquo;ll just choose a logger library, import it and then just utilize in code. We would probably have the application pass some configuration to the application, maybe to reduce amount of logs printed in production to reduce the amount of load that it would produce in logging aggegration systems.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Dockerizing application that use unix sockets</title>
      <link>https://www.hairizuan.com/dockerizing-application-that-use-unix-sockets/</link>
      <pubDate>Sun, 12 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/dockerizing-application-that-use-unix-sockets/</guid>
      <description>&lt;p&gt;While trying to understand how components that deal with Container Storage Interface (CSI) in Kubernetes, I came across mentions of how the components were using Unix domain sockets to communicate with each other. A quick read on why unix domain sockets seem to reveal that its use is to reduce the amount of overhead while such components talk to each locally. If the components had required to talk across to multiple nodes, it would have used TCP instead.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Golang composition</title>
      <link>https://www.hairizuan.com/golang-composition/</link>
      <pubDate>Fri, 10 Jan 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/golang-composition/</guid>
      <description>&lt;p&gt;These are some notes I took while experimenting and playing around with Golang further. This article is mainly exploring embedded structs and interfaces to experiment how they work etc.&lt;/p&gt;&#xA;&lt;p&gt;Use Golang playground in order to see how it works in action&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Private Go Modules in Google Cloud Build</title>
      <link>https://www.hairizuan.com/private-go-modules-in-google-cloud-build/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/private-go-modules-in-google-cloud-build/</guid>
      <description>&lt;p&gt;So recently, I&amp;rsquo;ve been needing to automate my builds for my few Golang projects via Google Cloud Build. However, rather than building docker containers, I needed Golang binaries instead, which kind of meant that I would need to have the CI/CD pipeline have a Go environment/runtime to build them. However, when it comes to these CI/CD solutions, including private Golang packages/modules in siad projects is usually quite troublesome. Private Golang packages usually take the code from private Github/Bitbucket/Gitlab repos and getting the &lt;code&gt;go get&lt;/code&gt; command to fetch them successful require a bit of hacks here and there to make it work successfully.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Things to watch out for in 2019</title>
      <link>https://www.hairizuan.com/things-to-watch-out-for-in-2019/</link>
      <pubDate>Thu, 10 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/things-to-watch-out-for-in-2019/</guid>
      <description>&lt;p&gt;The list would be updated as time goes by in the year&lt;/p&gt;&#xA;&lt;p&gt;A list of conferences and meetups and exhibitions to look for especially in 2019:&lt;/p&gt;&#xA;&lt;p&gt;This kind of personal list that I&amp;rsquo;m keeping track; it mainly revolves around Golang,&#xA;modern architecture technologies e.g. Cloud technologies etc, Python and even R (One of my initial language, I still do keep a lookout of how it&amp;rsquo;s doing nowadays.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using nginx to serve as ingress to multiple servers</title>
      <link>https://www.hairizuan.com/using-nginx-to-serve-as-ingress-to-multiple-servers/</link>
      <pubDate>Sat, 29 Sep 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-nginx-to-serve-as-ingress-to-multiple-servers/</guid>
      <description>&lt;p&gt;This is a little experiment to see how this would work; in the case where we have multiple Go binaries with multiple web applications. If we wanted to expose this via a single http endpoint rather than providing a whole multitude of web endpoints.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying out skaffold</title>
      <link>https://www.hairizuan.com/trying-out-skaffold/</link>
      <pubDate>Thu, 09 Aug 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-out-skaffold/</guid>
      <description>&lt;p&gt;When developing application that are meant to be deployed to the Kubernetes platform, it involves a bunch of steps on top of your usual local development work:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Writing a Dockerfile to package the application (Multi stage applications are optional here - useful for compiled based languages)&lt;/li&gt;&#xA;&lt;li&gt;Build and tagging the docker image of the application with the target repository&lt;/li&gt;&#xA;&lt;li&gt;Either use &lt;code&gt;kubectl&lt;/code&gt; commands or use kubernetes config resource files to define the resources required for deploying the applications. Use those commands/configurations to define the resources on the staging/production application&lt;/li&gt;&#xA;&lt;li&gt;Repeat the process for each update of the application (Repeat second point onwards)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As you see from above, it starts to be pain to do so after each iteration of the application development. The building of the docker containers process as well as the applying of the new images to each cluster, (sometimes with slightly changed configuration files) - the kubernetes secret and config files can change across different environments.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Lessons from Kubecon/CloudNativeCon 2018 Europe</title>
      <link>https://www.hairizuan.com/lessons-from-kubecon/cloudnativecon-2018-europe/</link>
      <pubDate>Wed, 16 May 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/lessons-from-kubecon/cloudnativecon-2018-europe/</guid>
      <description>&lt;p&gt;The following set of summaries are from the Kubecon and Cloud Native Con Europe in Denmark from 2-4 May 2018.&lt;/p&gt;&#xA;&lt;p&gt;These summaries are from conference talks that I thought provided more interesting thinking points.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Lessons from Gophercon SG</title>
      <link>https://www.hairizuan.com/lessons-from-gophercon-sg/</link>
      <pubDate>Wed, 09 May 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/lessons-from-gophercon-sg/</guid>
      <description>&lt;p&gt;This is the list of talks provided in the reccent Gophercon Conference held in Singapore on 4th May 2018&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Go with Versions&lt;/li&gt;&#xA;&lt;li&gt;Project-driven journey to learning Go&lt;/li&gt;&#xA;&lt;li&gt;Resilency in Distributed Systems&lt;/li&gt;&#xA;&lt;li&gt;Understanding Running Go Program&lt;/li&gt;&#xA;&lt;li&gt;Go for Grab&lt;/li&gt;&#xA;&lt;li&gt;Optimize for Correctness&lt;/li&gt;&#xA;&lt;li&gt;Build your own distributed database&lt;/li&gt;&#xA;&lt;li&gt;The Scandalous Sotry of Dreadful Code Written by the Best of Us&lt;/li&gt;&#xA;&lt;li&gt;Erlang for Go developers&lt;/li&gt;&#xA;&lt;li&gt;Go and the future of offices&lt;/li&gt;&#xA;&lt;li&gt;Reflections on Trusting Trust for Go&lt;/li&gt;&#xA;&lt;li&gt;The lost art of bondage&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Below are some of the more interesting points raised during the talk (View the full talk to understand the context on what and why a certain point was raised.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Let&#39;s use CLI to create Tasks!!</title>
      <link>https://www.hairizuan.com/lets-use-cli-to-create-tasks/</link>
      <pubDate>Sun, 22 Apr 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/lets-use-cli-to-create-tasks/</guid>
      <description>&lt;p&gt;Out of random curiousity and laziness on my part, I decided to create a CLI tool which would allow me to create tasks on task managements websites such as on Asana, and issues in Github/Bitbucket.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>A sample bookcase application case via Gin Golang Framework</title>
      <link>https://www.hairizuan.com/a-sample-bookcase-application-case-via-gin-golang-framework/</link>
      <pubDate>Thu, 08 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/a-sample-bookcase-application-case-via-gin-golang-framework/</guid>
      <description>&lt;p&gt;This is an application based on a previous blog post on Bookcase application.&lt;/p&gt;&#xA;&lt;p&gt;The link to the code base of the application:&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://github.com/hairizuanbinnoorazman/golang-web-gin-book-store&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://github.com/hairizuanbinnoorazman/golang-web-gin-book-store&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is a chance that when you are on the code base, the application is not fully operational; I am still adding code to it to add functionality to the application&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>A sample bookcase application case</title>
      <link>https://www.hairizuan.com/a-sample-bookcase-application-case/</link>
      <pubDate>Wed, 07 Mar 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/a-sample-bookcase-application-case/</guid>
      <description>&lt;p&gt;We would try to implement the various technology stack for some common web application scenario in several types of libraries. In our case here, we would attempt to implement it for the following scenario.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Favourite Golang Resources</title>
      <link>https://www.hairizuan.com/favourite-golang-resources/</link>
      <pubDate>Wed, 28 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/favourite-golang-resources/</guid>
      <description>&lt;p&gt;This is a personal list of Golang Resources I like to keep track. This is a evergreen list so I will update it once in a while when new stuff pops up.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Refactoring Go Safely</title>
      <link>https://www.hairizuan.com/refactoring-go-safely/</link>
      <pubDate>Wed, 21 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/refactoring-go-safely/</guid>
      <description>&lt;p&gt;An excellent resource to read on Refactoring Golang code safely and to ensure that Golang code continue does not result in breaking changes in the codebase.&lt;br&gt;&#xA;&lt;a href=&#34;https://talks.golang.org/2016/refactor.article&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://talks.golang.org/2016/refactor.article&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;An important to take away from the article is the fact that when making API changes to a code base, the portion that results in largest amount of work is the amount of code repair that needs to be done. Here are some of the examples to take note:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Things to watch out for in 2018</title>
      <link>https://www.hairizuan.com/things-to-watch-out-for-in-2018/</link>
      <pubDate>Wed, 14 Feb 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/things-to-watch-out-for-in-2018/</guid>
      <description>&lt;p&gt;A list of conferences and meetups and exhibitions to look for especially in 2018:&lt;/p&gt;&#xA;&lt;p&gt;This kind of personal list that I&amp;rsquo;m keeping track; it mainly revolves around Golang,&#xA;modern architecture technologies e.g. Cloud technologies etc, Python and even R (One of my initial language, I still do keep a lookout of how it&amp;rsquo;s doing nowadays.)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Go in AWS Lambda</title>
      <link>https://www.hairizuan.com/using-go-in-aws-lambda/</link>
      <pubDate>Mon, 15 Jan 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-go-in-aws-lambda/</guid>
      <description>&lt;p&gt;&lt;em&gt;Disclaimer: There are definitely better ways of doing this; this is more of a lazy man&amp;rsquo;s way of doing it. This is just to explore the possibility of getting a golang application into AWS Lambda and successfully running it.&lt;/em&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Go to post messages on Slack</title>
      <link>https://www.hairizuan.com/using-go-to-post-messages-on-slack/</link>
      <pubDate>Sun, 22 Oct 2017 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-go-to-post-messages-on-slack/</guid>
      <description>&lt;p&gt;A sample application to kind of get started with Go.&lt;/p&gt;&#xA;&lt;p&gt;This application involves pinging a channel on Slack via a webhook. Slack provides a unique URL in order to ping Slack with messages from a script/application.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
