<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kenta Takeuchi</title>
    <description>The latest articles on DEV Community by Kenta Takeuchi (@bmf_san).</description>
    <link>https://dev.to/bmf_san</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F542109%2Fde527e15-c23d-4856-aa03-421667bc3783.png</url>
      <title>DEV Community: Kenta Takeuchi</title>
      <link>https://dev.to/bmf_san</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bmf_san"/>
    <language>en</language>
    <item>
      <title>Writing Code That Fits in Your Brain: Heuristics and Techniques to Avoid Complexity and Ensure Sustainability</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:22:51 +0000</pubDate>
      <link>https://dev.to/bmf_san/writing-code-that-fits-in-your-brain-heuristics-and-techniques-to-avoid-complexity-and-ensure-39o6</link>
      <guid>https://dev.to/bmf_san/writing-code-that-fits-in-your-brain-heuristics-and-techniques-to-avoid-complexity-and-ensure-39o6</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/writing-sustainable-code/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://amzn.to/4gD7NxX" rel="noopener noreferrer"&gt;Writing Code That Fits in Your Brain: Heuristics and Techniques to Avoid Complexity and Ensure Sustainability&lt;/a&gt; is a book I recently read.&lt;/p&gt;

&lt;p&gt;From the title, I expected it to include cognitive science discussions reminiscent of &lt;a href="https://bmf-tech.com/posts/%e3%83%97%e3%83%ad%e3%82%b0%e3%83%a9%e3%83%9e%e8%84%b3" rel="noopener noreferrer"&gt;Programmer's Brain&lt;/a&gt;, but that wasn't the case.&lt;/p&gt;

&lt;p&gt;This book discusses practical practices for writing code that fits within your brain's memory.&lt;/p&gt;

&lt;p&gt;Overall, there were many parts I resonated with based on my own experiences. The author seems to have a background not from a computer science department but has built a career as a software engineer, which gives a sense of experience cultivated in the field.&lt;/p&gt;

&lt;p&gt;Regarding the content, it felt a bit fragmented.&lt;/p&gt;

&lt;p&gt;The discussion on fractal architecture seemed a bit brief, so I would love to read a book by the author focused solely on fractal architecture.&lt;/p&gt;

</description>
      <category>book</category>
      <category>coding</category>
    </item>
    <item>
      <title>The Art of Writing a CFP</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:22:49 +0000</pubDate>
      <link>https://dev.to/bmf_san/the-art-of-writing-a-cfp-8cd</link>
      <guid>https://dev.to/bmf_san/the-art-of-writing-a-cfp-8cd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/writing-cfp-techniques/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;Submitting a CFP (Call for Papers) for conferences and speaking events is a common practice. Here, I will write a poem about how I craft and submit my CFPs.&lt;/p&gt;

&lt;h1&gt;
  
  
  Past Achievements
&lt;/h1&gt;

&lt;p&gt;I have submitted CFPs seven times in the past, with a 100% acceptance rate (though I declined one due to various reasons).&lt;/p&gt;

&lt;p&gt;The events I have spoken at include PHP and Go conferences, with more appearances at PHP conferences.&lt;/p&gt;

&lt;p&gt;cf. &lt;a href="https://speakerdeck.com/bmf_san" rel="noopener noreferrer"&gt;https://speakerdeck.com/bmf_san&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To be honest, there were many shortcomings in my early presentations and CFPs, but recently I've gained a lot more confidence, so I thought I'd leave my thoughts here.&lt;/p&gt;

&lt;h1&gt;
  
  
  My Way of Writing a CFP
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Before Writing a CFP...
&lt;/h2&gt;

&lt;p&gt;I always organize what I do before writing a CFP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Consider the Purpose of Speaking
&lt;/h3&gt;

&lt;p&gt;What do I want to gain from speaking? Having this clear helps motivate me.&lt;/p&gt;

&lt;p&gt;I focus on whether it seems valuable both for myself and the audience. While it's not wrong to think only about personal benefits and consider the CFP's acceptance as a validation of its value to the audience, considering various perspectives broadens the range of presentation themes and increases what I can gain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decide on the Event to Speak At
&lt;/h3&gt;

&lt;p&gt;If it's an event I've attended before, I can easily imagine the atmosphere and themes. If not, it's better to research past events or actually attend them.&lt;/p&gt;

&lt;p&gt;Knowing the themes, level of presentations, audience characteristics, and sponsor companies helps build confidence when speaking, making it an important preparation step.&lt;/p&gt;

&lt;p&gt;Thanks to past experiences, I don't get nervous speaking in front of people; rather, I enjoy it. However, this prior research helps maintain my mental state.&lt;/p&gt;

&lt;h3&gt;
  
  
  Thoroughly Check the Event Schedule
&lt;/h3&gt;

&lt;p&gt;It's obvious, but if the schedule doesn't match even if the CFP is accepted, it would be sad. It's best to adjust the schedule in advance.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Write a CFP
&lt;/h2&gt;

&lt;p&gt;By the time I submit a CFP, I usually have a rough idea of the presentation.&lt;/p&gt;

&lt;p&gt;When I start writing a CFP, I have a somewhat organized outline of the presentation theme and can almost start writing the slides.&lt;/p&gt;

&lt;p&gt;It depends on the person, but for me, the "idea" comes first, and once I see "this idea can be presented," I consider speaking. (There might be cases where you create an idea from keywords and prepare for the presentation, similar to presentation-driven development.)&lt;/p&gt;

&lt;p&gt;I'll explain the steps I take to submit a CFP.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prepare the Idea
&lt;/h3&gt;

&lt;p&gt;Nothing starts without an idea.&lt;/p&gt;

&lt;p&gt;Sometimes I use things I've done privately based on interests as ideas, or I start by thinking of ideas related to specific technologies, but it's mostly the former.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write a Blog
&lt;/h3&gt;

&lt;p&gt;Writing a blog to submit a CFP might seem odd, but this process is crucial for me.&lt;/p&gt;

&lt;p&gt;Writing a blog ≈ CFP written, slides almost done.&lt;/p&gt;

&lt;p&gt;By writing a blog, I can expand the idea, making CFP writing and slide creation smoother.&lt;/p&gt;

&lt;p&gt;It's important to write a blog with a proper structure, not just as a memo.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write the CFP
&lt;/h3&gt;

&lt;p&gt;My method is to write a blog before writing the CFP.&lt;/p&gt;

&lt;p&gt;Instead of writing the CFP immediately, I organize various things.&lt;/p&gt;

&lt;p&gt;Recently, I've been using Miro to organize.&lt;/p&gt;

&lt;p&gt;I organize it like the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxodtqtbv47w3u1qgnks.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flxodtqtbv47w3u1qgnks.png" alt="miro-cfp" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's the format I prepare to write a CFP.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Session Title&lt;/li&gt;
&lt;li&gt;Event Information&lt;/li&gt;
&lt;li&gt;CFP&lt;/li&gt;
&lt;li&gt;Acceptance Criteria&lt;/li&gt;
&lt;li&gt;What to Talk About / What Not to Talk About&lt;/li&gt;
&lt;li&gt;What I Want to Convey&lt;/li&gt;
&lt;li&gt;Keywords&lt;/li&gt;
&lt;li&gt;Outline&lt;/li&gt;
&lt;li&gt;Slide Draft&lt;/li&gt;
&lt;li&gt;Research&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By completing this format in no particular order, the CFP is finished.&lt;/p&gt;

&lt;p&gt;The original idea for this format was taught by a senior engineer at a company I used to work for, but I've added my own touches.&lt;/p&gt;

&lt;p&gt;I'll explain each part of the format using the preparation content submitted for Go Conference 2021 as an example.&lt;/p&gt;

&lt;h4&gt;
  
  
  Session Title
&lt;/h4&gt;

&lt;p&gt;Write the session title.&lt;/p&gt;

&lt;p&gt;If the idea is ready and the blog is written, the session title can be mostly decided, but if not, I set a tentative title first.&lt;/p&gt;

&lt;p&gt;When thinking about the title, I only consider whether it conveys the presentation's image concisely in one breath, similar to naming functions or variables when coding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t9t916z87mzuuydxkom.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3t9t916z87mzuuydxkom.png" alt="Session Title" width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Event Information
&lt;/h4&gt;

&lt;p&gt;Check and write down information about the event.&lt;/p&gt;

&lt;p&gt;Write the event title, date, and details of the speaking slot for which you're submitting the CFP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9icpnw2pbx6q3kfwmnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi9icpnw2pbx6q3kfwmnb.png" alt="Event Information" width="800" height="789"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  CFP
&lt;/h4&gt;

&lt;p&gt;Write the text of the CFP to be submitted.&lt;/p&gt;

&lt;p&gt;Sometimes I write it after organizing other parts, or I write a rough draft first.&lt;/p&gt;

&lt;p&gt;I feel that CFPs have a certain character limit, but even if not, I try to write concisely.&lt;/p&gt;

&lt;p&gt;As long as it includes the necessary information for the selectors, it should be fine to write it briefly.&lt;/p&gt;

&lt;p&gt;I write the CFP with the following outline.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What will be discussed&lt;/li&gt;
&lt;li&gt;Who is the target audience, and who would benefit from listening&lt;/li&gt;
&lt;li&gt;What information can be gained from the presentation&lt;/li&gt;
&lt;li&gt;Outline of the presentation content&lt;/li&gt;
&lt;li&gt;Supplementary material links&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsupod8lvbukikkn73pdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsupod8lvbukikkn73pdf.png" alt="CFP" width="800" height="835"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Acceptance Criteria
&lt;/h4&gt;

&lt;p&gt;Check and write down the event's acceptance criteria.&lt;/p&gt;

&lt;p&gt;Most conferences have acceptance criteria.&lt;/p&gt;

&lt;p&gt;This is a regulation, so read and confirm it carefully.&lt;/p&gt;

&lt;p&gt;Not only the acceptance criteria but also the code of conduct should be read thoroughly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gfnml4zee40rxjqh030.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0gfnml4zee40rxjqh030.png" alt="Acceptance Criteria" width="800" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What to Talk About / What Not to Talk About
&lt;/h4&gt;

&lt;p&gt;Write what to talk about and what not to talk about.&lt;/p&gt;

&lt;p&gt;It's especially important to write what not to talk about. Prioritizing the main theme and avoiding talking too much about unrelated topics prevents the content from becoming scattered and hard to convey, so it's important to clarify unnecessary topics.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswc0med74jgkjgws2qag.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fswc0med74jgkjgws2qag.png" alt="What to Talk About / What Not to Talk About" width="800" height="202"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What I Want to Convey
&lt;/h4&gt;

&lt;p&gt;Write what you want to convey.&lt;/p&gt;

&lt;p&gt;You can write as many as you want, but focusing on one per theme makes the content more cohesive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvddb8zqxj9udfsdbs2r1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvddb8zqxj9udfsdbs2r1.png" alt="What I Want to Convey" width="800" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Keywords
&lt;/h4&gt;

&lt;p&gt;Pick up and write keywords related to the presentation content.&lt;/p&gt;

&lt;p&gt;This is more about organizing and finding key points rather than expanding ideas.&lt;/p&gt;

&lt;p&gt;Writing them out helps identify important keywords, making it easier to summarize what you want to convey and assert.&lt;/p&gt;

&lt;p&gt;Conversely, it also reveals keywords that may not need to be addressed, so I write them out as an exercise.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wnwf1h9r1a0cpc00c52.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4wnwf1h9r1a0cpc00c52.png" alt="Keywords" width="800" height="883"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Outline
&lt;/h4&gt;

&lt;p&gt;Write the outline of the presentation content.&lt;/p&gt;

&lt;p&gt;I sometimes write this, sometimes not. If the blog is finished, I might not write it; if not, I write it to prepare the blog.&lt;/p&gt;

&lt;p&gt;If the blog is finished, I organize the outline based on the blog content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faij5trhvkjzi940hm2rq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faij5trhvkjzi940hm2rq.png" alt="Outline" width="800" height="1229"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Slide Draft
&lt;/h4&gt;

&lt;p&gt;Write a rough image of the slides using sticky notes.&lt;/p&gt;

&lt;p&gt;This is about imagining how to translate the outline into slides, but recently I've been using slide creation software to create outlines as sticky notes and make slides, so it might not be necessary. However, doing it helps you be aware of the presentation flow, notice any inconsistencies, and identify areas that need more depth, so it's worth doing.&lt;/p&gt;

&lt;h4&gt;
  
  
  Research
&lt;/h4&gt;

&lt;p&gt;Write down anything you want to research thoroughly or delve into later.&lt;/p&gt;

&lt;p&gt;Summarize and memo research items like preparing sample implementations or conducting technical verifications.&lt;/p&gt;

&lt;p&gt;Also, write down checks for logical or factual confirmations of what you want to assert.&lt;/p&gt;

&lt;h1&gt;
  
  
  CFP Examples
&lt;/h1&gt;

&lt;p&gt;Here are examples of CFPs I have actually submitted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Go Conference 2021/Introduction to Building an HTTP Router with net/http
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;I will talk about how to build an HTTP router using Go's standard package net/http. Starting with reading the code to launch a simple server using net/http, I will explain how to build an HTTP router and the algorithms involved. Although there may not be many opportunities to build one from scratch due to the existence of excellent routers as OSS, I believe building one can deepen your understanding of net/http and tree structures. This LT targets Go beginners.

Here are the main materials for this LT.

## Github
- [github.com - bmf-san/goblin](https://github.com/bmf-san/goblin)

## Blog
- [Golang's HTTP Server Code Reading](https://bmf-tech.com/posts/Golang%E3%81%AEHTTP%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%83%AA%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0)
- [Introduction to Building URL Routing from Scratch Episode 1](https://bmf-tech.com/posts/URL%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%82%A8%E3%83%94%E3%82%BD%E3%83%BC%E3%83%89%EF%BC%91)
- [Introduction to Building URL Routing from Scratch Episode 2](https://bmf-tech.com/posts/URL%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0%E8%87%AA%E4%BD%9C%E5%85%A5%E9%96%80%E3%80%80%E3%82%A8%E3%83%94%E3%82%BD%E3%83%BC%E3%83%89%EF%BC%92)
- [Introduction to URL router from scratch with Golang](https://dev.to/bmf_san/introduction-to-url-router-from-scratch-with-golang-3p8j)


## Slides
- [Built a URL Router with Golang](https://speakerdeck.com/bmf_san/golangteurlrutawotukututa)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Go Conference 2023/The Ultimate HTTP Router Dance
&lt;/h2&gt;

&lt;p&gt;This was accepted, but I had to decline due to unavoidable circumstances. I really wanted to participate, and I feel regret and apologize to the organizers. This idea is still an unpublished work, so I plan to try again next time.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Go provides a standard feature (multiplexer) for routing, but in actual development, you often use some HTTP Router package.

I have been building my own HTTP Router, and I wanted to compare its performance with existing packages.

So, I implemented a benchmarker and worked on comparing performance differences.

I will talk about the results of picking up and comparing several packages and the learnings from it.

This LT will consider the following outline.

Motivation
Premises (premises for performance comparison)
Measurement methods and targets
Measurement results
Learnings

I want to provide my answers to questions like "Which HTTP Router performed the best? (according to me)", "What is the performance difference with the standard multiplexer?", and "Can performance alone be a criterion for selecting an HTTP Router?"

// The following is not the main body of the CFP but a supplementary text submitted
This presentation is based on a past presentation, "The Ultimate HTTP Router Martial Arts Tournament."

cf. https://speakerdeck.com/bmf_san/tian-xia-httprouterwu-dou-hui

I plan to organize and brush up on parts that were not fully organized in the initial content of that presentation and make it the theme of this presentation.

I changed it to a dance because martial arts tournaments sound violent, and martial arts tournament 2 sounds mysterious.

Other related information
https://dev.to/bmf_san/implemented-a-bench-marker-to-compare-gos-http-router-146p
An article summarizing the comparison of HTTP Routers
https://github.com/bmf-san/goblin
My self-made HTTP Router

As a hidden theme, I hope to convey the fun of implementing an HTTP Router to the audience.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;The key point or tip for me when writing a CFP is "to have a blog written."&lt;/p&gt;

&lt;p&gt;If you can output in writing, about 60-70% of the presentation preparation is done.&lt;/p&gt;

&lt;p&gt;When I usually finish a CFP, I write it in this flow, but as I repeat the process, the method becomes rougher, but I make sure not to skip the task of writing a blog.&lt;/p&gt;

&lt;p&gt;Once the CFP is accepted, it's just a matter of riding the flow to create and refine the slides, so you can proceed smoothly.&lt;/p&gt;

&lt;p&gt;Although it's somewhat formal, I think that by not neglecting preparation, the work becomes smoother, and the acceptance rate increases (personal opinion).&lt;/p&gt;

&lt;p&gt;Speaking of which, I once served as a selector for an event as an organizer, and I think it's important to put yourself in the selector's shoes.&lt;/p&gt;

&lt;h1&gt;
  
  
  Thoughts
&lt;/h1&gt;

&lt;p&gt;I always think there's room to study these business skills, but due to laziness, I haven't been able to...&lt;/p&gt;

&lt;p&gt;Since impressions can be influenced by how you convey things, I believe the return on honing these skills is significant, but recently I have a feeling that ChatGPT might become a good teacher.&lt;/p&gt;

&lt;h1&gt;
  
  
  Aside
&lt;/h1&gt;

&lt;p&gt;I intended to limit the discussion to CFPs, but I'll add an aside.&lt;/p&gt;

&lt;h2&gt;
  
  
  Things to Keep in Mind When Creating Slides
&lt;/h2&gt;

&lt;p&gt;I've organized a few things I keep in mind when creating slides for speaking events.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, finish roughly, move your hands first, and refine details gradually. Like agile.

&lt;ul&gt;
&lt;li&gt;If you try to complete each slide, you might fall into the waterfall trap.&lt;/li&gt;
&lt;li&gt;You often end up reworking, losing sight of the overall picture, and the flow of the slides becomes inconsistent.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Don't put too much text.

&lt;ul&gt;
&lt;li&gt;I think presentation materials are like that.&lt;/li&gt;
&lt;li&gt;Even if you write a lot of text, the audience can't read it all, and they come to listen to the talk.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Practice

&lt;ul&gt;
&lt;li&gt;Measure time, practice in the same environment as the actual presentation (match the device, presentation method, etc.).&lt;/li&gt;
&lt;li&gt;Properly operate slide transitions, check if speaker notes are visible if you split the screen, etc.&lt;/li&gt;
&lt;li&gt;If you fumble during the actual presentation, you'll waste time...&lt;/li&gt;
&lt;li&gt;It's also good to roughly check how many seconds you can spend per slide.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Keep the volume modest.

&lt;ul&gt;
&lt;li&gt;For a 15-minute presentation, it's just right to narrow down the slide count and content to something that can be covered in about 12-13 minutes.&lt;/li&gt;
&lt;li&gt;Even if you're not nervous, if there are various things you want to talk about, the talk tends to extend (which can also be due to lack of practice).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Don't write too much in speaker notes.

&lt;ul&gt;
&lt;li&gt;Don't make notes that can be read aloud as they are.&lt;/li&gt;
&lt;li&gt;Unless you're an announcer, it tends to become monotone.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Think about the words to use at transitions in the talk.

&lt;ul&gt;
&lt;li&gt;In the flow of the talk, there are scenes where the topic changes, and I often struggle with how to smoothly move to the next topic, so I choose words in advance.&lt;/li&gt;
&lt;li&gt;If you can't find good words, there might be room for improvement in the flow of the talk, so refactor it.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Keep the self-introduction slide simple.

&lt;ul&gt;
&lt;li&gt;Unless there's a case where you should write it properly depending on the purpose of the presentation or event, keep it brief.&lt;/li&gt;
&lt;li&gt;There's a strategic way of writing it as a conversation starter for after-parties, but it's a low priority that can be considered after all slides are finished.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Don't include easy jokes or gags.

&lt;ul&gt;
&lt;li&gt;In official talks, don't include unnecessary "gags." There's no need to take risks that don't match the cost.&lt;/li&gt;
&lt;li&gt;Also avoid quirky metaphors...&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Get a review

&lt;ul&gt;
&lt;li&gt;As an individual activity, I often complete it on my own, but if it's part of work, it's good to get feedback from others through a review.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

</description>
      <category>technicalwriting</category>
    </item>
    <item>
      <title>Things to Consider When Writing Architecture Documents</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:22:17 +0000</pubDate>
      <link>https://dev.to/bmf_san/things-to-consider-when-writing-architecture-documents-24fl</link>
      <guid>https://dev.to/bmf_san/things-to-consider-when-writing-architecture-documents-24fl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/writing-architecture-documentation/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;In system design, architecture documents play a crucial role. Especially during the design phase, they function as materials to explain the validity of the design to stakeholders and to form consensus. This document should not be a mere list of design information but a strategic document that guides the reader's understanding and agreement.&lt;/p&gt;

&lt;h1&gt;
  
  
  Clarify the Purpose
&lt;/h1&gt;

&lt;p&gt;The first thing to be aware of when creating a document is its purpose. It must be clear who this document is for and what it aims to convey. The main audience is the project's stakeholders. It is required to address their concerns and be understandable.&lt;/p&gt;

&lt;h1&gt;
  
  
  Characteristics the Document Should Have
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Accuracy
&lt;/h2&gt;

&lt;p&gt;The content must be accurate concerning the target architecture and stakeholders' concerns. It should also clearly state that the proposed architecture meets the stakeholders' needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sufficiency
&lt;/h2&gt;

&lt;p&gt;Instead of merely listing components, it is necessary to show the reasoning behind adopting such a configuration. If there were alternatives, logically explaining their comparison and reasons for rejection increases the persuasiveness of the design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conciseness
&lt;/h2&gt;

&lt;p&gt;It is important to focus on critical design decisions rather than writing everything in detail. The level of detail should be adjusted based on the following perspectives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stakeholders' technical ability and experience&lt;/li&gt;
&lt;li&gt;The novelty of the content&lt;/li&gt;
&lt;li&gt;Complexity of the problem to be solved&lt;/li&gt;
&lt;li&gt;Available communication time and resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Clarity
&lt;/h2&gt;

&lt;p&gt;It is important to adjust the use of technical terms and expressions according to the reader's knowledge and understanding level. Using diagrams and tables to convey information visually is also effective.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relevance
&lt;/h2&gt;

&lt;p&gt;The document must reflect the latest design status. As the design evolves, the document must be updated regularly to remain meaningful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Precision
&lt;/h2&gt;

&lt;p&gt;The necessary details should be described to the extent that implementation can begin. However, writing too much detail can impair readability, so it is necessary to balance using diagrams, separate documents, and a mix of concrete and abstract information.&lt;/p&gt;

&lt;h1&gt;
  
  
  Example Structure
&lt;/h1&gt;

&lt;p&gt;Below is an example structure of an architecture document, including points the author keeps in mind when writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Purpose of the document&lt;/li&gt;
&lt;li&gt;Intended audience&lt;/li&gt;
&lt;li&gt;Summary of system goals&lt;/li&gt;
&lt;li&gt;Summary of scope&lt;/li&gt;
&lt;li&gt;Summary of solutions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Requirements Definition
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Functional requirements&lt;/li&gt;
&lt;li&gt;Non-functional requirements&lt;/li&gt;
&lt;li&gt;Special notes (regulations, assumptions, constraints, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Architecture Diagram
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Diagrams showing system components and their relationships, including external systems (C4 model is effective)&lt;/li&gt;
&lt;li&gt;Special notes (trust boundaries, availability perspectives, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Data Model
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Diagrams of major data structures handled (ER diagrams, schema diagrams, etc.)&lt;/li&gt;
&lt;li&gt;Special notes (handling of personal information, legal constraints, etc.)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Describe major usage scenarios and show the business context behind design decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Technical Details
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Technology stack, frameworks, libraries used&lt;/li&gt;
&lt;li&gt;Explanation of reasons for technology selection and design considerations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Risks and Issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Risks anticipated at this point&lt;/li&gt;
&lt;li&gt;Technical and business challenges and their response strategies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Outlook
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Future directions for system expansion and improvement&lt;/li&gt;
&lt;li&gt;Prospects for availability, scalability, and maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Unresolved Issues
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Points requiring further consideration and pending issues&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Related Documents
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Links to detailed specifications, business flow diagrams, project plans, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Who the stakeholders are becomes a variable that influences the content of the document.&lt;/p&gt;

&lt;p&gt;If the document is only for developers, it is relatively easy for developers to write. However, when targeting stakeholders without a technical background, such as project managers or sales, more careful consideration is needed.&lt;/p&gt;

&lt;p&gt;It is easy to create documents or diagrams that try to explain multiple things at once, but to help the reader understand, it is important to organize information and focus the content.&lt;/p&gt;

&lt;p&gt;I often start by being aware of conciseness first and then adjust to capture other perspectives. Including too much detail from the start can increase cognitive load even for myself, so I often build the document by first grasping the overall picture and then adding necessary information.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://amzn.to/4dysuvg" rel="noopener noreferrer"&gt;Principles of Building System Architecture: Three Thoughts IT Architects Should Have - Chapter 13&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>architecturestrategy</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Writing to Remote Files with Ansible</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:22:15 +0000</pubDate>
      <link>https://dev.to/bmf_san/writing-to-remote-files-with-ansible-3mjd</link>
      <guid>https://dev.to/bmf_san/writing-to-remote-files-with-ansible-3mjd</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/write-remote-file-ansible/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;A task to write to remote files using Ansible. Frequently used.&lt;/p&gt;

&lt;h1&gt;
  
  
  Playbook
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="nn"&gt;---&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vps&lt;/span&gt;
  &lt;span class="na"&gt;become&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;yes&lt;/span&gt;
  &lt;span class="na"&gt;user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;root&lt;/span&gt;
  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Add text&lt;/span&gt;
    &lt;span class="na"&gt;blockinfile&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
     &lt;span class="na"&gt;dest&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/path/to/file&lt;/span&gt;
     &lt;span class="na"&gt;insertafter&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;^#&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Add&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Here'&lt;/span&gt;
     &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
        &lt;span class="s"&gt;# New Line&lt;/span&gt;
         &lt;span class="s"&gt;Here is a new line.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Thoughts
&lt;/h1&gt;

&lt;p&gt;It's easy to write.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://docs.ansible.com/ansible/lineinfile_module.html" rel="noopener noreferrer"&gt;lineinfile - Ensure a particular line is in a file, or replace an existing line using a back-referenced regular expression.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ansible</category>
    </item>
    <item>
      <title>Why and When to Write an Architecture Strategy</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:21:43 +0000</pubDate>
      <link>https://dev.to/bmf_san/why-and-when-to-write-an-architecture-strategy-5gj3</link>
      <guid>https://dev.to/bmf_san/why-and-when-to-write-an-architecture-strategy-5gj3</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/when-why-write-architecture-strategy/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In many cases, strategies and tactics are not clearly defined. This may be due to a lack of recognition of their usefulness and necessity.&lt;/p&gt;

&lt;p&gt;Some might say, "If I have time to write a strategy, I'd rather be working," or "Even if I write it, no one will read it." However, proceeding without a strategy can lead to various problems.&lt;/p&gt;

&lt;p&gt;This article organizes what happens without a strategy and when you should write one.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens Without a Strategy
&lt;/h2&gt;

&lt;p&gt;Proceeding without a strategy can lead to the following issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Ad Hoc Technology Selection
&lt;/h3&gt;

&lt;p&gt;Different technologies are adopted by each team and phase. For example, Service A uses Redis, Service B uses Memcached, and Service C has a custom implementation.&lt;/p&gt;

&lt;p&gt;As a result, skills are dispersed, and maintenance costs increase. Without a unified policy, selections are made based on ad hoc decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Misguided Prioritization
&lt;/h3&gt;

&lt;p&gt;Multiple improvement proposals such as "DB partitioning," "cache introduction," and "asynchronization" are discussed in parallel. However, without criteria for judgment, decisions are swayed by the loudest voices or recent incidents.&lt;/p&gt;

&lt;p&gt;As a result, everything becomes half-baked, or the order of implementation becomes inefficient.&lt;/p&gt;

&lt;h3&gt;
  
  
  Means Becoming the End
&lt;/h3&gt;

&lt;p&gt;"Microservices" become the goal, and the reason for doing it becomes unclear. Each team interprets it differently, with expectations like "wanting independent deployment" or "wanting to increase scalability" varying.&lt;/p&gt;

&lt;p&gt;As a result, the granularity of division becomes inconsistent, and the expected effects are not achieved.&lt;/p&gt;

&lt;h3&gt;
  
  
  Postponing Debt Management
&lt;/h3&gt;

&lt;p&gt;"Prioritizing feature development now" becomes the norm. Without criteria for when and which debts to repay, debts continue to accumulate.&lt;/p&gt;

&lt;p&gt;As a result, debts exceed a critical point, leading to a rushed response. Planned repayment becomes impossible, causing a decline in development speed.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Write a Strategy
&lt;/h2&gt;

&lt;p&gt;For medium to long-term projects of about 1 to 3 years, a strategy should be written. Even for projects of about six months, having a simple one is beneficial.&lt;/p&gt;

&lt;p&gt;The reason is that without a policy, the architecture may waver when evolving over such a span. The aforementioned problems are more likely to occur.&lt;/p&gt;

&lt;p&gt;Moreover, if there is a policy, it can be flexibly updated according to the situation. Changing the policy itself is not a problem. However, without a policy, it becomes unclear "what was changed." It is important to have a policy and update it as needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the Strategy Work
&lt;/h2&gt;

&lt;p&gt;Writing a strategy is meaningless if it doesn't function. Here are some points to prevent it from becoming a mere formality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use as a Basis for Decision-Making&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Refer to the strategy in actual decision-making. By making it a habit to ask, "Does this align with the policy?", the strategy functions as a criterion for judgment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review Regularly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Situations change. The strategy should not be fixed but reviewed and updated regularly. Reflect quarterly or when there are significant changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Share with Stakeholders&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The strategy is not just for the person who wrote it. Sharing it with stakeholders and having a common understanding helps prevent the team's decisions from wavering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Proceeding without a strategy leads to issues such as ad hoc technology selection, misguided prioritization, means becoming the end, and postponing debt management.&lt;/p&gt;

&lt;p&gt;For medium to long-term projects of about 1 to 3 years, a strategy should be written. Even for projects of about six months, having a simple one is beneficial.&lt;/p&gt;

&lt;p&gt;To make the strategy work, it is important to use it as a basis for decision-making, review it regularly, and share it with stakeholders.&lt;/p&gt;

</description>
      <category>architecturestrategy</category>
      <category>architecture</category>
      <category>design</category>
    </item>
    <item>
      <title>Polymorphism Explained: How Object-Oriented Code Stays Flexible</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:21:41 +0000</pubDate>
      <link>https://dev.to/bmf_san/polymorphism-explained-how-object-oriented-code-stays-flexible-4b84</link>
      <guid>https://dev.to/bmf_san/polymorphism-explained-how-object-oriented-code-stays-flexible-4b84</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-polymorphism/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;Summarizing polymorphism&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Polymorphism
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Poly (multiple) Morphism (forms)&lt;/li&gt;
&lt;li&gt;Providing a shared interface for multiple different types&lt;/li&gt;
&lt;li&gt;Instances behave differently depending on the class when receiving arguments&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Types of Polymorphism
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Ad-hoc polymorphism

&lt;ul&gt;
&lt;li&gt;Functions have different implementations for arguments of different types&lt;/li&gt;
&lt;li&gt;Achieved through overloading and function overloading&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Parametric polymorphism

&lt;ul&gt;
&lt;li&gt;Code is written without specifying types and can be used transparently for each type&lt;/li&gt;
&lt;li&gt;Applicable to various types by passing the type as an argument&lt;/li&gt;
&lt;li&gt;Achieved through generics or templates&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Subtyping

&lt;ul&gt;
&lt;li&gt;Handling multiple types with a common supertype under a single name&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/lrf141/items/a2f764c8d87de26b6f45" rel="noopener noreferrer"&gt;Feeling like you understand object-oriented? [Polymorphism] java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%82%BA%E3%83%A0" rel="noopener noreferrer"&gt;Wikipedia - Polymorphism&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://noiselessworld.hatenablog.jp/entry/2017/01/30/002252" rel="noopener noreferrer"&gt;Understanding Polymorphism Better&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>polymorphism</category>
    </item>
    <item>
      <title>The N+1 Problem Explained: How to Detect and Fix It in Go/Rails</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:21:10 +0000</pubDate>
      <link>https://dev.to/bmf_san/the-n1-problem-explained-how-to-detect-and-fix-it-in-gorails-3d8b</link>
      <guid>https://dev.to/bmf_san/the-n1-problem-explained-how-to-detect-and-fix-it-in-gorails-3d8b</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-n-plus-one-problem/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;A summary of the N+1 problem and how to address it.&lt;/p&gt;

&lt;h1&gt;
  
  
  What is the N+1 Problem
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;The issue where 1 SQL query is issued for retrieving all records plus N SQL queries for each record.&lt;/li&gt;
&lt;li&gt;It is easier to understand if interpreted as 1+N rather than N+1.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Example
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Case of retrieving data for list display

&lt;ul&gt;
&lt;li&gt;Issue 1 SELECT query to retrieve all data for the list (returns N records)&lt;/li&gt;
&lt;li&gt;Issue N SELECT queries to retrieve related data for N records&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Solutions
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Join

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;SELECT "users".* FROM "users" INNER JOIN "posts" ON "posts"."user_id" = "users"."id" WHERE "posts"."id" = 1&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Eager Loading&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SELECT "users".* FROM "users"&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SELECT "posts".* FROM "posts" WHERE "posts"."id" IN (1, 2, 3, 4, 5)&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://qiita.com/hisonl/items/763b9d6d4e90b1606635" rel="noopener noreferrer"&gt;N+1問題は1+N問題&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.techscore.com/blog/2012/12/25/rails%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E7%B4%B9%E4%BB%8B-n1%E5%95%8F%E9%A1%8C%E3%82%92%E6%A4%9C%E5%87%BA%E3%81%99%E3%82%8B%E3%80%8Cbullet%E3%80%8D/" rel="noopener noreferrer"&gt;N+1 問題&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ruby-rails.hatenadiary.com/entry/20141108/1415418367" rel="noopener noreferrer"&gt;N+1問題 / Eager Loading とは&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/k0kubun/items/80c5a5494f53bb88dc58" rel="noopener noreferrer"&gt;ActiveRecordのjoinsとpreloadとincludesとeager_loadの違い&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>n1</category>
    </item>
    <item>
      <title>Linux Load Average Explained: How to Read and Diagnose Performance Issues</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:21:08 +0000</pubDate>
      <link>https://dev.to/bmf_san/linux-load-average-explained-how-to-read-and-diagnose-performance-issues-5a84</link>
      <guid>https://dev.to/bmf_san/linux-load-average-explained-how-to-read-and-diagnose-performance-issues-5a84</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-load-average/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When checking system load, you often see the metric "Load Average" displayed by the &lt;code&gt;top&lt;/code&gt; or &lt;code&gt;uptime&lt;/code&gt; commands.&lt;/p&gt;

&lt;p&gt;Load Average is a value that represents the number of processes waiting to be executed, and it is an important indicator of system congestion.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Nature of Load Average
&lt;/h1&gt;

&lt;p&gt;Load Average is the average number of processes that were in a "runnable or running" state over a certain period. In Linux and UNIX-based OS, the averages for 1 minute, 5 minutes, and 15 minutes are displayed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;load average: 0.78, 1.32, 1.48

From left to right, these represent the 1-minute, 5-minute, and 15-minute averages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This number indicates the number of processes that were simultaneously running or waiting to run relative to the CPU cores, indirectly representing CPU congestion.&lt;/p&gt;

&lt;p&gt;It is important to note that Load Average is not "CPU usage." While CPU usage is expressed as a percentage (&lt;code&gt;%&lt;/code&gt;), Load Average is the "average number of processes," which is fundamentally different in nature.&lt;/p&gt;

&lt;h1&gt;
  
  
  Relationship with CPU Core Count
&lt;/h1&gt;

&lt;p&gt;The most important aspect of evaluating Load Average is its relative relationship to the number of CPU cores.&lt;/p&gt;

&lt;p&gt;For example, if a machine with 4 cores has a Load Average of 4.0, it means all cores are fully utilized. If it exceeds this, processes may be waiting for CPU availability, indicating potential "congestion."&lt;/p&gt;

&lt;p&gt;Conversely, if a machine with 8 cores has a Load Average of 1.5, the average wait per core is only 0.1875, indicating ample capacity.&lt;/p&gt;

&lt;h1&gt;
  
  
  Cases Where High Load Average is Not a Problem
&lt;/h1&gt;

&lt;p&gt;A high Load Average does not necessarily indicate an issue. For instance, it is natural for it to temporarily increase in the following cases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Batch processing or scheduled jobs are running&lt;/li&gt;
&lt;li&gt;Many processes are waiting for IO or are in sleep mode, leaving the CPU with spare capacity&lt;/li&gt;
&lt;li&gt;Parallel processing tasks temporarily occupy the CPU&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In such cases, if a high Load Average does not affect user experience, it should not be a concern.&lt;/p&gt;

&lt;h1&gt;
  
  
  When to Really Pay Attention
&lt;/h1&gt;

&lt;p&gt;If you observe the following symptoms, a high Load Average may be causing real issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application response delays or timeouts&lt;/li&gt;
&lt;li&gt;CPU usage is also spiking in Cloud Monitoring or similar tools&lt;/li&gt;
&lt;li&gt;IO Wait (disk IO waiting) persists for a long time&lt;/li&gt;
&lt;li&gt;The number of concurrent connections or threads is rapidly increasing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In such situations, you need to use tools like &lt;code&gt;top&lt;/code&gt;, &lt;code&gt;vmstat&lt;/code&gt;, or &lt;code&gt;iostat&lt;/code&gt; to check details and identify which resource is the bottleneck.&lt;/p&gt;

&lt;h1&gt;
  
  
  Using Load Average and Other Metrics
&lt;/h1&gt;

&lt;p&gt;Load Average is a metric to see "how congested processes are." To understand the system's state, you also need to look at other metrics like the following:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;th&gt;Representative Commands&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Load Average&lt;/td&gt;
&lt;td&gt;Average number of waiting processes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;uptime&lt;/code&gt;, &lt;code&gt;top&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CPU Usage&lt;/td&gt;
&lt;td&gt;Percentage of CPU time used&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;top&lt;/code&gt;, &lt;code&gt;mpstat&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;IO Wait&lt;/td&gt;
&lt;td&gt;Percentage of IO wait time&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;iostat&lt;/code&gt;, &lt;code&gt;vmstat&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Usage&lt;/td&gt;
&lt;td&gt;State of actual memory usage&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;free&lt;/code&gt;, &lt;code&gt;htop&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process Count&lt;/td&gt;
&lt;td&gt;Number of currently running processes&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;htop&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h1&gt;
  
  
  Correct Interpretation and Engagement
&lt;/h1&gt;

&lt;p&gt;Load Average is not something to be swayed by just looking at the "numbers." You should understand the appropriate value for that server and observe trends. Consider whether it exceeds the number of cores, if there are abnormal spikes, and if there is any real impact. By keeping these three points in mind, you can avoid overreacting.&lt;/p&gt;

&lt;p&gt;Moreover, the trend of Load Average is a good indicator of how "busy" the system is. By combining it with CPU usage and memory usage, you can perform a more realistic analysis.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Load Average provides valuable information for understanding system congestion as an indicator of process traffic. By being aware of its relative relationship with CPU core count, you can correctly evaluate the meaning of the values.&lt;/p&gt;

&lt;p&gt;By observing it in combination with other metrics like CPU usage, IO Wait, and memory usage, it becomes a clue to decipher actual bottlenecks and processing wait situations.&lt;/p&gt;

&lt;p&gt;Instead of just focusing on "high Load Average," consider "how it affects user experience and the overall system."&lt;/p&gt;

</description>
      <category>systemperformance</category>
      <category>loadaverage</category>
    </item>
    <item>
      <title>What is a Database Index? How It Works and When You Need It</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:20:36 +0000</pubDate>
      <link>https://dev.to/bmf_san/what-is-a-database-index-how-it-works-and-when-you-need-it-4afg</link>
      <guid>https://dev.to/bmf_san/what-is-a-database-index-how-it-works-and-when-you-need-it-4afg</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-index/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What is an Index?
&lt;/h1&gt;

&lt;p&gt;A mechanism to quickly retrieve records stored in a table.&lt;/p&gt;

&lt;p&gt;Consider a query with an O(n) problem like the following:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SELECT * FROM users WHERE first_name = ‘Tom’&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To improve the performance of this query, you can add an index as follows:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ALTER TABLE users ADD INDEX (first_name)&lt;/code&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Advantages and Disadvantages
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Improved speed of data reading and retrieval&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Disadvantages
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Increased storage size&lt;/li&gt;
&lt;li&gt;Decreased write speed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When creating or updating data, indexes are also added or updated simultaneously, leading to the above disadvantages.&lt;/p&gt;

&lt;h1&gt;
  
  
  Index Patterns
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Standard (Applied to a single column)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ALTER TABLE users ADD INDEX (first_name)&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Partial Index
&lt;/h2&gt;

&lt;p&gt;An effective pattern when you want to improve performance while suppressing storage increase.&lt;/p&gt;

&lt;p&gt;Example of applying an index to only the first 4 bytes:&lt;br&gt;
&lt;code&gt;ALTER TABLE users ADD INDEX (first_name(4))&lt;/code&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Multi-column Index (Also called composite or compound index)
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;ALTER TABLE users ADD INDEX (last_name, first_name)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In MySQL, &lt;strong&gt;only one index per table can be used for a single query execution&lt;/strong&gt;, but if a multi-index is applied, a valid index will be selected during query execution.&lt;/p&gt;

&lt;p&gt;It is generally good to specify a column with high cardinality at the beginning of a multi-column index.&lt;/p&gt;
&lt;h2&gt;
  
  
  Unique Index
&lt;/h2&gt;

&lt;p&gt;Values will not appear duplicated except for NULL.&lt;br&gt;
During record creation or update, it checks all values to ensure the same value does not already exist.&lt;br&gt;
In MySQL, specifying a unique key also specifies a unique index.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ALTER TABLE users ADD UNIQUE (first_name)&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Measuring Index Effectiveness
&lt;/h1&gt;

&lt;p&gt;Check the execution plan of a query with the EXPLAIN clause.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;EXPLAIN SELECT * FROM users WHERE first_name = ‘Tom’&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Check the following items:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;possible_keys

&lt;ul&gt;
&lt;li&gt;Possible indexes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;key

&lt;ul&gt;
&lt;li&gt;Index actually selected&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;extra

&lt;ul&gt;
&lt;li&gt;If the following displays appear, query optimization is recommended:&lt;/li&gt;
&lt;li&gt;using filesort&lt;/li&gt;
&lt;li&gt;Insufficient memory for sorting, writing out to physical files for sorting&lt;/li&gt;
&lt;li&gt;using temporary&lt;/li&gt;
&lt;li&gt;Temporary tables are created for query execution&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Index Criteria
&lt;/h1&gt;

&lt;p&gt;List of criteria that might suggest considering an index. These are just guidelines for estimation, so it's better to measure with EXPLAIN.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the table has a large amount of data and the target records for search are few&lt;/li&gt;
&lt;li&gt;When there are columns used in WHERE, JOIN, ORDER BY, etc.&lt;/li&gt;
&lt;li&gt;When searching for non-NULL data from data containing many NULLs (Index may be effective as it does not include NULLs)&lt;/li&gt;
&lt;li&gt;When data is not frequently added, updated, or deleted (considering the load of index updates)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Clustered Index and Secondary Index
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Clustered Index
&lt;/h2&gt;

&lt;p&gt;Indexes that fall under the following are clustered indexes.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Columns defined by the primary key&lt;/li&gt;
&lt;li&gt;Columns with NOT NULL unique keys&lt;/li&gt;
&lt;li&gt;If no columns fall under the above, InnoDB creates a hidden clustered index called GEN_CLUST_INDEX&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Secondary Index
&lt;/h2&gt;

&lt;p&gt;Indexes other than clustered indexes are called secondary indexes.&lt;br&gt;
Secondary indexes include the value of the primary key.&lt;br&gt;
Although it is assumed to be measured with EXPLAIN, since the primary key value is included, it might be good to remember that a covering index can be achieved with just a secondary index without including the primary key in a composite index.&lt;br&gt;
cf. &lt;a href="https://nippondanji.blogspot.com/2010/10/innodb.html" rel="noopener noreferrer"&gt;InnoDB Secondary Index Utilization Techniques!&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Covering Index
&lt;/h1&gt;

&lt;p&gt;An index that contains all the columns necessary for the query result.&lt;/p&gt;

&lt;p&gt;Since it can be covered with just the index without reading the data file, the search is accelerated.&lt;/p&gt;
&lt;h1&gt;
  
  
  Cautions When Applying Indexes
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Arithmetic Operations and SQL Functions on Index Columns
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If an index is applied to amount, avoid operators to utilize the index. The amount itself is held in the index, not the result of the operation. The same applies to SQL functions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  IS_NULL
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="k"&gt;IS&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;IS NULL or IS NOT NULL generally do not effectively utilize indexes (depends on DBMS specifications).&lt;/p&gt;

&lt;h2&gt;
  
  
  Negation or OR
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;amount&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Negation cannot utilize indexes. The same applies to OR.&lt;/p&gt;

&lt;h2&gt;
  
  
  LIKE
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'a%'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When using LIKE, only forward matches utilize indexes due to the nature of B-Tree.&lt;/p&gt;

&lt;h2&gt;
  
  
  Implicit Type Conversion
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt; &lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'10'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If age is a numeric type, implicit conversion from string to number will prevent index utilization.&lt;/p&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://amzn.to/3TEltzx" rel="noopener noreferrer"&gt;amzn.to - Learn Database Practice from Theory ~ Efficient SQL with Relational Model (WEB+DB PRESS plus)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hi-ho.ne.jp/tsumiki/doc_1.html" rel="noopener noreferrer"&gt;www.hi-ho.ne.jp - Basic Knowledge of Indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://kiyotakakubo.hatenablog.com/entry/20101117/1289952549" rel="noopener noreferrer"&gt;kiyotakubo.hatenablog.com - Basic Knowledge of Indexes for MySQL Performance Tuning&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://qiita.com/katsukii/items/3409e3c3c96580d37c2b#%E9%80%9A%E5%B8%B8" rel="noopener noreferrer"&gt;qiita.com - Tips for Applying MySQL Indexes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.mysql.com/doc/refman/5.6/ja/explain.html" rel="noopener noreferrer"&gt;dev.mysql.com - EXPLAIN Output Format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.mysql.com/doc/refman/8.0/ja/glossary.html#glos_covering_index" rel="noopener noreferrer"&gt;dev.mysql.com - Covering Index&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>db</category>
      <category>index</category>
      <category>mysql</category>
    </item>
    <item>
      <title>What is GraphQL</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:20:34 +0000</pubDate>
      <link>https://dev.to/bmf_san/what-is-graphql-59gb</link>
      <guid>https://dev.to/bmf_san/what-is-graphql-59gb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-graphql/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What is GraphQL
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Developed by Facebook&lt;/li&gt;
&lt;li&gt;A query language for APIs

&lt;ul&gt;
&lt;li&gt;User-friendly because the data format of API requests and responses are similar&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;REST is an architecture (design), while GraphQL is a language (DSL)&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Comparison of REST API and GraphQL
&lt;/h1&gt;

&lt;h2&gt;
  
  
  REST API Format
&lt;/h2&gt;

&lt;p&gt;Send requests to endpoints using HTTP verbs&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl https://api.bmf-tech.com/v1/configs&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"alias_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bmf-tech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2017-09-25 23:08:23"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bmf-tech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"deleted_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  GraphQL API Format
&lt;/h1&gt;

&lt;p&gt;Send queries to a single endpoint&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl https://api.bmf-tech.com/api&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight graphql"&gt;&lt;code&gt;&lt;span class="err"&gt;configs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;alias_name&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;created_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;updated_at&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;deleted_at&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"alias_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Title"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bmf-tech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"created_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2017-09-25 23:08:23"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bmf-tech"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"deleted_at"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;REST API&lt;/th&gt;
&lt;th&gt;GraphQL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Endpoints&lt;/td&gt;
&lt;td&gt;Multiple&lt;/td&gt;
&lt;td&gt;Single&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP Verbs&lt;/td&gt;
&lt;td&gt;Dependent&lt;/td&gt;
&lt;td&gt;Independent&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type System&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Available&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versioning Required&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation Required&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Resource Limitation&lt;/td&gt;
&lt;td&gt;Mainly call count&lt;/td&gt;
&lt;td&gt;Handled according to resource amount&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Flexibly specify the desired data for a single endpoint&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST has fixed response data for each endpoint.&lt;/li&gt;
&lt;li&gt;GraphQL allows specifying the desired data for a single endpoint to get the response data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Resource limitation requires ingenuity&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handled according to resource amount&lt;/li&gt;
&lt;li&gt;Need to consider methods for load calculation, such as based on the number of objects&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Almost no need for documentation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API definition serves as documentation&lt;/li&gt;
&lt;li&gt;The query structure and response data structure are almost the same&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Points of Concern
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Dependency on libraries&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requires libraries for parsing queries&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Not necessarily better performance than REST API&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduces the number of requests&lt;/li&gt;
&lt;li&gt;Increases the amount of data per request&lt;/li&gt;
&lt;li&gt;Need to control data volume in both REST API and GraphQL (e.g., pagination, field specification)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Monitoring&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;REST API can be monitored per endpoint&lt;/li&gt;
&lt;li&gt;GraphQL is a single endpoint, making it difficult to monitor response performance per query. Some measures are needed.&lt;/li&gt;
&lt;li&gt;Wait for ecosystem maturity or implement in-house&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Caching&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cannot use HTTP cache&lt;/li&gt;
&lt;li&gt;Should investigate various other aspects&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Impressions
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;In applications with many components and complex UIs, where the number of requests increases and the client side struggles, there may be benefits to introducing it.&lt;/li&gt;
&lt;li&gt;Considered using it with &lt;a href="https://github.com/bmf-san/Rubel" rel="noopener noreferrer"&gt;Rubel&lt;/a&gt;, but decided against it as it feels premature. Currently unnecessary.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;graphql.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/facebook/graphql/blob/master/rfcs/Subscriptions.md" rel="noopener noreferrer"&gt;facebook/graphql rfcs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://yamitzky.hatenablog.com/entry/graphql" rel="noopener noreferrer"&gt;A small rebuttal to "What is GraphQL suitable for"&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.webprofessional.jp/rest-2-0-graphql/" rel="noopener noreferrer"&gt;Compared "GraphQL" that changes the flow of app development with REST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://note.mu/konpyu/n/nc4fd122644a1" rel="noopener noreferrer"&gt;GraphQL is not a replacement for REST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.qnyp.com/2017/06/08/graphql-resources/" rel="noopener noreferrer"&gt;Memo when implementing GraphQL API in Rails app&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://vitalify.jp/app-lab/20171006-graphql/" rel="noopener noreferrer"&gt;Explaining GraphQL from a beginner's perspective! ~ What is the difference from REST, the same Web API? ~&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>api</category>
      <category>http</category>
      <category>rest</category>
      <category>graphql</category>
    </item>
    <item>
      <title>What is Duck Typing? How Dynamic Type Checking Works in Python, Ruby, and Go</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:20:02 +0000</pubDate>
      <link>https://dev.to/bmf_san/what-is-duck-typing-how-dynamic-type-checking-works-in-python-ruby-and-go-4g14</link>
      <guid>https://dev.to/bmf_san/what-is-duck-typing-how-dynamic-type-checking-works-in-python-ruby-and-go-4g14</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-duck-typing/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Overview
&lt;/h1&gt;

&lt;p&gt;A summary of duck typing&lt;/p&gt;

&lt;h1&gt;
  
  
  What is Duck Typing
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;In dynamically typed object-oriented programming languages, what an object can do is determined by the object itself.&lt;/li&gt;
&lt;li&gt;An object that has all the methods of an interface can be considered to implement the interface, even if it does not explicitly implement it.&lt;/li&gt;
&lt;li&gt;If it walks like a duck and quacks like a duck, it must be a duck.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://ja.wikipedia.org/wiki/%E3%83%80%E3%83%83%E3%82%AF%E3%83%BB%E3%82%BF%E3%82%A4%E3%83%94%E3%83%B3%E3%82%B0" rel="noopener noreferrer"&gt;Wikipedia - ダック・タイピング&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ducktyping</category>
    </item>
    <item>
      <title>What is Docker? A Beginner's Complete Guide to Containers</title>
      <dc:creator>Kenta Takeuchi</dc:creator>
      <pubDate>Sun, 15 Mar 2026 11:20:01 +0000</pubDate>
      <link>https://dev.to/bmf_san/what-is-docker-a-beginners-complete-guide-to-containers-kmo</link>
      <guid>https://dev.to/bmf_san/what-is-docker-a-beginners-complete-guide-to-containers-kmo</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;This article was originally published on &lt;a href="https://bmf-tech.com/posts/what-is-docker/" rel="noopener noreferrer"&gt;bmf-tech.com&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What is Docker
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;A platform developed by Docker Inc. for creating, distributing, and running container-based virtual environments&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uses Linux container technology&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Containers utilize the host machine's kernel to isolate processes and users&lt;/li&gt;
&lt;li&gt;Lightweight and fast&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Middleware and various environment settings can be managed as code (=Infrastructure as Code)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regardless of local or production environments&lt;/li&gt;
&lt;li&gt;Anyone can create the same environment&lt;/li&gt;
&lt;li&gt;Easy redistribution and reuse of environments&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;The essence of Docker&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux Container (LXC)&lt;/li&gt;
&lt;li&gt;A container management tool to simplify customization of containers in LXC (such as creating configuration files and installing files via shell scripts)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Docker for Mac&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the virtualization tool HyperKit, which is included by default on Mac, to launch a virtual machine and run Linux to enable Docker&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  What is a Container (Linux Container)
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;A set of processes isolated from the rest of the system&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs from a separate image that provides all the files necessary to support the processes&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Shares the OS and kernel, isolating application processes from the rest of the system (runs on a single OS)&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Differences Between Other Virtual Environments and Containers
&lt;/h1&gt;

&lt;h2&gt;
  
  
  General PC
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configuration
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;  &lt;span class="nn"&gt;[Host OS]&lt;/span&gt;
  &lt;span class="nn"&gt;[Hard Disk]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Host OS Type (sometimes defined as hypervisor type using host OS in a broad sense)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configuration
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;  &lt;span class="nn"&gt;[Guest OS]&lt;/span&gt;
  &lt;span class="nn"&gt;[Virtualization Software]&lt;/span&gt;
  &lt;span class="nn"&gt;[Host OS]&lt;/span&gt;
  &lt;span class="nn"&gt;[Hard Disk]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Advantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to achieve virtualization&lt;/li&gt;
&lt;li&gt;High freedom in OS selection&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Disadvantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High consumption of disk and memory&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hypervisor Type (using hard disk pattern)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Configuration
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;  &lt;span class="nn"&gt;[Guest OS]&lt;/span&gt;
  &lt;span class="nn"&gt;[Hypervisor]&lt;/span&gt;
  &lt;span class="nn"&gt;[Hard Disk]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Advantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can control hardware directly without needing host OS processing, resulting in faster processing speed&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Disadvantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not easy to achieve virtual environments (may not be able to use the host OS as is, or may require a dedicated physical server)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Container Type
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[Container Management Software]&lt;/span&gt;
&lt;span class="nn"&gt;[Host OS]&lt;/span&gt;
&lt;span class="nn"&gt;[Hard Disk]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Advantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to achieve virtual environments&lt;/li&gt;
&lt;li&gt;Low consumption of disk and memory&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Disadvantages&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can only use OS that utilizes the Linux kernel&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Overview of Docker Images and Containers
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Docker repository(Ex. Docker Hub)

                         ↓ (pull)

Dockerfile   →     Docker Image    →    Docker Container
                 (build)                           (run)   
                                      ↓ (commit)

                             Docker Image    →    Docker Container
                                                       (run)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;※ Differences between Host OS Type and Hypervisor Type&lt;br&gt;
&lt;a href="https://thinkit.co.jp/story/2012/10/17/3722" rel="noopener noreferrer"&gt;Think IT - What are the differences between Host Type and Hypervisor Type? Overview of VMware vSphere Hypervisor&lt;/a&gt; is a useful reference.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Host OS Type

&lt;ul&gt;
&lt;li&gt;Install virtualization software on the OS&lt;/li&gt;
&lt;li&gt;Access to hardware is via the host OS, causing overhead and not fully utilizing performance.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Hypervisor Type

&lt;ul&gt;
&lt;li&gt;Install directly on the server without needing a host OS.&lt;/li&gt;
&lt;li&gt;Can directly control hardware, making it easier to achieve performance.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Basic Commands
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;docker build&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an image from a Dockerfile&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;docker run&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch a container from an image&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;&lt;code&gt;docker commit&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an image from a container&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  Additional Information
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;What is a Kernel&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software responsible for the basic functions of the OS&lt;/li&gt;
&lt;li&gt;It's generally difficult to use the OS with just the kernel, so it's commonly used in combination with other software&lt;/li&gt;
&lt;li&gt;Kernel + Software = Distribution&lt;/li&gt;
&lt;li&gt;CentOS or Ubuntu → Linux kernel + software distribution&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h1&gt;
  
  
  References
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.docker.com/what-docker" rel="noopener noreferrer"&gt;Docker Official Site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://knowledge.sakura.ad.jp/13265/" rel="noopener noreferrer"&gt;Introduction to Docker (Part 1) ~What is Docker and What are its Benefits~&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.redhat.com/ja/topics/containers/whats-a-linux-container" rel="noopener noreferrer"&gt;What is a Linux Container&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.kagoya.jp/howto/rentalserver/virtualization/" rel="noopener noreferrer"&gt;What is Server Virtualization? Explaining the Mechanism, Advantages, and Disadvantages in an Easy-to-Understand Manner&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://knowledge.sakura.ad.jp/2108/" rel="noopener noreferrer"&gt;Understanding LXC (Linux Containers) in 15 Minutes and Basic Usage for Engineers 2014.06.16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://knowledge.sakura.ad.jp/2163/" rel="noopener noreferrer"&gt;Using LXC for Privilege Separation and Template Customization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://yoshinorin.net/2016/10/03/docker-image-and-container-command/" rel="noopener noreferrer"&gt;Overview of Docker Images and Containers and Various Commands (May be Updated)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://speakerdeck.com/tenforward/osc-2018-kyoto" rel="noopener noreferrer"&gt;Understanding the Inside of Linux Containers / OSC 2018 Kyoto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thinkit.co.jp/story/2012/10/17/3722" rel="noopener noreferrer"&gt;Think IT - What are the Differences Between Host Type and Hypervisor Type? Overview of VMware vSphere Hypervisor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>docker</category>
      <category>virtualenvironment</category>
    </item>
  </channel>
</rss>
