41554 blogs · [ { "id": "01a0d831-66e0-72e7-a9a9-902d3fac7fde", "title": "ext-whisper: PHP-Native Audio Transcription", "url": "https://eric.mann.blog/ext-whisper-php-native-audio-transcription/", "published_at": "2026-09-24T15:23:00+00:00" }, { "id": "01a0d831-66e0-72e7-a9a9-902d3ffa16e0", "title": "ext-turbovec: A Vector Index Inside Your PHP Process", "url": "https://eric.mann.blog/ext-turbovec-vector-search-php/", "published_at": "2026-09-23T14:44:00+00:00" }, { "id": "01a0d831-66e0-72e7-a9a9-902d4067a98f", "title": "ext-infer: Local LLM Inference, Natively in PHP", "url": "https://eric.mann.blog/ext-infer-local-llm-inference-php/", "published_at": "2026-09-22T13:55:00+00:00" }, { "id": "01a0d831-66e0-72e7-a9a9-902d40db5565", "title": "Beware", "url": "https://eric.mann.blog/beware/", "published_at": "2026-09-19T23:58:44+00:00" }, { "id": "01a0b0ca-cb90-70c6-8946-23e7ac3241fd", "title": "The Case for Local AI: Keep Your Data and Your Models Close", "url": "https://eric.mann.blog/case-for-local-ai/", "published_at": "2026-09-17T15:28:00+00:00" }, { "id": "01a0b0ca-cb90-70c6-8946-23e7ac78c204", "title": "Seeing in 1,024 Dimensions: How UMAP Makes Embeddings Visible", "url": "https://eric.mann.blog/seeing-in-1024-dimensions-umap/", "published_at": "2026-09-15T15:46:00+00:00" }, { "id": "01a08c9c-226e-736e-ba11-0e9311803eea", "title": "From Keywords to Concepts: Semantic Search in Laravel with pgvector", "url": "https://eric.mann.blog/semantic-search-laravel-pgvector/", "published_at": "2026-09-10T14:53:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-70758005b15c", "title": "Meaning as Geometry: What Embeddings Actually Are", "url": "https://eric.mann.blog/meaning-as-geometry-what-embeddings-actually-are/", "published_at": "2026-09-08T15:43:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-707580ad6686", "title": "Rebuilding a Dead iPod Game", "url": "https://eric.mann.blog/rebuilding-a-dead-ipod-game/", "published_at": "2026-09-07T14:53:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-707581998d75", "title": "Hiking Keauhou", "url": "https://eric.mann.blog/hiking-keauhou/", "published_at": "2026-08-10T20:34:57+00:00" }, { "id": "01a08774-a950-73bb-bd6c-7075826ab540", "title": "Why I Left Crypto and Found Canton", "url": "https://eric.mann.blog/why-i-left-crypto-and-found-canton/", "published_at": "2026-04-30T14:13:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-707582798c78", "title": "Introducing Cantool: A CLI for Canton Developers", "url": "https://eric.mann.blog/introducing-cantool/", "published_at": "2026-04-27T13:45:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-7075834fb327", "title": "Canton vs Public Crypto: A Technical Comparison", "url": "https://eric.mann.blog/canton-vs-public-crypto/", "published_at": "2026-04-23T14:00:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-70758442e8f9", "title": "What is Canton Network (and why should you care)?", "url": "https://eric.mann.blog/what-is-canton-network/", "published_at": "2026-04-20T13:25:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-707585152d9d", "title": "The 0.25% Background: Building a Rarity System Into a Portfolio Site", "url": "https://eric.mann.blog/building-a-rarity-system-into-a-portfolio-site/", "published_at": "2026-04-13T13:35:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-7075858c9039", "title": "Buy them the tools", "url": "https://eric.mann.blog/buy-them-the-tools/", "published_at": "2026-03-25T17:34:00+00:00" }, { "id": "01a08774-a950-73bb-bd6c-707585ce7765", "title": "The Agentic Harness Problem: Why AI Agents Need Better Guardrails Than Code Reviews", "url": "https://eric.mann.blog/the-agentic-harness-problem-why-ai-agents-need-better-guardrails-than-code-reviews/", "published_at": "2026-03-23T15:27:00+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696a24f8cf", "title": "Watch Cryptography Happen: A Terminal Animation for Threshold Signatures", "url": "https://eric.mann.blog/watch-cryptography-happen-a-terminal-animation-for-threshold-signatures/", "published_at": "2026-03-20T13:45:00+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696a9f00ef", "title": "Why One Key Shouldn’t Rule Them All: Threshold Signatures for the Rest of Us", "url": "https://eric.mann.blog/why-one-key-shouldnt-rule-them-all-threshold-signatures-for-the-rest-of-us/", "published_at": "2026-03-18T16:25:00+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696ad09cd6", "title": "The Upfront Investment That Saves 10,000 Hours", "url": "https://eric.mann.blog/the-upfront-investment-that-saves-10000-hours/", "published_at": "2026-03-11T14:30:00+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696aea7482", "title": "From Defense AI Drift to Policy Enforcement: Why I Built Firebreak", "url": "https://eric.mann.blog/from-defense-ai-drift-to-policy-enforcement-why-i-built-firebreak/", "published_at": "2026-02-28T20:35:00+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696b81de26", "title": "AI Slop and the em-dash", "url": "https://eric.mann.blog/ai-slop-and-the-em-dash/", "published_at": "2026-02-27T21:37:59+00:00" }, { "id": "01a0c50b-69f7-718e-81ce-08696be90835", "title": "The Gravity Problem: Why Defense AI Companies Drift Toward Offense", "url": "https://eric.mann.blog/the-gravity-problem-why-defense-ai-companies-drift-toward-offense/", "published_at": "2026-02-27T00:15:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eeb14ffd3", "title": "PHP Tek 2026: Kubernetes and Semantic Search for PHP Developers", "url": "https://eric.mann.blog/speaking-at-php-tek-2026/", "published_at": "2026-01-26T16:00:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eeba59d68", "title": "The gap between Docker Compose and production Kubernetes", "url": "https://eric.mann.blog/the-gap-between-docker-compose-and-production-kubernetes/", "published_at": "2026-01-13T13:00:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eec681483", "title": "Why I built a Kubernetes deployment tool", "url": "https://eric.mann.blog/why-i-built-a-kubernetes-deployment-tool/", "published_at": "2026-01-06T13:00:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eed011157", "title": "Short Stints, Real Experience: Rethinking Career Tenure", "url": "https://eric.mann.blog/short-stints-real-experience-rethinking-career-tenure/", "published_at": "2026-01-06T03:23:02+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eedef7b02", "title": "Gratitude", "url": "https://eric.mann.blog/gratitude/", "published_at": "2025-12-03T21:30:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eeeb29893", "title": "Burnout Prevention Through Strategic Reassignment", "url": "https://eric.mann.blog/burnout-prevention-through-strategic-reassignment/", "published_at": "2025-11-25T16:54:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eef1a6fcb", "title": "When it rains …", "url": "https://eric.mann.blog/when-it-rains/", "published_at": "2025-10-20T15:15:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eef33add8", "title": "Your Return-to-Office Policy is Killing Your AI Strategy", "url": "https://eric.mann.blog/rto-killing-ai-strategy/", "published_at": "2025-09-09T14:00:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0eef35b259", "title": "WordPress Infrastructure in 2025: Time for a Modern Approach", "url": "https://eric.mann.blog/wordpress-infrastructure-in-2025-time-for-a-modern-approach/", "published_at": "2025-08-27T15:00:00+00:00" }, { "id": "01a0c51b-190b-71da-8194-ed0ef0331c5a", "title": "Signal vs. Noise: How AI Slop Kills Conversation", "url": "https://eric.mann.blog/signal-vs-noise-how-ai-slop-kills-conversation/", "published_at": "2025-07-24T18:25:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea19495081", "title": "Distilling the Cloud: The Journey Continues", "url": "https://eric.mann.blog/distilling-the-cloud-the-journey-continues/", "published_at": "2025-07-16T22:15:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1a0c6027", "title": "Finding Balance: Building Scalable Systems While Paying the Bills", "url": "https://eric.mann.blog/finding-balance-building-scalable-systems-while-paying-the-bills/", "published_at": "2025-06-30T15:45:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1a7db643", "title": "The Deceptive Promise of AI", "url": "https://eric.mann.blog/the-deceptive-promise-of-ai/", "published_at": "2025-06-26T20:30:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1b468c23", "title": "Managing Multiple Identities with Git Configuration", "url": "https://eric.mann.blog/managing-multiple-identities-with-git-configuration/", "published_at": "2025-05-28T16:45:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1bb3ab43", "title": "Overcoming GitOps Implementation Challenges", "url": "https://eric.mann.blog/overcoming-gitops-implementation-challenges/", "published_at": "2025-05-06T16:35:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1c35936f", "title": "Containerized RSS", "url": "https://eric.mann.blog/containerized-rss/", "published_at": "2025-04-30T17:32:37+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1c6ed8a1", "title": "Blogs and NUCs and Caching, Oh My!", "url": "https://eric.mann.blog/blogs-and-nucs-and-caching-oh-my/", "published_at": "2025-04-29T16:35:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1cf486b4", "title": "When is a Deployment “Good Enough?”", "url": "https://eric.mann.blog/when-is-a-deployment-good-enough/", "published_at": "2025-04-23T16:15:00+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1d1acf8d", "title": "GitOps and DIY Infrastructure: A Match Made in DevOps Heaven", "url": "https://eric.mann.blog/gitops-and-diy-infra/", "published_at": "2025-04-22T14:03:57+00:00" }, { "id": "01a0c526-3559-73ec-8b59-74ea1df5ddbd", "title": "Simplify, simplify, simplify", "url": "https://eric.mann.blog/simplify-simplify-simplify/", "published_at": "2025-04-16T15:45:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-403325f7bdab", "title": "Consistent Infrastructure", "url": "https://eric.mann.blog/consistent-infrastructure/", "published_at": "2025-04-09T16:43:51+00:00" }, { "id": "01a0c531-8822-7102-ac86-403326da8fb1", "title": "A Foray into Private Hosting", "url": "https://eric.mann.blog/private-hosting-intro/", "published_at": "2025-04-02T21:18:18+00:00" }, { "id": "01a0c531-8822-7102-ac86-403326f46bdb", "title": "Job Search – Unreasonable Expectations", "url": "https://eric.mann.blog/job-search-unreasonable-expectations/", "published_at": "2025-03-13T13:26:41+00:00" }, { "id": "01a0c531-8822-7102-ac86-40332767f4dd", "title": "Technology has gotten dumber", "url": "https://eric.mann.blog/technology-has-gotten-dumber/", "published_at": "2025-02-14T15:03:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-403327b9e935", "title": "WordPress Drama: Crossfire", "url": "https://eric.mann.blog/wordpress-drama-crossfire/", "published_at": "2024-10-15T14:00:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-403327f7477f", "title": "WordPress: The Drama Continues", "url": "https://eric.mann.blog/wordpress-the-drama-continues/", "published_at": "2024-10-14T16:15:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-403328a53e94", "title": "WordPress Drama: From the Sidelines", "url": "https://eric.mann.blog/wordpress-drama-from-the-sidelines/", "published_at": "2024-09-26T19:15:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-4033292d7eb1", "title": "WordPress, Hosts, and Hosting", "url": "https://eric.mann.blog/wordpress-hosts-and-hosting/", "published_at": "2024-09-23T20:31:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-40332a1a8b77", "title": "Bounties and Risk", "url": "https://eric.mann.blog/bounties-and-risk/", "published_at": "2024-08-14T16:00:00+00:00" }, { "id": "01a0c531-8822-7102-ac86-40332b1a782b", "title": "Find Your Tribe", "url": "https://eric.mann.blog/find-your-tribe/", "published_at": "2024-05-14T16:21:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-720274775887", "title": "The Great Migration: Mastodon", "url": "https://eric.mann.blog/the-great-migration-mastodon/", "published_at": "2024-05-09T15:36:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-7202747d0dd1", "title": "Password Security", "url": "https://eric.mann.blog/password-security/", "published_at": "2024-05-07T14:57:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-720274c21a82", "title": "The Great Migration: Next Steps", "url": "https://eric.mann.blog/the-great-migration-next-steps/", "published_at": "2024-05-02T14:45:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-7202755e017f", "title": "Tech Error: Diversity Not Found", "url": "https://eric.mann.blog/tech-error-diversity-not-found/", "published_at": "2024-04-30T14:15:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-7202765de386", "title": "The Great Migration: Configuring the Server", "url": "https://eric.mann.blog/great-migration-server-configuration/", "published_at": "2024-04-25T14:25:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-72027719991f", "title": "The Great WordPress Migration", "url": "https://eric.mann.blog/the-great-wordpress-migration/", "published_at": "2024-04-23T16:47:55+00:00" }, { "id": "01a0c53b-9096-7136-87b2-72027793bbf2", "title": "Customer Focus: Acquisition vs Retention", "url": "https://eric.mann.blog/customer-focus-acquisition-vs-retention/", "published_at": "2024-01-09T01:11:18+00:00" }, { "id": "01a0c53b-9096-7136-87b2-720277bd87bc", "title": "An Ode to Open Source", "url": "https://eric.mann.blog/an-ode-to-open-source/", "published_at": "2023-12-15T15:00:00+00:00" }, { "id": "01a0c53b-9096-7136-87b2-720277db31ec", "title": "Hiring and risk", "url": "https://eric.mann.blog/hiring-and-risk/", "published_at": "2023-10-14T00:19:08+00:00" }, { "id": "01a0c53b-9096-7136-87b2-7202782b4fe7", "title": "PHP Strict Typing", "url": "https://eric.mann.blog/php-strict-typing/", "published_at": "2023-07-06T16:45:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a6e6b38a", "title": "You are not your customer", "url": "https://eric.mann.blog/you-are-not-your-customer/", "published_at": "2022-03-19T21:12:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a7b7055c", "title": "Understanding access control", "url": "https://eric.mann.blog/understanding-access-control/", "published_at": "2022-03-18T21:14:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a8368cc6", "title": "Adversarial mindsets", "url": "https://eric.mann.blog/adversarial-mindsets/", "published_at": "2022-03-18T04:21:43+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a8b71c61", "title": "Going analog", "url": "https://eric.mann.blog/going-analog/", "published_at": "2022-03-17T00:11:26+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a8db8b66", "title": "Radical candor", "url": "https://eric.mann.blog/radical-candor/", "published_at": "2022-03-16T00:16:56+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888a9daa6a4", "title": "Cryptopals: Set 1 – challenge 8", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-8/", "published_at": "2022-03-14T18:43:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888aa5cc8e8", "title": "Cryptopals: Set 1 – challenge 7", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-7/", "published_at": "2022-03-13T20:42:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888aa8e43a3", "title": "Cryptopals: Set 1 – challenge 6", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-6/", "published_at": "2022-03-12T22:09:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888ab061696", "title": "Limiting network egress", "url": "https://eric.mann.blog/limiting-network-egress/", "published_at": "2022-03-11T20:42:00+00:00" }, { "id": "01a0c544-a9e3-703e-a79a-1888abea8c34", "title": "Basic firewall usage", "url": "https://eric.mann.blog/basic-firewall-usage/", "published_at": "2022-03-10T23:42:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5bc4290b", "title": "Overcoming imposter syndrome", "url": "https://eric.mann.blog/overcoming-imposter-syndrome/", "published_at": "2022-03-09T19:35:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5ca3b088", "title": "Imposter syndrome", "url": "https://eric.mann.blog/imposter-syndrome/", "published_at": "2022-03-08T22:09:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5d5a57f6", "title": "Headless WordPress", "url": "https://eric.mann.blog/headless-wordpress/", "published_at": "2022-03-07T21:40:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5dfd18d5", "title": "Cooking with credentials – pepper", "url": "https://eric.mann.blog/cooking-with-credentials-pepper/", "published_at": "2022-03-06T22:14:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5e0736b2", "title": "Cooking with credentials – salting", "url": "https://eric.mann.blog/cooking-with-credentials-salting/", "published_at": "2022-03-05T21:07:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5e3a8eed", "title": "Cooking with credentials – the basics", "url": "https://eric.mann.blog/cooking-with-credentials-the-basics/", "published_at": "2022-03-05T00:25:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5e988551", "title": "Communication, focus, and tone", "url": "https://eric.mann.blog/communication-focus-and-tone/", "published_at": "2022-03-03T22:05:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5f379feb", "title": "You should learn PHP", "url": "https://eric.mann.blog/you-should-learn-php/", "published_at": "2022-03-02T21:32:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd5fde8df7", "title": "Why phishing attacks succeed", "url": "https://eric.mann.blog/why-phishing-attacks-succeed/", "published_at": "2022-03-01T22:45:00+00:00" }, { "id": "01a0c54d-67a8-710a-b29d-9abd60bdf629", "title": "Representation in tech", "url": "https://eric.mann.blog/representation-in-tech/", "published_at": "2022-02-28T21:32:00+00:00" }, { "id": "01a0c555-ebf9-71fe-a8b2-0d6e4c8d4aa4", "title": "The journey to PCI compliance", "url": "https://eric.mann.blog/the-journey-to-pci-compliance/", "published_at": "2022-02-27T21:15:00+00:00" }, { "id": "01a0c555-ebf9-71fe-a8b2-0d6e4cbe3f62", "title": "Driving readership", "url": "https://eric.mann.blog/driving-readership/", "published_at": "2022-02-26T23:29:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc59f4003a", "title": "Types of time", "url": "https://eric.mann.blog/types-of-time/", "published_at": "2022-02-25T21:49:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5a7fbb98", "title": "A Libsodium-based secure remote password scheme for PHP", "url": "https://eric.mann.blog/a-libsodium-based-secure-remote-password-scheme-for-php/", "published_at": "2022-02-24T19:50:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5b5f9fa8", "title": "String comparison in PHP", "url": "https://eric.mann.blog/string-comparison-in-php/", "published_at": "2022-02-23T21:46:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5c41a2ec", "title": "Self-obfuscating value objects", "url": "https://eric.mann.blog/self-obfuscating-value-objects/", "published_at": "2022-02-22T22:57:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5c99ec2d", "title": "Securing tokens in PHP", "url": "https://eric.mann.blog/securing-tokens-in-php/", "published_at": "2022-02-21T21:15:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5d2523ef", "title": "Paying off technical debt", "url": "https://eric.mann.blog/paying-off-technical-debt/", "published_at": "2022-02-20T19:34:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5db2f194", "title": "Cryptopals: Set 1 – challenge 5", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-5/", "published_at": "2022-02-19T22:22:00+00:00" }, { "id": "01a0c555-ebfa-7116-9d56-0afc5e95664c", "title": "Cryptopals: Set 1 – challenge 4", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-4/", "published_at": "2022-02-18T20:23:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a499abf3", "title": "Cryptopals: Set 1 – challenge 3", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-3/", "published_at": "2022-02-17T21:29:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a4dd9bdf", "title": "Cryptopals: Set 1 – challenge 2", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-2/", "published_at": "2022-02-16T21:11:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a4f7bc20", "title": "Cryptopals: Set 1 – challenge 1", "url": "https://eric.mann.blog/cryptopals-set-1-challenge-1/", "published_at": "2022-02-15T21:15:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a5f1d819", "title": "The Cryptopals challenges", "url": "https://eric.mann.blog/the-cryptopals-challenges/", "published_at": "2022-02-14T23:30:29+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a68a80a2", "title": "One perspective on career stages", "url": "https://eric.mann.blog/one-perspective-on-career-stages/", "published_at": "2022-02-13T22:13:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a6b71df3", "title": "Do the dishes – right now", "url": "https://eric.mann.blog/do-the-dishes-right-now/", "published_at": "2022-02-12T21:36:00+00:00" }, { "id": "01a0c55e-2f19-71f6-b222-1265a6cb6e3f", "title": "The value of encryption", "url": "https://eric.mann.blog/the-value-of-encryption/", "published_at": "2022-02-11T23:15:00+00:00" } ] posts Claim your blog
Back to eric.mann.blog
Blog · corpus.blog/blogs/eric.mann.blog/posts

eric.mann.blog

eric.mann.blog

2026

19 Sept 2026

2025

2024

2023

2022