41554 blogs · [ { "id": "01a0d4a8-b6ff-7276-bfc3-7cc0751adb6f", "title": "My AI coding agent looks exactly like a reverse shell", "url": "https://victoronsoftware.com/posts/ai-coding-agent-reverse-shell/", "published_at": "2026-09-18T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00a146e2e", "title": "Comprehension debt: the hidden cost of AI-generated code", "url": "https://victoronsoftware.com/posts/comprehension-debt/", "published_at": "2026-05-24T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00b0eeba7", "title": "Understanding HTTP message signatures: A developer's guide", "url": "https://victoronsoftware.com/posts/http-message-signatures/", "published_at": "2025-12-09T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00b20f9c1", "title": "The modular monolith that wasn't", "url": "https://victoronsoftware.com/posts/modular-monolith-attempt/", "published_at": "2025-11-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00c1cf455", "title": "Multitasking with AI agents: When it works and when it fails", "url": "https://victoronsoftware.com/posts/multitasking-with-ai-agents/", "published_at": "2025-08-19T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00d0fb947", "title": "Why transparency beats everything else in engineering", "url": "https://victoronsoftware.com/posts/engineering-transparency/", "published_at": "2025-08-12T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00de4297a", "title": "Why developers should use OpenTelemetry in dev", "url": "https://victoronsoftware.com/posts/opentelemetry-for-devs/", "published_at": "2025-08-05T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00e677d64", "title": "Will AI agents replace software developers?", "url": "https://victoronsoftware.com/posts/will-ai-agents-replace-developers/", "published_at": "2025-07-16T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00ea9d2e6", "title": "mTLS vs HTTP signature faceoff: securing your APIs", "url": "https://victoronsoftware.com/posts/mtls-vs-http-signature/", "published_at": "2025-07-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00f83decf", "title": "How to use TPM 2.0 to secure private keys", "url": "https://victoronsoftware.com/posts/how-to-use-tpm/", "published_at": "2025-07-02T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00faaaced", "title": "My first conference talk experience", "url": "https://victoronsoftware.com/posts/first-conference-talk/", "published_at": "2025-05-28T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00fadbfc6", "title": "Full-featured engineering metrics—for free", "url": "https://victoronsoftware.com/posts/engineering-metrics-no-cost/", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c00fc51eea", "title": "Introducing MCP: Lessons from building an AI-driven server", "url": "https://victoronsoftware.com/posts/introducing-mcp/", "published_at": "2025-05-08T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c010332b3d", "title": "How to speed up a large Go test suite", "url": "https://victoronsoftware.com/posts/large-go-test-suite/", "published_at": "2025-04-09T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01074a7bf", "title": "4 key Mermaid diagrams for software developers", "url": "https://victoronsoftware.com/posts/mermaid-intro/", "published_at": "2025-03-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c010bb4887", "title": "6 business benefits of software modularity and cohesion", "url": "https://victoronsoftware.com/posts/software-modularity/", "published_at": "2025-03-19T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0112692ad", "title": "6 lessons from literate programming", "url": "https://victoronsoftware.com/posts/literate-programming-lessons/", "published_at": "2025-03-12T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01177057c", "title": "Top code complexity metrics every software dev should know", "url": "https://victoronsoftware.com/posts/code-complexity-metrics/", "published_at": "2025-03-05T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01191689b", "title": "How to use AI for software development (2025)", "url": "https://victoronsoftware.com/posts/ai-for-software-developers/", "published_at": "2025-02-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01205c97a", "title": "How to analyze Go build times", "url": "https://victoronsoftware.com/posts/analyze-go-build/", "published_at": "2025-02-19T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c012f73263", "title": "Top code refactorings every software engineer should know", "url": "https://victoronsoftware.com/posts/common-refactorings/", "published_at": "2025-02-12T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0139022cf", "title": "How to find package dependencies of a Go package", "url": "https://victoronsoftware.com/posts/go-package-dependencies/", "published_at": "2025-02-05T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01440d5d6", "title": "How to scale your codebase with evolutionary architecture", "url": "https://victoronsoftware.com/posts/scaling-codebase-evolutionary-architecture/", "published_at": "2025-01-29T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c014d58bed", "title": "What is readable code and why is it important?", "url": "https://victoronsoftware.com/posts/readable-code/", "published_at": "2025-01-22T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c015c9527c", "title": "Top 5 metrics for software load testing performance", "url": "https://victoronsoftware.com/posts/software-load-testing/", "published_at": "2025-01-15T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c016249e41", "title": "Secure private CDN content with CloudFront signed URLs", "url": "https://victoronsoftware.com/posts/cloudfront-signed-urls/", "published_at": "2025-01-08T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c016b5b562", "title": "Create a MySQL replica database in 4 short steps (2025)", "url": "https://victoronsoftware.com/posts/mysql-master-slave-replication/", "published_at": "2025-01-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01772b572", "title": "How to override methods in Go", "url": "https://victoronsoftware.com/posts/method-overriding-in-go/", "published_at": "2025-01-01T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0185e5a62", "title": "How to easily track engineering metrics", "url": "https://victoronsoftware.com/posts/track-engineering-metrics/", "published_at": "2024-12-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c018a263f0", "title": "How to quickly edit Google Sheets spreadsheet using the API", "url": "https://victoronsoftware.com/posts/google-sheets-api/", "published_at": "2024-12-18T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c018da6bbf", "title": "What are launchd agents and daemons on macOS?", "url": "https://victoronsoftware.com/posts/macos-launchd-agents-and-daemons/", "published_at": "2024-12-11T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c018ed2164", "title": "Go modules and packages — which one to use and when", "url": "https://victoronsoftware.com/posts/go-modules-and-packages/", "published_at": "2024-12-04T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c018f39a45", "title": "What is a VLAN and why you need it in your home network", "url": "https://victoronsoftware.com/posts/why-you-need-vlan/", "published_at": "2024-11-27T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c019e2b5e3", "title": "How to connect to remote Active Directory server in 4 steps", "url": "https://victoronsoftware.com/posts/connect-to-remote-active-directory/", "published_at": "2024-11-20T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01a1c0eb6", "title": "2 ways to turn a script into a macOS install package", "url": "https://victoronsoftware.com/posts/script-only-macos-install-package/", "published_at": "2024-11-13T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01afa7abc", "title": "Is staticcheck linter useful for my Go project?", "url": "https://victoronsoftware.com/posts/staticcheck-go-linter/", "published_at": "2024-11-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01b2cccb6", "title": "Is OpenTelemetry useful for the average software developer?", "url": "https://victoronsoftware.com/posts/opentelemetry-with-jaeger/", "published_at": "2024-10-30T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01b41b913", "title": "How to create a custom GitHub Action using TypeScript", "url": "https://victoronsoftware.com/posts/typescript-github-action/", "published_at": "2024-10-23T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01c118bea", "title": "Use Go to unmarshal JSON null, set, and missing fields", "url": "https://victoronsoftware.com/posts/go-json-unmarshal/", "published_at": "2024-10-09T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01c469492", "title": "How to test a Windows NDES SCEP server", "url": "https://victoronsoftware.com/posts/test-ndes-scep-server/", "published_at": "2024-10-02T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01c4890f4", "title": "How to set up a remote development environment", "url": "https://victoronsoftware.com/posts/remote-development-environment/", "published_at": "2024-09-22T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01cd257f7", "title": "Top 3 issues with GitHub code review process", "url": "https://victoronsoftware.com/posts/github-code-review-issues/", "published_at": "2024-09-15T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01d6f7ea9", "title": "How to create an EXE installer for your program", "url": "https://victoronsoftware.com/posts/exe-installer/", "published_at": "2024-09-11T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01e4ae5bb", "title": "How to measure the execution time of Go tests accurately", "url": "https://victoronsoftware.com/posts/go-test-execution-time/", "published_at": "2024-09-04T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01ea596fd", "title": "How to benchmark performance of Go serializers", "url": "https://victoronsoftware.com/posts/optimizing-performance-of-go-app/", "published_at": "2024-08-28T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01ec99ce9", "title": "How to secure MySQL Docker container for Zero Trust", "url": "https://victoronsoftware.com/posts/secure-mysql-docker/", "published_at": "2024-08-20T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01f204f86", "title": "Why you should use STDIN to read your program arguments", "url": "https://victoronsoftware.com/posts/get-args-from-stdin/", "published_at": "2024-08-12T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01f223a3d", "title": "Find required code owner approvers for a PR in 3 steps", "url": "https://victoronsoftware.com/posts/find-code-owners-for-pull-request/", "published_at": "2024-08-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01fc55b54", "title": "Add unit tests to Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/add-unit-tests-to-chrome-extension/", "published_at": "2024-07-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c01ff829f2", "title": "Using a distributed lock in production distributed systems", "url": "https://victoronsoftware.com/posts/distributed-lock/", "published_at": "2024-07-18T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c020e7662c", "title": "Add CSS framework to Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/add-css-framework-to-chrome-extension/", "published_at": "2024-07-10T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c021a7d323", "title": "Adding options page to Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/add-options-to-chrome-extension/", "published_at": "2024-07-03T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c021ed08f5", "title": "How git merge works with GitHub pull requests", "url": "https://victoronsoftware.com/posts/git-merges-and-pull-requests/", "published_at": "2024-06-26T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c021ef50cd", "title": "Linting and formatting TypeScript in Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/linting-and-formatting-typescript/", "published_at": "2024-06-19T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c021ef7e1e", "title": "Message passing in Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/message-passing-in-chrome-extension/", "published_at": "2024-06-12T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c022815103", "title": "Build a production-ready Chrome extension in 7 steps", "url": "https://victoronsoftware.com/posts/chrome-extension/", "published_at": "2024-06-11T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c022b3b9c1", "title": "Building a webhook flow with Tines", "url": "https://victoronsoftware.com/posts/webhook-flow-with-tines/", "published_at": "2024-06-05T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0234c40dd", "title": "3 database gotchas when building apps for scale", "url": "https://victoronsoftware.com/posts/database-gotchas-when-scaling-apps/", "published_at": "2024-05-29T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0236cfd77", "title": "Add webpack and TypeScript to a Chrome extension (2024)", "url": "https://victoronsoftware.com/posts/add-webpack-and-typescript-to-chrome-extension/", "published_at": "2024-05-23T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c023f868cb", "title": "Create a Chrome extension from scratch step-by-step (2024)", "url": "https://victoronsoftware.com/posts/create-chrome-extension/", "published_at": "2024-05-15T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02478a9ab", "title": "Create an IPv6-only Linux server in 3 easy steps", "url": "https://victoronsoftware.com/posts/create-ipv6-only-linux-server/", "published_at": "2024-05-08T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0248bfd63", "title": "Optimize MySQL query performance: INSERT with subqueries", "url": "https://victoronsoftware.com/posts/mysql-query-performance-insert-subqueries/", "published_at": "2024-05-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c024b44fe8", "title": "How to reuse workflows and steps in GitHub Actions (2024)", "url": "https://victoronsoftware.com/posts/github-reusable-workflows-and-steps/", "published_at": "2024-05-01T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0254347ef", "title": "MySQL deadlock on UPDATE/INSERT upsert pattern", "url": "https://victoronsoftware.com/posts/mysql-upsert-deadlock/", "published_at": "2024-04-28T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c025522bf9", "title": "Build a React app from scratch: getting started (2024)", "url": "https://victoronsoftware.com/posts/react-hello-world/", "published_at": "2024-04-24T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02586b1e6", "title": "Fix security vulnerabilities in Yarn", "url": "https://victoronsoftware.com/posts/fix-security-vulnerabilities-yarn/", "published_at": "2024-04-10T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0263ddc07", "title": "Mutual TLS (mTLS): building a client using the system keystore", "url": "https://victoronsoftware.com/posts/mtls/", "published_at": "2024-04-01T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c026e64cc8", "title": "Code signing a Windows application", "url": "https://victoronsoftware.com/posts/code-signing-windows/", "published_at": "2024-03-27T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c0270ea2b1", "title": "Mutual TLS (mTLS) Go client using Windows certificate store", "url": "https://victoronsoftware.com/posts/mtls-go-client-windows-certificate-store/", "published_at": "2024-03-20T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c027e942b9", "title": "Mutual TLS (mTLS) with Windows certificate store", "url": "https://victoronsoftware.com/posts/mtls-with-windows/", "published_at": "2024-03-06T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c028b22c07", "title": "Fully supporting Unicode and emojis in your app", "url": "https://victoronsoftware.com/posts/unicode-and-emoji-gotchas/", "published_at": "2024-02-29T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c029884888", "title": "Mutual TLS (mTLS) Go client using macOS keychain", "url": "https://victoronsoftware.com/posts/mtls-go-client-using-apple-keychain/", "published_at": "2024-02-22T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c029f32f43", "title": "Mutual TLS (mTLS) Go client with custom certificate signer", "url": "https://victoronsoftware.com/posts/mtls-go-custom-signer/", "published_at": "2024-02-14T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02aa288a1", "title": "Mutual TLS (mTLS) Go client", "url": "https://victoronsoftware.com/posts/mtls-go-client/", "published_at": "2024-02-07T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02b54bf16", "title": "Mutual TLS (mTLS) with macOS keychain", "url": "https://victoronsoftware.com/posts/mtls-with-apple-keychain/", "published_at": "2024-01-31T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02bc09600", "title": "Mutual TLS intro and hands-on example", "url": "https://victoronsoftware.com/posts/mtls-hello-world/", "published_at": "2024-01-24T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02bc0e3d8", "title": "Using C and Go with CGO is tricky", "url": "https://victoronsoftware.com/posts/using-c-and-go-with-cgo-is-tricky/", "published_at": "2024-01-18T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02c5018e0", "title": "Use GitHub Actions for general-purpose tasks", "url": "https://victoronsoftware.com/posts/use-github-actions-for-general-purpose-tasks/", "published_at": "2024-01-11T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02c93ad60", "title": "Fuzz testing in Go", "url": "https://victoronsoftware.com/posts/fuzz-testing-with-go/", "published_at": "2024-01-04T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02c9f6ee7", "title": "Understanding the intricacies of Fleet policies", "url": "https://victoronsoftware.com/posts/understanding-the-intricacies-of-fleet-policies/", "published_at": "2023-12-30T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02d564798", "title": "Get current telemetry from your devices with live queries", "url": "https://victoronsoftware.com/posts/get-current-telemetry-from-your-devices-with-live-queries/", "published_at": "2023-12-29T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02e4cb226", "title": "Nil slice versus empty slice in Go", "url": "https://victoronsoftware.com/posts/nil-slice-versus-empty-slice-in-go/", "published_at": "2023-12-28T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02e8a8961", "title": "Physical security meets cybersecurity with Matter", "url": "https://victoronsoftware.com/posts/physical-security-meets-cybersecurity-with-matter/", "published_at": "2023-12-20T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02f64fd43", "title": "SQL prepared statements are broken when scaling applications", "url": "https://victoronsoftware.com/posts/sql-prepared-statements-are-broken-when-scaling-applications/", "published_at": "2023-12-14T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c02fd5d427", "title": "You need a personal dev docs DB (GitBook)", "url": "https://victoronsoftware.com/posts/you-need-a-personal-dev-docs-db-gitbook/", "published_at": "2023-11-30T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c03068c535", "title": "Setting up a virtual router (pfSense on Proxmox)", "url": "https://victoronsoftware.com/posts/setting-up-a-virtual-router/", "published_at": "2023-11-22T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c03087ceca", "title": "Inspecting keychain files on macOS", "url": "https://victoronsoftware.com/posts/inspecting-keychain-files-on-macos/", "published_at": "2023-11-16T00:00:00+00:00" }, { "id": "01a08c5c-e1d2-7379-8bc2-53c03185d8fb", "title": "Catch missed authorization checks during software development", "url": "https://victoronsoftware.com/posts/catch-missed-authorization-checks-during-software-development/", "published_at": "2023-11-10T00:00:00+00:00" } ] posts Claim your blog
Back to victoronsoftware.com
Blog · corpus.blog/blogs/victoronsoftware.com/posts

victoronsoftware.com

victoronsoftware.com

2026

2025

2024

2023