Nice! Thanks for writing that up and for remembering my interest 🙂. I guess I just got lucky? I made my own very simple theme years ago, and haven’t been badly bitten by Hugo’s upgrades.
Definitely agree that their docs leave something to be desired though… when all you want is a simple homepage and some chronological posts you don’t really need 80% of Hugo’s docs and they don’t do a good job of making the 20% you do want clear.
Unfortunately not on the store yet, it’s built with Jetpack Compose so things are a bit alpha-stage and I have significant UX work ahead of me before it is ready for the wider world.
I’m aware there’s no search API, I was considering sinning and resorting to HTML parsing via Jsoup since this site’s markup is well structured and straightforward.
Waiting on Covid test results (as it’s mandatory to return to work – I don’t think I have Covid, just a cold)
Working on a lot of programming I’ve been backed up on (no time since I work)
Working on my anxiety
Attempting to not impulse spend on every good artist I find on Bandcamp
Trying not to travel the downward mental spiral of software licensing (I almost flat out quit software development because of it, my solution was to write my own license)
My partner works at the local Domestic Violence shelter, which is the perfect combination of small confined coliving space for strangers and their kids in a locked door building that requires 24 hour supervision (e.g intakes). Thus far 1 board member & 2 staff members have tested positive, with 2 more symptomatic. Fortunately no one in the residency looks like they’ve gotten it yet.
Fixing middleware rules in treafik
Got a Kobo ereader. I’m going to work on getting calibri-web & Wallabako running on it. I might even read something on it.
I have 5 projects that have been rattling around in the back of my mind, so I’ll probably hunker down and work on one. Haven’t decided which one I actually want to mess around with…
A generic API (similar to what Standard Notes uses) designed for End to End encryption, but also with the option to share objects to other people
A self-hosted, easy-to-deploy markdown notes app
A self-hosted, easy-to-deploy todo list/task manager app
Refactoring my chat framework to not use gRPC and possibly replace the internal queuing mechanism with AMQP
Reformatting all 5 rPis I’ve got around and starting attempt #3 to set up a k8s cluster (arm vs arm64 has been really frustrating)
On the non-technology side, getting outside a bit and just enjoying fall in the Pacific North West. The leaves are changing colors and it’s really beautiful over here.
Hello, I’ve had success with k3s on a cluster of RPi3. These boards support arm64 but feature 2 GB RAM and k8s 1.17 was not able to sustain the master node. I tried removing the etcd cluster to my proliant microserver, still I had many OOM kills and hiccups due to high CPU usage.
With k3s, I had been able to run a cluster locally rather smoothly. What I miss is IPv6 support (I’d like to move dnscrypt to the k3s cluster). I’m running some apps and use it a local k8s environment when I write applications against the kubernetes API.
Thanks for the info! I actually got a few 8gb rPi 4s in order to make it easier to run the whole thing… I’ve just been having bad luck with various things.
Firstly is OS support - the official images are all 32 bit - there’s a beta for 64 bit Raspbian builds but it’s got a bunch of extra stuff on it. Because of that I tried ArchLinuxArm, but not everything is well supported there (most k8s packages need to be built from source). Once they have official 64 bit lite images, I assume things will be a little bit simpler.
Second, I’ve had an issue with nodes just not getting network properly on startup (or maybe it isn’t even powering on all the way?) which makes things fairly hard to debug by itself.
Finally, there are so many concepts to learn at once. When I finally got the nodes all running, I had to set up container networking (which I had issues with because some of the more popular ones don’t actually have builds for arm64 yet which ended up borking part of the cluster).
And after that there’s setting up an ingress, cert-manager, followed by actually using it…
I came across the problems you describe. I’m leaving some pointers in case you want to know how I solved the issues I came across.
For arm64 images that run on RPi3 rather smoothly I would proposed GNU/Debian.
Make sure you add and properly configure chrony to all your nodes, otherwise you might run into problems with API certificates due to differences in seconds or milliseconds.
Additionally, I had install rng-tools package to get faster seeding.
Regarding the CNIs, I would start with Flannel which is the easiest one IMO. The most interesting is Cillium which supports aarch64.
I’m will keep writing my operating system in Rust. It’s a non trivial process, but really enjoying so far! Also, wrt some years ago, nowadays there a lot of more resources so I think it’s quite easier to get started.
The taught part is understanding and deciding when knowledge is enough to moving on to implementing the thing!
In any case, it’s been very fun and satisfying so far.
In 2020 some languages not popular, I’m talking about PHP.
But my project is on PHP and has biggest impact of all my projects (https://medv.io).
So I’m working on DevOps tool on PHP for PHP world: https://github.com/deployphp/deployer
Pushing forward to release v7 for a few months straight.
What do you think of a spooky Halloween themed dungeons and dragons session? Math might not work out super well for a 5 year old, but it’s all just interactive story telling.
Planning to write a Cloudwatch Exporter for Prometheus in Golang (yet another yet another cloudwatch exporter?). Have been using the Cloudwatch Exporter by Prometheus at $WORK, but we have a lot of metrics which makes the scraping very slow! We have also tried Grafana’s Cloudwatch datasource, which is just as slow if not worse (and we need alerts). The other exporter (yace), is written in Golang and looks pretty good. But, as a personal preference, I’d like to write something that’s native to VictoriaMetrics over Prometheus (mainly for simplicity and performance benefits).
Other than that, I hope to spend some quality time with my family. I also have a leftover library that I need to finish, clean up, and write a Telegram bot for, but that probably is a post (and work) for another weekend!
Make sure the exporter behaves properly. I’ve came across a faulty prometheus exporter for RDS which did not close connections and resulted in 6k month additional bill because this behaviour led to many concurrent cloudwatch API hits per second.
Ah, tough luck! Seems like the exporter connected to the AWS APIs by itself instead of using an SDK/wrapper and then forgot to close the connections. In my case, this issue is taken care of since I am using the AWS Go SDK, which handles all connections to AWS.
Also, if you do not mind me asking, how long was it before you figured out that it was the exporter that caused your bills to go up by that amount? 6k seems like a lot for API calls.
Also, if you do not mind me asking, how long was it before you figured out that it was the exporter that caused your bills to go up by that amount? 6k seems like a lot for API calls.
Took me three months. There was a lot going on in that AWS account at the time. My first guess was that the “CloudWatch” cost spike was due to AWS EKS auditing logs (multiple clusters). The third month I close all CloudWatch logs and saw that the day-to-day expenses didn’t drop significantly, so I start digging and ended up to this exporter. Fun fact: I removed the exporter without notifying the team that requested the installation, it’s been ~1+ year, no one noticed.
The RDS nowadays offers the performance insights which is okay-ish for that use case. There are standard alerts based on CPU, RAM and Network, so it’s all good ;-)
A fair amount of CAD for shelves, a raw stock rack, and an updated server rack w/ 3D printed accessories.
Also putting the final touches on a set of shell scripts that takes in an Distro/Board/bootstrapping script combo and spits out a uSD-ready image that’s completely ready to go. And trivially repeatable.
And now I’m going to rewrite it from scratch, using postgresql as a work queue, to make all the operations async and split into smaller ones as granular as possible. Obviously, this is an overkill for a bot that literally nobody uses, but the point with hobby projects is to experiment and to learn, right?
Next – a search engine over a dozen or so internet book stores that my girlfriend searches manually every time she wants to order something. One user is better than none.
Writing a blogpost summarizing my progress with wasmcloud over the last week. I bought two domains for the project (one for handlers to be executed on and another for everything else) if only to make sure others don’t buy them instead. I’m really getting places with this now!
So far, taking the cargo bike out in the rain to the farmers market. I had planned to put a new chain and sprocket on it and tighten the loose headset, but that can wait for a drier day.
In hacking time, progressing my quest to remove Monit from NixWRT and maybe refining the nixwrt-in-qemu target a bit to make userland development a bit less clunky. For context, nixwrt is my pet project that uses Nixpkgs and the Nix cross-compilation toolchains to build software images for the kind of embedded MIPS devices that you’d usually put OpenWrt on .
I’m on call this weekend so my movement is restricted.
Saturday:
Chores, daemon/network programming, and reading TLPI.
I’ve learned that are some pretty significant differences in daemon() implementations. The FreeBSD commit that added catching SIGHUP gives a rationale for doing so.
glibc - forks once, doesn’t temporarily catch SIGHUP.
This behavior makes sense on a BSD but Linux is System V. Daemons can reestablish a controlling terminal even though they called a function to prevent doing so.
APUE daemonize() - forks twice, temporarily catches SIGHUP, calls exit() instead of _exit().
Calling exit() means that any functions registered with atexit() are invoked when the parent process exits. This is probably not the desired behavior.
Finish putting the winter bike together (I stripped parts off it to upgrade my summer bike during the summer.) Needs chain fitting, gears adjusting and mudguards fitting. Might even ride the thing, who knows.
Sort out a bunch of household admin I’ve been putting off, things like sorting out energy provider renewal, etc.
Poking my sandbox server to try and modernise my home stack. Completely for learning purposes, the existing home server is still performing admirably. Couple of things I want to hammer out to understand in my head on a new stack though. Learning is fun!
The baby is now 6 weeks old so while she is getting to be less of a handful, she’s still eating most my time… that said, I made a little white noise generator whose gui code with my own library looks like this right now:
Yes, the widgets are just annotations attached to the struct, which is pretty cool. The library actually creates the controls and connects the events to the data (the “algorithm” is an enum, so it knows to make a drop-down selection from its options automatically, the pause is a function so the button just calls it on press, and the int volume is just wired right into the slider widget).
Pretty cool, I’m fairly happy with it for simple things like this. But I’d like to add some kind of layout annotations too - currently it just stacks the widgets in the window vertically. I’m tempted to do something kinda like css grid’s ascii art template… or something. I don’t know yet. But perhaps I can figure it out during naps over the weekend and get something coded.
Campaigning for Joe Biden because I hate myself
I begrudgingly signed up to phone bank for Biden after doing texting and phone campaigns for Bernie during the primaries. Feels bad man
May I ask why it feels so bad?
I feel that Joe Biden is a piece of shit.
Porting my Hugo blog to Zola. Hugo has become a mess to deal with but that warrants a separate detailed post of why I’m doing this migration.
I’d be interested to read that post. I recently updated my tiny neglected Hugo site and concluded that I was pretty happy with how it’d held up over the years. Then again, it’s hard to imagine a simpler site than mine :-)
Here you go :) https://lobste.rs/s/byh0mf/migrating_my_blog_zola
Nice! Thanks for writing that up and for remembering my interest 🙂. I guess I just got lucky? I made my own very simple theme years ago, and haven’t been badly bitten by Hugo’s upgrades.
Definitely agree that their docs leave something to be desired though… when all you want is a simple homepage and some chronological posts you don’t really need 80% of Hugo’s docs and they don’t do a good job of making the 20% you do want clear.
Does Zola handle deploying to S3 and CloudFront?
Yep, I’d read your post and definitely think you got lucky there :) My experience with upgrades has been quite contrasting to yours.
Anyway, I don’t see docs for deploying on S3/Cloudfront here but the process should be similar to Hugo. It just generated a bunch of static assets.
I did the same thing about a year ago. So far it has definitely been worth it, Zola is pretty awesome.
Adding tests to my lobsters client for Android, then probably building out Search or some other functionality.
https://github.com/msfjarvis/compose-lobsters
Is this on the store so I can take a look without building it myself?
How are you planning on doing search? I didn’t know there was an API for that
Unfortunately not on the store yet, it’s built with Jetpack Compose so things are a bit alpha-stage and I have significant UX work ahead of me before it is ready for the wider world.
I’m aware there’s no search API, I was considering sinning and resorting to HTML parsing via Jsoup since this site’s markup is well structured and straightforward.
My partner works at the local Domestic Violence shelter, which is the perfect combination of small confined coliving space for strangers and their kids in a locked door building that requires 24 hour supervision (e.g intakes). Thus far 1 board member & 2 staff members have tested positive, with 2 more symptomatic. Fortunately no one in the residency looks like they’ve gotten it yet.
I have 5 projects that have been rattling around in the back of my mind, so I’ll probably hunker down and work on one. Haven’t decided which one I actually want to mess around with…
On the non-technology side, getting outside a bit and just enjoying fall in the Pacific North West. The leaves are changing colors and it’s really beautiful over here.
Hello, I’ve had success with k3s on a cluster of RPi3. These boards support arm64 but feature 2 GB RAM and k8s 1.17 was not able to sustain the master node. I tried removing the etcd cluster to my proliant microserver, still I had many OOM kills and hiccups due to high CPU usage.
With k3s, I had been able to run a cluster locally rather smoothly. What I miss is IPv6 support (I’d like to move dnscrypt to the k3s cluster). I’m running some apps and use it a local k8s environment when I write applications against the kubernetes API.
Thanks for the info! I actually got a few 8gb rPi 4s in order to make it easier to run the whole thing… I’ve just been having bad luck with various things.
Firstly is OS support - the official images are all 32 bit - there’s a beta for 64 bit Raspbian builds but it’s got a bunch of extra stuff on it. Because of that I tried ArchLinuxArm, but not everything is well supported there (most k8s packages need to be built from source). Once they have official 64 bit lite images, I assume things will be a little bit simpler.
Second, I’ve had an issue with nodes just not getting network properly on startup (or maybe it isn’t even powering on all the way?) which makes things fairly hard to debug by itself.
Finally, there are so many concepts to learn at once. When I finally got the nodes all running, I had to set up container networking (which I had issues with because some of the more popular ones don’t actually have builds for arm64 yet which ended up borking part of the cluster).
And after that there’s setting up an ingress, cert-manager, followed by actually using it…
I came across the problems you describe. I’m leaving some pointers in case you want to know how I solved the issues I came across.
For arm64 images that run on RPi3 rather smoothly I would proposed GNU/Debian.
Make sure you add and properly configure chrony to all your nodes, otherwise you might run into problems with API certificates due to differences in seconds or milliseconds.
Additionally, I had install
rng-tools
package to get faster seeding.Regarding the CNIs, I would start with
Flannel
which is the easiest one IMO. The most interesting isCillium
which supports aarch64.Good luck :-)
I’m will keep writing my operating system in Rust. It’s a non trivial process, but really enjoying so far! Also, wrt some years ago, nowadays there a lot of more resources so I think it’s quite easier to get started. The taught part is understanding and deciding when knowledge is enough to moving on to implementing the thing! In any case, it’s been very fun and satisfying so far.
Oncall weekend. Probably staying in, listening to some podcasts, and attending a small halloween “celebration” at night.
I’m also hoping Americans vote for Biden - Stephen Miller has a scheme to kick me out of the USA if Trump wins.
I will be thinking about writing my resignation letter next Monday. Maybe find some time to plan or think about what I am going to be doing next…
Playing The Last of Us Part 2. Sometimes you need a break.
Last week about all of my siblings have been quarantiened (teachers, and partners of techers…) so I did all of their “panic” shopping, too.
My battery feels empty.
In 2020 some languages not popular, I’m talking about PHP. But my project is on PHP and has biggest impact of all my projects (https://medv.io). So I’m working on DevOps tool on PHP for PHP world: https://github.com/deployphp/deployer Pushing forward to release v7 for a few months straight.
Figuring out how to make Halloween fun for a 5 and a 9 year old during a pandemic.
What do you think of a spooky Halloween themed dungeons and dragons session? Math might not work out super well for a 5 year old, but it’s all just interactive story telling.
Planning to write a Cloudwatch Exporter for Prometheus in Golang (yet another yet another cloudwatch exporter?). Have been using the Cloudwatch Exporter by Prometheus at
$WORK
, but we have a lot of metrics which makes the scraping very slow! We have also tried Grafana’s Cloudwatch datasource, which is just as slow if not worse (and we need alerts). The other exporter (yace), is written in Golang and looks pretty good. But, as a personal preference, I’d like to write something that’s native to VictoriaMetrics over Prometheus (mainly for simplicity and performance benefits).Other than that, I hope to spend some quality time with my family. I also have a leftover library that I need to finish, clean up, and write a Telegram bot for, but that probably is a post (and work) for another weekend!
Make sure the exporter behaves properly. I’ve came across a faulty prometheus exporter for RDS which did not close connections and resulted in 6k month additional bill because this behaviour led to many concurrent cloudwatch API hits per second.
Ah, tough luck! Seems like the exporter connected to the AWS APIs by itself instead of using an SDK/wrapper and then forgot to close the connections. In my case, this issue is taken care of since I am using the AWS Go SDK, which handles all connections to AWS.
Also, if you do not mind me asking, how long was it before you figured out that it was the exporter that caused your bills to go up by that amount? 6k seems like a lot for API calls.
Took me three months. There was a lot going on in that AWS account at the time. My first guess was that the “CloudWatch” cost spike was due to AWS EKS auditing logs (multiple clusters). The third month I close all CloudWatch logs and saw that the day-to-day expenses didn’t drop significantly, so I start digging and ended up to this exporter. Fun fact: I removed the exporter without notifying the team that requested the installation, it’s been ~1+ year, no one noticed.
Damn, that’s sadly pretty amazing. AWS is a maze that one can get easily lost in.
Haha, so is there some replacement for the exporter that is being run for the metrics? Or yeet and no monitoring?
The RDS nowadays offers the performance insights which is okay-ish for that use case. There are standard alerts based on CPU, RAM and Network, so it’s all good ;-)
A fair amount of CAD for shelves, a raw stock rack, and an updated server rack w/ 3D printed accessories.
Also putting the final touches on a set of shell scripts that takes in an Distro/Board/bootstrapping script combo and spits out a uSD-ready image that’s completely ready to go. And trivially repeatable.
Just finished first version of my HN reply notifier not: https://github.com/golergka/hn-comment-bot
And now I’m going to rewrite it from scratch, using postgresql as a work queue, to make all the operations async and split into smaller ones as granular as possible. Obviously, this is an overkill for a bot that literally nobody uses, but the point with hobby projects is to experiment and to learn, right?
Next – a search engine over a dozen or so internet book stores that my girlfriend searches manually every time she wants to order something. One user is better than none.
Converting my API to be async where necessary. Rust async await is nice enough, but definitely has some sharp corners.
Working on painting. I bought oils and acrylics and can’t wait to get into it.
Writing a blogpost summarizing my progress with wasmcloud over the last week. I bought two domains for the project (one for handlers to be executed on and another for everything else) if only to make sure others don’t buy them instead. I’m really getting places with this now!
Finishing Dune Messiah (the second book in the Frank Herbert series). Then moving over to the Larry McMurty Thulia series.
So far, taking the cargo bike out in the rain to the farmers market. I had planned to put a new chain and sprocket on it and tighten the loose headset, but that can wait for a drier day.
In hacking time, progressing my quest to remove Monit from NixWRT and maybe refining the nixwrt-in-qemu target a bit to make userland development a bit less clunky. For context, nixwrt is my pet project that uses Nixpkgs and the Nix cross-compilation toolchains to build software images for the kind of embedded MIPS devices that you’d usually put OpenWrt on .
I’m on call this weekend so my movement is restricted.
Saturday:
Chores, daemon/network programming, and reading TLPI.
I’ve learned that are some pretty significant differences in daemon() implementations. The FreeBSD commit that added catching SIGHUP gives a rationale for doing so.
This behavior makes sense on a BSD but Linux is System V. Daemons can reestablish a controlling terminal even though they called a function to prevent doing so.
Calling exit() means that any functions registered with atexit() are invoked when the parent process exits. This is probably not the desired behavior.
Sunday:
Chores, programming, laundry.
Phase one of the apartment move.
The baby is now 6 weeks old so while she is getting to be less of a handful, she’s still eating most my time… that said, I made a little white noise generator whose gui code with my own library looks like this right now:
Yes, the widgets are just annotations attached to the struct, which is pretty cool. The library actually creates the controls and connects the events to the data (the “algorithm” is an enum, so it knows to make a drop-down selection from its options automatically, the pause is a function so the button just calls it on press, and the int volume is just wired right into the slider widget).
Pretty cool, I’m fairly happy with it for simple things like this. But I’d like to add some kind of layout annotations too - currently it just stacks the widgets in the window vertically. I’m tempted to do something kinda like css grid’s ascii art template… or something. I don’t know yet. But perhaps I can figure it out during naps over the weekend and get something coded.