41554 blogs · [ { "id": "01a0877f-b5b5-7187-9f96-95b52501060a", "title": "Building a macOS Power‑Usage Prometheus Exporter with Supervised MiniMax 2.5", "url": "https://gruchalski.com/posts/2026-04-23-macos-power-consumption-exporter/", "published_at": "2026-03-22T23:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149e9910525", "title": "The leading thought", "url": "https://gruchalski.com/posts/2025-11-04-the-leading-thought/", "published_at": "2025-11-03T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149e9aed6be", "title": "Maintaining a fork of a repository", "url": "https://gruchalski.com/posts/2024-03-03-maintaining-a-fork-of-a-repository/", "published_at": "2024-03-02T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ea8c7942", "title": "Warning: Istio is being downgraded", "url": "https://gruchalski.com/posts/2023-11-20-warning-istio-is-being-downgraded/", "published_at": "2023-11-19T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149eab92528", "title": "Istio VM workloads", "url": "https://gruchalski.com/posts/2023-11-02-istio-external-workloads/", "published_at": "2023-11-01T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149eb2ea57a", "title": "YugabyteDB build infrastructure upgrade", "url": "https://gruchalski.com/posts/2023-07-21-yugabytedb-build-infrastructure-upgrade/", "published_at": "2023-07-21T20:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149eb8d30e1", "title": "yq - the yaml power tool", "url": "https://gruchalski.com/posts/2023-07-10-yq-the-yaml-power-tool/", "published_at": "2023-07-10T20:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ebb67202", "title": "Windows Terminal text selection productivity tips", "url": "https://gruchalski.com/posts/2023-07-10-windows-terminal-text-selection-productivity-tips/", "published_at": "2023-07-09T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ec302e96", "title": "Istio, cert-manager, Let’s Encrypt and HTTPS redirect", "url": "https://gruchalski.com/posts/2023-07-09-istio-cert-manager-lets-encrypt-and-https-redirect/", "published_at": "2023-07-08T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ed2ee1e0", "title": "Privacy settings updates", "url": "https://gruchalski.com/posts/2023-07-06-privacy-settings-updates/", "published_at": "2023-07-05T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ed8c3571", "title": "What does not scale in software", "url": "https://gruchalski.com/posts/2022-10-30-what-does-not-scale-in-software/", "published_at": "2022-10-31T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ee85dd92", "title": "Zanzibar with Prolog - summary", "url": "https://gruchalski.com/posts/2022-10-22-zanzibar-with-prolog-summary/", "published_at": "2022-10-21T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149ef7d8ed4", "title": "Zanzibar with Prolog, week 2", "url": "https://gruchalski.com/posts/2022-09-10-zanzibar-with-prolog-week-2/", "published_at": "2022-09-09T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149eff33ea2", "title": "Zanzibar-style ACLs with Prolog", "url": "https://gruchalski.com/posts/2022-09-03-zanzibar-style-acls-with-prolog/", "published_at": "2022-09-02T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149f09a29b3", "title": "I enjoyed modern Fortran", "url": "https://gruchalski.com/posts/2022-08-28-i-enjoyed-modern-fortran/", "published_at": "2022-08-27T22:00:00+00:00" }, { "id": "01a0877f-b5b6-71ff-a04f-e149f0c58fc2", "title": "Learning Rust", "url": "https://gruchalski.com/posts/2022-08-20-learning-rust/", "published_at": "2022-08-19T22:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9225a4a163", "title": "Istio canary upgrades", "url": "https://gruchalski.com/posts/2022-06-19-istio-canary-upgrades/", "published_at": "2022-06-18T22:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922609fb60", "title": "Streaming Keycloak events", "url": "https://gruchalski.com/posts/2022-06-18-streaming-keycloak-events/", "published_at": "2022-06-18T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e92264d0de4", "title": "Zanzibar-style ACLs with OPA Rego", "url": "https://gruchalski.com/posts/2022-05-07-zanzibar-style-acls-with-opa-rego/", "published_at": "2022-05-07T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9226902eb7", "title": "Private go modules with multiple git identities", "url": "https://gruchalski.com/posts/2022-04-28-private-go-modules-with-multiple-git-identities/", "published_at": "2022-04-28T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e92271402d0", "title": "OPA: logical or conditions", "url": "https://gruchalski.com/posts/2022-04-27-opa-logical-or-conditions/", "published_at": "2022-04-27T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e92271bd1b7", "title": "YugabyteDB CDC SDK beta, a high level overview", "url": "https://gruchalski.com/posts/2022-03-19-yugabytedb-cdc-sdk-beta-a-high-level-overview/", "published_at": "2022-03-19T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9227917012", "title": "YugabyteDB change data capture", "url": "https://gruchalski.com/posts/2022-02-23-yugabytedb-change-data-capture/", "published_at": "2022-02-23T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9227a423a1", "title": "Identifying Postgres features unsupported in YugabyteDB", "url": "https://gruchalski.com/posts/2022-02-21-identifying-postgres-features-unsupported-in-yugabytedb/", "published_at": "2022-02-21T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9227ab837f", "title": "Keycloak 17.0.0 with TLS in Docker compose behind Envoy proxy", "url": "https://gruchalski.com/posts/2022-02-20-keycloak-1700-with-tls-behind-envoy/", "published_at": "2022-02-20T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9228878ffc", "title": "YugabyteDB Go RPC client", "url": "https://gruchalski.com/posts/2022-02-16-yugabytedb-go-rpc-client/", "published_at": "2022-02-16T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922928c9dc", "title": "A brief look at YugabyteDB RPC API", "url": "https://gruchalski.com/posts/2022-02-12-a-brief-look-at-yugabytedb-rpc-api/", "published_at": "2022-02-12T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e92294903dd", "title": "YugabyteDB: the book", "url": "https://gruchalski.com/posts/2021-11-11-yugabytedb-the-book/", "published_at": "2021-11-11T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922972c225", "title": "YugabyteDB: Postgres foreign data wrapper", "url": "https://gruchalski.com/posts/2021-11-08-yugabytedb-postgres-foreign-data-wrapper/", "published_at": "2021-11-08T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922a0899e2", "title": "Postgres in Docker with persistent storage", "url": "https://gruchalski.com/posts/2021-07-12-postgres-in-docker-with-persistent-storage/", "published_at": "2021-07-12T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922a8675e4", "title": "YugabyteDB Docker image", "url": "https://gruchalski.com/posts/2021-06-15-yugabytedb-docker-image/", "published_at": "2021-06-15T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922aef5f60", "title": "Extending Keycloak—required actions: user must be approved", "url": "https://gruchalski.com/posts/2021-06-06-extending-keycloak-required-action-providers/", "published_at": "2021-06-06T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922b598d03", "title": "Keycloak with TLS in Docker compose behind Envoy proxy", "url": "https://gruchalski.com/posts/2021-06-06-keycloak-with-tls-behind-envoy/", "published_at": "2021-06-06T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922c48332d", "title": "Let’s Encrypt certificates for local development", "url": "https://gruchalski.com/posts/2021-06-04-letsencrypt-certificates-for-local-development/", "published_at": "2021-06-04T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922d42a288", "title": "On YugabyteDB", "url": "https://gruchalski.com/posts/2021-05-30-on-yugabytedb/", "published_at": "2021-05-30T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922e31ca8e", "title": "Do you really need a database for that Ory stack?", "url": "https://gruchalski.com/posts/2021-05-23-do-you-really-need-a-database-for-that-ory-stack/", "published_at": "2021-05-23T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922ec0d8d8", "title": "Figuring out Ory Oathkeeper", "url": "https://gruchalski.com/posts/2021-05-20-figuring-out-oathkeeper/", "published_at": "2021-05-20T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e922f8f51d2", "title": "Keto RBAC - listing roles of a user", "url": "https://gruchalski.com/posts/2021-05-17-keto-rbac-listing-roles-of-a-user/", "published_at": "2021-05-17T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e92304fa73f", "title": "RBAC with Ory Keto", "url": "https://gruchalski.com/posts/2021-05-15-rbac-with-ory-keto/", "published_at": "2021-05-15T00:00:00+00:00" }, { "id": "01a0877f-b5b7-7353-aa98-5e9230e99baa", "title": "On software testing with dockertest", "url": "https://gruchalski.com/posts/2021-04-24-on-software-testing-with-dockertest/", "published_at": "2021-04-24T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d5519c9e642", "title": "Launching Consul cluster with firebuild and other news", "url": "https://gruchalski.com/posts/2021-04-14-launching-consul-cluster-with-firebuild/", "published_at": "2021-04-14T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551a64efc4", "title": "Looking at Zanzibar through ORY Keto", "url": "https://gruchalski.com/posts/2021-04-11-looking-at-zanzibar-through-ory-keto/", "published_at": "2021-04-11T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551ab9909e", "title": "ORY reference Docker Compose and thoughts on the platform", "url": "https://gruchalski.com/posts/2021-04-10-ory-reference-docker-compose-and-thoughts-on-the-platform/", "published_at": "2021-04-10T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551b484fc4", "title": "Apache Mesos reaches end of life", "url": "https://gruchalski.com/posts/2021-04-06-apache-mesos-reaches-end-of-life/", "published_at": "2021-04-06T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551b7ab923", "title": "On golang os.Expand and os.ExpandEnv", "url": "https://gruchalski.com/posts/2021-04-06-on-golang-osexpand-and-osexpandenv/", "published_at": "2021-04-06T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551c5da0c2", "title": "I hacked infinite retention into my open source Kafka", "url": "https://gruchalski.com/posts/2021-04-02-kafka-infinite-retention/", "published_at": "2021-04-02T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551caea180", "title": "Kafka 2.8 is out in the wild and does not need ZooKeeper anymore", "url": "https://gruchalski.com/posts/2021-03-31-kafka-2.8-does-not-need-zookeeper-anymore/", "published_at": "2021-03-31T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551d3e8135", "title": "firebuild rootfs - gRPC with mTLS", "url": "https://gruchalski.com/posts/2021-03-28-firebuild-rootfs-grpc-with-mtls/", "published_at": "2021-03-28T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551e089f28", "title": "Introducing firebuild", "url": "https://gruchalski.com/posts/2021-03-23-introducing-firebuild/", "published_at": "2021-03-23T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551e98c027", "title": "firebuild prerequisites", "url": "https://gruchalski.com/posts/2021-03-22-firebuild-prerequisites/", "published_at": "2021-03-22T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551ef327a9", "title": "Thoughts on creating VMMs from Docker images", "url": "https://gruchalski.com/posts/2021-03-03-thoughts-on-creating-vmms-from-docker-images/", "published_at": "2021-03-02T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d551fd4af7c", "title": "The jailer", "url": "https://gruchalski.com/posts/2021-02-19-the-jailer/", "published_at": "2021-02-19T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d55200019f3", "title": "It’s all about the the Iface name", "url": "https://gruchalski.com/posts/2021-02-18-its-all-about-the-iface-name/", "published_at": "2021-02-18T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d5520605238", "title": "Bridging the Firecracker network gap", "url": "https://gruchalski.com/posts/2021-02-17-bridging-the-firecracker-network-gap/", "published_at": "2021-02-17T00:00:00+00:00" }, { "id": "01a0877f-b5b8-7014-80bf-5d5520ea7f4e", "title": "Live resize Firecracker VMM drive", "url": "https://gruchalski.com/posts/2021-02-16-live-resize-firecracker-vmm-drive/", "published_at": "2021-02-16T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6df9e03a7", "title": "Firecracker VMM with additional disks", "url": "https://gruchalski.com/posts/2021-02-14-firecracker-vmm-with-additional-disks/", "published_at": "2021-02-14T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e08c71ca", "title": "Launching Alpine Linux on Firecracker like a boss", "url": "https://gruchalski.com/posts/2021-02-13-launching-alpine-linux-on-firecracker-like-a-boss/", "published_at": "2021-02-13T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e0e26053", "title": "My golang modules live in Athens", "url": "https://gruchalski.com/posts/2021-02-10-my-golang-modules-live-in-athens/", "published_at": "2021-02-10T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e14f53e8", "title": "Vault on Firecracker with CNI plugins and Nomad", "url": "https://gruchalski.com/posts/2021-02-07-vault-on-firecracker-with-cni-plugins-and-nomad/", "published_at": "2021-02-07T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e1f0ba36", "title": "Taking Firecracker for a spin", "url": "https://gruchalski.com/posts/2021-02-06-taking-firecracker-for-a-spin/", "published_at": "2021-02-06T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e2a80c28", "title": "Keycloak Authorization Services - RPT, permissions or a decision only", "url": "https://gruchalski.com/posts/2020-09-16-keycloak-authorization-services-rpt-permissions-or-a-decision-only/", "published_at": "2020-09-16T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e2eb020b", "title": "Authenticate to private JFrog npm registry", "url": "https://gruchalski.com/posts/2020-09-09-authenticate-to-private-jfrog-npm-registry/", "published_at": "2020-09-09T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e3a96dc1", "title": "Multi-tenant Vault PKI with custom root PEM bundles", "url": "https://gruchalski.com/posts/2020-09-09-multi-tenant-vault-pki-with-custom-root-pem-bundle/", "published_at": "2020-09-09T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e3d05b4c", "title": "Certificate Authority is not Voodoo", "url": "https://gruchalski.com/posts/2020-09-07-certificate-authority-is-not-voodoo/", "published_at": "2020-09-07T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e4451c3b", "title": "Keycloak Authorization Services - retrieving the decision only", "url": "https://gruchalski.com/posts/2020-09-06-keycloak-authorization-services-decision-only/", "published_at": "2020-09-06T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e470ffc5", "title": "Introduction to Keycloak Authorization Services", "url": "https://gruchalski.com/posts/2020-09-05-introduction-to-keycloak-authorization-services/", "published_at": "2020-09-05T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e4eee2a3", "title": "Keycloak With Docker Compose", "url": "https://gruchalski.com/posts/2020-09-03-keycloak-with-docker-compose/", "published_at": "2020-09-03T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e5162745", "title": "Publish to Maven Central via Sonatype with SBT", "url": "https://gruchalski.com/posts/2017-01-31-publish-to-maven-central-via-sonatype-with-sbt/", "published_at": "2017-01-31T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e5761be2", "title": "The case for Kafka cold storage", "url": "https://gruchalski.com/posts/2016-05-08-the-case-for-kafka-cold-storage/", "published_at": "2016-05-08T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e65b7ef6", "title": "Apache Spark on Mesos with Docker bridge networking", "url": "https://gruchalski.com/posts/2015-11-23-apache-spark-on-mesos-with-docker-bridge-networking/", "published_at": "2015-11-23T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e74595b8", "title": "Gossiperl at EUC 2015 and next steps", "url": "https://gruchalski.com/posts/2015-06-17-gossiperl-at-euc-2015-and-next-steps/", "published_at": "2015-06-17T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e7cef9fb", "title": "Control Keynote presentation with your mobile browser", "url": "https://gruchalski.com/posts/2015-05-11-control-keynote-presnetation-with-your-mobile-browser/", "published_at": "2015-05-11T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e83dba5d", "title": "Crowd sourced unit testing / CI", "url": "https://gruchalski.com/posts/2015-04-21-crowd-sourced-unit-testing-ci/", "published_at": "2015-04-21T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e8a57211", "title": "State of gossiperl and some JavaScript Thrift goodies", "url": "https://gruchalski.com/posts/2015-01-05-state-of-gossiperl-and-some-javascript-thrift-goodies/", "published_at": "2015-01-05T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6e99419ea", "title": "Gossiperl gossip middleware in Erlang", "url": "https://gruchalski.com/posts/2014-12-09-gossiperl-gossip-middleware-in-erlang/", "published_at": "2014-12-09T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6ea6c2ed2", "title": "Apache Thrift via UDP in Erlang", "url": "https://gruchalski.com/posts/2014-10-12-apache-thrift-via-udp-in-erlang/", "published_at": "2014-10-12T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6ead8e985", "title": "OpenStack Devstack up and running with Vagrant, in 12.5 minutes", "url": "https://gruchalski.com/posts/2014-05-20-openstack-devstack-up-and-running-with-vagrant-in-125-minutes/", "published_at": "2014-05-20T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6eb656686", "title": "Erflux, InfluxDB client for Erlang", "url": "https://gruchalski.com/posts/2014-10-21-erflux-influxdb-client-for-erlang/", "published_at": "2013-10-21T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6eb84abd7", "title": "Apache Zookeeper authentication", "url": "https://gruchalski.com/posts/2013-06-24-apache-zookeeper-authentication/", "published_at": "2013-06-24T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6eba40248", "title": "Git: chopping out part of the repo into a separate repo", "url": "https://gruchalski.com/posts/2013-03-22-git-chopping-out-part-of-the-repo-into-a-separate-repo/", "published_at": "2013-03-22T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6ec6aa7fb", "title": "Setting up knife ec2", "url": "https://gruchalski.com/posts/2013-03-07-setting-up-knife-ec2/", "published_at": "2013-03-07T00:00:00+00:00" }, { "id": "01a0877f-b5b9-70f6-9769-61c6ed272add", "title": "DevOps box", "url": "https://gruchalski.com/posts/2013-03-05-devops-box/", "published_at": "2013-03-05T00:00:00+00:00" } ] posts Claim your blog
Back to gruchalski.com
Blog · corpus.blog/blogs/gruchalski.com/posts

gruchalski.com

gruchalski.com

2026

2025

2024

2023

2022

2021

2020

2017

2016

2015

2014

2013