Bounded channels is a common way of limiting the concurrency in Go applications.
From deckarep/gos-extended-concurrency-semaphores-part-1-5eeabfa351ce">this article you can learn some theory behind this approach as well as about the sync/semaphore
package. I didn’t know about the latter.
#programming #go
Here’s some original content, folks!
I wrote an article on how to create a workflow in GitHub Actions that is triggered with a comment.
There are some caveats with such workflows in GHA. Also, you have to do some additional tweaks to make it better from the UX perspective.
You can read the article:
- In my blog
- On Substack
Hope, you’ll enjoy it!
#github #cicd
I know that many of you, folks, do not like Azure or Microsoft in general. Yet, this is one of the major cloud providers.
So, today I want to share with you a bundle of the materials to help you to get ready for Azure exams.
Ace your Microsoft certification exams bundle on Humble Bundle.
#books
Just a small announcement: there won’t be many posts this week because I’m traveling.
You may also have noticed that there was no Sunday email last week. Well, I didn’t forget, but since this week is basically out, I’ll send out the newsletter this Sunday instead.
However, I’d like to share with you this book bundle about maths for programmers.
BTW, one of the books in this bundle is written by an Ukrainian (an article is in Ukrainian).
#books
Yet another observability post: Datadog Alternative: When to Move Out? .
This article describes a fairly simple experiment: what would it cost to run Datadog compared to Prometheus & Thanos on different scales.
Although, the scope of the experiment was somewhat limited (no logs, no APM), it provides some numbers that you can use while evaluating different observability solutions.
The bottom line is: with the growth of your technological footprint, Datadog price grows faster compared to the Prometheus stack. Which is true for any SaaS solution compared to self-hosted, I believe.
However, another important considerations is that free software is not "free". You cannot just replace a vendor with an open-source tool and call it a day. You require engineering time to support and maintain those platforms. Therefore, on a smaller scale it might much more effective to use SaaS (especially, if you don't have experts in a given domain in your company yet).
#observability
lingxiankong/best-practice-of-using-argo-workflows-3162708f1bd5">Some good practices for Argo Workflows. I'm not super familiar with this tool, so I'd just list the points here:
- Use common templates
- Limit parallelism to control cluster resources
- Avoid nested loops
- Collect metrics from your workflows
- Use lifecycle hooks
- Control long-running workflows or break down long workflows into separate smaller ones
- Integrate with Argo Events
#argocd #cicd #kubernetes
A way to add existing Helm applications into ArgoCD.
This approach could be helpful if you migrate things to Argo or when you pre-setup specific things into a cluster with Helm but still want to manage those with Argo afterwards.
#kubernetes #argocd #helm
A very cool bundle today! DevOps 2023 bundle by O’Reilly.
As usual, you can pay starting from ~€23 to unlock the whole bundle. And is has some good books like “Implementing SLOs” and “Database Reliability Engineering”.
#books #bundle
Today’s CatOps Digest:
https://newsletter.catops.dev/p/catops-digest-2023-07-23?sd=pf
#digest #newsletter
It may happen that you have a catch-all repository to store some work that may or may not be important. Notice, it's not quite a monorepo pattern, rather a single junkrepo. Like, I saw devops
, utils
, tools
, and similar repositories in quite a few companies.
But what if some things from those repos are actually important, and you want to have a dedicated home for those things? Here's a guide by GitHub that explains how to separate things from a repository while saving the Git history.
This guide is created by GitHub, but it should work with any Git repository. Although, I only tested it with GitHub.
Enjoy!
#git #github
Today's Donations Monday request comes from our friends' channel - Ukrainian DevOps Digest.
They are raising funds for a retransmitter for the 28th brigade.
Here's the link to the Monobak jar: https://send.monobank.ua/jar/2cEiqdkjQ3
Pro-tip: if you copy the Monobank jar link into your mobile browser, you should be able to select Apple / Android Pay as a payment method and thus pay from a different card. It doesn't work all the time, but this is a nice workaround in case you don't have a Monobank or another Ukrainian card.
#donations #Ukraine
Another article from our subscribers.
My experience migrating my infrastructure from Terraform to Pulumi is a story of the IaC migration to… well, Pulumi. A nice thing about this article is that it has some concrete examples of code as well as recommendations out of experience.
Yet, the final thoughts are somewhat questionable. For example, the claim that Pulumi is faster without any measurements.
BTW, I also wrote an article about Pulumi 3 years ago. It’s obviously outdated today but it’s interesting to observe how the project evolves.
P.S. If you want to share an article or just have a casual conversation, do not hesitate to join our chat (chat is in Ukrainian).
#pulumi #terraform #iac
UA Responders is a foundation that raises funds for tactical medicine, protective gear, and field hospitals.
And some drones, of course.
#donations #Ukraine
Git is simply too hard.
I have mixed feelings about this article. On one hand, Git is too hard indeed. I personally google certain Git operations from time to time.
On another hand, this article doesn't provide any alternatives or ideas on how to fix this situation. Also, a lot of Git complexity comes from its distributed nature. Distributed systems are much harder to architect compared to centralized ones. Although, currently, we're mostly using Git as a centralized system nowadays.
So, I'll just add this well-known comics here.
#git
Small fundraiser campaigns are good to cover local needs right here, right now.
Currently, my wife is raising 150k UAH to get 18 complete medical kits to the 27th battalion of the 67th brigade of the AFU.
Her brother's girlfriend's relative serves in that battalion.
Requisites for donations:
🎯 Goal: 150 000.00 ₴
🔗 Monobank Jar:
https://send.monobank.ua/jar/5zCptYx1sb
💳 Card number
5375 4112 0823 3556
Thank y'all for your support!
#donations #Ukraine
Avoiding Pitfalls in Go is a good article for those who just starts their journey with this language.
Yet, there are some aspects that are useful even if you use it already. Especially, if your use cases were limited to some simple code.
#programming #go
For the #Donations Monday I would like to remind you about the UA Responders foundation that collects funds for tactical medicine, hospitals and other medical equipment.
I trust these people and I know a couple of them personally.
Thank you for supporting #Ukraine!
AWS NLB now supports security groups! This is amazing and it would’ve prevented a couple of questionable architectural decisions on my side in the past.
P.S. Yet, the most discussed news is the licensing changes by HashiCorp. Unpopular opinion here: nothing changes for you as a practitioner. However, companies like Spacelift and Terramate got hit. Also, big huge cloud providers won’t be able to adopt “Terraform as a Service”. That’s it. Survives the one who can adapt to the new realities the best. And the new realities is that people pay for “service platforms” and not for the code written.
#aws #hashicorp
This Monday, I want to share with you this list of charities you can donate to as well as other ways to support Ukraine.
http://stand-with-ukraine.pp.ua/
#donations #Ukraine
A brief overview of the modern Observability architectures, as well as some ideas on how to consolidate and optimize your Observability stack.
via Sysadmin Tools
#observability
For today’s Donations Monday let’s help Pavlo Bondarenko to close this week’s goal of 461252,5 UAH for drones.
- Pavlo’s requisites
- Naya’s requisites
#donations #Ukraine
Dead simple method of profiling your Go applications.
tl;dr:
- Import the github.com/pkg/profile
package
- Add defer profile.Start().Stop()
into your main
function for CPU profile
- Add defer profile.Start(profile.MemProfile).Stop()
for memory profile
#programming #golang
Today's Donations Monday is for the joint fundraiser by Come Back Alive and Nova Posta - Protect the Sky.
The goal is to raise $8.9 million for Air Defense communications and mobile command posts.
#donations #Ukraine
Friday is a good day to listen to a new episode of our CatOps voice chat!
This time we spoke about investments as well some cultural differences when working in the international teams. Plus, one of the members of our community exposed a scheme of how ruskies are trying to hire people in Ukraine.
The episode is in Ukrainian and available on:
- YouTube
- Substack
- Spotify
- Apple Podcasts
- Google Podcasts
#podcast #говорилка
I personally don’t know this publisher. Yet, the titles of some books look interesting. For example, there is a book about FinOps as well as “Kubernetes for Jobseekers” (lol).
This is a Cloud OPS and Development bundle by BPB.
If you know this publisher or have any feedback on these books, feel free to share your impressions in our chat (chat is in Ukrainian).
As usual, you can pay different amount to unlock different number of books. This bundle is active for 20 more days.
#books
Wanna share a video with you about WTF is Platform Engineering.
https://youtu.be/ghzsBm8vOms
I would say it's good enough. Mostly because the reality is usually more complex than the theory. However, if you were wondering WTF is Platform Engineering, this is a good start!
(and no, platform engineer is a specialization, not profession!)
#platform_eng
Handling concurrency is hard, even if it was made simple.
deckarep/the-go-1-19-atomic-wrappers-and-why-to-use-them-ae14c1177ad8">The Go 1.19 Atomic Wrappers and why to use them explores the sync/atomic package which was introduced in Go 1.19 and use cases for it.
I haven't used this one personally, but we have sync.Map
in one of the projects to get the results from goroutines in one place.
#go #programming
A system design exercise for on-premise infrastructure. The article is called DevOps Big Picture (On-Premises). However, it only explores a single example with a limited scope and a lot of assumptions. Yet, you still can use this diagram as a baseline in system design interviews, for example.
Unfortunately, data layer is completely missing there. I mean, data layer is the most difficult one, so a lot of people are omitting it on purpose. I cannot blame them for that. So, you can have a mental exercise and think about how would you manage the persistent data in the proposed infrastructure 😉
#design #kubernetes