diff --git a/README.md b/README.md index 58ac0c9..8f74b36 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,16 @@ All commands are run from the root of the project, from a terminal: | `npm run astro ...` | Run CLI commands like `astro add`, `astro check` | | `npm run astro -- --help` | Get help using the Astro CLI | +## Blog post filename convention + +Manage files in `src/blog/` with this format: + +`YYYY-MM-DD-your-post-slug.md` + +- Use lowercase letters, numbers, and hyphens in the slug. +- Keep words separated by a single hyphen. +- If two posts share the same date and slug, append `-2`, `-3`, etc. + ## Dependency update guidance For security/deprecated remediation, allow breaking changes via `npm audit fix --force`, then verify: diff --git a/src/blog/post-1.md b/src/blog/2025-05-09-hello.md similarity index 100% rename from src/blog/post-1.md rename to src/blog/2025-05-09-hello.md diff --git a/src/blog/post-2.md b/src/blog/2025-05-15-i-have-finally-published-my-blog-website.md similarity index 100% rename from src/blog/post-2.md rename to src/blog/2025-05-15-i-have-finally-published-my-blog-website.md diff --git a/src/blog/post-3.md b/src/blog/2025-05-16-why-i-write-docstrings.md similarity index 100% rename from src/blog/post-3.md rename to src/blog/2025-05-16-why-i-write-docstrings.md diff --git a/src/blog/post-4.md b/src/blog/2026-01-01-aws-cli-commands-for-managing-cloudformation-stacks.md similarity index 100% rename from src/blog/post-4.md rename to src/blog/2026-01-01-aws-cli-commands-for-managing-cloudformation-stacks.md diff --git a/src/blog/post-5.md b/src/blog/2026-01-02-fixing-github-copilot-cli-system-vault-error-with-systemd.md similarity index 100% rename from src/blog/post-5.md rename to src/blog/2026-01-02-fixing-github-copilot-cli-system-vault-error-with-systemd.md diff --git a/src/blog/post-6.md b/src/blog/2026-01-12-the-difference-between-v-and-w-in-gos-fmt-errorf.md similarity index 100% rename from src/blog/post-6.md rename to src/blog/2026-01-12-the-difference-between-v-and-w-in-gos-fmt-errorf.md diff --git a/src/blog/post-7.md b/src/blog/2026-01-18-how-to-open-multiple-vterm-instances-in-emacs-using-buffer-renaming.md similarity index 100% rename from src/blog/post-7.md rename to src/blog/2026-01-18-how-to-open-multiple-vterm-instances-in-emacs-using-buffer-renaming.md diff --git a/src/blog/post-8.md b/src/blog/2026-01-25-a-compass-for-ai-application-development-reading-ai-engineering.md similarity index 100% rename from src/blog/post-8.md rename to src/blog/2026-01-25-a-compass-for-ai-application-development-reading-ai-engineering.md diff --git a/src/blog/post-9.md b/src/blog/2026-02-01-operating-self-hosted-forgejo-via-cli-a-forgejo-cli-guide-2.md similarity index 100% rename from src/blog/post-9.md rename to src/blog/2026-02-01-operating-self-hosted-forgejo-via-cli-a-forgejo-cli-guide-2.md diff --git a/src/blog/2026-02-16-implementing-mlops-enterprise-review.md b/src/blog/2026-02-16-implementing-mlops-enterprise-review.md new file mode 100644 index 0000000..f64076d --- /dev/null +++ b/src/blog/2026-02-16-implementing-mlops-enterprise-review.md @@ -0,0 +1,36 @@ +--- +title: 'Book Review: Implementing MLOps in the Enterprise - The Importance of Operations Pipeline Design' +pubDate: 2026-02-16 +author: 'Nakahara Daisuke' +tags: ["Book", "MLOps"] +--- + +This is a brief book review of "Implementing MLOps in the Enterprise: A Production-First Approach" (Japanese edition) by Yaron Haviv and Noah Gift, published by O'Reilly Japan. + +I read this book because I was working on building a cloud-based infrastructure for regularly generating predictions from machine learning models, and I wanted to learn about MLOps. +Through my current project, I realized that in addition to building highly accurate models, constructing an infrastructure that balances long-term stability with cost reduction was a significant challenge. + +MLOps refers to a systematic practical approach that encompasses the entire process of designing, building, and operating the efficient deployment of ML models into production environments. +MLOps consists of four main components: + - Data collection and preparation + - Model development and training + - ML service deployment + - Continuous feedback and monitoring + +Similar to what I had felt through my project, MLOps is also defined as having the goal not of building models, but of creating automated ML pipelines that can accept inputs, produce high-quality models, and deploy them into application pipelines. + +The most impactful learning for me was "start with designing continuous operations pipelines first, rather than model building." +This resonated because in my current project, I had adopted the incorrect sequence of advancing model building first, then starting pipeline construction on the cloud after accuracy validation was complete. +By starting with operations pipeline design first, proper abstraction can be achieved, making it easier to reduce dependency on individuals and accelerate growth. + +One of the most interesting chapters in the book is "Chapter 10: Implementing MLOps with Rust." +The authors' thinking is reflected in this chapter: "If Rust improves operational performance, why not use it?" +The authors argue that Rust is the most performant and energy-efficient language, and thanks to AI coding tools, it has become much easier to implement than C or C++. +Reading this chapter, I began to want to learn Rust. +At the same time, I also became interested in whether it would be possible to implement MLOps with Fortran, the first language I learned and which is widely used for numerical computation. + +This book is highly recommended for engineers involved in machine learning projects. + +--- + +> **Note**: The review and translation were assisted by an AI generative model. The author is responsible for the final content. diff --git a/src/content.config.ts b/src/content.config.ts index a98b95c..fab9c40 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -2,7 +2,7 @@ import { glob } from "astro/loaders"; import { z, defineCollection } from "astro:content"; const blog = defineCollection({ - loader: glob({ pattern: '**/post-*.md', base: "./src/blog" }), + loader: glob({ pattern: "**/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-*.md", base: "./src/blog" }), schema: z.object({ title: z.string(), pubDate: z.date(), @@ -11,4 +11,4 @@ const blog = defineCollection({ }) }); -export const collections = { blog }; \ No newline at end of file +export const collections = { blog };