CTY now supports using a custom CSS for the HTML output Hey folks. My tool, cty1 now supports adding custom CSS to the HTML output. In an effort to prevent cross-site scripting and other CSS nasties the CSS is pretty limited, sanitized and escaped. Using --css-file now, it’s possible to give it a CSS file that will overwrite everything inside the main HTML file. This allows you to add any customization that you would like to apply to the end result during generation. No more post processing...| Ramblings of a cloud engineer
Updated Google OAuth Go Sample Hello. I’ve recently updated my Google OAuth Go sample application1 to follow modern standards and practices. The update brings several improvements including a cleaner UI, better error handling, and more robust authentication flows. What’s New New interface for the login side: Nicer errors: Welcome message: Battle arena: And lastly, logout: Technical Updates I added OAuth 2.0 best practices and some proper flows with auth middleware.| Ramblings of a cloud engineer
Tilt.dev with server-side apply Hey folks. This will be a quick one. Recently, ESO reached the CRD limit of 256KB which means that every time there is an apply of the CRDs it needs to be a Server Side Apply. This isn’t something new. However, Tilt doesn’t really have a clear documentation in this case. And since ESO is using Tilt, or at least I’m using Tilt with ESO, I also had to fix tilt. A little bit of back-and-forth with the documentation and I decided to use k8s_custom_deploy.| skarlso.github.io
Re: My AI Skeptic Friends Are All Nuts There was a post recently that was dissing AI Skeptics. While the post is funny at times, I feel like it’s absolutely and completely missing the point of the skepticism. Or at least I feel that it is glossing over some massive pain points of said skepticism. Let’s go over some of the points and the things that stuck out to me as problematic.| skarlso.github.io
MFA Generator in External Secrets Operator Today, I’m happy to announce that external-secrets-operator will have an MFA / TOTP token generator once this PR is merged and released. This opens up some exciting new features. For example, imagine having an AWS session that requires MFA, or you have an Azure flow that requires a TOTP token. Now, you can achieve that using automation and an MFA generated in a secret. Just define a generator:| Ramblings of a cloud engineer
In-depth look at CRDs and how they work under the hood Today, we are going to walk through how a CRD looks like, what it does, what it contains, how it works and how it alters Kubernetes. The design, the api extension and links and snippets to the code ( accurate at the time of writing ) where it happens. Let’s dive in. What are CRDs CRDs as described in the official Kubernetes Documentation page are objects that can extend the API of Kubernetes.| Ramblings of a cloud engineer
CNCF Project Showcases Hi there, hello. Long time no see. I was very busy these past months. I thought about a series though that I would like to lead. Every week or month or so, I’m going to randomly pick a CNCF project for this CSV - CNCF Projects. I will explore it and write about it. See what it does, why, how, and for what reason. I know some folks that already do this, but I don’t care. I’m doing it for myself.| skarlso.github.io
External Secrets Operator template rendering tool Once this1 pull request is merged, ESO will be extended with a tool that has the ability to render templates in an object. Let’s step back a little… what are templates even? But… what is ESO even? Okay, so… ESO is external-secrets-operator2. It’s Kubernetes operator than can sync secrets between an external provider, like AWS Parameter/Secret Store, and a cluster. This is bi-directional. Meaning ESO can sync the secret back as well u...| skarlso.github.io
CORScapade; the story why cty doesn’t support git flow on web Recently, I implemented git based discovery for cty. It means, that the user can provide a git repo URL and cty will clone the content and look for any valid CRDs and discover them. I wanted ot provide this through the front-end as well. However, I ran into some issues… CORS Plain HTTP requests are working fine only if raw.githubusercontent.com is being used. That service doesn’t have CORS.| Ramblings of a cloud engineer
Introducing ORAS into a Library This post talks about using ORAS as a library to interact with OCI repositories. First and foremost I like to keep things simple. I was seeing basic usages around the project I’m working in and some common behaviour that started to emerge. Looking at that behaviour I drawn a preliminary interface. This interface is also something similar that docker remote implementation has in containerd. Looks something like this:| Ramblings of a cloud engineer
This year I want to do somerhinf different. For the whole year I’ll attempt to write a blogpost everyday. I might miss a day during holiday or being sick or something but the point is that by the end of the year I should have at least 365 blog posts. I also want them to be somewhat meaningful so be about some kind of technology or discovery or whatever. So posts like ‘This is a post’ are not valid.| Ramblings of a cloud engineer
Added Suggest Edit to Post link to all my posts I added “Suggest edit” to all my posts in a way to open my blob to the community. I accept all kinds of contriubtions be they simple grammar fixes or more accurate descriptions of something. Feel free to suggest changes. I’m also toying with the idea of accepting completely new content but that remains to be seen. Thank you, and have a happy new year!| Ramblings of a cloud engineer
Script to remove GitHub registry images Hey, though I quickly just share a script to get rid of packages you don’t want anymore from your GitHub registry. #!/bin/bash set -e # VariablesOWNER=$1 # Replace with your GitHub username or organization namePACKAGE_GLOB=$2 # Glob pattern for package names passed as an argument (e.g., "package*" to match all)# makes sure that important packages are not removed by accidentcontains(){ found=1 array=(place-very-important-packages-here-to-make-sure-they...| Ramblings of a cloud engineer
Hello This is just a test post to see if I did my hugo build correctly.| Ramblings of a cloud engineer
How I track tasks with Obsidian Hello. This will be a run-down on how I track tasks and projects and long-term things, like reading a book, tracking a project or traveling using the PARA method. Let’s get to it! Task tracking queue The way I track tasks is through a queuing system. To not get overloaded by tasks, I just simply put the next task into the queue and take out the top recent if I’m done. Unless something really urgent comes along I don’t disrupt this flow. Meaning, once I ha...| Ramblings of a cloud engineer
Update your CRDs with confidence Hello. I would like to write about a release for crd-to-sample-yaml1. It’s the release version v0.8.02. This version brings with it a feature to test the validity of your CRD changes. It means that if you change your CRD it will test if the changes do not break working samples of that version. This is achieved by a helm unittest type of YAML based test scenarios and snapshot generation.| Ramblings of a cloud engineer
Using cert-manager as a subchart Hello. In today’s post, I would like to show how to set up cert-manager as a subchart. Not only that, but also, how to add a Job to make sure that cert-manager is installed and its webhook is up and running so it can process any Issuers that are going to be applied with your own chart. Let’s get to it. Defining a subchart To define a subchart, simply add it as a dependency in your Charts.yaml like this:| Ramblings of a cloud engineer
Hello. Today’s will be a quick post. Everyone knows and loves/hates functional options1 in Go. The biggest gripe people get with it is, that the options aren’t discoverable and that there is no IDE support for nicely auto-completing options. My thought about this was that, what if we would just hang it on a struct? Let’s see how that looks. Consider this normal server builder with options: typeServerstruct { NamestringAddressstringPortint} funcWithName(namestring) ServerOptFn { returnfu...| Ramblings of a cloud engineer
Hello, Dear Reader! Settle in for a long one this time. I would like to write about my journey from being a Tester back in 2004 to being a software engineer today ( 2024 ). A mere 20 year long journey. I’m going to write down how I got this far, what it took, the sacrifices, fears, doubts and all the things in between. Let’s get started. The early days Around 2002, I became a student for a two year long certificate study for a position called Software Programmer. It was a paid course. My ...| Ramblings of a cloud engineer
Hello! Just wanted to give an update to my crd-to-sample-yaml tool. It, now, supports creating a standalone HTML output. Why, you may ask? Well, now you can host the generated content as a static page on your website. That’s pretty handy. Here is a sample output: Go and get it while it’s hot in version v0.4.0. That’s all. Thanks for reading!| Ramblings of a cloud engineer
Generic dig for map key using typed parameters Hello! I was fiddling with a way of getting out values from a map that is of format map[string]any. But I wanted my type safety as well. This was coming from digging out keys from a Metadata field. The metadata was in a JSON format. This is what I came up with: /FetchValueFromMetadatafetchesakeyfromametadataifitexists. Itwillrecursivelylookin// embedded values as well. Must be a unique key, otherwise it will just return the first // occurrence. f...| Ramblings of a cloud engineer
CRD to YAML as WASM website A while ago, I wrote about Generating Sample YAML files from CRDs. It’s a tool I created that lives here. It has a front-end service as well for convenience. I wrote it in a traditional client-server manner. It’s running from a Docker Swarm container. But, as I was thinking about it, nothing in this service requires interaction with a server. It gets some user input, processes it, and has some output. I could have written it in plain Javascript. But, since I do...| Ramblings of a cloud engineer
Self-Signed locally trusted certificates with cert-manager We are going to discuss how to set up a Kubernetes environment where components can run using HTTPS without pain. Premise Usually, people either generate certificates outside the cluster using either openssl, or mkcert, then mount them in or use those as seeds for further generation. This poses a number of problems during testing and distribution of these certificates. And then, switching to production, it proves that local certs will...| Ramblings of a cloud engineer
Diff check and manifest generation GitHub Actions For Go projects it’s crucial that you don’t forget to run go mod tidy from time to time. Combine that with a project that includes Kubernetes controllers and the other thing people tend to forget is running make manifest && make generate. To check for these I added a small GitHub action that looks like this: name: Check for diff after manifest and generated targetson: pull_request: {} jobs: diff-check-manifests: name: Check for diffruns-on...| Ramblings of a cloud engineer
Digital and analog notes together This fight is as old as time itself. Okay, maybe not that old. But as soon as viable digital note-taking tools appeared it was on. Since then, many solutions that live together have appeared. PKM tools like Second Brain running hand-in-hand with Zettelkasten or BuJo have opened my eyes to combining them in a way that makes the outcome more powerful than each alone would be. I’m going to write down a day of mine using these methods together and show you my j...| Ramblings of a cloud engineer
Adding a certificate to a GitHub runner Imagine having a project where you have a server that you would like to run with TLS. Let’s say, you want to run a Docker registry in a cluster using TLS. You need the generated certificate’s root certificate in the trust store of the GitHub action runner. This is simple with mkcert. The action is simple: name: testson: pull_request: paths-ignore: - 'CODE_OF_CONDUCT.md' - 'README.md' - 'Contributing.md'workflow_call: push: branches: - mainpermission...| Ramblings of a cloud engineer
Well, the previous post was a lie ( or rather a copy and paste error ).| Ramblings of a cloud engineer
Hello dear reader. I switched to a new theme that has Dark Mode. I’m hoping nothing changed regarding the RSS functionality. I removed the comments because I rarely used them. Also disabled any sort of tracking. Enjoy, Gergely.| Ramblings of a cloud engineer
Hello dear reader. I switched to a new theme that has Dark Mode. I’m hoping nothing changed regarding the RSS functionality. I removed the comments because I rarely used them. Also disabled any sort of tracking. Enjoy, Gergely.| Ramblings of a cloud engineer
Welcome dear reader. When last we met, we talked a lot about setting up Tilt for rapid controller development. Now, let’s see how powerful Tilt can be once we bring it together with Kubernetes’ e2e-framework. Controller E2E Framework I’d like to present my controller-e2e-framework which brings Tilt and e2e-framework together to easily write and run tests for controllers that work together. This framework can be used to integration test or e2e test controllers that work together. They se...| Ramblings of a cloud engineer
Welcome dear reader. Today, we are going to dive into how to use Tilt to speed up the feedback loop of developing a Kubernetes controller. We are going to do that using an open-source project called OCM which has a controller called ocm-controller. I’m going to walk through the following process: researching tilt what it could do for me understanding the Tilt file trivial mapping of the developer process understanding Starlark adding more features tackling hot swapping troubleshooting Let...| Ramblings of a cloud engineer
You can see, I wasn’t able to decide on a title. That’s because I wanted to express more than a “How to get started with Journaling” kind of vibe. There are a lot of posts about that already. Rather, this post depicts my struggle to get into this habit. TL;DR It turned out that it took way too long to get into writing a simple entry with too many steps. Taking out a notebook and starting to write is a lot faster and cheaper.| Ramblings of a cloud engineer
Hello. This one is a quick update. Just a showcase really. I wrote a tool to generate a sample YAML file from a CRD. Given a CRD like this one, it would output a generate yaml sample like this: apiVersion: infrastructure.cluster.x-k8s.io/v1beta1kind: AWSClustermetadata: {} spec: additionalTags: {} bastion: allowedCIDRBlocks: ["string"] ami: stringdisableIngressRules: trueenabled: trueinstanceType: stringcontrolPlaneEndpoint: host: stringport: 1controlPlaneLoadBalancer: additionalSecurityGroup...| Ramblings of a cloud engineer
Hello! I’ve been working on something extensive these days. Like my Grokking Algorithms summary, I now moved on to read Common-Sense Guide to Data Structures and Algorithms. As with Grokking, I created a Go based repo and added notes for each chapter. The repo can be located here. Enjoy, and thanks for reading. Gergely.| Ramblings of a cloud engineer
How to contribute to a new repository Hello Dear readers. Today, I’m going to walk you through a process of contributing into a new repository. If you are new to Go development and would like to contribute somewhere but are at a loss in large repositories, this post will be for you. I selected the top repository in trending Go today. Which is istio. I think that’s sufficiently large and I have no idea about the repository, so I’m going to walk you through my process. I did choose a repo...| Ramblings of a cloud engineer
Hacking on CAPA - The journey of implementing a nontrivial feature in a barely known codebase Hello Dear readers. Today, I would like to write about a project I’ve been working on these past months or so. This is a longer story and hopefully an interesting one to read. I’m going to write about the journey I took while trying to implement IPv6 based Kubernetes cluster for CAPA and EKS. The interesting points of this journey are twofold. First, understanding IPv6 in AWS land and how it’s ...| Ramblings of a cloud engineer
Hello Dear readers. Today, I would like to write about a small pet project of mine called Dependabot Bundler. We’ve all been here: You would like to review these individually, of course, however, having to individually merge them is quite the pain. Isn’t it a lot better to do this instead? A lot nicer and more comfortable, isn’t it? This is done by running dependabot-bundler with the following command:| Ramblings of a cloud engineer
Hello Dear readers. Today’s reader’s digest comes with a repo and some code too! Let’s dive in. Reader’s Digest - January Immune Immune is an absolutely fabulous book. It’s amazing and in time of this pandemic a healthy read to boot. I love biology, but never went too deep into it. This book fascinated me with its colorful images, the style of Kurzgesagt story telling and the man himself, who is the voice of Kurzgesagt. I’ve read it all with his voice in my head.| Ramblings of a cloud engineer
Hello Dear readers. Today, I would like to write about a project design pattern I’ve been using successfully over the past years for various projects. It has many variations and it has some design patterns that are commonly found in the wild, so there is nothing really special about it. Let’s begin. Providers Pattern What is this pattern anyways? It’s a pattern I learned while working at ArangoDB. It’s quite nice and defines package abstractions wonderfully. It somewhat resembles the ...| Ramblings of a cloud engineer
Advent Of Code - Day 12 - Updated A comment from one of my readers prompted me to revise my solution on this trying to do part 2. The suggestions was that instead of using a struct as seen, use int and keep track of the count for small caves that way. I started to do that but got into various problems along the way when I got frustrated with my code, deleted the whole thing and begun again. But this lead me to a small, and better code than before which actually worked.| Ramblings of a cloud engineer
Advent Of Code - Day 15 Today, again, we open up Red Blob Games. It is a great source of information and descriptions. Especially, since this scenario is right up Red Blob’s ally. We need some weighted path finding. And Red Blob has a lovely post on that using the ever famous Dijkstra algorithm with a Priority Queue. Day 15 - Part 1 Let’s get to it. After refreshing my memory about priority queues, I remembered that there is a package and some sample code in Go which implements priority q...| Ramblings of a cloud engineer
Advent Of Code - Day 14 Now we have to do some chemistry. Santa is pretty cool this way. They have a lot of skills mastered and read manuals like an expert. But this also means that manuals are always faulty. But Santa manages to work around these problems rather well. Day 14 - Part 1 So, by reading the description and looking at the outcome, that a string only after 5 iterations will be this big, begs the question if we should build a primitive solution for this. Well, yes, I think we should...| Ramblings of a cloud engineer
Advent Of Code - Day 13 This one was a lot of fun! Matrix folding was a bit fiddly but nothing too serious… Day13 - Part 1 By solving this part, I actually solved both parts. I had to butcher it to not solve both parts because I already dealt with folding both ways. First, we parse our input. We read out both the folding and the numbers first for easy handling later:| Ramblings of a cloud engineer
Advent Of Code - Day 12 EDIT: I revisited this problem and completely revised my solution to it: Day 12 Updated This one is a bit different from our little BFS walk the other day. I didn’t quite remember how DFS works, so I looked at the Wikipedia a bit. Then I remembered that I implemented this previously at some point in a later year. Disclaimer: I didn’t manage to finish part 2. I’m not sure what the bug is, but I moved on. When I’ll have the inspiration, I’ll figure it out. Unle...| Ramblings of a cloud engineer
Advent Of Code - Day 11 Today was an easier one again. It’s been a while since I last did some recursion anyway. At least, that’s how I solved this. I’m pretty sure my solution isn’t the most efficient one, but at least it’s working and it’s not horrible. Day 11 - Part 1 We have some number tracking to do again. This time, instead of fishes, we find ourself an bioluminescent octopus! This time, the rules are neatly outlined to us in a straight forward list. It sort of is like a Co...| Ramblings of a cloud engineer
Advent Of Code - Day 10 Again, a bit of breathing time with an easier one. Although, it can be difficult, if you go down the path of trying to do it via recursion. Day 10 - Part 1 We have to match brackets. There can be a bit of a hassle if you go off on the wrong foot and try to implement it using recursion. But that works perfectly fine as well. But, there is a more elegant solution in which we just use a stack or try matching the last by updating it constantly. The stack is a heck of a lot...| Ramblings of a cloud engineer
Advent Of Code - Day 9 This one was an interesting one, and a step up from previous days. I used a BFS here and I have a fantastic link for the description, usage and appliance of BFS and others like A*. Pop over to Red Blog Games for all the good stuff. There are fantastic articles about all sorts of path finding and walking algorithms. Day 9 - Part 1 We start off again with something easy. Basically, just walk through a map, and find lowest values in it compared to neighbors of a cell. Here...| Ramblings of a cloud engineer
Advent Of Code - Day 8 If yesterday was a bit of a respite from adventuring, today was the boss fight for which we geared up for. The wall of text that hit us in the face, nearly depleted all of our HP. Let’s hope tomorrow brings some potions. Day 8 - Part 1 We start off relatively easy… We have to deal with old school number displays that use segments to display numbers. Luckily, for part one, all we are interested about is to find numbers in the output which are a definitive match again...| Ramblings of a cloud engineer
Advent Of Code - Day 7 Day 7 - Part 1 Today we got a bit of respite with an easy one. Sort of like a Dark Souls bonfire. Let’s list our constraints. Today, we face a giant whale and some crabs in submarines which are less than effective. If they only move horizontally I have no idea how they’ve gotten as far as you. Maybe they pivot from time to time. Or they are indigenous to this region only.| Ramblings of a cloud engineer
Advent Of Code - Day 6 Alright. This time, we are going to learn something that AOC does from time to time… Let’s break it down. Day 6 - Part 1 We start off really easy. We venture around in the sea, looking for nothing but trouble. We have our squid friend with us, whom we were telling everything about vents on the sea floor. Which happen to line up perfectly straight for some weird reason.| Ramblings of a cloud engineer
Advent of Code - Day 5 Alright. Today, we are going to learn something that will be useful to us in the coming days. Let’s see what we are dealing with. Edit: An interesting algorithm to read up on is Bresenham’s line algorithm. Day 5 - Part 1 We deal with vents today. The sea is a dangerous place after all. Fortunately for us, these vents line up perfectly so Santa can dodge them easily. We get a bunch of coordinates which form lines basically. The wording is pretty weird, says one end a...| Ramblings of a cloud engineer
Advent of Code - Day 4 Disclaimer: There is surely a better solution than this one. But I’m fairly okay with this one. And I wrote it, so… Okay, this day was a bit more complex now. But not in understanding what needed to be done, but implementing it. And then, part two of course. Day 4 - Part 1 We met a squid this day and decided to play a round of Bingo with it. Because, why not? Bingo is a simple game. You have several papers on which there are a couple numbers in a square. Someone dra...| Ramblings of a cloud engineer
Advent Of Code - Day 3 Here we go for day 3! This day was a tiny bit more complex. A lot of more things to read for sure! But all the more exciting! Let’s get to it! Day 3 - Part 1 We are dealing with binary numbers. At fist glance it can be daunting, but it’s actually not that complicated. We have to find two numbers. gamma rate and epsilon rate. To do that, we have to parse some binary numbers and then convert them to decimal. The two numbers can be found by looking for the most common ...| Ramblings of a cloud engineer
Advent Of Code - Day 2 Here we go for day 2! These first couple of problems prepare you on how to deal with input mainly. Learn and get used to parsing lines, and get comfortable with data structures. Day 2 - Part 1 We continue the story of Santa and the submarine. This time, he has the task of trying to steer the thing. The task is straightforward. You get a couple of instructions and based on a value you increase or decrease a positions.| Ramblings of a cloud engineer
Advent Of Code - Day 1 Since 2015, Advent Of Code has been a part of my life. I’ve done various posts on it already, but this year will be different. I’m going to blog every day every solution, why and how I’ve gotten to that solution. This isn’t going to be ever December, because I’m usually unable to solve a problem on a single day in the later days from day 10 or so. It takes more time then I have. But I will solve all of them. At the time of this writing, I have completed almost...| Ramblings of a cloud engineer
Prologue Hello all. This is a summary of the book Programmer’s Brain. Let me begin by saying the book is fantastic and you should definitely read it. The research put into it is phenomenal, and the many linked notes, data and reference make for an amazing and compelling read! Not to mention that it is fantastic that someone put actual effort and data into finding out how programmers operate, think and behave. And most of all, how our code behaves and reading, and dealing with code is not ju...| Ramblings of a cloud engineer
Reader’s Digest I thought it would a cool idea if I kept a summary of the things I’ve read or listened to on a monthly basis. Here is July of 2021 so far. Enjoy. Ultimate Go This book is a culmination of Bill Kennedy’s Ultimate Go course and notes which were spawned from them by Hoanh An. Bill Kennedy set out to put everything together and create a notebook which can be read and followed like the personal notes of a student.| Ramblings of a cloud engineer
Reader’s Digest I thought it would a cool idea if I kept a summary of the things I’ve read or listened to on a monthly basis. Here is June of 2021 so far. Enjoy. Hell Divers 6: Allegiance I love the Hell Divers series. I listened to this one on audible as always and it was fantastic, as always. King Xavier Rodriguez. That sounds as bad ass as it is. We follow King Xavier and Rhino, his trusted subordinate into battle with a new threat called Skin Walkers and of course the machines, the de...| Ramblings of a cloud engineer
Blog Refactor Finally, I went back and fixed a lot of old posts and old code entries. I tried to fix and repair links and images, but some are lost forever on some obscure WordPress blog which I used to use. I’m glad though that the code is intact and I could re-read a lot of my old stuff. It’s interesting to see how much I evolved, how much my writing evolved. I used to write a lot of groovy and python and java and bash and ruby.| Ramblings of a cloud engineer
Reader’s Digest I thought it would a cool idea if I kept a summary of the things I’ve read or listened to on a monthly basis. Here is April of 2021 so far. Enjoy. Invincible After seeing it air on Amazon Prime, I had to go and read the comic. It’s quite a lot, but I assure you it’s worth it. Some spoiler alerts… Okay, so we follow this guy, Mark Grayson. He’s Invincible. He is also and alien, called a Viltrumite. I can hardly summaries over 3000 pages of comic books so I’ll try ...| Ramblings of a cloud engineer
Reader’s Digest I thought it would a cool idea if I kept a summary of the things I’ve read or listened to on a monthly basis. Here is March of 2021 so far. Enjoy. The Aurora Database paper The paper about Aurora database from AWS can be found here: Paper. It details the design decision taken to support a highly available, fault tolerant, fast replicating database. They take the following approach… They modified mysql database such as that they only send around the redo log and the redo ...| Ramblings of a cloud engineer
Reader’s Digest I thought it would a cool idea if I kept a summary of the things I’ve read or listened to on a monthly basis. Here is January of 2021 so far. Enjoy. All systems red - Murderbot This book is SHORT. It’s little over 3 hours of listening time. I’m listening at 1.30 so it’s just short of 2 hours. But it’s entertaining. The murderbot series is following a rouge security bot which hacked its own governor module and is self aware and free. But… it kind of hates humans a...| Ramblings of a cloud engineer
Intro Welcome. This is a longer post about how to deploy a Go backend with a React frontend on Kubernetes as separate entities. Instead of the usual compiled together single binary Go application, we are going to separate the two. Why? Because usually a React frontend is just a “static” SPA app with very little requirements in terms of resources, while the Go backend does most of the leg work, requiring a lot more resources.| Ramblings of a cloud engineer
Intro Hi folks. This time, I would like to talk a little bit about code reviews. How do you do code reviews? Don’t hesitate to share it in the comments. How do I do code reviews? Well read on if you would like to know. The Top Down approach If I’m dealing with a small code change, a couple of lines here and there in the odd file first, I’ll try to understand why the review is there? What was it trying to achieve? What’s the goal of the change? Is there a ticket/issue I can read for ba...| Ramblings of a cloud engineer
Intro Hi folks. Today I would like to share a quick “fix” for a problem I’ve seen popping up here and there. That is, if you have a react frontend which is a SPA app but you still want refresh to work. What do I mean by that? Consider the following… The problem You have a SPA app with a react router which navigates the user around. The app calls to a backend api which serves content of some kind. You have the following routes…. login, signup, reset, archive.| Ramblings of a cloud engineer
Intro Hi folks. This is a continuation of the previous post about my Kubernetes infrastructure located here. The two remaining points are to deploy Athens Go proxy and setting up monitoring. Athens Let’s start with Athens. First of all if you are a helm user, Athens has an awesome set of helm charts which you can use to deploy it in your cluster. Located here. I prefer to deploy my own config files, but that’s me. So here is my preferred way of deploying Athens.| Ramblings of a cloud engineer
Intro Hi folks. So there is this workshop from Dave Cheney. And I thought I’d draw a sort of summary of that workshop. Right-click->Open Image for higher resolution. Cheers, Gergely.| Ramblings of a cloud engineer
Intro One morning I woke up and tried to access my gitea just to find that it wasn’t running. I checked my cluster and found that the whole thing was dead as meat. I quickly jumped in and ran k get pods -A to see what’s going on. None of my services worked. What immediately struck my eye was a 100+ pods of my fork_updater cronjob. The fork_updater cronjob which runs once a month, looks like this:| Ramblings of a cloud engineer
Intro Hi folks. Today, I would like to show you how my infrastructure is deployed and managed. Spoiler alert, I’m using Kubernetes to do that. I know… What a twist! Let’s get to it. What What services am I running exactly? Here is a list I’m running at the time of this writing: Athens Go Proxy Gitea The Lounge (IRC bouncer) Two CronJobs Fork Updater IDLE RPG online checker My WebSite (gergelybrautigam.com) Monitoring And it’s really simple to add more.| Ramblings of a cloud engineer
I had a lot of fun using Procreate to re-draw the architecture image I’ve drawn for my distribute face recognition application detailed in this post Distributed Face-Recognition App. Without much fanfare, here is the drawing: Thanks, Gergely.| Ramblings of a cloud engineer
Intro Hi folks! Today I would like to write about a metric that I read in a book called Clean Architecture from Robert Cecil Martin ( Uncle Bob ). Abstract The metrics I mean are Efferent and Afferent coupling in packages. So you, dear reader, don’t have to navigate away from this page, here are the descriptions pasted in: Afferent couplings (Ca): The number of classes in other packages that depend upon classes within the package is an indicator of the package’s responsibility. Afferent c...| Ramblings of a cloud engineer
Living with a Parser| Ramblings of a cloud engineer
Intro Hi folks. Today I thought I show you how you can use Github Actions to deploy a hugo based blog like this one. Let’s dive in. Actions What are actions? If you read the above linked document they are basically steps performed in containers based on some events that happened with your repository. Events can be such as pushing, creating a PR or creating/closing an issue etc. We need an even on a push.| Ramblings of a cloud engineer
Intro Good afternoon folks. Today, I would like to talk a little bit about Cronohub. It’s a Python application which you can use to archive anything from anywhere to anywhere. It uses plugins to archive this versatility. Let me show you some of its features. Main Usage Cronohub is a python application which uses the power and ease of usage of Python to give the user a framework. This Framework can then be used to implement concrete functionality in the form of plugins.| Ramblings of a cloud engineer
Intro Hi folks. I’ve been using the Hugo build for wercker for a long time now. Recent problems occurred though where I did not understand at first what the problem was. It was quite difficult to debug since I did not have too much insight on the wercker build itself. Turned out that I deleted the GITHUB token that the process was using. However, the error message was telling me that a function failed to load some other function. Which was totally unrelated.| Ramblings of a cloud engineer
Go SSH with Host Key Verification| Ramblings of a cloud engineer
go-plugin tutorial| Ramblings of a cloud engineer
Furnace plugins| Ramblings of a cloud engineer
Gotp| Ramblings of a cloud engineer
Keep your git forks updated| Ramblings of a cloud engineer
Intro Alright folks. Settle in and get comfortable. This is going to be a long, but hopefully, fun ride. I’m going to deploy a distributed application with Kubernetes. I attempted to create an application that I thought resembled a real world app. Obviously I had to cut some corners due to time and energy constraints. My focus will be on Kubernetes and deployment. Shall we delve right in? The Application TL;DR| Ramblings of a cloud engineer
Intro So I was at Go Budapest Meetup yesterday, where the brilliant Johan Brandhorst gave a talk about his project based on gRPC using gRPC-web + GopherJS + protobuf. He also has some Go contributions and check out his project here: Protobuf. It’s GopherJS Bindings for ProtobufJS and gRPC-Web. It was interesting to see where these projects could lead and I see the potential in them. I liked the usage of Protobuf and gRPC, I don’t have THAT much experience with them. However after yesterda...| Ramblings of a cloud engineer
Intro Hi folks. Today, I would like demonstrate how to use Ansible in order to construct a server hosting multiple HTTPS domains with Nginx and LetsEncrypt. Are you ready? Let’s dive in. TL;DR What you will need There is really only one thing you need in order for this to work and that is Ansible. If you would like to run local tests without a remote server, than you will need Vagrant and VirtualBox. But those two are optional.| Ramblings of a cloud engineer
Intro Hi folks. In the past couple of months I’ve been slowly updating Furnace. There are three major changes that happened. Let’s take a look at them, shall we? Google Cloud Platform Furnace now supports Google Cloud Platform (GCP). It provides the same API to handle GCP resource as with AWS. Namely, create, delete, status, update. I opted to leave out push because Google mostly works with git based repositories, meaning a push is literary just a push, than Google handles distributing th...| Ramblings of a cloud engineer
Intro Hi All. Today I would like to write about an AWS finger practice. Previously, I wrote about how I build and deploy my blog with Wercker. Since, I’m a cloud engineer and I dislike Oracle and it’s ever expending tenctacles into the abyss, I wanted to switch to use something else. My build and deploy cycle is simple. Commit to Blogsource Repo -> Wercker WebHook -> Builds my blog using Hugo -> Pushed to a Different Repository which my Github Blog.| Ramblings of a cloud engineer
Hi there folks. Just a quick post, of how I went on and created an IKEA manual about Furnace. Page 1: . Page 2: . I drew these using Krita. I mostly used a mouse but I also used a Wacom Bamboo drawing tabled, for sketches and such. Thanks, Gergely.| Ramblings of a cloud engineer
Hey folks. Quick note. Furnace now comes pre-compiled easy to access binaries which you can download and use out of the box. No need to install anything, or compile the source. Just download, unzip and use. Here is the website: Furnace Website. Enjoy, Cheers, Gergely.| Ramblings of a cloud engineer
| Ramblings of a cloud engineer
Intro A while ago, I was added as a curator for a Gem called JsonPath. It’s a small but very useful and brilliant gem. It had a couple of problems which I fixed, but the hardest to eliminate proved to be a series of evals throughout the code. You could opt in using eval with a constructor parameter, but generally, it was considered to be unsafe. Thus, normally when a project was using it, like Huginn they had to opt out by default, thus missing out on sweet parsing like this: $..book[?(@['p...| Ramblings of a cloud engineer
Intro Hi folks. Previously on this blog: Part 1. Part 2. Part 3. In this part we are going to talk about Unit Testing Furnace and how to work some magic with AWS and Go. Mock Stub Fake Dummy Canned Unit testing in Go usually follows the Dependency Injection model of dealing with Mocks and Stubs. ## DI Dependency Inject in short is one object supplying the dependencies of another object. In a longer description, it’s ideal to be used for removing the lock on a third party library, like the ...| Ramblings of a cloud engineer
Intro Hi folks. Previously on this blog: Part 1. Part 2. Part 4. In this part, I’m going to talk about the experimental plugin system of Furnace. Go Experimental Plugins Since Go 1.8 was released, an exciting and new feature was introduced called a Plug-in system. This system works with dynamic libraries built with a special switch to go build. These libraries, .so or .dylib (later), are than loaded and once that succeeds, specific functions can be called from them (symbol resolution).| Ramblings of a cloud engineer
Intro Hi folks. Previously on this blog: Part 1, Part 3, Part 4 In this part, I’m going to talk about the AWS Go SDK and begin do dissect the intricacies of Furnace. AWS SDK Fortunately, the Go SDK for AWS is quiet verbose and littered with examples of all sorts. But that doesn’t make it less complex and less cryptic at times. I’m here to lift some of the early confusions, in hopes that I can help someone to avoid wasting time.| Ramblings of a cloud engineer
Testing.| Ramblings of a cloud engineer
Other posts: Part 2, Part 3, Part 4. Building Furnace: Part 1 Intro Hi folks. This is the first part of a 4 part series which talks about the process of building a middlish sized project in Go, with AWS. Including Unit testing and a experimental plugin feature. The first part will talk about the AWS services used in brief and will contain a basic description for those who are not familiar with them. The second part will talk about the Go SDK and the project structure itself, how it can be use...| Ramblings of a cloud engineer
Hi folks. Just a quick headsup, that older posts and images, may have been lost unfortunately, because I made the terrible mistake, when I migrated over from my old blog, that I forgot to download all the images from the remote host. For lack of options, I deleted the images. :/ Sorry for the inconvencience! Gergely.| Ramblings of a cloud engineer
Intro Hi folks. Today, I would like to write about how to do HTTPS for a website, without the need to buy a certificate and set it up via your DNS provider. Let’s begin. Abstract What you will achieve by the end of this post: Every call to HTTP will be redirected to HTTPS via haproxy. HTTPS will be served with Haproxy and LetsEncrypt as the Certificate provider. Automatically update the certificate before its expiration. No need for IPTable rules to route 8080 to 80. Traffic to and from you...| Ramblings of a cloud engineer
Intro Hi Folks. This is a follow up on my previous post about Google Sign-In. In this post we will discover what to do with the information retrieved in the first encounter, which you can find here: Google Sign-In Part 1. Forewords The Project Everything I did in the first post, and that I’m going to do in this example, can be found in this project: Google-OAuth-Go-Sample. Just to recap, we left off previously on the point where we successfully obtained information about the user, with a se...| Ramblings of a cloud engineer
Intro Hey folks. So, there is this project called Huginn which I absolutely love. But the thing is, that for a couple of scrappers ( at least for me ), I don’t want to spin up a whole rails app. Hence, I’ve come up with RScrap. Which is a bunch of Ruby scripts run as cron jobs on a raspberry pi. And because I dislike emails as well, and most of the time, I don’t read them, I opted for a nicer solution. Enter the world of Telegram. They provide you with the ability to create bots. You ba...| Ramblings of a cloud engineer
Missing out of jobs because of LeetCode At the end of the last year, my previous workplace ( Weaveworks ) went bankrupt. I found myself without a job. I didn’t have to interview for a long time and I certainly wasn’t planning on it any time soon. I enjoyed my work. Thus, I started to learn a bit because I forgot how to interview. I refreshed my knowledge on LeetCode, I did some exercises, I read some books, post, whatever. I refreshed my algo knowledge because that’s what people most li...| skarlso.github.io