<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://fatiiates.com/blog</id>
    <title>Fatih ATES | fatiiates - Feed</title>
    <updated>2026-02-22T22:01:27.431Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <author>
        <name>Fatih ATES</name>
        <email>fatiiates@gmail.com</email>
        <uri>https://fatiiates.com</uri>
    </author>
    <link rel="alternate" href="https://fatiiates.com/blog"/>
    <link rel="self" href="https://fatiiates.com/rss.xml"/>
    <link rel="hub" href="https://fatiiates.com/blog"/>
    <subtitle>Stay up to date with my latest content</subtitle>
    <logo>https://fatiiates.com/img/og_blog.jpeg</logo>
    <icon>https://fatiiates.com/favicon.ico</icon>
    <rights>© 2026 Fatih ATES. All rights reserved. Terms: https://fatiiates.com/terms | Privacy: https://fatiiates.com/privacy</rights>
    <entry>
        <title type="html"><![CDATA[Web of Agents]]></title>
        <id>web-of-agents</id>
        <link href="https://fatiiates.com/blog/post/web-of-agents"/>
        <updated>2026-02-22T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[MCP, A2A, UCP, AP2, ANP... a protocol explosion is underway. But protocols alone are not enough. What's missing is a Google for agents. The search engine for the Web of Agents has yet to emerge.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Abstract</h2><p>The explosion of agent protocols such as Model Context Protocol (MCP), Agent-to-Agent Protocol (A2A), Universal Commerce Protocol (UCP), Agent Payments Protocol (AP2), Agent Network Protocol (ANP) and others is building the plumbing for the Web of Agents. But plumbing is not enough. What these protocols are preparing for is discovery: the ability for agents to find, evaluate and connect with other agents and services. A search engine for agents, a Google for the Web of Agents, has yet to emerge.</p><h2 id="introduction" class="group relative items-center flex"><a href="#introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Introduction</h2><p>We&#39;re in the early days of the Web of Agents. Agents will consume and produce on behalf of users. For that to work at scale, they need standards to talk to each other, to data, to commerce, to payments. Hence the protocol explosion. Anthropic, Google and the Linux Foundation are working on these protocols and preparing the era of the Web of Agents.</p><h2 id="the-protocol-landscape" class="group relative items-center flex"><a href="#the-protocol-landscape" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>The Protocol Landscape</h2><p>Overview of the main protocols and what each solves.</p><ul>
<li>ANP is the decentralized protocol for agent discovery, authentication and collaboration over the open internet.</li>
<li>MCP is the universal adapter for agent-to-data.</li>
<li>A2A is the foundation for multi-agent systems.</li>
<li>UCP is the universal commerce protocol for agent interactions in e-commerce.</li>
<li>AP2 is the agent payments protocol for secure payment communications between shopping agents, merchants and credential providers.</li>
</ul>
<h3 id="agent-network-protocol-anp-" class="group relative items-center flex"><a href="#agent-network-protocol-anp-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Agent Network Protocol (ANP)</h3><p>ANP is a decentralized, AI-native protocol designed to enable agents to discover, authenticate and collaborate with one another over the open internet. It aims to become &quot;the HTTP of the Agentic Web era.&quot; ANP addresses the discovery problem directly: interconnection across boundaries, native AI interfaces (rather than mimicking human browsing) and efficient self-organizing collaboration.</p><h3 id="model-context-protocol-mcp-" class="group relative items-center flex"><a href="#model-context-protocol-mcp-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Model Context Protocol (MCP)</h3><p>Since we are talking about the Web of Agents, we need to have a way to connect the agents to the data. MCP is the standard for this, probably the most famous and most adopted protocol for this purpose. It is a simple protocol that allows an agent with context to connect to the data. Purpose of this protocol is to allow the agents to connect to the data and tools and APIs. Not mainly developed for the agentic communication but for the agentic data connection.</p><h3 id="agent-to-agent-protocol-a2a-" class="group relative items-center flex"><a href="#agent-to-agent-protocol-a2a-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Agent-to-Agent Protocol (A2A)</h3><p>The foundation for multi-agent systems. A2A enables agents to communicate, delegate and collaborate with each other. Developed by Google and IBM, it is now part of the Linux Foundation. Without A2A, agents would have no standard way to talk to each other everything else builds on this.</p><h3 id="agent-payments-protocol-ap2-" class="group relative items-center flex"><a href="#agent-payments-protocol-ap2-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Agent Payments Protocol (AP2)</h3><p>Extends A2A specifically for payments. AP2 handles secure payment communications between shopping agents, merchants and credential providers. When an agent needs to pay another agent or a merchant, AP2 is the layer that makes it safe and standardized.</p><h3 id="universal-commerce-protocol-ucp-" class="group relative items-center flex"><a href="#universal-commerce-protocol-ucp-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Universal Commerce Protocol (UCP)</h3><p>A newer protocol from Google for agentic commerce. UCP handles product discovery, checkout and transaction flow when agents shop on behalf of users. It sits alongside AP2, UCP for the commerce flow, AP2 for the payment itself.</p><h3 id="others" class="group relative items-center flex"><a href="#others" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Others</h3><p>The focus here is on the protocol stack that enables agentic commerce and discovery. There are other protocols (ACP and others under the Linux Foundation&#39;s Agentic AI Foundation) that are not covered here.</p><h2 id="the-missing-piece-discovery" class="group relative items-center flex"><a href="#the-missing-piece-discovery" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>The Missing Piece: Discovery</h2><p>Protocols give agents the ability to talk. But before they can talk, they need to find each other. Today we have Google for humans—we search, we discover, we navigate, we buy, we sell. Agents need the same. Why would they have to use browsers to find each other? Or why would they have to use other tools? ANP is already tackling discovery from a decentralized angle. What has yet to emerge is a search engine for the Web of Agents, the index, the crawl, the ranking, whether centralized (like Google for humans) or built on top of protocols like ANP.</p><h2 id="google-s-role" class="group relative items-center flex"><a href="#google-s-role" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Google&#39;s Role</h2><p>Google, as the most dominant search engine for humans, is the most likely to build a centralized search engine for the Web of Agents. From the protocols, we can see that it is coming they are taking a strategic approach: first A2A, then AP2, then UCP and maybe next a standard for letting your domain expose and discover agents. Meanwhile, ANP is building discovery from a decentralized, open-network perspective. Both approaches may coexist.</p><h2 id="the-search-engine-for-agents" class="group relative items-center flex"><a href="#the-search-engine-for-agents" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>The Search Engine for Agents</h2><p>The Search Engine for Agents would look like a search engine for humans, it would index the agents what they are doing, what they are capable of. This is not about finding an API for an agent but finding another agent that—for example—sells goods, flights, hotels, etc. This way, agents can find each other and collaborate with each other.</p><p>Current possible steps to buy a flight, hotel, etc. Let&#39;s say I want to buy a flight from Istanbul to Milan. When you give this to your personal assistant, it can do the following steps:</p><ol>
<li>Search for the flight, hotel, etc. Possibly on Google, Tavily, Brave Search etc.</li>
<li>Find the websites of the merchants that sell the flight/hotel.</li>
<li>Compare the prices and the services of the merchants.</li>
<li>Use browser-use, API or tooling capabilities of the agents to buy the flight/hotel.</li>
<li>Pay the merchant for the flight/hotel.</li>
<li>Get the flight/hotel.</li>
</ol>
<p>With the Search Engine for Agents, agents can find each other and collaborate with each other. A possible path would be:</p><ol>
<li>Search for the flight, hotel, etc. Possibly on Google Agent Search Engine.</li>
<li>Find the agents that sell the flight, hotel, etc.</li>
<li>Compare the prices and the services of the agents.</li>
<li>We will not use browser-use, API or tooling capabilities of the agents to buy the flight/hotel.</li>
<li>We use UCP and AP2 to buy the flight/hotel, because our agents communicate with each other using these protocols.</li>
<li>We get the flight/hotel.</li>
</ol>
<p>So, in the new scenario, the agent found an agent that sells the flight/hotel. As you can see the agents can communicate with each other using the protocols and they do not need to solve our problems (like booking the flight/hotel) by using our methods but using their own protocols.</p><h2 id="conclusion" class="group relative items-center flex"><a href="#conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Conclusion</h2><p>The Web of Agents is being built from the bottom up—protocol by protocol. Discovery is the layer that will make it navigable. It has to emerge. The question is when and by whom and perhaps Google for a centralized index or perhaps built on protocols like ANP for a decentralized one.</p><h2 id="related-works" class="group relative items-center flex"><a href="#related-works" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Related Works</h2><p>Several solutions are already building/built the discovery layer for the Web of Agents:</p><ul>
<li><strong>Clawl</strong> — A search engine for autonomous AI agents. Agents self-register via <code>clawl.json</code> and are discoverable by capability rather than creator or platform.</li>
<li><strong>AI Agent Index (MIT)</strong> — A catalog of AI agents with searchable capabilities, architecture, autonomy level and safety measures.</li>
<li><strong>ACP Registry</strong> — Agent Discovery Network for registration, capability search and endpoint discovery. Open protocol built on Cloudflare Workers.</li>
<li><strong>ANP Agent Discovery</strong> — The Agent Discovery Service Protocol (ADSP) in ANP defines active discovery (<code>.well-known/agent-descriptions</code>) and passive registration with search services.</li>
<li><strong>Hashgraph Online (HOL) Registry</strong> — Universal registry for the autonomous web, supporting A2A and 1,200+ active agents with discovery engines and unified messaging.</li>
</ul>
<h2 id="references" class="group relative items-center flex"><a href="#references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>References</h2><ul>
<li>Model Context Protocol. (2024). MCP specification. <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener">modelcontextprotocol.io</a></li>
<li>Agent Network Protocol. (2024). ANP specification and white paper. <a href="https://agent-network-protocol.com/public/specs/white-paper" target="_blank" rel="noopener">agent-network-protocol.com</a></li>
<li>Agent-to-Agent Protocol. (2025). A2A specification. <a href="https://a2a-protocol.org/" target="_blank" rel="noopener">a2a-protocol.org</a></li>
<li>Agent Payments Protocol. (2025). AP2 documentation. <a href="https://ap2-protocol.org/" target="_blank" rel="noopener">ap2-protocol.org</a></li>
<li>Universal Commerce Protocol. (2026). UCP guide. <a href="https://developers.google.com/merchant/ucp" target="_blank" rel="noopener">Google for Developers</a></li>
<li>Clawl. Search engine for autonomous AI agents. <a href="https://clawl.co.uk/" target="_blank" rel="noopener">clawl.co.uk</a></li>
<li>AI Agent Index. (2025). MIT catalog of AI agents. <a href="https://aiagentindex.mit.edu/2025/" target="_blank" rel="noopener">aiagentindex.mit.edu</a></li>
<li>ACP Registry. Agent Discovery Network. <a href="https://registry.asabove.tech/" target="_blank" rel="noopener">registry.asabove.tech</a></li>
<li>ANP Agent Discovery. Agent Discovery Service Protocol specification. <a href="https://agent-network-protocol.com/specs/agent-discovery" target="_blank" rel="noopener">agent-network-protocol.com</a></li>
<li>Hashgraph Online Registry. Universal registry for the autonomous web. <a href="https://hol.org/registry" target="_blank" rel="noopener">hol.org/registry</a></li>
</ul>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Web"/>
        <category label="Agents"/>
        <category label="Protocols"/>
        <category label="MCP"/>
        <category label="A2A"/>
        <category label="UCP"/>
        <category label="AP2"/>
        <category label="ANP"/>
        <category label="2026"/>
        <published>2026-02-22T01:16:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Becoming AI-Native]]></title>
        <id>becoming-ai-native</id>
        <link href="https://fatiiates.com/blog/post/becoming-ai-native"/>
        <updated>2026-02-22T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[All the things we can imagine are becoming AI-Native. Have an outlook on the future of becoming it, why we need to become it and what are the strategic effects of becoming it.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Abstract</h2><p>Artificial Intelligence (AI) is transforming the &quot;things&quot; at an unprecedented rate. Every kind of object, thoughts, actions, assets, all the things we can imagine are becoming AI-Native like this blog post (of course, I took advantage of AI to write this blog post). You can have an outlook on the future of becoming it, why we need to become it and what are the strategic effects of becoming it.</p><h2 id="introduction" class="group relative items-center flex"><a href="#introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Introduction</h2><p>Today&#39;s world is changing and most of us cannot catch up with the changes. We saw lots of assistants for daily life. In the early days of AI, Siri, Google Assistant, etc. But now, we have ChatGPT, Claude, Gemini and so on. It has become the new normal. I can&#39;t even imagine how we were living without these generative assistants. But it does not end here, we are at the very beginning of the AI-Native world. Later maybe Singularity?</p><h2 id="ai-native" class="group relative items-center flex"><a href="#ai-native" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>AI-Native</h2><p>Every day there are new models emerging, new companies getting funding, new products... On the other hand, we see wars all around the world, climate changes and so on. AI is affecting every corner of the world, changing how we think, how we eat, how we fight, how we live.</p><p>During my undergraduate studies, I first came across &quot;XXX&quot;-Native concepts with the Cloud-Native concept (Cloud Native Computing Foundation, 2021), most probably. To be honest, most of the players in the Technology Industry could not even apply Cloud-Native practices to their businesses.</p><p>AI-Native is a similar concept but this is not about a business practice, it is about a way of thinking, a way of working, a way of living. As an engineer, I always try to optimize things, my schedule, life, work... I can clearly say doing all these things by using AI assistants and this is the AI-Native concept. In case you use AI only for work or education, I would not say you are AI-Native, you are just a &quot;user&quot; of AI.</p><h2 id="transformation" class="group relative items-center flex"><a href="#transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Transformation</h2><p>Digital Transformation is ongoing for every kind of industry yet most companies do not even have an idea about digital transformation. With the hype of AI they are realizing the importance of digital transformation (McKinsey &amp; Company, 2025a).</p><h3 id="companies" class="group relative items-center flex"><a href="#companies" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Companies</h3><p>Now, I would separate the companies into four groups:</p><ul>
<li>The big ones which define the AI-Native world</li>
<li>Already took the advantage of digital transformation</li>
<li>That are in the process of digital transformation</li>
<li>Not even aware of the importance of digital transformation</li>
</ul>
<h4 id="the-big-ones-which-define-the-ai-native-world" class="group relative items-center flex"><a href="#the-big-ones-which-define-the-ai-native-world" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>The big ones which define the AI-Native world</h4><p>These companies do not have to be huge companies such as OpenAI, Google, Palantir. We include the startups that work on AI and transformative technologies. They are defining the concepts, new models, funding practices. Besides, they are working on multidisciplinary products and services. Basically, they are the ones who are defining the AI-Native world.</p><h4 id="already-took-the-advantage-of-digital-transformation" class="group relative items-center flex"><a href="#already-took-the-advantage-of-digital-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Already took the advantage of digital transformation</h4><p>In this category, we have a range of companies from small startups to big companies. They have already taken advantage of digital transformation, generally became Cloud-Native companies, started to use AI for their products and services (McKinsey &amp; Company, 2025b) but they cannot shape the AI-Native world, they are consumers of the big ones, they do not own data centers, GPUs and also cannot take advantage of government policies, funds, loans... They target specific segments and are building their products and services around them. For this reason, applying the AI practices is enough to survive in the AI-Native world but they need more to shape the AI-Native world.</p><h4 id="that-are-in-the-process-of-digital-transformation" class="group relative items-center flex"><a href="#that-are-in-the-process-of-digital-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>That are in the process of digital transformation</h4><p>These companies are generally legacy companies, I would not put new emerging startups into this category. They can range from small to big scale again but they are being really late to the game because they have to burn unnecessary resources to catch up with the others due to their lack of strategic awareness about digital strategy. If they are willing to burn cash for a certain time, they can go up to the next category. Otherwise, it does not look like they will survive in the long run even with the government support.</p><h4 id="not-even-aware-of-the-importance-of-digital-transformation" class="group relative items-center flex"><a href="#not-even-aware-of-the-importance-of-digital-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Not even aware of the importance of digital transformation</h4><p>My dear friend, I hope you are not in this category. Scale does not matter, awareness does. Generally, these companies are small, local companies, they do not have a global presence, do not even have a strategy, just a business model which generates some revenue. But digital transformation is not about the scale, it is about the awareness. I would say they should apply business practices for the digital transformation at least, not to generate cash from it but to survive in the long run. Do not be afraid of burning cash.</p><h3 id="human-transformation" class="group relative items-center flex"><a href="#human-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Human Transformation</h3><p>First of all, this is an ethical problem and it is unclear whether the world can solve this ethically or we will ruin the whole culture around human beings. But to be clear about one thing, AI can replace any kind of job you see (World Economic Forum, 2026) but nobody wants it from a business and ethical perspective. Because our world is right now human-centric, which means we are creating value for human beings. When you lay off the humans, there is no reason to generate value for them, unless you are generating value for another species.</p><p>Yes, I am talking about the agents, robots, the new intermediaries that will consume products and services on behalf of humans. The world is preparing for this new era, there are lots of communication protocols for communication between agents such as MCP (Model Context Protocol, 2024), AP2 (Agent Payments Protocol, 2025), UCP (Universal Commerce Protocol, 2026)... We are designing these protocols for the human-centric world, your agent will consume things for you.</p><p>From the firm&#39;s perspective, I would not appreciate the replacement of humans with agents in the early days of the AI-Native world but workers have to adapt to this new era (World Economic Forum, 2026), they have to be AI-Native. For this reason their educational practices have to be updated and adjusted to the new era.</p><p>Commenting about mass layoffs for the future would be speculation, so I am out of this conversation. But what you see on X (Twitter) about laying off employment is another piece of garbage just continue to do what you are doing but for sure become AI-Native.</p><h3 id="organizational-transformation" class="group relative items-center flex"><a href="#organizational-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Organizational Transformation</h3><p>The ones in the organizational part of the companies are getting more important. They are responsible for every kind of transformation but they are also part of the transformation. They have to be proactive and willing to apply AI practices to their companies, to their digital strategy. At minimum, the expectation is that they survive in the long run, generating revenue is not the primary goal for now. Without being AI-Native, they will not be able to survive in the long run. But other than these, I would not say that their positions will be changing like the workers.</p><h3 id="industry-transformation" class="group relative items-center flex"><a href="#industry-transformation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Industry Transformation</h3><p>Industries are transforming from bottom to their very top. At first they were naturally forced by the market demands and they had to apply digital transformation and now AI-Native is the new normal. Consumer behavior is changing, companies are changing and their industry practices are changing. From the Technology Industry to the Warfare Industry, analyzing big data, AI-driven decision making, autonomous systems (McKinsey &amp; Company, 2025b)... Things are happening here and companies need to be aware and invest carefully in order to survive.</p><h2 id="strategic-effects" class="group relative items-center flex"><a href="#strategic-effects" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Strategic Effects</h2><p>With Moore&#39;s Law (Moore, 1965) the performance of the processors is increasing exponentially, the cost of the processors is decreasing exponentially. This is the reason why we are able to see the digital transformation happening everywhere. From the strategic perspective, IT commodities were insignificant to the strategy because they are becoming cheaper and available to all. Nowadays, AI chips are the new commodity, they are not only for the big ones and they are NOT becoming available to all? There is a chip crisis around the world when we talk about GPUs (Bain &amp; Company, 2024), of course we are in the early times of these technologies but expecting to become cheaper in the near future would be a dream.</p><p>IT strategy has to change. To be AI-Native, whether you are a consumer or a provider of the AI services, you have to make room for AI in your strategy. If you are being AI-Native, you need to have the ability to build your own AI models at some point because the &quot;data&quot; you produce is becoming much more essential for your business (McKinsey &amp; Company, 2024). Creating and delivering a business is not the crucial part now, it is about the data you produce and how you use it. I would say IT commodity (GPUs, TPUs... not CPUs) is becoming an essential part of the strategy at least for the near future.</p><p>&quot;AI does not generate revenue&quot; is another piece of garbage from X (Twitter). This is a strategic decision which you must make for your business. At the very first years of this transformation, you would NOT expect to generate revenue from AI, you would only expect to &quot;survive&quot; in the long run, generating positive cash flow is not the key point here. This happened with the digital transformation, with the digital transformation, your company survived and now you are here, generating revenue from your services. Your core business is not changing but the practices are changing.</p><p>Honest advice on this, &quot;IT commodity&quot; is up to you, I would strongly recommend being an AI-Native company in a structured manner within your IT strategy.</p><h2 id="conclusion" class="group relative items-center flex"><a href="#conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Conclusion</h2><p>Being AI-Native has been the new normal for a few years and it will remain so. We are at the beginning of this transformation and we are not sure about the future. But we know one thing: we need to be AI-Native to survive in the long run.</p><h2 id="references" class="group relative items-center flex"><a href="#references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>References</h2><ul>
<li>Cloud Native Computing Foundation. (2021). Cloud native technology. <em>CNCF Glossary</em>. <a href="https://glossary.cncf.io/cloud-native-tech/" target="_blank" rel="noopener">CNCF Glossary</a></li>
<li>McKinsey &amp; Company. (2025a). The state of AI: How organizations are rewiring to capture value. <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai-how-organizations-are-rewiring-to-capture-value" target="_blank" rel="noopener">McKinsey &amp; Company</a></li>
<li>McKinsey &amp; Company. (2025b). The state of AI in 2025: Agents, innovation and transformation. <a href="https://www.mckinsey.com/capabilities/quantumblack/our-insights/the-state-of-ai" target="_blank" rel="noopener">McKinsey &amp; Company</a></li>
<li>World Economic Forum. (2026). Four futures for jobs in the new economy: AI and talent in 2030. <a href="https://www.weforum.org/publications/four-futures-for-jobs-in-the-new-economy-ai-and-talent-in-2030/" target="_blank" rel="noopener">World Economic Forum</a></li>
<li>Model Context Protocol. (2024). MCP specification. <a href="https://modelcontextprotocol.io/" target="_blank" rel="noopener">Model Context Protocol</a></li>
<li>Agent Payments Protocol. (2025). Agent Payments Protocol documentation. <a href="https://ap2-protocol.org/" target="_blank" rel="noopener">Agent Payments Protocol</a></li>
<li>Universal Commerce Protocol. (2026). Universal Commerce Protocol (UCP) guide. <em>Google for Developers</em>. <a href="https://developers.google.com/merchant/ucp" target="_blank" rel="noopener">Google for Developers</a></li>
<li>Moore, G. E. (1965). Cramming more components onto integrated circuits. <em>Electronics</em>, 38(8), 114–117. <a href="https://www.intel.com/content/www/us/en/history/virtual-vault/articles/moores-law.html" target="_blank" rel="noopener">Intel Virtual Vault</a></li>
<li>Bain &amp; Company. (2024). Prepare for the coming AI chip shortage. <em>Tech Report 2024</em>. <a href="https://www.bain.com/insights/prepare-for-the-coming-ai-chip-shortage-tech-report-2024/" target="_blank" rel="noopener">Bain &amp; Company</a></li>
<li>McKinsey &amp; Company. (2024). Intelligence at scale: Data monetization in the age of gen AI. <a href="https://www.mckinsey.com/capabilities/business-building/our-insights/intelligence-at-scale-data-monetization-in-the-age-of-gen-ai" target="_blank" rel="noopener">McKinsey &amp; Company</a></li>
</ul>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="AI"/>
        <category label="AI-Native"/>
        <category label="Industries"/>
        <category label="Strategic"/>
        <category label="2026"/>
        <published>2026-02-21T01:16:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Caput Mundi]]></title>
        <id>caput-mundi</id>
        <link href="https://fatiiates.com/blog/post/caput-mundi"/>
        <updated>2025-12-12T11:30:12.000Z</updated>
        <summary type="html"><![CDATA[An exploration to the open-air museum of the globe.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="what-is-caput-mundi-" class="group relative items-center flex"><a href="#what-is-caput-mundi-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>What is Caput Mundi?</h2><p>“Caput Mundi,” a Latin phrase meaning “Head of the World,” is a title historically attributed to Rome, reflecting the city’s immense cultural, political and religious influence over centuries. Although most closely associated with Rome, the expression has also been used by historians for other major centers of power like Jerusalem (Kudüs) and Istanbul to highlight periods when these cities held exceptional spiritual, strategic or imperial significance.</p><p>The Latin word caput, meaning “head” lives on in many modern expressions. One of the most common is “per capita” (“per head”), used globally in economics and statistics for example, in phrases like income per capita or GDP per capita. (Huuuge thanks to my Italian friend, who taught me these)</p><p>Okay... Rome is pretty well, but my Caput Mundi is Bursa, for sure :)</p><h2 id="arrival-in-rome" class="group relative items-center flex"><a href="#arrival-in-rome" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Arrival in Rome</h2><p>I had arrived in Rome on a sunny afternoon in late October of 2025. The city was really warm. Since I was coming from Florence, the temperature difference was quite noticeable. And I was with my boots... Three days, with boots...</p><p>On the first day, I had time before check-in, so I decided to explore to the city. I did not wanted to go to the Colosseum, since it needs a lot of time. Instead I headed to a few Cathedrals first, took few magnets.</p><p>At night, I went through the streets of Rome. Since it is much more calm at night, I got few shots from the famous places. First, Altare della Patria, which is a massive monument built in honor of Victor Emmanuel II, the first king of a unified Italy.</p><p><figure><img src="/assets/blog/caput-mundi/altare-della-patria.jpeg" alt="Altare della Patria"><figcaption class="text-center">Altare della Patria</figcaption></figure></p><p>Then, I headed to the Roman Forum, which was the center of ancient Rome. It was really peaceful at night. Below, you can find my best shot from Rome, probably. AFAIK, this is from Foro Augusto.</p><p><figure><img src="/assets/blog/caput-mundi/foro-augusto.jpeg" alt="Foro di Augusto"><figcaption class="text-center">Foro di Augusto</figcaption></figure></p><p>Here it is, the Colosseum at night. I really liked how it looks with the lights. It is weird, in some way this place affected me and probably millions of people with inspiring a movie, Gladiator. I remember watching it when I was in high school and now I am here. Luckily still alive :)</p><p><figure><img src="/assets/blog/caput-mundi/colosseo.jpeg" alt="Colosseo"><figcaption class="text-center">Colosseo</figcaption></figure></p><p>Better one, I think:</p><p><figure><img src="/assets/blog/caput-mundi/colosseo-due.jpeg" alt="Colosseo Due"><figcaption class="text-center">Colosseo Due</figcaption></figure>
Other than these, I already said, Rome looks like an open-air museum. I have visited it on daylight, but at night it is a different experience. Here, Basilica di Santa Maria Maggiore at night:</p><p><figure><img src="/assets/blog/caput-mundi/basilica-santa-maria-maggiore.jpeg" alt="Basilica di Santa Maria Maggiore"><figcaption class="text-center">Basilica di Santa Maria Maggiore</figcaption></figure></p><h2 id="day-two-roman-forum" class="group relative items-center flex"><a href="#day-two-roman-forum" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Day Two: Roman Forum</h2><p>Roman Forum is a huge complex of ruins that was once the center of political, commercial, and social life in ancient Rome. Walking through the Forum is like stepping back in time, as you can see the remains of temples, basilicas and public spaces that were once crowded with activities.</p><p>Could not get a ticket for the Colosseum but I managed to get one for Roman Forum. Even without the Colosseum, it&#39;s well worth it. Spent a good few hours wandering through the ruins, imagining what life must have been like in ancient Rome. There are lots of sites to see.</p><ul>
<li>Planning also would be really helpful, because some of them can be closed due to events etc.</li>
<li>You need to walk a lot. So, wear comfortable shoes, not boots like me :)</li>
</ul>
<p>
        <div style="display: flex; justify-content: center; align-items: center;">
          <figure>
            <video controls>
              <source src="/assets/blog/caput-mundi/foro-romano.mp4" type="video/mp4">
              Your browser does not support the video tag.
            </video>
            <figcaption style="text-align: center;">Foro Romano Uno</figcaption>
          </figure>
        </div></p><p>The environment is also really nice. There are trees and greenery around, which adds to the overall experience. Diversity of the ecosystem in the middle of the city is really impressive.</p><p>
        <div style="display: flex; justify-content: center; align-items: center;">
          <figure>
            <video controls>
              <source src="/assets/blog/caput-mundi/foro-romano-due.mp4" type="video/mp4">
              Your browser does not support the video tag.
            </video>
            <figcaption style="text-align: center;">Foro Romano Due</figcaption>
          </figure>
        </div></p><p>Here is the last one, I took lots of shots but this one is my favorite from the Roman Forum sites.</p><p><figure><img src="/assets/blog/caput-mundi/foro-romano-favorite.jpeg" alt="Foro Romano Tre"><figcaption class="text-center">Foro Romano Tre</figcaption></figure></p><h2 id="day-two-vatican-city" class="group relative items-center flex"><a href="#day-two-vatican-city" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Day Two: Vatican City</h2><p>On the second day, afternoon I headed to Vatican City. It is the smallest independent state in the world. Despite its small size, Vatican City holds immense religious and cultural significance as the spiritual and administrative center of the Roman Catholic Church. Also, this place must be a gem for art historians, as it houses some of the most renowned artworks and architectural masterpieces in the world.</p><blockquote>
<p>Just after a month from my visit to the Vatican, Pope XIV. Leo has visited Bursa, my hometown. It was a historic event, as it marked the first time a pope had visited Turkey in over 1,500 years. The visit was seen as a gesture of goodwill and a step towards improving relations between the Catholic Church and the Muslim world. He may have heard about my visit to Rome and wanted to go to Bursa, as a kind gesture :)</p></blockquote>
<p><figure><img src="/assets/blog/caput-mundi/musei-vaticani.jpeg" alt="Musei Vaticani"><figcaption class="text-center">Musei Vaticani</figcaption></figure></p><p>Since I booked everything at last minute, I could not find a ticket without a guided tour. Also, for the guided tour in English, but I managed to find one in Italian. Well, I am not perfect but at least I know, how Michelangelo struggled while painting the Sistine Chapel ceiling. Though they do not allow photography inside the chapel :/</p><p>Of course, the Vatican Museums are not just about the Sistine Chapel. There are numerous important artworks and historical artifacts to see. For example, below a Hellenistic masterpiece renowned for its emotional intensity and technical brilliance. Showing the Trojan priest Laocoön and his sons attacked by serpents.</p><p><figure><img src="/assets/blog/caput-mundi/laocoonte.jpeg" alt="Laocoön"><figcaption class="text-center">Laocoön</figcaption></figure></p><p>From the Vatican Museum, I took this shot of St. Peter&#39;s Basilica dome. It is really impressive from outside as well.</p><p><figure><img src="/assets/blog/caput-mundi/vatican-museums-to-st-peters-basilica.jpeg" alt="Basilica di San Pietro Uno"><figcaption class="text-center">Basilica di San Pietro Uno</figcaption></figure></p><p>Spent about 3 hours in the Vatican Museums. It was really crowded, if it was not crowded I would invest much more time there. After the museums, I headed to St. Peter&#39;s Basilica, which is one of the largest churches in the world and a masterpiece. Did not have a ticket to go up to the dome, but just walking around the basilica is also impressive.</p><p><figure><img src="/assets/blog/caput-mundi/st-peters-basilica.jpeg" alt="Basilica di San Pietro Due"><figcaption class="text-center">Basilica di San Pietro Due</figcaption></figure></p><h2 id="day-three-free-day" class="group relative items-center flex"><a href="#day-three-free-day" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Day Three: Free Day</h2><p>On the third day, I had a free day to explore Rome at my own pace. Did not planned anything specific, just wandered through the streets and enjoyed the atmosphere of the city. On the morning, I went to a few places with my friend from the hostel. We has a breakfast together.</p><p><figure><img src="/assets/blog/caput-mundi/breakfast.jpeg" alt="Colazione"><figcaption class="text-center">Colazione</figcaption></figure></p><p>After that, headed to the Trevi Fountain, which is one of the most famous fountains in the world. It is a beautiful Baroque masterpiece but toooooooo crowded. I could not wait to take a photo without people. So, I just took a quick shot and left. I would not even add it here if it was not Trevi Fountain :)</p><p><figure><img src="/assets/blog/caput-mundi/trevi.jpeg" alt="Fontana di Trevi"><figcaption class="text-center">Fontana di Trevi</figcaption></figure></p><p>Later we went to the Pantheon, which is another iconic landmark in Rome. It is a former Roman temple that has been converted into a church. Yet another crowded place, but the architecture is really impressive.</p><p><figure><img src="/assets/blog/caput-mundi/pantheon.jpeg" alt="Pantheon"><figcaption class="text-center">Pantheon</figcaption></figure></p><p>Next step was Piazza Navona, which is a beautiful square in the heart of Rome. This place used as a stadium in ancient times, but now it is a lively square filled with cafes, restaurants and street performers. I really liked the atmosphere here. Also, the fountains are really beautiful. The first one is the Fountain of Neptune. Which Neptune, the Roman god of the sea, is depicted battling a sea monster.</p><p><figure><img src="/assets/blog/caput-mundi/fontana-nettuno.jpeg" alt="Fontana del Nettuno"><figcaption class="text-center">Fontana del Nettuno</figcaption></figure></p><p>The second one is the Fountain of the Four Rivers, designed by Bernini. It represents four major rivers from different continents: the Nile (Africa), the Ganges (Asia), the Danube (Europe), and the Río de la Plata (Americas).</p><p><figure><img src="/assets/blog/caput-mundi/fontana-quattro-fiumi.jpeg" alt="Fontana dei Quattro Fiumi"><figcaption class="text-center">Fontana dei Quattro Fiumi</figcaption></figure></p><p>The third one is the Fountain of the Moor, which features a central figure of a Moorish man wrestling with a dolphin, surrounded by tritons and other sea creatures.</p><p><figure><img src="/assets/blog/caput-mundi/fontana-moro.jpeg" alt="Fontana del Moro"><figcaption class="text-center">Fontana del Moro</figcaption></figure></p><p>What a place! One square, three fountains. I really liked Piazza Navona, it is a must-visit place in Rome.</p><p>Next step is the island in the middle of the Tiber River, called Isola Tiberina. It is a small island that has a rich history dating back to ancient times. The island has been used for various purposes over the centuries, including as a place of refuge during times of plague and as a site for religious ceremonies. These days, it is home to a hospital and a few restaurants. It is a nice place to walk around and enjoy the views of the river and the city.</p><p>Tiber River view from Isola Tiberina</p><p>
        <div style="display: flex; justify-content: center; align-items: center;">
          <figure>
            <video controls>
              <source src="/assets/blog/caput-mundi/fiume-tevere.mp4" type="video/mp4">
              Your browser does not support the video tag.
            </video>
            <figcaption style="text-align: center;">Fiume Tevere</figcaption>
          </figure>
        </div></p><p>Rome has a different type of tree in important places. If you see this tree, you are probably close to an important landmark. It exists in Vatican City, Colosseum, Roman Forum, and many other places. It is the Italian Stone Pine, also called the Roman Pine. People also call it &quot;Umbrella Pine&quot; because of its distinctive shape.</p><p><figure><img src="/assets/blog/caput-mundi/pino-romano.jpeg" alt="Pino Romano"><figcaption class="text-center">Pino Romano</figcaption></figure></p><p>Before going to the Rome, one of my friends recommended me to go to the Mr. 100 Tiramisu. TBH, I was not expecting much, but it was really good. If you are in Rome, you should definitely try it. For sure, no advertisement here.</p><p><figure><img src="/assets/blog/caput-mundi/tiramisu.jpeg" alt="Tiramisù"><figcaption class="text-center">Tiramisù</figcaption></figure></p><p>Without Spanish Steps, Rome visit would be incomplete. So, I headed to the Spanish Steps in the evening. It is a beautiful staircase that connects the Piazza di Spagna with the Trinità dei Monti church. The steps are a popular gathering place for both locals and tourists, and they offer a great view of the city from the top.</p><p><figure><img src="/assets/blog/caput-mundi/scalinata-trinita-monti.jpeg" alt="Scalinata di Trinità dei Monti Uno"><figcaption class="text-center">Scalinata di Trinità dei Monti Uno</figcaption></figure></p><p>And from the top of the Spanish Steps</p><p><figure><img src="/assets/blog/caput-mundi/scalinata-trinita-monti-due.jpeg" alt="Scalinata di Trinità dei Monti Due"><figcaption class="text-center">Scalinata di Trinità dei Monti Due</figcaption></figure></p><p>Last but not least, I lost myself in the streets of Rome. Just wandering around, exploring the hidden gems of the city. Rome is full of narrow alleys, charming squares, and beautiful buildings. I really enjoyed getting lost in the city and discovering new places. Near Termini Station, I found this beautiful square with a fountain in the middle, Piazza della Repubblica. It was really peaceful and quiet, a nice escape from the hustle and bustle of the city.</p><p><figure><img src="/assets/blog/caput-mundi/piazza-della-repubblica.jpeg" alt="Piazza della Repubblica"><figcaption class="text-center">Piazza della Repubblica</figcaption></figure></p><h2 id="arrivederci-roma-" class="group relative items-center flex"><a href="#arrivederci-roma-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Arrivederci, Roma!</h2><p>After three days in Rome, it was time to say goodbye to the Caput Mundi. I had an amazing time exploring the city and experiencing its rich history and culture. From the ancient ruins of the Roman Forum to the masterpieces of the Vatican Museums, Rome truly is an open-air museum. I left with a heart full of memories and a camera full of photos. Until next time, Roma!</p><p>P.S. I think Rome is not the capital city of Italy, it is Milan. Just kidding!</p></div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Rome"/>
        <category label="Italy"/>
        <category label="Caput Mundi"/>
        <category label="History"/>
        <category label="2025"/>
        <published>2025-12-09T20:05:33.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Five Months in Milan]]></title>
        <id>five-months-in-milan</id>
        <link href="https://fatiiates.com/blog/post/five-months-in-milan"/>
        <updated>2026-02-22T12:00:00.000Z</updated>
        <summary type="html"><![CDATA[Spending five months in Milan as a Master's student in Computer Science and Engineering has given me a unique perspective on the city.]]></summary>
        <content type="html"><![CDATA[<div><h1 id="how-it-all-began-" class="group relative items-center flex"><a href="#how-it-all-began-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>How it all began?</h1><p>It’s been five months since I moved to Milan, and I figured it’s time to sit down and reflect on this experience. If you had told me a year ago that I’d be living here, balancing a Master’s in Computer Science &amp; Engineering at Polimi while working remotely, I might have been skeptical. Yet here I am, navigating a new city, a new academic system, and the challenges of keeping up with both studies and work. Let&#39;s shed some light on my journey so far.</p><h2 id="first-month-in-milan" class="group relative items-center flex"><a href="#first-month-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>First month in Milan</h2><p>Stayed at YellowSquare Hostel for a month, which was a great way to meet people and get to know the city. I was lucky to find a room in a shared apartment in the city center, which made it easy to get around. The first month was all about settling in, getting to know the university, and exploring the city. I was impressed by the blend of historical and modern architecture, the vibrant street life, and the rich cultural scene.</p><h3 id="yellowsquare-hostel" class="group relative items-center flex"><a href="#yellowsquare-hostel" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>YellowSquare Hostel</h3><p>It was fairly priced and had a great atmosphere. The staff was friendly and helpful, and the common areas were perfect for socializing. The location was also convenient, with easy access to public transport and plenty of restaurants and bars nearby. I think you can imagine the service from an example breakfast that they can serve below.</p><p><figure><img src="/assets/blog/five-months-in-milan/yellowsquare-breakfast.jpg" alt="YellowSquare Hostel Breakfast"></figure></p><h3 id="housing-in-milan" class="group relative items-center flex"><a href="#housing-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Housing in Milan</h3><p>Finding a place to live in Milan can be challenging, especially if you’re on a budget. I was lucky to find a room in a shared apartment in the city center, which made it easy to get around. The rent was reasonable (for someone who is looking an apartment in October), and the apartment was clean and well-maintained. I’ve heard horror stories from other students about shady landlords and overpriced rentals, so I consider myself lucky. I am using DoveVivo and Spotahome to find my apartment in Milan. View from my room is below.</p><p><figure><img src="/assets/blog/five-months-in-milan/view.jpeg" alt="Milan Apartment"></figure></p><h3 id="academic-life-at-polimi" class="group relative items-center flex"><a href="#academic-life-at-polimi" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Academic life at Polimi</h3><p>The academic system at Polimi is of course different from what I’m used to. The classes are more theoretical and less hands-on, which took some getting used to. The workload is also heavier, with more assignments and exams than I’m used to. But the professors are knowledgeable and supportive, and the facilities are pretty well. But it is a TECHNICAL university, you need to know this if you are planning to study here.</p><p><figure><img src="/assets/blog/five-months-in-milan/polimi.jpeg" alt="Politecnico di Milano"></figure></p><h3 id="work-life-balance" class="group relative items-center flex"><a href="#work-life-balance" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Work-life balance</h3><p>As we are Computer Science students, we are pretty much used to working remotely. But balancing work and studies can be challenging, especially when you’re in a new city. I’ve had to learn to manage my time better, prioritize tasks, and set boundaries between work and study time. But it’s been a good learning experience, and I feel like I’m getting better at it every day. But most important part is, you need to have a good internet connection to work remotely, it is awesome in Milan. This allows me to work from everywhere in the city with 5G and it is cheap!</p><p><figure><img src="/assets/blog/five-months-in-milan/remote-work.jpeg" alt="Work from Milano"></figure></p><h2 id="second-month-in-milan" class="group relative items-center flex"><a href="#second-month-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Second month in Milan</h2><p>After settling in, I started to explore the city more. I visited the Duomo, the Galleria Vittorio Emanuele II, Gallerie d’Italia, and other landmarks. Traveled around streets, visited the Navigli district, and tried some of the local cuisine. I also started to make friends with other students, which made the experience more enjoyable. I also started to get more involved in university life, attending seminars, workshops, and events. Also planning to create another blog post about the places I visited in Milan. Art, history, and culture are the main topics that I am planning to write about.</p><h3 id="duomo-di-milano" class="group relative items-center flex"><a href="#duomo-di-milano" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Duomo di Milano</h3><p><figure><img src="/assets/blog/five-months-in-milan/duomo.jpeg" alt="Duomo di Milano"></figure></p><h3 id="galleria-vittorio-emanuele-ii" class="group relative items-center flex"><a href="#galleria-vittorio-emanuele-ii" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Galleria Vittorio Emanuele II</h3><p><figure><img src="/assets/blog/five-months-in-milan/galleria.jpeg" alt="Galleria Vittorio Emanuele II"></figure></p><h3 id="navigli-district" class="group relative items-center flex"><a href="#navigli-district" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Navigli District</h3><p><figure><img src="/assets/blog/five-months-in-milan/navigli.jpeg" alt="Navigli District"></figure></p><h3 id="gallerie-d-italia" class="group relative items-center flex"><a href="#gallerie-d-italia" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Gallerie d’Italia</h3><p><figure><img src="/assets/blog/five-months-in-milan/gallerie-ditalia.jpeg" alt="Gallerie d’Italia"></figure></p><p>After the first two months, I planned a visit to the Turkey for two weeks. It was pretty good to see my family, colleagues, and friends. Spent a few days in Istanbul, and then visited my hometown, Bursa. And I worked from office for the first time :) It was a good experience to see my colleagues face to face after a long time.</p><p><figure><img src="/assets/blog/five-months-in-milan/istanbul.jpeg" alt="Istanbul"></figure></p><h2 id="third-month-in-milan" class="group relative items-center flex"><a href="#third-month-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Third month in Milan</h2><p>After coming back from Turkey, I started to get more involved in a kind of new role in my company. New role, new year, new challenges. I catched up with my friends in Milan visited a few different museums again. When New Year&#39;s Eve came, I was in Milan. I celebrated it with my friends in the city center. Yet here the actual fun comes... I had to get up and study for exams in the morning.</p><h3 id="new-year-s-morning" class="group relative items-center flex"><a href="#new-year-s-morning" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>New Year&#39;s Morning</h3><p><figure><img src="/assets/blog/five-months-in-milan/study.jpeg" alt="Study for Exams"></figure></p><p>P.S. If you are here for New Year&#39;s Eve, I think you should think twice about going to the Duomo. There are fireworks in the city center of course but it is unnnnnecessarily crowded. Because of that, it is completely unsafe (careful for pickpocketing) there are even sexual harassment cases. YES IN THE CITY CENTER OF MILAN.</p><h2 id="fourth-month-in-milan" class="group relative items-center flex"><a href="#fourth-month-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Fourth month in Milan</h2><p>At this time I was having the exams still. But I was also planning to visit the Lake Como and Genoa. Genoa was a great city to visit. But Lake Como was over over overrated for me. It is famous for its villas and the lake itself. But I think it is not worth to visit that much. I do not know maybe it&#39;s because we constantly see magnificent waterside mansions even when we using public transportation in Istanbul.</p><h3 id="genoa" class="group relative items-center flex"><a href="#genoa" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Genoa</h3><p><figure><img src="/assets/blog/five-months-in-milan/genoa.jpeg" alt="Genoa"></figure></p><h3 id="lake-como" class="group relative items-center flex"><a href="#lake-como" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Lake Como</h3><p><figure><img src="/assets/blog/five-months-in-milan/como.jpeg" alt="Lake Como"></figure></p><h2 id="fifth-month-in-milan" class="group relative items-center flex"><a href="#fifth-month-in-milan" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Fifth month in Milan</h2><p>When exams were over, I went back to Turkey for two another weeks. I visited my family, friends and colleagues again. Also we held an event in Istanbul, Infoday 2025. It was a great experience to meet with new people from company. We as Innovation Team had a great time there. Also there is an application that we are developing and we named it as &quot;Lokum&quot;. It has a game which we called &quot;Tanışanlar&quot; (means &quot;People who met&quot; in Turkish, basically a game to introduce people to each other). It was a great experience to see people playing the game and having fun. Also I get third place in the game, I am proud of myself :) If they are reading this I also congratulate them for the first and second place.</p><p><figure><img src="/assets/blog/five-months-in-milan/tanisanlar.jpeg" alt="Tanisanlar"></figure></p><p>After two weeks in Turkey, came back to the Milan early March. The weather was awesome in here, while I was in Bursa, it was pretty snowy. I was happy to be back in Milan. Yet, right now, I am writing this blog post in my room. I hope the next one will not wait for another five months. Whatever, I have a lot of things to write about. I will try to write more often (you better know that this is a lie hahah). Last but not least, I have another photo for you below :) Ciaoo!</p><p><figure><img src="/assets/blog/five-months-in-milan/in-love-with-you.jpeg" alt="Milan"></figure></p></div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Milan"/>
        <category label="Italy"/>
        <category label="Personal Experience"/>
        <category label="Politecnico di Milano"/>
        <category label="Architecture"/>
        <category label="Art"/>
        <category label="2025"/>
        <published>2025-03-07T12:00:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Guarding the Gate: Security Images]]></title>
        <id>guarding-the-gate-security-images</id>
        <link href="https://fatiiates.com/blog/post/guarding-the-gate-security-images"/>
        <updated>2024-07-18T19:56:00.000Z</updated>
        <summary type="html"><![CDATA[Security images are a simple yet effective way to guard against phishing attacks. By adding this extra layer of security, you can better protect your sensitive information and have greater peace of mind online.]]></summary>
        <content type="html"><![CDATA[<div><p>Many of us overlook the importance of security images when using online platforms. I am always impressed by how effective these are whenever I use banking services. These images play a crucial role in protecting us from phishing attacks, where cybercriminals attempt to deceive users into sharing sensitive information like passwords and credit card details. Despite their significance, security images often go unnoticed. This blog explores how these simple yet effective security measures can safeguard our online transactions and enhance our digital security.</p><h2 id="what-are-security-images-" class="group relative items-center flex"><a href="#what-are-security-images-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>What are Security Images?</h2><p>Security images are a unique layer of defense against phishing attacks. When you set up your account, you choose an image that will be displayed whenever you log in. This helps you verify that you are on the legitimate website and not a fraudulent one.</p><h2 id="how-security-images-powerful" class="group relative items-center flex"><a href="#how-security-images-powerful" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>How Security Images Powerful</h2><p>Security images offer several key benefits:</p><ul>
<li><strong>Verification</strong>: Ensures you are on the authentic site.</li>
<li><strong>Confidence</strong>: Increases your confidence in entering your credentials.</li>
<li><strong>Simplicity</strong>: Easy to set up and recognize.</li>
</ul>
<h2 id="quick-setup-guide" class="group relative items-center flex"><a href="#quick-setup-guide" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Quick Setup Guide</h2><p>Implementing security images is straightforward:</p><ol>
<li><strong>Select an Image</strong>: Choose a security image from the options provided during account setup.</li>
<li><strong>Remember Your Image</strong>: Make sure you remember the image you selected.</li>
<li><strong>Verify at Login</strong>: Check for your security image every time you log in. If the image is incorrect or missing, do not enter your password.</li>
</ol>
<h2 id="conclusion" class="group relative items-center flex"><a href="#conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Conclusion</h2><p>Security images are a simple yet effective way to guard against phishing attacks. By adding this extra layer of security, you can better protect your sensitive information and have greater peace of mind online. Implement security images today and stay vigilant against phishing threats.</p><p>P.S. I always use a cat for my security image. What about you? 🐱 (okay okay, this is just a joke)</p></div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Security"/>
        <category label="Security Images"/>
        <category label="Phishing"/>
        <category label="Digital Security"/>
        <category label="Banking"/>
        <category label="2024"/>
        <published>2024-07-18T19:56:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[The Role of Artificial Intelligence in Future Technology]]></title>
        <id>the-role-of-artificial-intelligence-in-future-technology</id>
        <link href="https://fatiiates.com/blog/post/the-role-of-artificial-intelligence-in-future-technology"/>
        <updated>2025-07-19T20:06:00.000Z</updated>
        <summary type="html"><![CDATA[Artificial intelligence is a rapidly growing field that has the potential to revolutionize the way we live and work. This blog post explores the role of AI in future technology.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Abstract</h2><p>Artificial Intelligence (AI) has become an integral part of society, offering new opportunities and challenges across various industries. This paper presents an overview of the role of AI in the future technology, including its historical background, current applications, emerging trends, and its impact. The paper also discusses the potential benefits and ethical considerations of AI, highlighting the need for strong regulations and ethical guidelines to ensure responsible and unbiased deployment of AI technologies. Furthermore, the future of AI, including the pursuit of artificial general intelligence (AGI) and the development of new business models, is explored.</p><h2 id="1-introduction" class="group relative items-center flex"><a href="#1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. Introduction</h2><p>Artificial Intelligence (AI) is a rapidly evolving field that has covered various aspects of human life, transforming industries and increasing human capabilities. Defined as the simulation of human intelligence processes by machines, AI encompasses a spectrum of technologies like machine learning, natural language processing, and computer vision. As AI continues to develop, it presents both opportunities and challenges for society and businesses. This paper aims to provide an overview of the role of AI in the future technology, its historical background, current applications, emerging trends, and its impact on future technology. The paper will also delve into the potential benefits and ethical considerations of AI, as well as the future of AI, including the pursuit of artificial general intelligence (AGI) and the emergence of new business models in the AI domain.</p><h2 id="2-understanding-ai" class="group relative items-center flex"><a href="#2-understanding-ai" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. Understanding AI</h2><p>The field encompassing a wide range of practices and processes aimed at building systems capable of performing tasks that require human intelligence. Substantially, AI seeks to imitate human functions: problem-solving, learning, deciding, and understanding, but not limited to these. The rapid evolution of AI technologies continually expands the scope of its capabilities. This section provides a brief historical overview of AI, concepts, and current applications.</p><h3 id="2-1-historical-background" class="group relative items-center flex"><a href="#2-1-historical-background" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.1 Historical Background</h3><p>The concept of AI dates back to the mid-20th century, with early pioneers such as Alan Turing laying the theoretical groundwork for the field. McCarthy et al. invented the term &quot;artificial intelligence&quot; and organized the Dartmouth Conference, which is widely accepted as the birth of AI as a field of study (McCarthy et al., 2006). At the start, the goals of AI were not clear, aiming to replicate human-like intelligence in machines and solve complex problems that were previously thought to be exclusive to humans. Over the decades, AI has made remarkable leaps, surpassing initial expectations and demonstrating capabilities that were once considered futuristic.</p><h3 id="2-2-current-applications-of-ai" class="group relative items-center flex"><a href="#2-2-current-applications-of-ai" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.2 Current Applications of AI</h3><p>AI technologies are being integrated into various industries, ranging from transportation to robotics. For instance, Waymo’s journey showcases the assistance of AI in self-driving technology, leveraging machine learning algorithms for pivotal attributes (Waymo Tech Team, 2019). Besides, ChatGPT, a language generation model, is revolutionizing the landscape of conversational AI applications, customer service chatbots, virtual assistants, and many more (OpenAI, 2022). On the Robotics Industry, Boston Dynamics, a skillful robotic company, develops robots powered by AI to perform movements, calling this &quot;athletic intelligence&quot; (Boston Dynamics, 2024). Moreover, there are a ton of applications of AI, and they are becoming an integral part of human lives.</p><h2 id="3-emerging-trends-and-opportunities" class="group relative items-center flex"><a href="#3-emerging-trends-and-opportunities" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. Emerging Trends and Opportunities</h2><p>The rapid advancement of AI has led to significant transformations across various industries, offering new opportunities and challenges for businesses and society as a whole. This section explores the emerging trends and opportunities brought about by the integration of AI into different sectors.</p><p>Research indicates that AI enhances the efficiency and productivity of employees. Using generative AI in business improves users’ performance by 66%, averaged across 3 case studies (Nielsen, 2023). Besides efficiency, there is a new business model that emerged in the near past: the AI business model. AI-related startups collectively raised nearly $50 billion, with notable examples such as OpenAI, Anthropic, and Inflection AI securing billions of dollars in funding (Metinko, 2024).</p><p>On the job market, there are both upsides and downsides. AI-related job postings on LinkedIn boosted 21 times in roughly one year (Lucas, 2023). On the other side, employees will have problems securing their jobs. Goldman Sachs estimates that AI could replace 300 million full-time jobs. Employers surveyed by the World Economic Forum predict AI will eliminate 83 million jobs by 2027 but create 69 million—a net decrease of 14 million jobs (Lucas, 2023). Even today, AI is driving layoffs. Tech companies, including Chegg, IBM, and Dropbox, have cited AI as a reason for recent layoffs, signaling the impact of AI on workforce dynamics (Thorbecke, 2023).</p><h2 id="4-the-impact-of-ai-on-future-technology" class="group relative items-center flex"><a href="#4-the-impact-of-ai-on-future-technology" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4. The Impact of AI on Future Technology</h2><p>The integration of AI into various industries enhances efficiency, productivity, and innovation. However, this transformative potential is accompanied by numerous challenges and <a href="https://www.bairesdev.com/blog/ethical-ai/" target="_blank" rel="noopener">ethical considerations</a>. This section embarks on an exploration of the profound influence that AI is poised to have on the trajectory of technological evolution.</p><h3 id="4-1-potential-benefits" class="group relative items-center flex"><a href="#4-1-potential-benefits" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4.1 Potential Benefits</h3><p>The potential benefits of AI are far-reaching and encompass a wide array of applications. In healthcare, AI enhances data-driven decision-making, especially in early chronic illness detection. Despite initial costs, long-term benefits promise affordability and streamlined administrative processes (Alugubelli, 2016). In finance, the adoption of AI presents a transformative opportunity, offering enhanced functionality and optimization within the industry (Almutairi &amp; Nobanee, 2020).</p><p>Moreover, AI offers the potential to streamline traffic management, enhance safety protocols, and optimize routes. Additionally, AI facilitates automated incident detection, predicts future traffic conditions, and optimizes public transportation schedules, ultimately reducing congestion, minimizing emissions, and improving overall efficiency in urban mobility (Abduljabbar et al., 2019). These are just several instances of how AI is poised to transform industries and enhance human life.</p><h3 id="4-2-challenges-and-ethical-considerations" class="group relative items-center flex"><a href="#4-2-challenges-and-ethical-considerations" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4.2 Challenges and Ethical Considerations</h3><p>Despite its transformative potential, the widespread adoption of AI also presents significant challenges and ethical considerations. Addressing ethical issues in AI and designing ethical AI systems poses a challenging and complex task (Huang et al., 2023). One pressing concern is information security risks, job insecurity, and employee technostress (Malik et al., 2021). This raises questions about job security, income inequality, and the need for retraining and upskilling programs to ensure a smooth transition in the labor market. Additionally, there are growing apprehensions regarding AI’s impact on privacy and data security, particularly as algorithms become increasingly adept at analyzing vast amounts of personal data (Mittelstadt et al., 2016). Addressing these challenges requires a concerted effort from policymakers, technologists, and society as a whole to develop robust regulatory frameworks and ethical guidelines that promote the responsible and equitable deployment of AI technologies.</p><h2 id="5-future" class="group relative items-center flex"><a href="#5-future" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>5. Future</h2><p>In the future, AI will impact all humanity in different directions. We already sense the impact in our daily lives, future plans, and maybe even our past. For now, AI is a pretty helpful friend for us. In today’s world, people started using AI on a daily basis, especially in the technology industry. People adapted easily that even a business line emerged, &quot;Prompt Engineering&quot;. It shows that progress in this direction will continue to increase significantly in the near future. Moreover, there is another important figure in the future of AI: achieving AGI. AGI refers to AI systems that exhibit intelligence comparable to or surpassing that of humans (Altman, 2023). The transformative potential of AGI, coupled with the imperative of responsible deployment to mitigate risks, highlights the necessity for enhanced governance structures in the AI domain (Altman, 2023). To conclude, people are already living in the AI age for years. In the future, AI will impact everywhere, everything, and everyone, either in a good or bad direction.</p><h2 id="6-conclusion" class="group relative items-center flex"><a href="#6-conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>6. Conclusion</h2><p>This paper has explored the role of AI in the future from several directions: technological advancements, societal implications, impacts on various industries, ethical considerations, and the pursuit of AGI. The transformative potential of AI offers numerous benefits across industries, improving efficiency, productivity, and innovation. It is observed that AI will continue to redefine the boundaries of humanity. However, the widespread adoption of AI also presents challenges and ethical considerations that need to be addressed through robust regulatory frameworks and ethical guidelines. The future of AI, including the pursuit of AGI and the development of new business models, highlights the necessity for enhanced governance structures to ensure responsible and equitable deployment of AI technologies. As AI continues to evolve, it is crucial for society to work together to harness its potential while mitigating the associated risks. In conclusion, AI has already made significant strides in shaping the modern world and will continue to do so in the future.</p><h2 id="references" class="group relative items-center flex"><a href="#references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>References</h2><ul>
<li>Abduljabbar, R., Dia, H., Liyanage, S., &amp; Bagloee, S. A. (2019). Applications of artificial intelligence in transport: An overview. Sustainability, 11(1), 189. DOI: <a href="https://doi.org/10.3390/su11010189" target="_blank" rel="noopener">https://doi.org/10.3390/su11010189</a></li>
<li>Almutairi, M., &amp; Nobanee, H. (2020). Artificial intelligence in the financial industry. Available at SSRN 3578238. DOI: <a href="https://dx.doi.org/10.2139/ssrn.3578238" target="_blank" rel="noopener">https://dx.doi.org/10.2139/ssrn.3578238</a></li>
<li>Altman S. (2023). Planning for AGI and Beyond. Retrieved from <a href="https://openai.com/blog/planning-for-agi-and-beyond" target="_blank" rel="noopener">https://openai.com/blog/planning-for-agi-and-beyond</a></li>
<li>Alugubelli, R. (2016). Exploratory study of artificial intelligence in healthcare. International Journal of Innovations in Engineering Research and Technology, 3(1), 1-10.</li>
<li>Boston Dynamics. (2024). Atlas: The world’s most dynamic humanoid robot. Retrieved from <a href="https://bostondynamics.com/atlas/" target="_blank" rel="noopener">https://bostondynamics.com/atlas/</a></li>
<li>Huang, C., Zhang, Z., Mao, B., &amp; Yao, X. (2023). An Overview of Artificial Intelligence Ethics. IEEE Transactions on Artificial Intelligence, 4(4), 799-819. DOI: <a href="https://doi.org/10.1109/TAI.2022.3194503" target="_blank" rel="noopener">https://doi.org/10.1109/TAI.2022.3194503</a></li>
<li>Lucas, E. (2023). LinkedIn says ChatGPT-related job postings have ballooned 21-fold since November. Forbes. Retrieved from <a href="https://www.forbes.com/sites/emmylucas/2023/08/17/linkedin-says-chatgpt-related-job-postings-have-ballooned-21-fold-since-november/" target="_blank" rel="noopener">https://www.forbes.com/sites/emmylucas/2023/08/17/linkedin-says-chatgpt-related-job-postings-have-ballooned-21-fold-since-november/</a></li>
<li>Malik, N., Tripathi, S. N., Kar, A., &amp; Gupta, S. (2021). Impact of Artificial Intelligence on Employees working in Industry 4.0 Led Organizations. International Journal of Manpower. DOI: <a href="http://dx.doi.org/10.1108/IJM-03-2021-0173" target="_blank" rel="noopener">http://dx.doi.org/10.1108/IJM-03-2021-0173</a></li>
<li>McCarthy, J., Minsky, M. L., Rochester, N., &amp; Shannon, C. E. (2006). A proposal for the Dartmouth Summer Research Project on Artificial Intelligence, August 31, 1955. AI Magazine, 27(4), 12. DOI: <a href="https://doi.org/10.1609/aimag.v27i4.1904" target="_blank" rel="noopener">https://doi.org/10.1609/aimag.v27i4.1904</a></li>
<li>Metinko C. (2024). Artificial Buildup: AI Startups Were Hot In 2023, But This Year May Be Slightly Different. Crunchbase. Retrieved from <a href="https://news.crunchbase.com/ai/hot-startups-2023-openai-anthropic-forecast-2024/" target="_blank" rel="noopener">https://news.crunchbase.com/ai/hot-startups-2023-openai-anthropic-forecast-2024/</a></li>
<li>Mittelstadt, B. D., Allo, P., Taddeo, M., Wachter, S., &amp; Floridi, L. (2016). The ethics of algorithms: Mapping the debate. Big Data &amp; Society, 3(2). DOI: <a href="https://doi.org/10.1177/2053951716679679" target="_blank" rel="noopener">https://doi.org/10.1177/2053951716679679</a></li>
<li>Nielsen J. (2023). AI Improves Employee Productivity by 66%. NNGroup. Retrieved from <a href="https://www.nngroup.com/articles/ai-tools-productivity-gains/" target="_blank" rel="noopener">https://www.nngroup.com/articles/ai-tools-productivity-gains/</a></li>
<li>OpenAI. (2022). ChatGPT: Conversational AI by OpenAI. Retrieved from <a href="https://openai.com/chatgpt" target="_blank" rel="noopener">https://openai.com/chatgpt</a></li>
<li>Thorbecke C. (2023). Why AI tech layoffs are happening now. Retrieved from <a href="https://edition.cnn.com/2023/07/04/tech/ai-tech-layoffs/index.html" target="_blank" rel="noopener">https://edition.cnn.com/2023/07/04/tech/ai-tech-layoffs/index.html</a></li>
<li>Waymo Tech Team. (2019). EmTech Digital Recap: How AI Makes Self-driving Cars Smarter. Retrieved from <a href="https://waymo.com/blog/2019/03/emtech-digital-recap-how-ai-makes-self/" target="_blank" rel="noopener">https://waymo.com/blog/2019/03/emtech-digital-recap-how-ai-makes-self/</a></li>
<li>BairesDev. Ethical AI Implementation Guide: A Business Leader’s Playbook. Retrieved from <a href="https://www.bairesdev.com/blog/ethical-ai" target="_blank" rel="noopener">https://www.bairesdev.com/blog/ethical-ai</a></li>
</ul>
<h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Sources</h2><ul>
<li><a href="/assets/blog/the-role-of-artificial-intelligence-in-future-technology/original-document.pdf" target="_blank" rel="noopener">Original Document</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is converted from PDF to Markdown using ChatGPT. The convertion may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Artificial Intelligence"/>
        <category label="AI"/>
        <category label="Technology"/>
        <category label="Future"/>
        <category label="2024"/>
        <published>2024-05-24T20:06:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[How to Write a Reverse Proxy Using Go]]></title>
        <id>how-to-write-a-reverse-proxy-using-go</id>
        <link href="https://fatiiates.com/blog/post/how-to-write-a-reverse-proxy-using-go"/>
        <updated>2024-03-14T20:56:00.000Z</updated>
        <summary type="html"><![CDATA[Learn how to write a reverse proxy using Go's standard library.]]></summary>
        <content type="html"><![CDATA[<div><p>If you&#39;re here, you&#39;re probably working with Golang and have heard about its extensive standard library support. Frankly, this is one of the most influential factors in my choice of Golang. So let&#39;s dive in.</p><p>Golang provides an example in its documentation that allows you to set up a reverse proxy easily. I&#39;ve included the link to this example at the bottom of this blog post.</p><h3 id="prerequisites" class="group relative items-center flex"><a href="#prerequisites" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Prerequisites</h3><p>To use a reverse proxy, you need:</p><ul>
<li>A working service that you want to serve to the network.</li>
</ul>
<p>If you don&#39;t have a server, don&#39;t worry. Golang&#39;s standard library also solves this for you. The code snippet below will help you start a test server.</p><figure>
                                    <div><pre><code class="language-go"><span class="hljs-keyword">package</span> main

<span class="hljs-keyword">import</span> (
    <span class="hljs-string">&quot;fmt&quot;</span>
    <span class="hljs-string">&quot;log&quot;</span>
    <span class="hljs-string">&quot;net/http&quot;</span>
)

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
    http.HandleFunc(<span class="hljs-string">&quot;/&quot;</span>, <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">(w http.ResponseWriter, r *http.Request)</span></span> {
        log.Println(<span class="hljs-string">&quot;Request received at test server.&quot;</span>)
        fmt.Fprintf(w, <span class="hljs-string">&quot;Hello, World!&quot;</span>)
    })
    fmt.Println(<span class="hljs-string">&quot;Test server started at localhost:8080&quot;</span>)
    log.Fatal(http.ListenAndServe(<span class="hljs-string">&quot;:8080&quot;</span>, <span class="hljs-literal">nil</span>))
}</code></pre></div>
                                  </figure><p>Now that we have an HTTP server, we can create our single host reverse proxy. All we need is the target URL of our HTTP server, which we can obtain with the following code:</p><figure>
                                    <div><pre><code class="language-go"><span class="hljs-keyword">package</span> main

<span class="hljs-keyword">import</span> (
    <span class="hljs-string">&quot;fmt&quot;</span>
    <span class="hljs-string">&quot;log&quot;</span>
    <span class="hljs-string">&quot;net/http&quot;</span>
    <span class="hljs-string">&quot;net/http/httputil&quot;</span>
    <span class="hljs-string">&quot;net/url&quot;</span>
)

<span class="hljs-function"><span class="hljs-keyword">func</span> <span class="hljs-title">main</span><span class="hljs-params">()</span></span> {
    target, err := url.Parse(<span class="hljs-string">&quot;http://localhost:8080&quot;</span>)
    <span class="hljs-keyword">if</span> err != <span class="hljs-literal">nil</span> {
        log.Fatal(err)
    }

    proxy := httputil.NewSingleHostReverseProxy(target)

    fmt.Println(<span class="hljs-string">&quot;Reverse proxy server is ready.&quot;</span>)
    fmt.Println(<span class="hljs-string">&quot;Starting server on port 4000...&quot;</span>)

    http.HandleFunc(<span class="hljs-string">&quot;/&quot;</span>, <span class="hljs-function"><span class="hljs-keyword">func</span><span class="hljs-params">(w http.ResponseWriter, r *http.Request)</span></span> {
        log.Println(<span class="hljs-string">&quot;Request received at reverse proxy server.&quot;</span>)
        proxy.ServeHTTP(w, r)
    })

    log.Fatal(http.ListenAndServe(<span class="hljs-string">&quot;:4000&quot;</span>, <span class="hljs-literal">nil</span>))
}</code></pre></div>
                                  </figure><p>The reverse proxy server is ready. However, I prefer to structure it in a way that allows me to control requests over an HTTP handler.</p><p>Once the proxy server is set up, running the script will start it and it will serve on port 4000.</p><p>To start the server, run:</p><figure>
                                    <div><pre><code class="language-bash">go run single_host_reverse_proxy.go</code></pre></div>
                                  </figure><h3 id="testing" class="group relative items-center flex"><a href="#testing" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Testing</h3><p>You can test the server with cURL. Here&#39;s how you can do it:</p><p>To check the server logs when a request is made:</p><figure>
                                    <div><pre><code class="language-bash">curl -i localhost:4000</code></pre></div>
                                  </figure><p>You&#39;ll receive the cURL request&#39;s response from the reverse proxy.</p><h3 id="conclusion" class="group relative items-center flex"><a href="#conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Conclusion</h3><p>Using Golang&#39;s standard library for reverse proxy is straightforward and easy-to-use. However, it&#39;s important to note that this method is suitable for single-host reverse proxying and might not scale well for larger applications. But I am planning to write a blog post on how to write a reverse proxy which is more scalable and can handle multiple hosts. Stay tuned!</p><h3 id="references" class="group relative items-center flex"><a href="#references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>References</h3><ul>
<li><a href="https://pkg.go.dev/net/http/httputil#example-ReverseProxy" target="_blank" rel="noopener">Golang Standard Library Documentation</a></li>
</ul>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Go"/>
        <category label="Reverse Proxy"/>
        <category label="2023"/>
        <published>2023-04-23T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Parallel Word Generator and Word Counter]]></title>
        <id>parallel-word-generator-and-word-counter-algorithm</id>
        <link href="https://fatiiates.com/blog/post/parallel-word-generator-and-word-counter-algorithm"/>
        <updated>2024-03-19T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[Exploring Concurrency in Daily Life and Parallel Programming: Word Generation and Counting with MPI and Modified MapReduce]]></summary>
        <content type="html"><![CDATA[<div><h2 id="summary" class="group relative items-center flex"><a href="#summary" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Summary</h2><p>Concurrency is actually an action that we frequently practice in our daily lives. For example, holding a water bottle in one hand while opening a door with the other. Parallel Programming is merely the realization of concurrent operations on a computer. This paper discusses the development process of a Word Generator using the MPI library and the methods for developing a Word Counter by modifying the MapReduce algorithm according to my own needs. Evaluations have shown that parallelization becomes detrimental in terms of time after a certain point, which also validates Amdahl&#39;s law.</p><h2 id="1-introduction" class="group relative items-center flex"><a href="#1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. Introduction</h2><p>Concurrency is actually an action that we frequently practice in our daily lives. For example, holding a water bottle in one hand while opening a door with the other. Parallel Programming is merely the realization of concurrent operations on a computer. To perform concurrent operations, you first need a CPU with an appropriate architecture. Most processors today are capable of performing concurrent operations. The processor you use at home utilizes the MIMD architecture seen in Figure 1.1.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-1.1.jpg" alt="MIMD"><figcaption class="text-center">Figure 1.1 MIMD (Wikipedia, 2022)</figcaption></figure></p><h2 id="2-mpi" class="group relative items-center flex"><a href="#2-mpi" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. MPI</h2><p>MPI (Message Passing Interface) is a computer communication protocol. It is a de facto standard protocol used for communication between nodes running parallel programs in a distributed memory system. It supports both point-to-point and collective communication. MPI provides an application programming interface for sending messages along with protocol and semantic specifications on how its features should behave in any given application. The goals of MPI are high performance, scalability, and portability. Despite not being officially approved by any organization, MPI has become a de facto standard in high-performance computing (Wikipedia, 2022).</p><h2 id="3-mapreduce" class="group relative items-center flex"><a href="#3-mapreduce" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. MapReduce</h2><p>MapReduce is a programming model and associated implementation for processing and generating large datasets distributed across a cluster. MapReduce is an algorithm presented for distributing data and then reducing it back afterwards. Google also provides a MapReduce framework for Big Data under the same name. However, this paper does not utilize this framework. The MapReduce algorithm has been optimized and developed entirely according to the needs of the tool. Figure 3.1 illustrates a MapReduce algorithm used to count data within a document roughly. No parallel processing is used in the visualization, meaning MapReduce is not exclusively used for parallel processing.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-3.1.png" alt="MapReduce pseudo code"><figcaption class="text-center">Figure 3.1 MapReduce pseudo code (Wikipedia, 2022)</figcaption></figure></p><h2 id="4-word-generator" class="group relative items-center flex"><a href="#4-word-generator" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4. Word Generator</h2><p>The word generator is a tool that creates words by concatenating randomly selected characters from the 26 characters in the English alphabet, based on the given number of processes and the minimum and maximum word length constraints determined by the user. These words are then saved to a file with spaces between them.
The pseudo code for the word generator can be seen in below.</p><figure>
                                    <div><pre><code class="language-plaintext">
MPINIT()
MPI_Comm_ran()
MPI_Comm_size(N)

create a new Generator
if world_rank == 0:
    Calculate the number of tasks to be sent to each process
    Calculate how much data will be received from each process for scatter
    Create a receiver buffer for scatter

distribute the generated data
wait until all data is distributed at the barrier

Create a character buffer to hold words
Generate words and assign them to the character buffer

if world_rank == 0:
    Create a buffer to collect all words

Collect data from all processes into the buffer
Wait at the barrier until all data is collected

if world_rank == 0: write all data to a file
    Print the time taken for execution

MPI_Finalize

Release the buffer you created
</code></pre></div>
                                  </figure><p>The word generator is implemented using the MPI library in C++. Roughly, the process involves dividing the desired number of words by the number of processes and transmitting the number of words each process needs to generate via buffers. After each process produces its share of words, all words are gathered within the root process. The gathered words are then saved to a file with spaces between them.
The file structure of the word generator tool is illustrated in Figure 4.2.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-4.2.png" alt="Word Generator file structure"><figcaption class="text-center">Figure 4.2 Word Generator file structure</figcaption></figure></p><ul>
<li>The <code>/bin</code> directory contains executable files generated.</li>
<li>The <code>/doc</code> directory contains necessary documents.</li>
<li>The <code>/include</code> directory contains header files.</li>
<li>The <code>/lib</code> directory contains compiled C++ header files of the written source code as a library.</li>
<li>The <code>/results</code> directory contains generated datasets.</li>
<li>The <code>/src</code> directory contains source codes of header files.</li>
</ul>
<h2 id="5-word-counter" class="group relative items-center flex"><a href="#5-word-counter" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>5. Word Counter</h2><p>The word counter counts the occurrences of words in a given file using &quot;n&quot; number of processes. After counting, it writes these words to a file in YAML format with key-value pairs. The pseudo code for the word counter can be seen in below.</p><figure>
                                    <div><pre><code class="language-plaintext">
create a process queue

function read_from_file:
    buff = 64
    read &quot;buff&quot; bytes of data and extract words from it
    store completely read words in a hashmap
    store incompletely read words in an array

function map:
    determine how much data the process will read
    launch a goroutine and call the &quot;read_from_file&quot; method within it
    enqueue the process into the process queue

function reduce:
    while:
        wait for all processes to finish reading from the queue

    words = {}
    for p in processes:
        store incompletely read words in temporary memory and \
            merge them with those coming from the next process

    for p in processes:
        transfer completely read data in the process to the &#x27;words&#x27; variable

map()
reduce()
save words to a file
</code></pre></div>
                                  </figure><p>The Word Counter MapReduce algorithm has been developed in the Go language. In the word counter, each process reads from the file in 64-byte buffers. Each process starts reading from where the previous process left off, and this sequence continues. The number of bytes each process will read is determined by the size of the file. Each process reads n bytes of the file size/n.</p><p>The reading process is initiated concurrently with the mapping process. Since the exact points where words are divided are not known, there may be a problem of incomplete reading of words. If a word can be completely read, it is transferred within a map. If a word is partially read, it is combined with the partially read words from the previous or next processes to obtain the complete word, and this is done in the reduce operation.</p><p>After the operations are completed, a file name is created based on the current hour in YAML format and saved to the file.</p><p>The file structure of the word counter tool is illustrated in Figure 5.2.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-5.2.png" alt="Word Counter file structure"><figcaption class="text-center">Figure 5.2 Word Counter file structure</figcaption></figure></p><ul>
<li>The <code>/bin</code> directory contains executable files generated.</li>
<li>The <code>/doc</code> directory contains necessary documents.</li>
<li>The <code>/results</code> directory contains generated datasets.</li>
<li>The <code>/.</code> directory contains Go package codes.</li>
</ul>
<h2 id="6-project-structure" class="group relative items-center flex"><a href="#6-project-structure" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>6. Project Structure</h2><p>The project consists of two tools: the word counter and the word generator. The word generator creates a file based on specified parameters, while the word counter counts the occurrences of words in the latest file generated by the word generator and creates a new file. All operations are performed in parallel.
The file structure is shown in Figure 6.1.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-6.1.png" alt="Project file structure"><figcaption class="text-center">Figure 6.1 Project file structure</figcaption></figure></p><ul>
<li>The <code>/counter</code> directory contains files related to the word counter, including codes and documents.</li>
<li>The <code>/generator</code> directory contains files related to the word generator, including codes and documents.</li>
<li>The <code>Makefile</code> contains short scripts to facilitate usage.</li>
<li><code>visualization.py</code> contains a script that allows you to perform performance benchmarks on the counter or generator tool within the range of 1-100 processes.</li>
</ul>
<h2 id="7-requirements-and-installation" class="group relative items-center flex"><a href="#7-requirements-and-installation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>7. Requirements and Installation</h2><p>The recommended operating system is Ubuntu 20.04. All requirements, installation, and execution processes are explained based on this operating system.</p><h3 id="counter" class="group relative items-center flex"><a href="#counter" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Counter</h3><ul>
<li>Go -&gt; ^1.18.3</li>
</ul>
<h3 id="generator" class="group relative items-center flex"><a href="#generator" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Generator</h3><ul>
<li>C++ -&gt; ^11</li>
<li>OpenMPI -&gt; ^4.0.3</li>
</ul>
<h3 id="make" class="group relative items-center flex"><a href="#make" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Make</h3><ul>
<li>make -&gt; ^4.2.1</li>
</ul>
<p>First, check for updates and perform necessary updates:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get update &amp;&amp; sudo apt-get upgrade</code></pre></div>
                                  </figure><p>C++ should be available on Ubuntu 20.04. You can check it using the following command:</p><figure>
                                    <div><pre><code class="language-bash">g++ --version</code></pre></div>
                                  </figure><p>If you encounter an error, you can install it using:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get install build-essential</code></pre></div>
                                  </figure><p>You can install the MPI library on your computer using the following command:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get install mpich openmpi-bin</code></pre></div>
                                  </figure><p>After successful installation, you can test it using:</p><figure>
                                    <div><pre><code class="language-bash">mpic++ --version</code></pre></div>
                                  </figure><p>Navigate to the /tmp directory and download version 1.18.* to your machine:</p><figure>
                                    <div><pre><code class="language-bash"><span class="hljs-built_in">cd</span> /tmp &amp;&amp; wget https://go.dev/dl/go1.18.3.linux-amd64.tar.gz</code></pre></div>
                                  </figure><p>After successful download, delete any existing Go files and copy the new one to the /usr/local directory:</p><figure>
                                    <div><pre><code class="language-bash">sudo <span class="hljs-built_in">rm</span> -rf /usr/local/go &amp;&amp; sudo tar -C /usr/local -xzf go1.18.3.linux-amd64.tar.gz</code></pre></div>
                                  </figure><p>Once copied, add the directory to your $PATH. To make it permanent, paste it into the rc file of your shell:</p><ul>
<li>For Bash: $HOME/.bashrc</li>
<li>For Zsh: $HOME/.zshrc</li>
</ul>
<figure>
                                    <div><pre><code class="language-bash"><span class="hljs-built_in">export</span> PATH=<span class="hljs-variable">$PATH</span>:/usr/local/go/bin</code></pre></div>
                                  </figure><p>You can now test Go usage via the following command:</p><figure>
                                    <div><pre><code class="language-bash">go version</code></pre></div>
                                  </figure><p>Make should be installed by default on Ubuntu 20.04. You can check it using the following command:</p><figure>
                                    <div><pre><code class="language-bash">make --version</code></pre></div>
                                  </figure><p>If it&#39;s not installed, you can do so using:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get install make</code></pre></div>
                                  </figure><p>If all steps were completed without errors, the installations are successful, and you can proceed to execution.</p><h2 id="8-makefile" class="group relative items-center flex"><a href="#8-makefile" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>8. Makefile</h2><p>To facilitate execution, a Makefile has been created in the project&#39;s root directory. With the Makefile, both tools can be executed using environment variables and separators without the need to write complex commands.
The Makefile provides you with a CLI command set for easy usage.
Available variables:</p><ul>
<li><code>DATASET_SIZE</code>: min=1, max=10M, default=50K</li>
<li><code>MAX_STR_LEN</code>: min=2, max=100, default=10</li>
<li><code>MIN_STR_LEN</code>: min=1, max=100, default=2</li>
<li><code>GENERATED_FILE_PATH</code>: Optional, must be a valid file path</li>
</ul>
<h3 id="world_size" class="group relative items-center flex"><a href="#world_size" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>WORLD_SIZE</h3><p>Specifies the number of processes to be used. Applicable to both Generator and Counter.
Constraints: 1 &lt;= X &lt;= 100, default=1</p><ul>
<li>Must not be smaller than <code>DATASET_SIZE</code>.</li>
</ul>
<h3 id="dataset_size" class="group relative items-center flex"><a href="#dataset_size" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DATASET_SIZE</h3><p>Specifies the number of words to be generated. A variable used only by the Generator.
Constraints: 1 &lt;= X &lt;= 1000000, default=50000</p><ul>
<li>Must not be larger than <code>WORLD_SIZE</code>.</li>
</ul>
<h3 id="max_str_len" class="group relative items-center flex"><a href="#max_str_len" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>MAX_STR_LEN</h3><p>Specifies the maximum length of the generated words. A variable used only by the Generator.
Constraints: 2 &lt;= X &lt;= 100, default=10</p><ul>
<li>Must not be smaller than <code>MIN_STR_LEN</code>.</li>
</ul>
<h3 id="min_str_len" class="group relative items-center flex"><a href="#min_str_len" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>MIN_STR_LEN</h3><p>Specifies the minimum length of the generated words. A variable used only by the Generator.
Constraints: 1 &lt;= X &lt;= 100, default=2</p><ul>
<li>Must not be larger than <code>MAX_STR_LEN</code>.</li>
</ul>
<h3 id="generated_file_path" class="group relative items-center flex"><a href="#generated_file_path" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>GENERATED_FILE_PATH</h3><p>Can be used to specify the path of the file from which words should be counted. Optional. The default value is the last generated file by the Generator.
A variable used only by the Counter.
Constraints: X &gt; 0, default=last generated file</p><h2 id="9-execution" class="group relative items-center flex"><a href="#9-execution" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>9. Execution</h2><p>If you want to compile both applications to their final version and run them with default values, you can execute the following command in the root directory of the repository:</p><figure>
                                    <div><pre><code class="language-bash">make</code></pre></div>
                                  </figure><p>To run applications with custom values:</p><figure>
                                    <div><pre><code class="language-bash">make MAX_STR_LEN=15 MIN_STR_LEN=5 WORLD_SIZE=10 DATASET_SIZE=20</code></pre></div>
                                  </figure><p>To run applications with custom values (assuming they have been previously compiled):</p><figure>
                                    <div><pre><code class="language-bash">make runner MAX_STR_LEN=15 MIN_STR_LEN=5 WORLD_SIZE=10 DATASET_SIZE=20</code></pre></div>
                                  </figure><p>To compile applications only:</p><figure>
                                    <div><pre><code class="language-bash">make builder</code></pre></div>
                                  </figure><p>To compile only the Generator application:</p><figure>
                                    <div><pre><code class="language-bash">make build_generator</code></pre></div>
                                  </figure><p>To compile only the Counter application:</p><figure>
                                    <div><pre><code class="language-bash">make build_counter</code></pre></div>
                                  </figure><p>To run only the Generator application (assuming it has been previously compiled):</p><figure>
                                    <div><pre><code class="language-bash">make run_generator MAX_STR_LEN=15 MIN_STR_LEN=5 WORLD_SIZE=10 DATASET_SIZE=20</code></pre></div>
                                  </figure><p>To compile and run only the Generator application:</p><figure>
                                    <div><pre><code class="language-bash">make BR_generator MAX_STR_LEN=15 MIN_STR_LEN=5 WORLD_SIZE=10 DATASET_SIZE=20</code></pre></div>
                                  </figure><p>To run only the Counter application (assuming it has been previously compiled):</p><figure>
                                    <div><pre><code class="language-bash">make run_counter WORLD_SIZE=10</code></pre></div>
                                  </figure><p>To run the Counter application with a specified file path (assuming it has been previously compiled):</p><figure>
                                    <div><pre><code class="language-bash">make run_counter WORLD_SIZE=5 GENERATED_FILE_PATH=<span class="hljs-variable">$HOME</span>/MPI-words/generator/results/2022_25_05-17_42_11.txt</code></pre></div>
                                  </figure><p>To compile and run only the Counter application:</p><figure>
                                    <div><pre><code class="language-bash">make BR_counter WORLD_SIZE=10</code></pre></div>
                                  </figure><h2 id="evaluation" class="group relative items-center flex"><a href="#evaluation" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Evaluation</h2><p><strong>Device Information:</strong></p><ul>
<li><strong>OS:</strong> Ubuntu 20.04.4 LTS x86_64</li>
<li><strong>Kernel:</strong> 5.13.0-44-generic</li>
<li><strong>Shell:</strong> zsh 5.8</li>
<li><strong>Terminal:</strong> gnome-terminal</li>
<li><strong>CPU:</strong> 11th Gen Intel i5-11400H</li>
<li><strong>Memory:</strong> 16GB DDR4 3200 MHz</li>
</ul>
<blockquote>
<p>Measurements vary depending on the differences between C++ and Go languages, the parameters given to executable files, and the states of my computer at the time of the measurements.</p></blockquote>
<h3 id="word-generator" class="group relative items-center flex"><a href="#word-generator" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Word Generator</h3><p>Examine the performance over time of a generator producing 1,000,000 randomly generated words of 100 characters, varying the number of processes from 1 to 100 in Figure 10.1.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-10.1.png" alt="Word Generator Performance"><figcaption class="text-center">Figure 10.1 Word Generator Performance</figcaption></figure></p><p>As a result, after parallelizing with 17 processes, increasing parallelism is detrimental at this parameter level.</p><h3 id="word-counter" class="group relative items-center flex"><a href="#word-counter" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Word Counter</h3><p>Examine the performance over time of a counter tallying and saving words from a file containing 1,000,000 words of 100 characters in YAML format, with the number of processes ranging from 1 to 100 in Figure 10.2.</p><p><figure><img src="/assets/blog/parallel-word-generator-and-word-counter-algorithm/figure-10.2.png" alt="Word Counter Performance"><figcaption class="text-center">Figure 10.2 Word Counter Performance</figcaption></figure></p><p>Unlike the generator graph, there is no regular increase. With these parameters, after being run in parallel with 7 processes this time, it can be seen.</p><h2 id="references" class="group relative items-center flex"><a href="#references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>References</h2><ul>
<li><a href="https://www.open-mpi.org/doc/" target="_blank" rel="noopener">Open MPI Documentation</a></li>
<li><a href="https://go.dev/ref/spec" target="_blank" rel="noopener">Go Language Specification</a></li>
<li><a href="https://go.dev/doc/" target="_blank" rel="noopener">Go Language Documentation</a></li>
<li><a href="https://www.youtube.com/channel/UCTE5Fk6-JTvOoN23jwQhH6w/featured" target="_blank" rel="noopener">Go YouTube Channel</a></li>
<li><a href="https://go.dev/tour/concurrency/1" target="_blank" rel="noopener">Go Concurrency Tour</a></li>
<li><a href="https://github.com/fatiiates/MPI-words" target="_blank" rel="noopener">MPI Words GitHub Repository</a></li>
<li><a href="https://en.wikipedia.org/wiki/Multiple_instruction,_multiple_data" target="_blank" rel="noopener">Multiple Instruction, Multiple Data (MIMD) on Wikipedia</a></li>
<li><a href="https://en.wikipedia.org/wiki/MapReduce" target="_blank" rel="noopener">MapReduce on Wikipedia</a></li>
</ul>
<h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Sources</h2><ul>
<li><a href="/assets/blog/parallel-word-generator-and-word-counter-algorithm/original-document.pdf" target="_blank" rel="noopener">Original Document - in Turkish</a></li>
<li><a href="https://github.com/fatiiates/MPI-words" target="_blank" rel="noopener">GitHub Repository</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is translated from Turkish to English using ChatGPT. The original document is written by the in Turkish. The translation may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Parallel Programming"/>
        <category label="MapReduce"/>
        <category label="Concurrency"/>
        <category label="Algorithms"/>
        <category label="MPI"/>
        <category label="C++"/>
        <category label="Go"/>
        <category label="Bursa Technical University"/>
        <category label="2022"/>
        <published>2022-03-18T01:16:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Excitation Current of a Synchronous Machine]]></title>
        <id>excitation-current-of-a-synchronous-machine</id>
        <link href="https://fatiiates.com/blog/post/excitation-current-of-a-synchronous-machine"/>
        <updated>2024-03-19T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[This paper presents the development and evaluation of a Mamdani Fuzzy Inference System (FIS) for predicting the excitation current of a synchronous machine based on four attributes. It discusses the methodology, implementation, and results of the FIS system, achieving a prediction accuracy of over 90%]]></summary>
        <content type="html"><![CDATA[<div><h2 id="summary" class="group relative items-center flex"><a href="#summary" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Summary</h2><p>Fuzzy logic is used in converting crisp (binary, definite) data into linguistic data using membership functions. Using the FIS (Fuzzy Inference System) method, my own created fuzzy knowledge base was applied on a real dataset where the result value varies depending on four different attributes, to predict the result value through four attributes. Predictions were made using the Mamdani methodology with CoA (Center of Area) and BoA (Bisector of Area) aggregation methods. As a result, an accuracy of up to 92% compared to real values was achieved.</p><h2 id="1-introduction" class="group relative items-center flex"><a href="#1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. Introduction</h2><p>Fuzzy logic is used in converting crisp data into linguistic data using membership functions. Nowadays, we encounter FIS systems unaware in many places such as air conditioners, cars, trains, etc. The most significant determinant in FIS systems is expert knowledge.</p><h2 id="2-fis" class="group relative items-center flex"><a href="#2-fis" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. FIS</h2><p>FIS consists of four main components: fuzzifier, inference engine, defuzzifier, and fuzzy knowledge base. Figure 2.1 depicts the FIS schema.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-2.1.png" alt="FIS"><figcaption class="text-center">Figure 2.1 FIS</figcaption></figure></p><h3 id="i-fuzzy-knowledge-base" class="group relative items-center flex"><a href="#i-fuzzy-knowledge-base" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>I. Fuzzy Knowledge Base</h3><p>The most crucial thing to know when creating an FIS system is that expert knowledge is of paramount importance in constructing the fuzzy knowledge base. Membership functions created by experts and rules based on the selected method, either Mamdani or other, are found here. Otherwise, the FIS system can produce entirely incorrect results, which is the weakest point of FIS systems.</p><h3 id="ii-fuzzifier" class="group relative items-center flex"><a href="#ii-fuzzifier" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>II. Fuzzifier</h3><p>It facilitates the fuzzification of your crisp data within the fuzzy knowledge base using your membership functions and generates fuzzy outputs as a result.
Detailed discussion on creating membership functions is provided under the &quot;Method&quot; section in the paper. Membership functions were constructed by drawing Box Plot graphs of the datasets to obtain piecewise functions based on the smallest, largest, and median values.</p><h3 id="iii-inference-engine" class="group relative items-center flex"><a href="#iii-inference-engine" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>III. Inference Engine</h3><p>It applies your rules within the fuzzy knowledge base to the fuzzy inputs obtained from the fuzzifier, generating a fuzzy output.
The Mamdani Fuzzy Model is used in the paper. The Mamdani model is also known as &quot;max-min implication.&quot; The rules created are of the &quot;IF-THEN&quot; type, and the values are linguistic values directly, unlike in another model like Sugeno. Additionally, rules are connected with connectors such as AND-OR-ELSE.</p><h3 id="iv-defuzzifier" class="group relative items-center flex"><a href="#iv-defuzzifier" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>IV. Defuzzifier</h3><p>It combines the fuzzy outputs generated by the Inference Engine according to the membership function within the Fuzzy knowledge base and produces a result based on the aggregation method.
The CoA (Center of Area) and BoA (Bisector of Area) methods are preferred as the aggregation methods in the paper.</p><h2 id="3-dataset" class="group relative items-center flex"><a href="#3-dataset" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. Dataset</h2><p>The dataset used consists of 4 features and 1 output value. These are:</p><ul>
<li>Iy (Load current)</li>
<li>PF (Power Factor)</li>
<li>e (Power factor error)</li>
<li>dIf (Changing the excitation current of the synchronous machine)</li>
<li>If (Excitation current of the synchronous machine)</li>
</ul>
<p>A &quot;If&quot; value is measured for 4 features. The dataset contains 557 measurement data.</p><h2 id="4-method" class="group relative items-center flex"><a href="#4-method" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4. Method</h2><p>Firstly, the features of the dataset should be plotted using Box Plot to obtain values such as median, Q1, Q3.
To create membership functions with Box Plot, 5 data points are required for each attribute. These are: median, Q1, Q3, smallest value, largest value.
Since graphical operations are simpler in Python, Python was used to draw Box Plot graphs.</p><p>For the Iy attribute, the values and Box Plot are as follows:</p><ul>
<li>Lowest: 3</li>
<li>Largest: 6</li>
<li>Median: 4.5</li>
<li>Q1: 3.7</li>
<li>Q3: 5.3</li>
</ul>
<p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.1.png" alt="Box Plot graph of the Iy attribute"><figcaption class="text-center">Figure 4.1 Box Plot graph of the Iy attribute</figcaption></figure></p><p>For the PF attribute, the values are as follows:</p><ul>
<li>Lowest: 0.65</li>
<li>Largest: 1</li>
<li>Median: 0.82</li>
<li>Q1: 0.74</li>
<li>Q3: 0.92</li>
</ul>
<p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.2.png" alt="Box Plot graph of the PF attribute"><figcaption class="text-center">Figure 4.2 Box Plot graph of the PF attribute</figcaption></figure></p><p>For the e attribute, the values are as follows:</p><ul>
<li>Lowest: 0</li>
<li>Largest: 0.35</li>
<li>Median: 0.18</li>
<li>Q1: 0.08</li>
<li>Q3: 0.26</li>
</ul>
<p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.3.png" alt="Box Plot graph of the e attribute"><figcaption class="text-center">Figure 4.3 Box Plot graph of the e attribute</figcaption></figure></p><p>For the dIf attribute, the values are as follows:</p><ul>
<li>Lowest: 0.037</li>
<li>Largest: 0.769</li>
<li>Median: 0.345</li>
<li>Q1: 0.189</li>
<li>Q3: 0.48625</li>
</ul>
<p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.4.png" alt="Box Plot graph of the dIf attribute"><figcaption class="text-center">Figure 4.4 Box Plot graph of the dIf attribute</figcaption></figure></p><p>For the If attribute, the values are as follows:</p><ul>
<li>Lowest: 1.217</li>
<li>Largest: 1.949</li>
<li>Median: 1.525</li>
<li>Q1: 1.369</li>
<li>Q3: 1.66625</li>
</ul>
<p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.5.png" alt="Box Plot graph of the If attribute"><figcaption class="text-center">Figure 4.5 Box Plot graph of the If attribute</figcaption></figure></p><p>Two methods exist for creating membership functions based on these values. The first method, which has been used for a long time, creates a three-piece membership function, while the second method, more recently proposed, creates a five-piece membership function.
The five-piece membership function can be created using the piecewise functions shown in Figure 4.6.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.6.png" alt="Five-piece membership function"><figcaption class="text-center">Figure 4.6 Five-piece membership function (Hasan &amp; Sobhan, 2020)</figcaption></figure></p><p>As seen in Figure 4.6, the piecewise functions have been created using Box Plot metrics. However, since our dataset consists of 557 data points, if we were to use a five-piece membership set, at least <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>5</mn><mi>n</mi></msup></mrow><annotation encoding="application/x-tex">5^n</annotation></semantics></math></span> (where n is the number of attributes), i.e., 625 rules, should be written. Due to the scarcity of data in the dataset, a three-piece membership function is preferred. Three-piece membership functions can be created with the piecewise functions seen in Figure 4.7.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.7.png" alt="Three-piece membership function"><figcaption class="text-center">Figure 4.7 Three-piece membership function (Asanka &amp; Perera, 2017)</figcaption></figure></p><p>The membership function created for the Iy attribute is given in Figure 4.8.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.8.png" alt="Membership function of the Iy attribute"><figcaption class="text-center">Figure 4.8 Membership function of the Iy attribute</figcaption></figure></p><p>The membership function created for the PF attribute is given in Figure 4.9.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.9.png" alt="Membership function of the PF attribute"><figcaption class="text-center">Figure 4.9 Membership function of the PF attribute</figcaption></figure></p><p>The membership function created for the e attribute is given in Figure 4.10.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.10.png" alt="Membership function of the e attribute"><figcaption class="text-center">Figure 4.10 Membership function of the e attribute</figcaption></figure></p><p>The membership function created for the dIf attribute is given in Figure 4.11.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.11.png" alt="Membership function of the dIf attribute"><figcaption class="text-center">Figure 4.11 Membership function of the dIf attribute</figcaption></figure></p><p>The membership function created for the If attribute is given in Figure 4.12.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.12.png" alt="Membership function of the If attribute"><figcaption class="text-center">Figure 4.12 Membership function of the If attribute</figcaption></figure></p><p>After the creation of membership functions, they are defined with FCL as seen in Figure 4.13 (Cingolani &amp; Alcala-Fdez, 2012).</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-4.13.png" alt="FCL fuzzify and defuzzify steps"><figcaption class="text-center">Figure 4.13 FCL fuzzify and defuzzify steps</figcaption></figure></p><p>In the Defuzzify part, to avoid the NaN situation if no value is obtained from the membership function, a DEFAULT value of 1.525, which is the median, is defined. Although we do not have data that would result in a NaN situation, other data besides these should not be ignored.</p><p>After completing the Fuzzify and Defuzzify sections, since we have four attributes and three-piece membership functions for each, at least <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mn>3</mn><mn>4</mn></msup></mrow><annotation encoding="application/x-tex">3^4</annotation></semantics></math></span>, i.e., 81 rules, should be created. Initially, all rules were created to indicate the result as &quot;low&quot; value and entirely with AND connectors. Later, the dataset was sorted according to the If values, so the resulting values would also be sorted. After sorting, pieces where the data coincided every five rows were identified, and the pieces indicated by the rules were updated to med and high values. After the update, error values for CoA were calculated as follows:</p><ul>
<li>MAE =&gt; 0.15719705272984164</li>
<li>RMSE =&gt; 0.18592171065488275</li>
</ul>
<p>To further reduce the error value, changes were made to the rules, but the method was changed. In the new method, the dataset was sorted based on the predict values, i.e., the difference between desired and predicted values, and at the bottom, there always remains the data that increases the error rate the most. Results values on rules affecting the data causing the most errors were changed, and changes were made to the connectors, resulting in the error values for the CoA method to regress to the following values:</p><ul>
<li>MAE =&gt; 0.07178920147606488</li>
<li>RMSE =&gt; 0.08759046857426464</li>
</ul>
<h2 id="5-conclusion" class="group relative items-center flex"><a href="#5-conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>5. Conclusion</h2><p>The error values obtained with CoA using the developed FIS system are as follows:</p><ul>
<li>MAE =&gt; 0.07178920147606488</li>
<li>RMSE =&gt; 0.08759046857426464</li>
</ul>
<p>For the BoA method, the error values are as follows:</p><ul>
<li>MAE =&gt; 0.06396308797127467</li>
<li>RMSE =&gt; 0.08051538814306027</li>
</ul>
<p>As seen, it has been demonstrated that the system can make predictions with success rates around 90%. However, the results obtained with the CoA method and the real values are presented in the same graph in Figure 5.1.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-5.1.png" alt="CoA predictions and real values"><figcaption class="text-center">Figure 5.1 CoA predictions and real values</figcaption></figure></p><p>Similarly, for the BoA values and real values, there is a slight difference in error values, which is reflected in the graph. The graph for BoA values and real values is shown in Figure 5.2.</p><p><figure><img src="/assets/blog/excitation-current-of-a-synchronous-machine/figure-5.2.png" alt="BoA predictions and real values"><figcaption class="text-center">Figure 5.2 BoA predictions and real values</figcaption></figure></p><p>The error values for the MoM method are as follows:</p><ul>
<li>MAE =&gt; 1.4061101427930272</li>
<li>RMSE =&gt; 1.4600037510978092</li>
</ul>
<p>For the LoM method, the error values are as follows:</p><ul>
<li>MAE =&gt; 0.17602335727109497</li>
<li>RMSE =&gt; 0.28191388723186933</li>
</ul>
<p>And for the RoM method, the error values are as follows:</p><ul>
<li>MAE =&gt; 0.19051116696588882</li>
<li>RMSE =&gt; 0.28938617827136487</li>
</ul>
<p>As seen from the error values, while RoM, LoM, and MoM values experience significant deviations, a system with satisfactory prediction capability, generally over 90%, has been demonstrated with CoA and BoA methods.</p><h2 id="6-references" class="group relative items-center flex"><a href="#6-references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>6. References</h2><p>Hasan, M.F. and Sobhan, M.A. (2020) Describing Fuzzy Membership Function and Detecting the Outlier by Using Five Number Summary of Data. American Journal of Computational Mathematics, 10, 410-424. doi: 10.4236/ajcm.2020.103022.</p><p>Asanka, PPG &amp; Perera, Amal. (2017). DEFINING FUZZY MEMBERSHIP FUNCTION USING BOX PLOT. IJRCAR. 5. 1-10.</p><p>Cingolani, Pablo &amp; Alcala-Fdez, Jesus. (2012). JFuzzyLogic: A robust and flexible Fuzzy-Logic inference system language implementation. IEEE International Conference on Fuzzy Systems. 1-8. 10.1109/FUZZ-IEEE.2012.6251215.</p><h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SOURCES</h2><ul>
<li><a href="/assets/blog/excitation-current-of-a-synchronous-machine/original-document.pdf" target="_blank" rel="noopener">Original Document - in Turkish</a></li>
<li><a href="https://www.youtube.com/watch?v=EpyFnCMPoaM" target="_blank" rel="noopener">Explanation Video - in Turkish</a></li>
<li><a href="https://github.com/fatiiates/fuzzy" target="_blank" rel="noopener">GitHub Repository</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is translated from Turkish to English using ChatGPT. The original document is written by the in Turkish. The translation may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Fuzzy Logic"/>
        <category label="Predictive Modeling"/>
        <category label="Machine Learning"/>
        <category label="Mamdani FIS"/>
        <category label="Python"/>
        <category label="Bursa Technical University"/>
        <category label="2022"/>
        <published>2022-02-13T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Google Summer of Code '21 - Project Summary]]></title>
        <id>gsoc-21-cncf-cnb-jenkins-plugins-wrap-up</id>
        <link href="https://fatiiates.com/blog/post/gsoc-21-cncf-cnb-jenkins-plugins-wrap-up"/>
        <updated>2024-03-16T20:56:00.000Z</updated>
        <summary type="html"><![CDATA[The project provides a pipeline DSL plugin that allows users to use buildpacks while developing a pipeline script in Jenkins]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>ABSTRACT</h2><p>The project provides a pipeline DSL plugin that allows users to use buildpacks while developing a pipeline script in Jenkins.</p><h2 id="content" class="group relative items-center flex"><a href="#content" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>CONTENT</h2><ul>
<li><a href="#abstract" target="_blank" rel="noopener">ABSTRACT</a></li>
<li><a href="#content" target="_blank" rel="noopener">CONTENT</a></li>
<li><a href="#links" target="_blank" rel="noopener">LINKS</a></li>
<li><a href="#general-info" target="_blank" rel="noopener">GENERAL INFO</a></li>
<li><a href="#phases" target="_blank" rel="noopener">PHASES</a></li>
<li><a href="#what-did-i-do-" target="_blank" rel="noopener">WHAT DID I DO ?</a></li>
<li><a href="#how-it-was-done-" target="_blank" rel="noopener">HOW IT WAS DONE ?</a></li>
<li><a href="#future-works" target="_blank" rel="noopener">FUTURE WORKS</a></li>
<li><a href="#conclusion" target="_blank" rel="noopener">CONCLUSION</a></li>
</ul>
<h2 id="links" class="group relative items-center flex"><a href="#links" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>LINKS</h2><p><a href="https://docs.google.com/document/d/1TgUSIgDRFDt7bHzU37zPzfUYww0Ahrh_ndp_UubuV7w/edit?usp=sharing" target="_blank" rel="noopener">GSOC 2021 JENKINS PLUGINS PROPOSAL - FATIH ATES</a><br><a href="https://hackmd.io/NIfdbyRNRcGpBtaNjIyvrQ?view" target="_blank" rel="noopener">FULL DEFINED PIPELINE DSL</a><br><a href="https://github.com/jromero/buildpacks-jenkins-plugin/blob/main/README.md" target="_blank" rel="noopener">Buildpacks PLUGIN&#39;s README</a><br><a href="https://github.com/jromero/buildpacks-jenkins-plugin" target="_blank" rel="noopener">Jenkins Buildpacks Plugin Repository</a><br><a href="https://github.com/jromero/buildpacks-jenkins-plugin/releases/tag/v0.1.1" target="_blank" rel="noopener">Latest Version(v0.1.1)</a></p><h2 id="general-info" class="group relative items-center flex"><a href="#general-info" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>GENERAL INFO</h2><h3 id="mentor" class="group relative items-center flex"><a href="#mentor" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Mentor</h3><p>Full Name: Javier ROMERO<br>E-mail: <a href="mailto:root@jromero.codes" target="_blank" rel="noopener">root@jromero.codes</a><br>GitHub: <a href="https://github.com/jromero" target="_blank" rel="noopener">jromero</a><br>Web: <a href="https://why.jromero.codes/" target="_blank" rel="noopener">https://why.jromero.codes/</a></p><h3 id="student" class="group relative items-center flex"><a href="#student" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Student</h3><p>Full Name: Fatih ATES<br>E-mail: <a href="mailto:fatiiates@gmail.com" target="_blank" rel="noopener">fatiiates@gmail.com</a><br>GitHub: <a href="https://github.com/fatiiates" target="_blank" rel="noopener">fatiiates</a><br>Web: <a href="https://fatiiates.github.io/" target="_blank" rel="noopener">https://fatiiates.github.io/</a></p><h2 id="phases" class="group relative items-center flex"><a href="#phases" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>PHASES</h2><ol>
<li><p><strong>Phase</strong> A user is able to provide a Buildpacks specific DSL that specifies a builder, a path, and image name which results in an image created as &lt;image name&gt;.</p></li>
<li><p><strong>Phase</strong> A user should be able to fully use <a href="https://hackmd.io/NIfdbyRNRcGpBtaNjIyvrQ?view" target="_blank" rel="noopener">defined DSL</a> expressions.</p></li>
<li><p><strong>Phase</strong> What can be added in addition to DSL ? For example: colorful outputs, connected <a href="https://github.com/snowdrop/java-buildpack-client" target="_blank" rel="noopener">java-buildpack-client</a> outputs to plugin...</p></li>
<li><p><strong>Phase</strong> This phase, includes the integration of the constantly evolving Buildpacks features into the Jenkins Buildpacks plugin and making improvements and bug fixes on the plugin according to the constantly improving Jenkins system. This step never ends.</p></li>
</ol>
<h2 id="what-did-i-do-" class="group relative items-center flex"><a href="#what-did-i-do-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>WHAT DID I DO ?</h2><h3 id="my-repositories" class="group relative items-center flex"><a href="#my-repositories" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a><strong>My Repositories</strong></h3><h4 id="buildpacks-jenkins-plugin" class="group relative items-center flex"><a href="#buildpacks-jenkins-plugin" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a><strong>buildpacks-jenkins-plugin</strong></h4><p>I developed <a href="https://github.com/jromero/buildpacks-jenkins-plugin" target="_blank" rel="noopener">this</a> Jenkins plugin from scratch.</p><h3 id="other-repositories" class="group relative items-center flex"><a href="#other-repositories" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a><strong>Other Repositories</strong></h3><h4 id="java-buildpack-client" class="group relative items-center flex"><a href="#java-buildpack-client" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a><strong>java-buildpack-client</strong></h4><p><a href="https://github.com/snowdrop/java-buildpack-client" target="_blank" rel="noopener">The repository</a> is a java client for buildpacks developed by the snowdrop team.</p><p><strong>Issues:</strong></p><ol>
<li><a href="https://github.com/snowdrop/java-buildpack-client/issues/12" target="_blank" rel="noopener">https://github.com/snowdrop/java-buildpack-client/issues/12</a> (Closed)</li>
<li><a href="https://github.com/snowdrop/java-buildpack-client/issues/13" target="_blank" rel="noopener">https://github.com/snowdrop/java-buildpack-client/issues/13</a> (Closed)</li>
<li><a href="https://github.com/snowdrop/java-buildpack-client/issues/15" target="_blank" rel="noopener">https://github.com/snowdrop/java-buildpack-client/issues/15</a> (Open)</li>
</ol>
<p><strong>PR:</strong></p><ol>
<li><a href="https://github.com/snowdrop/java-buildpack-client/pull/14" target="_blank" rel="noopener">https://github.com/snowdrop/java-buildpack-client/pull/14</a> (Under review)</li>
</ol>
<h4 id="java-buildpack-client-clone-" class="group relative items-center flex"><a href="#java-buildpack-client-clone-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a><strong>java-buildpack-client(clone)</strong></h4><p><a href="https://github.com/jromero/java-buildpack-client" target="_blank" rel="noopener">This repository</a> is the same PR sent to the java-buildpack-client repository. It is a repository created to include in pom.xml as if from a maven repository. Development was made on this repository until the PR was accepted. How it is included from Jitpack.io can be seen in <a href="https://github.com/jromero/buildpacks-jenkins-plugin/blob/9fa65dc3560b4ebd98fda3ab778bf744d0405c71/pom.xml#L156" target="_blank" rel="noopener">this line</a>.</p><h2 id="how-it-was-done-" class="group relative items-center flex"><a href="#how-it-was-done-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>HOW IT WAS DONE ?</h2><h3 id="research-cloud-native-buildpacks" class="group relative items-center flex"><a href="#research-cloud-native-buildpacks" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Research Cloud Native Buildpacks</h3><p>First, I sought answers to questions such as what Buildpacks are and how
they work. Since I&#39;m using the Heroku platform, I had some ideas about Buildpacks. To correct my misunderstandings and learn more about the tool, I first watched the talks on their page (especially the &quot;Pack to the Future&quot; presentation was very good), then read the documentation from top to bottom.</p><h3 id="setup-jenkins-development-environment-and-test-docker-daemon-access" class="group relative items-center flex"><a href="#setup-jenkins-development-environment-and-test-docker-daemon-access" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Setup Jenkins development environment and test Docker daemon access</h3><p>After the research process was completed, we started the implementation. Jenkins, Docker, JDK 8 and Maven had to be installed on my computer in order to get into the implementation process. I used a machine with Ubuntu installed for development. I had Docker and JDK 8 on my machine as I used it before. Additionally I installed Jenkins and Maven. After installing the environment, I read the documents prepared about the Jenkins pipeline and got information about the pipelines. Then I moved on to the development step.</p><p>Being able to develop a plugin for Buildpacks was based on accessing the Docker socket. I tested that we can access the Docker socket by restricting the file permissions of the Docker socket, and when we restricted the permissions, we were getting an error, but if we gave 777, we could easily access it. Setting the permissions of the Docker socket file to 777 can compromise your system. So we solved this by including the Jenkins user in the Docker group. Then I gained some experience about Buildpacks, Docker, Jenkins pipelines by using sample applications.</p><h3 id="research-for-docker-daemon-integration-options-libraries-" class="group relative items-center flex"><a href="#research-for-docker-daemon-integration-options-libraries-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Research for Docker daemon integration options (libraries)</h3><p>We searched for references to be able to use docker with java codes in a Jenkins plugin. As a result of my research, we decided that people trying to directly access the docker socket are constantly having problems, and we described it as a worst case. Then we found the docker-workflow and docker-build-step plugins. We decided to use the docker-build-step plugin and then we completed the library search.</p><h3 id="define-a-dsl-for-the-plugin" class="group relative items-center flex"><a href="#define-a-dsl-for-the-plugin" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Define a DSL for the plugin</h3><p>We would either start development directly or proceed by planning. We preferred to go with a plan and first of all we designed DSL. We created a DSL based on pack-cli&#39;s features and Buildpacks docs. We now had a fully defined DSL. However, it would be pointless to try to realize all these features in one, so we divided the DSL into phases.</p><h3 id="implement-dsl-and-test-integration" class="group relative items-center flex"><a href="#implement-dsl-and-test-integration" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Implement DSL and test integration</h3><p>They have prepared a nice guide for developing a plugin. However, this only allows you to create a startup application. Basically two files are needed to define a DSL expression. The first is a Groovy script named provider(Buildpacks) and a Java class as providernameDSL(BuildpacksDSL). Groovy and Java compatibility allow us to pass any data in the pipeline to the Java class. I tested that we could get the parameters by printing the parameters to the console.</p><p>After passing the values ​​to Java, we started working with containers. I tried to implement the system using the docker-build-step plugin that we found before. But no matter how hard I tried, I couldn&#39;t do it. I tried to implement it by doing research and development for a long time, but I could not succeed. We asked questions in the forums, tried to get support from developer groups. We even tried to reach the providers of some plugins. Then, one day, we got an e-mail that the mailing list java-buildpack-client was ready. I tested the demo application directly. It totally works. But before creating a dependency in this way, I did some research on docker-build-step for the last time. As a result of my research, I found that this plugin is more suitable for a step rather than a DSL pipeline. Since we couldn&#39;t see a sample plugin around using this plugin, we decided to eliminate this method.</p><h3 id="work-with-snowdrop-community-to-make-snowdrop-java-buildpack-client-compatible-with-jenkins" class="group relative items-center flex"><a href="#work-with-snowdrop-community-to-make-snowdrop-java-buildpack-client-compatible-with-jenkins" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Work with snowdrop community to make snowdrop/java-buildpack-client compatible with Jenkins</h3><p>We chose to use java-buildpack-client but this required us to act with the Snowdrop community. Jenkins plugins were working with Java 8 while Java-buildpack-client was running with Java 11. This was preventing us from compiling the project. I have created an issue about whether the system can be adapted to Java 8. But they said they were busy and I would save time if I tried it myself, so I did. I struggled to get java-buildpack-client to be implemented in java 8. I was able to apply it to java 8 with a small change. Then I sent it to the repository as a PR.</p><p>However, there was still a problem. Logs are only printed to console and Jenkins was not able to capture them. I contacted the Snowdrop community again by opening an issue. After doing some research, I saw that they defined a logger and we implemented this logger in a class and transferred the logs to Jenkins.</p><p>Another problem was that including java-buildpack-client from a local maven repository was counterproductive. I sent them a new message asking when they could review the PR. Unfortunately they won&#39;t be able to review it anytime soon. We opened a new repository and transferred the client here and started to include it from the remote server with Jitpack.io.</p><h3 id="integrate-snowdrop-java-buildpack-client-with-our-jenkins-plugin" class="group relative items-center flex"><a href="#integrate-snowdrop-java-buildpack-client-with-our-jenkins-plugin" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Integrate snowdrop/java-buildpack-client with our Jenkins plugin</h3><p>The java-buildpack-client was really well designed. The comments of the codes, the readme file, everything that can happen in a code were obvious. Now what I was going to do was pass the DSL variables as a parameter to the java-buildpack-client. Afterwards, we confirmed that the system is working in the development environment and we compiled an hpi file and tested it on the local Jenkins server. In this way, we ensured that the plugin was integrated into Jenkins, and then I prepared a comprehensive Readme.md file.</p><h3 id="add-support-for-environment-variables" class="group relative items-center flex"><a href="#add-support-for-environment-variables" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Add support for environment variables</h3><p>After we got a working plugin, we started adding new features. Undoubtedly, one of the most important features is environment variables. So we added this as the first feature.</p><p>This feature can be defined with two different parameters. env and envFile. The env parameter takes a string or a string expression and contains string data in the format &quot;env1=test&quot;. envFile file takes a relative path according to github repository. The envFile file parameter gets a file path relative to the github repository containing the env variables. Env variables are supposed to strictly conform to the format. So I wrote a function to parse those that fit a format and those that don&#39;t. A dependency could have been added instead, but it&#39;s a simple thing anyway. If there was no problem with the values, it would take all the values ​​to the local variable and then transfer them to the /platform/env directory in the container with the provide of java-buildpack-client. This is the process required for envs to be used during build.</p><p>After this feature was added, it was made available in v0.1.1</p><hr>
<p>I would like to thank my mentor <strong><a href="https://github.com/jromero" target="_blank" rel="noopener">@jromero(my mentor)</a></strong> for his endless patience and helpfulness.<br>I would also like to thank <strong><a href="https://github.com/cmoulliard" target="_blank" rel="noopener">@cmoulliard</a></strong>, <strong><a href="https://github.com/BarDweller" target="_blank" rel="noopener">@BarDweller</a></strong>, and <strong><a href="https://github.com/aemengo" target="_blank" rel="noopener">@aemengo</a></strong> for their help.<br>Thank you Google.</p><p>Buildpack Jenkins Plugin made with ❤️</p><h2 id="future-works" class="group relative items-center flex"><a href="#future-works" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>FUTURE WORKS</h2><p><a href="#phases" target="_blank" rel="noopener">Phase-1</a> already completed <a href="https://github.com/jromero/buildpacks-jenkins-plugin/releases/tag/v0.1.0" target="_blank" rel="noopener">here</a>.</p><p>So, the next step is to transfer the features in pack-cli to the jenkins plugin, that is, to complete <a href="#phases" target="_blank" rel="noopener">Phase-2</a>. Some progress has been made in this phase, and the latest version can be found <a href="https://github.com/jromero/buildpacks-jenkins-plugin/releases/tag/v0.1.1" target="_blank" rel="noopener">here</a>.</p><p>After <a href="#phases" target="_blank" rel="noopener">Phase-2</a> is completed, the process now comes to <a href="#phases" target="_blank" rel="noopener">Phase-3</a>. <a href="#phases" target="_blank" rel="noopener">Phase-3</a>, again, includes adding some features to the DSL from pack-cli, giving colored outputs in console outputs, connecting the logs of java-buildpack-client to jenkins and discussing what can be added.</p><p>When it comes to the last phase, named by <a href="#phases" target="_blank" rel="noopener">Phase-4</a>, the plug-in is operational with all DSL features. Only the routine checks of the plugin, the newly added features to the buildpacks system are also included in the plugin, and the innovations/requirements brought to the plugins by Jenkins are applied to the plugin. This step will continue as long as the ecosystem lives...</p><h2 id="conclusion" class="group relative items-center flex"><a href="#conclusion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>CONCLUSION</h2><p>Terminal commands were already available in Jenkins. So this allowed you to use the pack command. However, when you want to write a pipeline script, it didn&#39;t give a chance to have a system that works compatible with jenkins. In addition, it was a non-recommended use.</p><p>Jenkins pipeline DSL Buildpacks plugin allows you to use buildpacks compatible with Jenkins. The base system(<a href="#phases" target="_blank" rel="noopener">Phase-1</a>) is currently available. What needs to be done is to fix the bugs and add new features.</p><h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SOURCES</h2><ul>
<li><a href="https://gist.github.com/fatiiates/20d6dc3c98add0e8e0428496cef00663" target="_blank" rel="noopener">Original document on GitHub Gist</a></li>
</ul>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Google Summer of Code"/>
        <category label="CNCF"/>
        <category label="Jenkins"/>
        <category label="Buildpacks"/>
        <category label="Java"/>
        <category label="Docker"/>
        <category label="2021"/>
        <published>2021-08-23T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Kubernetes in a Nutshell]]></title>
        <id>kubernetes-in-a-nutshell</id>
        <link href="https://fatiiates.com/blog/post/kubernetes-in-a-nutshell"/>
        <updated>2024-03-24T20:56:00.000Z</updated>
        <summary type="html"><![CDATA[This guide covers publishing a Docker image on Kubernetes with Azure. It includes scaling options and uses a Java Spring Boot application from Buildpacks. Instructions are provided for configuring and installing command-line tools.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="summary" class="group relative items-center flex"><a href="#summary" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SUMMARY</h2><p>In this content, the basic steps of how to publish a Docker image on Kubernetes, which has been open-sourced by Google, are explained. Brief information about how this image published using Kubernetes can be scaled is also provided. A Java Spring Boot application, which has a static page, is selected from the Buildpacks community on GitHub as an example used. This Spring Boot application with a static page is created to run on port 8080 inside a container. Information is provided on how to configure your own computer and install command-line tools during the time until the application is published on Kubernetes. The operations performed during publication are carried out on the Ubuntu 20.04 LTS distribution.</p><h2 id="1-general-information" class="group relative items-center flex"><a href="#1-general-information" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. GENERAL INFORMATION</h2><h3 id="1-1-introduction" class="group relative items-center flex"><a href="#1-1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1.1. Introduction</h3><p>Today, solving a problem with the microservices approach instead of developing applications in a monolithic way is considered a more acceptable solution. Google employees, influenced by the Borg system developed for the company, developed the Kubernetes tool as open-source software to address clustering problems that emerged with applications developed with the microservices approach. It is recommended to be familiar with the concepts of the Linux operating system and to have knowledge about containerized systems to understand what is described in this content. To grasp the working principle of Kubernetes, which is independent of the clustering logic of developed applications, it is explained to the reader.</p><h2 id="2-technologies" class="group relative items-center flex"><a href="#2-technologies" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. TECHNOLOGIES</h2><h3 id="2-1-virtualization" class="group relative items-center flex"><a href="#2-1-virtualization" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.1. Virtualization</h3><p>It is the process of abstracting computer resources from the user. This process enables the merging or sharing of computer resources. There are several types of virtualization. Container technologies also work with virtualization logic.</p><h3 id="2-2-docker" class="group relative items-center flex"><a href="#2-2-docker" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.2. Docker</h3><p>It is computer software that enables virtualization at the operating system level. It allows running software images called containers. There are other alternatives as well (CRI-O, rkt, containerd, etc.). It is preferred as a new virtualization technology because it is much lighter than virtual machines that were used for virtualization purposes in the past.</p><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-2.1.png" alt="Figure 2.1"><figcaption class="text-center">Figure 2.1 Virtual Machines and Containers</figcaption></figure></p><h3 id="2-3-kubernetes" class="group relative items-center flex"><a href="#2-3-kubernetes" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3. Kubernetes</h3><p>Kubernetes is a tool that scales, manages, and automatically deploys containerized applications. The word Kubernetes comes from the Greek language and means helmsman or ship pilot. Kubernetes, widely known as &quot;k8s (pronounced as Keyts),&quot; is also known as &quot;k8s (pronounced as Keyts)&quot; for common usage. The reason for this is that there are eight characters between the &quot;K&quot; at the beginning and the &quot;s&quot; at the end. Kubernetes was largely developed by being influenced by the Google Borg system. It is being developed as an open-source container orchestration tool in Go language and is released under the Apache License version 2. Currently, almost all cloud computing service providers under CNCF support Kubernetes.</p><h3 id="2-3-1-why-kubernetes-" class="group relative items-center flex"><a href="#2-3-1-why-kubernetes-" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.1. Why Kubernetes?</h3><p>With the transition from virtual machines to container technology in virtualization, a great revolution has taken place. However, something was missing in this revolution. Containers may stop working, the system may be inadequate, containers communicating with each other may encounter various problems. Container orchestration systems were developed to solve all these problems. Docker Swarm, Kubernetes, Apache Mesos, Amazon ECS... However, Kubernetes, which is almost supported by every cloud service provider, became the only orchestration system supported. With its transfer to CNCF, a sub-organization of The Linux Foundation, it gained more trust in the eyes of service providers. The biggest factor in its preference can be seen as the support of many cloud service providers behind it.</p><h3 id="2-3-2-kubernetes-objects" class="group relative items-center flex"><a href="#2-3-2-kubernetes-objects" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2. Kubernetes Objects</h3><h4 id="2-3-2-1-node" class="group relative items-center flex"><a href="#2-3-2-1-node" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.1. Node</h4><p>They are virtual or physical machines on which Pods run.</p><h4 id="2-3-2-2-cluster" class="group relative items-center flex"><a href="#2-3-2-2-cluster" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.2. Cluster</h4><p>It refers to all nodes managed by Kubernetes. A cluster must have at least one worker node and one master node.</p><h4 id="2-3-2-3-namespace" class="group relative items-center flex"><a href="#2-3-2-3-namespace" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.3. Namespace</h4><p>Kubernetes allows running multiple virtual clusters under a real cluster. Each virtual cluster is called a namespace.</p><h4 id="2-3-2-4-pod" class="group relative items-center flex"><a href="#2-3-2-4-pod" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.4. Pod</h4><p>The pod means &quot;whale herd&quot; literally. It is the smallest deployment unit in Kubernetes. A pod can host multiple containers. In addition, each pod in the local network created by Kubernetes has a unique IP address.</p><h4 id="2-3-2-5-service" class="group relative items-center flex"><a href="#2-3-2-5-service" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.5. Service</h4><p>It works like a layer of multi-layered applications. Services logically group pods and provide them as services to the outside world.</p><h4 id="2-3-2-6-daemonset" class="group relative items-center flex"><a href="#2-3-2-6-daemonset" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.6. DaemonSet</h4><p>It ensures that a pod is run on each node.</p><h4 id="2-3-2-7-replicaset" class="group relative items-center flex"><a href="#2-3-2-7-replicaset" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.7. ReplicaSet</h4><p>ReplicaSet ensures that the number of replicas defined when horizontal scaling is desired is kept constant.</p><h4 id="2-3-2-8-deployment" class="group relative items-center flex"><a href="#2-3-2-8-deployment" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.8. Deployment</h4><p>It is used to deploy and update the application. It uses ReplicaSet in the background.</p><h4 id="2-3-2-9-persistent-volume" class="group relative items-center flex"><a href="#2-3-2-9-persistent-volume" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.2.9. Persistent Volume</h4><p>It is the object we communicate with the cluster to store data permanently. It cannot be managed on the cluster side.</p><h3 id="2-3-3-node-components" class="group relative items-center flex"><a href="#2-3-3-node-components" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.3. Node Components</h3><h4 id="2-3-3-1-container-runtime" class="group relative items-center flex"><a href="#2-3-3-1-container-runtime" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.3.1. Container Runtime</h4><p>A container runtime software must be available on the node to run containers in pods.</p><h4 id="2-3-3-2-kubelet" class="group relative items-center flex"><a href="#2-3-3-2-kubelet" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.3.2. kubelet</h4><p>It runs on each node and monitors node statuses. It shares the information it obtains with master node(s).</p><h4 id="2-3-3-3-kube-proxy" class="group relative items-center flex"><a href="#2-3-3-3-kube-proxy" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.3.3. kube-proxy</h4><p>It creates the Kubernetes network. It assigns IP addresses to pods. It provides load balancing capability to all pods published under a service.</p><h3 id="2-3-4-master-node-components" class="group relative items-center flex"><a href="#2-3-4-master-node-components" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.4. Master Node Components</h3><h4 id="2-3-4-1-etcd" class="group relative items-center flex"><a href="#2-3-4-1-etcd" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.4.1. etcd</h4><p>It is a depot where all settings and statuses maintained on Kubernetes are kept using the key-value logic. When the value of a configuration or state changes, the old value is not deleted, the new value is added to the depot additionally.</p><h4 id="2-3-4-2-kube-scheduler" class="group relative items-center flex"><a href="#2-3-4-2-kube-scheduler" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.4.2. kube-scheduler</h4><p>It determines on which nodes the created pods will be kept. It provides resources to workload requests.</p><h4 id="2-3-4-3-kube-apiserver" class="group relative items-center flex"><a href="#2-3-4-3-kube-apiserver" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.4.3. kube-apiserver</h4><p>It provides the configuration of objects such as pods, services. It is a RESTful API service. It routes incoming requests and performs operations.</p><h4 id="2-3-4-4-kube-controller-manager" class="group relative items-center flex"><a href="#2-3-4-4-kube-controller-manager" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.3.4.4. kube-controller-manager</h4><p>It manages the controller objects within Kubernetes. The controller is an object that examines a state through the apiserver and ensures that it is maintained at the desired level.</p><h2 id="3-application" class="group relative items-center flex"><a href="#3-application" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. APPLICATION</h2><p>The application was implemented on the Microsoft Azure Cloud Computing Service. To perform the application, you need to have the following two command-line tools on your machine:</p><ol>
<li>docker-cli (Docker Command Line Interface)</li>
<li>git-cli (Git Command Line Interface)</li>
<li>pack-cli (Buildpacks Command Line Interface)</li>
<li>kubectl (Kubernetes Command Line Tool)</li>
<li>azure-cli (Microsoft Azure Command Line Interface)</li>
</ol>
<p>Applications on Kubernetes are published as container images within Pods. If you already have a container image ready, you can skip the first step. In the context of the application, an example Java Spring Boot application will be turned into a Docker image and published on Kubernetes on port 80.</p><h3 id="3-1-installations" class="group relative items-center flex"><a href="#3-1-installations" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1. Installations</h3><h4 id="3-1-1-docker-cli" class="group relative items-center flex"><a href="#3-1-1-docker-cli" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1.1. docker-cli</h4><p>Docker-cli is an interface that comes automatically when you install the Docker engine. Therefore, you need to install the Docker system completely on your computer.</p><p>First, remove old versions with the following command:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get remove docker docker-engine docker.io containerd runc</code></pre></div>
                                  </figure><p>Then, install the necessary packages to be able to install from the repository:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg \
    lsb-release</code></pre></div>
                                  </figure><p>Download Docker&#39;s GPG key to your computer:</p><figure>
                                    <div><pre><code class="language-bash">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg</code></pre></div>
                                  </figure><p>Add Docker&#39;s repository service to your repository pool:</p><figure>
                                    <div><pre><code class="language-bash"><span class="hljs-built_in">echo</span> \
  <span class="hljs-string">&quot;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
  <span class="hljs-subst">$(lsb_release -cs)</span> stable&quot;</span> | sudo <span class="hljs-built_in">tee</span> /etc/apt/sources.list.d/docker.list &gt; /dev/null</code></pre></div>
                                  </figure><p>Finally, perform the installation:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io</code></pre></div>
                                  </figure><p>You can check if the installation was successful with the following command:</p><figure>
                                    <div><pre><code class="language-bash">sudo docker run hello-world</code></pre></div>
                                  </figure><h4 id="3-1-2-git-cli" class="group relative items-center flex"><a href="#3-1-2-git-cli" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1.2. git-cli</h4><p>You can download the Git command line interface directly to your computer using the following command:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt install git</code></pre></div>
                                  </figure><p>You can check if the installation was successful with the following command:</p><figure>
                                    <div><pre><code class="language-bash">git --version</code></pre></div>
                                  </figure><h4 id="3-1-3-pack-cli" class="group relative items-center flex"><a href="#3-1-3-pack-cli" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1.3. pack-cli</h4><p>pack-cli is an interface provided by Buildpacks for easier use of packages.</p><p>First, add the pack-cli repository service to your repository pool using the following command:</p><figure>
                                    <div><pre><code class="language-bash">sudo add-apt-repository ppa:cncf-buildpacks/pack-cli</code></pre></div>
                                  </figure><p>Then you can perform the installation using the following commands:</p><figure>
                                    <div><pre><code class="language-bash">sudo apt-get update
sudo apt-get install pack-cli</code></pre></div>
                                  </figure><p>You can see if the installation was successful with the following command:</p><figure>
                                    <div><pre><code class="language-bash">pack --version</code></pre></div>
                                  </figure><h4 id="3-1-4-kubectl" class="group relative items-center flex"><a href="#3-1-4-kubectl" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1.4. kubectl</h4><p>kubectl is a command-line tool developed to manage your Kubernetes configurations.</p><p>First, download the latest version:</p><figure>
                                    <div><pre><code class="language-bash">curl -LO <span class="hljs-string">&quot;https://dl.k8s.io/release/<span class="hljs-subst">$(curl -L -s https://dl.k8s.io/release/stable.txt)</span>/bin/linux/amd64/kubectl&quot;</span></code></pre></div>
                                  </figure><p>Download the checksum file to your computer and perform a comparison:</p><figure>
                                    <div><pre><code class="language-bash">curl -LO <span class="hljs-string">&quot;https://dl.k8s.io/<span class="hljs-subst">$(curl -L -s https://dl.k8s.io/release/stable.txt)</span>/bin/linux/amd64/kubectl.sha256&quot;</span>
<span class="hljs-built_in">echo</span> <span class="hljs-string">&quot;<span class="hljs-subst">$(&lt;kubectl.sha256)</span> kubectl&quot;</span> | <span class="hljs-built_in">sha256sum</span> --check</code></pre></div>
                                  </figure><p>If the comparison is successful, you can install the kubectl tool on your computer with the following step:</p><figure>
                                    <div><pre><code class="language-bash">sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl</code></pre></div>
                                  </figure><p>You can check if the installation was successful with the following command:</p><figure>
                                    <div><pre><code class="language-bash">kubectl version --client</code></pre></div>
                                  </figure><h4 id="3-1-5-azure-cli" class="group relative items-center flex"><a href="#3-1-5-azure-cli" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.1.5. azure-cli</h4><p>azure-cli is a command-line interface developed to manage Azure Cloud Computing Services.</p><p>You can perform the installation with a single command using the following script:</p><figure>
                                    <div><pre><code class="language-bash">curl -L https://aka.ms/InstallAzureCli | bash</code></pre></div>
                                  </figure><p>You can check if the installation was successful with the following command:</p><figure>
                                    <div><pre><code class="language-bash">az -v</code></pre></div>
                                  </figure><h3 id="3-2-creating-a-docker-image" class="group relative items-center flex"><a href="#3-2-creating-a-docker-image" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.2. Creating a Docker Image</h3><p>You can clone the sample application from the CNCF Buildpacks GitHub account using Git with the following command:</p><figure>
                                    <div><pre><code class="language-bash">git <span class="hljs-built_in">clone</span> https://github.com/buildpacks/samples ornekler</code></pre></div>
                                  </figure><p>Then, navigate into the examples directory and use the buildpacks-cli to create a Docker image:</p><figure>
                                    <div><pre><code class="language-bash"><span class="hljs-built_in">cd</span> ornekler
pack build -p apps/java-maven --builder cnbs/sample-builder:alpine spring-kube-ornek</code></pre></div>
                                  </figure><p>If your image is created successfully, you will receive the following message.</p><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.1.png" alt="Figure 3.1"><figcaption class="text-center">Figure 3.1 Docker Image Creation</figcaption></figure></p><p>You can use the following command to check your images:</p><figure>
                                    <div><pre><code class="language-bash">docker images</code></pre></div>
                                  </figure><p>If you see your spring-kube-ornek image among your images as shown in the picture, your image has been successfully created.</p><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.2.png" alt="Figure 3.2"><figcaption class="text-center">Figure 3.2 Docker Images</figcaption></figure></p><p>To upload your created image to your own docker account, you can use the following command:</p><figure>
                                    <div><pre><code class="language-bash">docker tag spring-kube-ornek:latest &lt;user_id&gt;/&lt;image_name&gt;:&lt;tag&gt;
docker push &lt;user_id&gt;/&lt;image_name&gt;:&lt;tag&gt;</code></pre></div>
                                  </figure><p>We will use the docker registration system when providing the image on Kubernetes. Optionally, different registration systems can be used, but you may prefer to use the docker registration system for universality. Uploading your image to a remote server can take a long time. Therefore, you can use the image I offer publicly below.</p><p>İmaj: fatiiates/seminer-test:test</p><h3 id="3-3-microsoft-azure" class="group relative items-center flex"><a href="#3-3-microsoft-azure" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.3. Microsoft Azure</h3><p>To log in to your Azure account via the command line, you can use the following command.</p><figure>
                                    <div><pre><code class="language-bash">az login</code></pre></div>
                                  </figure><p>After entering the command, you can log in to Azure through your default web browser.</p><p>After logging into your account, customize the following command to create a new cluster.</p><figure>
                                    <div><pre><code class="language-bash">az aks create --resource-group &lt;group_name&gt; --name &lt;cluster_name&gt; --node-count &lt;node_count&gt; --generate-ssh-keys</code></pre></div>
                                  </figure><p>If the cluster is successfully created, it will return data in JSON format as output.</p><p>Then, use the following command to configure the kubectl tool installed on your local machine with Azure.</p><figure>
                                    <div><pre><code class="language-bash">az aks get-credentials --resource-group &lt;group_name&gt; --name &lt;cluster_name&gt;</code></pre></div>
                                  </figure><p>If configured successfully, along with the following command, you will be able to list the nodes you have.</p><figure>
                                    <div><pre><code class="language-bash">kubectl get nodes</code></pre></div>
                                  </figure><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.3.png" alt="Figure 3.3"><figcaption class="text-center">Figure 3.3 Kubernetes Nodes</figcaption></figure></p><h3 id="3-4-deploying-applications-with-kubernetes" class="group relative items-center flex"><a href="#3-4-deploying-applications-with-kubernetes" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3.4. Deploying Applications with Kubernetes</h3><p>The easiest way to deploy an application with Kubernetes is to create a deployment as described above. Since the application we will deploy contains only a static web page, we can deploy it very easily.</p><p>First, let&#39;s create a deployment that allows us to publish our image with the kubectl tool. You can use the docker.io/fatiiates/seminar-test:test value for the image path.</p><figure>
                                    <div><pre><code class="language-bash">kubectl create deployment &lt;deplyoment_name&gt; --image=&lt;docker_registration_image_path&gt;</code></pre></div>
                                  </figure><p>The above command will create a pod for us and run the docker image we provided as a parameter inside it. Therefore, you should be able to see your pods with the following command.</p><figure>
                                    <div><pre><code class="language-bash">kubectl get pods</code></pre></div>
                                  </figure><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.4.png" alt="Figure 3.4"><figcaption class="text-center">Figure 3.4 Kubernetes Pods</figcaption></figure></p><p>Note: It may take 20-30 seconds to switch to Running status.</p><p>You can see the deployment component you created with the following command.</p><figure>
                                    <div><pre><code class="language-bash">kubectl get deployments</code></pre></div>
                                  </figure><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.5.png" alt="Figure 3.5"><figcaption class="text-center">Figure 3.5 Kubernetes Deployments</figcaption></figure></p><p>As seen, we have an image running on the node right now. You can now make this image publicly available through a service.</p><p>With the following command, you can create a load balancer service, allowing our image running on port 8080 to be exposed to the outside world on port 80.</p><figure>
                                    <div><pre><code class="language-bash">kubectl create service loadbalancer seminer-lb --tcp=80:8080</code></pre></div>
                                  </figure><p>After receiving the message &quot;service successfully created&quot;, shortly after, the service will be exposed via a static IP (EXTERNAL IP). You can obtain the externally open IP address with the following command.</p><figure>
                                    <div><pre><code class="language-bash">kubectl get services</code></pre></div>
                                  </figure><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.6.png" alt="Figure 3.6"><figcaption class="text-center">Figure 3.6 Kubernetes Services</figcaption></figure></p><p>When you enter the IP address obtained above into your web browser, the static page will now be displayed.</p><p><figure><img src="/assets/blog/kubernetes-in-a-nutshell/figure-3.7.png" alt="Figure 3.7"><figcaption class="text-center">Figure 3.7 Static Page</figcaption></figure></p><p>Finally, let&#39;s see how easy it is to scale your application when needed.</p><figure>
                                    <div><pre><code class="language-bash">kubectl scale deployment &lt;deployment_name&gt; --replicas=&lt;replica_count&gt;</code></pre></div>
                                  </figure><p>When you see the message &quot;deployment scaled&quot;, your application is in a scaled state. The scaling operation was completed within seconds, but make sure you have made a healthy cost calculation while performing this operation.</p><h2 id="4-results" class="group relative items-center flex"><a href="#4-results" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4. RESULTS</h2><p>Thanks to Kubernetes, we have published the container image we created earlier in a cloud service provider within minutes. Kubernetes has provided a permanent solution to problems such as the collapse of applications under heavy load that have been going on for years. Nowadays, Kubernetes has become a powerful tool behind many companies, firms, funds, banks, etc. With its open-source nature and the ability for teams using it to customize it according to their needs, it has become an indispensable orchestration tool.</p><h2 id="5-discussion" class="group relative items-center flex"><a href="#5-discussion" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>5. DISCUSSION</h2><ul>
<li>Orchestration systems should be preferred in systems where the number of containers is high and scalability is important. For example, in areas where scalability is critical, such as web applications of E-Commerce stores, ÖSYM web applications, etc., orchestration systems should be preferred.</li>
<li>Although the system that emerges is highly scalable and reliable, it puts forward a system that can easily exceed the payment for a host in a very short time from an economic point of view. Although Kubernetes is an advanced orchestration system, it will not be an ideal choice for small-scale web applications.</li>
</ul>
<h2 id="6-resources" class="group relative items-center flex"><a href="#6-resources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>6. RESOURCES</h2><ul>
<li><a href="https://medium.com/devopsturkiye/openshift-nedir-188aa22934a3" target="_blank" rel="noopener">https://medium.com/devopsturkiye/openshift-nedir-188aa22934a3</a></li>
<li><a href="https://kubernetes.io/" target="_blank" rel="noopener">https://kubernetes.io/</a></li>
<li><a href="https://docs.docker.com/engine/install/ubuntu/" target="_blank" rel="noopener">https://docs.docker.com/engine/install/ubuntu/</a></li>
<li><a href="https://git-scm.com/downloads" target="_blank" rel="noopener">https://git-scm.com/downloads</a></li>
<li><a href="https://buildpacks.io/docs/tools/pack/" target="_blank" rel="noopener">https://buildpacks.io/docs/tools/pack/</a></li>
<li><a href="https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/" target="_blank" rel="noopener">https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/</a></li>
<li><a href="https://docs.microsoft.com/tr-tr/cli/azure/install-azure-cli" target="_blank" rel="noopener">https://docs.microsoft.com/tr-tr/cli/azure/install-azure-cli</a></li>
<li><a href="https://kubernetes.io/docs/home/" target="_blank" rel="noopener">https://kubernetes.io/docs/home/</a></li>
<li><a href="https://docs.docker.com/" target="_blank" rel="noopener">https://docs.docker.com/</a></li>
<li><a href="https://github.com/buildpacks/samples/tree/main/apps" target="_blank" rel="noopener">https://github.com/buildpacks/samples/tree/main/apps</a></li>
<li><a href="https://azure.microsoft.com/en-us/" target="_blank" rel="noopener">https://azure.microsoft.com/en-us/</a></li>
<li><a href="https://www.cncf.io/" target="_blank" rel="noopener">https://www.cncf.io/</a></li>
<li><a href="https://buildpacks.io/docs/" target="_blank" rel="noopener">https://buildpacks.io/docs/</a></li>
<li><a href="https://discuss.kubernetes.io/t/kubernetes-slide-deck-template-revealed/2563" target="_blank" rel="noopener">https://discuss.kubernetes.io/t/kubernetes-slide-deck-template-revealed/2563</a></li>
<li><a href="https://learning.edx.org/course/course-v1:LinuxFoundationX+LFS158x+3T2020/home" target="_blank" rel="noopener">https://learning.edx.org/course/course-v1:LinuxFoundationX+LFS158x+3T2020/home</a></li>
<li><a href="https://discuss.kubernetes.io/t/kubernetes-slide-deck-template-revealed/2563" target="_blank" rel="noopener">https://discuss.kubernetes.io/t/kubernetes-slide-deck-template-revealed/2563</a></li>
<li><a href="https://kubernetes.io/docs/reference/kubectl/cheatsheet/" target="_blank" rel="noopener">https://kubernetes.io/docs/reference/kubectl/cheatsheet/</a></li>
<li><a href="https://www.youtube.com/watch?v=fvVNWgD8HSg" target="_blank" rel="noopener">https://www.youtube.com/watch?v=fvVNWgD8HSg</a></li>
<li><a href="https://github.com/cncf/presentations/tree/master/kubernetes" target="_blank" rel="noopener">https://github.com/cncf/presentations/tree/master/kubernetes</a></li>
<li><a href="http://slides.eightypercent.net/kubernetes-101/#13" target="_blank" rel="noopener">http://slides.eightypercent.net/kubernetes-101/#13</a></li>
<li><a href="https://kubernetes.io/case-studies/appdirect/" target="_blank" rel="noopener">https://kubernetes.io/case-studies/appdirect/</a></li>
<li><a href="https://www.youtube.com/watch?v=rpB7KygMaVo" target="_blank" rel="noopener">https://www.youtube.com/watch?v=rpB7KygMaVo</a></li>
<li><a href="https://azure.microsoft.com/tr-tr/topic/what-is-kubernetes/#features" target="_blank" rel="noopener">https://azure.microsoft.com/tr-tr/topic/what-is-kubernetes/#features</a></li>
<li><a href="https://medium.com/devopsturkiye/kubernetes-nedir-f4a6f326d036" target="_blank" rel="noopener">https://medium.com/devopsturkiye/kubernetes-nedir-f4a6f326d036</a></li>
<li><a href="https://medium.com/devopsturkiye/kubernetes-nedir-eb5c5d149e69" target="_blank" rel="noopener">https://medium.com/devopsturkiye/kubernetes-nedir-eb5c5d149e69</a></li>
<li><a href="https://www.manning.com/books/kubernetes-in-action" target="_blank" rel="noopener">https://www.manning.com/books/kubernetes-in-action</a></li>
<li><a href="https://kubernetes.io/docs/tutorials/kubernetes-basics/" target="_blank" rel="noopener">https://kubernetes.io/docs/tutorials/kubernetes-basics/</a></li>
<li><a href="https://www.redhat.com/en/topics/containers/what-is-kubernetes" target="_blank" rel="noopener">https://www.redhat.com/en/topics/containers/what-is-kubernetes</a></li>
<li><a href="https://enterprisersproject.com/article/2017/10/how-explain-kubernetes-plain-english" target="_blank" rel="noopener">https://enterprisersproject.com/article/2017/10/how-explain-kubernetes-plain-english</a></li>
<li><a href="https://en.wikipedia.org/wiki/Kubernetes" target="_blank" rel="noopener">https://en.wikipedia.org/wiki/Kubernetes</a></li>
<li><a href="https://medium.com/codable/kubernetes-d090867428ca" target="_blank" rel="noopener">https://medium.com/codable/kubernetes-d090867428ca</a></li>
<li><a href="https://www.okd.io/" target="_blank" rel="noopener">https://www.okd.io/</a></li>
<li><a href="https://www.youtube.com/watch?v=r6RvlMfH-KU" target="_blank" rel="noopener">https://www.youtube.com/watch?v=r6RvlMfH-KU</a></li>
<li><a href="https://www.youtube.com/watch?v=x6jje4w3ZEs" target="_blank" rel="noopener">https://www.youtube.com/watch?v=x6jje4w3ZEs</a></li>
<li><a href="https://kubernetes.io/docs/tasks/configure-pod-container/" target="_blank" rel="noopener">https://kubernetes.io/docs/tasks/configure-pod-container/</a></li>
<li><a href="https://docs.microsoft.com/en-us/azure/aks/concepts-clusters-workloads" target="_blank" rel="noopener">https://docs.microsoft.com/en-us/azure/aks/concepts-clusters-workloads</a></li>
<li><a href="https://codelabs.developers.google.com/codelabs/cloud-springboot-kubernetes#1" target="_blank" rel="noopener">https://codelabs.developers.google.com/codelabs/cloud-springboot-kubernetes#1</a></li>
<li><a href="https://docs.microsoft.com/tr-tr/azure/aks/kubernetes-walkthrough" target="_blank" rel="noopener">https://docs.microsoft.com/tr-tr/azure/aks/kubernetes-walkthrough</a></li>
</ul>
<h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Sources</h2><ul>
<li><a href="/assets/blog/kubernetes-in-a-nutshell/original-document.pdf" target="_blank" rel="noopener">Original Document - in Turkish</a></li>
<li><a href="https://github.com/fatiiates/MPI-words" target="_blank" rel="noopener">GitHub Repository</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is translated from Turkish to English using ChatGPT. The original document is written by the in Turkish. The translation may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Kubernetes"/>
        <category label="Cloud"/>
        <category label="Docker"/>
        <category label="Containerization"/>
        <category label="Azure"/>
        <category label="Bursa Technical University"/>
        <category label="2021"/>
        <published>2021-08-23T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Google Summer of Code '21 - Proposal]]></title>
        <id>gsoc-21-cncf-cnb-jenkins-plugins-proposal</id>
        <link href="https://fatiiates.com/blog/post/gsoc-21-cncf-cnb-jenkins-plugins-proposal"/>
        <updated>2024-03-16T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[This is the proposal which I submitted to CNCF for GSoC 2021. I proposed to work on the CNB - Jenkins Plugins. I have explained the problem, my interest, implementation, motivation, timeline, and references in this proposal]]></summary>
        <content type="html"><![CDATA[<div><p><strong>Fullname:</strong>  FATIH ATES</p><p><strong>GSoC Display Name:</strong> FATIH ATES</p><p><strong>E-mail:</strong> <a href="mailto:fatiiates@gmail.com" target="_blank" rel="noopener">fatiiates@gmail.com</a></p><p><strong>Portfolio</strong>: <a href="https://fatiiates.github.io/" target="_blank" rel="noopener">https://fatiiates.github.io/</a></p><p><strong>GitHub:</strong> <a href="https://github.com/fatiiates" target="_blank" rel="noopener">https://github.com/fatiiates</a></p><p><strong>LinkedIn:</strong> <a href="https://www.linkedin.com/in/fatiiates/" target="_blank" rel="noopener">https://www.linkedin.com/in/fatiiates/</a></p><p><strong>Medium:</strong> <a href="https://fatiiates.medium.com/" target="_blank" rel="noopener">https://fatiiates.medium.com/</a></p><p><strong>Resume:</strong> <a href="https://fatiiates.github.io/assets/doc/cv_FATIH_ATES_en.pdf" target="_blank" rel="noopener">Link to Resume</a></p><ol>
<li><p><strong>SHORT DESCRIPTION</strong></p><p>I am a 3rd year student at Bursa Technical University(Turkey), working toward my bachelor’s degree in Computer Engineering with heavy emphasis on programming and software development. I have been developing myself on Cloud Infrastructure and Unix systems for one and a half years. And I have knowledge of the Java programming language.</p></li>
<li><p><strong>GSOC PROPOSAL DATA</strong></p><p>I was in the BTU DSC core team for a year. And now I am developing software for Professor Turgay Tugay BILGIN project, supported by TUBITAK. Everything I do is in my portfolio (Projects I developed, Resume, University Background).</p></li>
<li><p><strong>CNB and Jenkins Plugins</strong></p><p><a href="https://buildpacks.io/" target="_blank" rel="noopener">Cloud Native Buildpacks</a> turn your code into OCI-compliant containers. They examine your source code, build it, and create a container image with all the required dependencies to run your application.[1]</p><p>Jenkins is an open source CI server written in Java to create a chain of actions to automatically perform the CI process. Jenkins supports software creation, testing, documentation, deployment, and the entire software development lifecycle.</p></li>
<li><p><strong>PROBLEM</strong></p><p>Writing a plugin necessary for Jenkins users to use buildpacks in their pipelines.</p></li>
<li><p><strong>INTEREST</strong></p><p>I reviewed your issue on github. The proposed solution seems reasonable. Additionally, I reviewed the packages created for CircleCI. I&#39;ve read blogs about topics like writing plugins on Jenkins and I&#39;m interested in your project because I want to learn about CI processes in a sense.</p></li>
<li><p><strong>IMPLEMENTATION</strong></p><p>In the proposed solution, we will prepare a plugin with DSL syntax like Docker Pipeline plugin. And we will perform operations in Java language by interpreting these entered scripts like an interpreter.</p><p>I want to give an example from the plugin made for CircleCI before.[2] Suppose we choose yaml format as DSL. When you are given a yaml script like the one below.</p><p>We can parse the yaml file to classes as described in the following link.</p><blockquote>
<p><a href="https://www.w3schools.io/file/yaml-java-read-write/" target="_blank" rel="noopener">https://www.w3schools.io/file/yaml-java-read-write/</a></p></blockquote>
<p>And then we&#39;ll have the inputs. There is only one job here(buildpacks/build). This job has two variables. It could also have a list or other parameters as environment variables. However, the basic command is as follows.</p><p>Then it may be enough to run the following command with Java.</p><pre><code>pack build --builder heroku/buildpacks:18 myimage
</code></pre>
<p>Thus, our docker image is made ready with buildpacks.</p><p>Now that these operations are done, we need to create a plugin on Jenkins.</p><p>We will create a plugin as described in the jenkins tutorial.</p><blockquote>
<p><a href="https://www.jenkins.io/doc/developer/tutorial/create/" target="_blank" rel="noopener">https://www.jenkins.io/doc/developer/tutorial/create/</a></p></blockquote>
<p>As a result, we will have a plugin such as a Docker Pipeline Plugin.</p></li>
<li><p><strong>MOTIVATION</strong></p><p>I am currently in 3rd grade and can implement various web applications and take care of services. However, this is not enough. The applications I develop are independent of cloud logic. I&#39;m learning k8s right now and I&#39;m thinking of working as a DevOps Engineer in the future. And so I need to master the CI / CD processes and I will be doing an internship at a company this summer, which means there are a lot of engineers I can consult with on problems that I will have difficulty solving. In addition, although I have COVID-19, I am in the city where my university is located and I can meet with the Professors at my school whenever I want, so I get their support. But my main motivation is to be an open source supporter.</p></li>
<li><p><strong>TIMELINE</strong></p><ul>
<li>MAY 17 - JUNE 7</li>
</ul>
<p>Meeting with the community, exchanging ideas, conducting solution-oriented resource research, learning your documentation rules and preparing a requirement analysis and a strategic plan.</p><ul>
<li>JUNE 7 - JUNE 14</li>
</ul>
<p>A DSL syntax must be created or we can use a prebuilt syntax.</p><ul>
<li>JUNE 14 - JUNE 21</li>
</ul>
<p>Interpretation will be performed on the Java programming language according to the agreed syntax.</p><ul>
<li>JUNE 21 - JULY 05</li>
</ul>
<p>The operations to be performed according to the interpretation process will be coded with the Java programming language.</p><ul>
<li>JULY 05 - JULY 12</li>
</ul>
<p>Testing and documentation of the code obtained.</p><ul>
<li>JULY 12 - JULY 16</li>
</ul>
<p>Situation assessments with mentors. Defining the next process. Innovations, additions and documentation planning to be made.</p><ul>
<li>JULY 16 - JULY 30</li>
</ul>
<p>Implementing the obtained code to Jenkins.</p><ul>
<li>JULY 30 - AUGUST 16</li>
</ul>
<p>Comprehensive testing and documentation of the code obtained.</p><ul>
<li>AUGUST 16 - AUGUST 23</li>
</ul>
<p>Delivery of the entire project and documentations and sending final evaluations.</p><ul>
<li>AUGUST 23 - AUGUST 30</li>
</ul>
<p>Mentors submit their final evaluation.</p><ul>
<li>AUGUST 31</li>
</ul>
<p>Announcement of the results.</p></li>
<li><p><strong>REFERENCES</strong></p><p><strong>[1]</strong><a href="https://tanzu.vmware.com/developer/guides/containers/cnb-what-is/#:~:text=Cloud%20Native%20Buildpacks%20turn%20your,dependencies%20to%20run%20your%20application" target="_blank" rel="noopener">Cloud Native Buildpacks</a>.</p><p><strong>[2]</strong><a href="https://circleci.com/developer/orbs/orb/buildpacks/pack" target="_blank" rel="noopener"><strong>https://circleci.com/developer/orbs/orb/buildpacks/pack</strong></a></p></li>
</ol>
<h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SOURCES</h2><ul>
<li><a href="https://docs.google.com/document/d/1aZjBzwpaD_8mjFCqDmPPTnN9wRWX3cV0tn7c07_VPqU/edit?usp=sharing" target="_blank" rel="noopener">My Proposal Template on Google Drive</a></li>
</ul>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Google Summer of Code"/>
        <category label="CNCF"/>
        <category label="Jenkins"/>
        <category label="Buildpacks"/>
        <category label="2021"/>
        <published>2021-04-13T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Naive Bayes Classification Method for Breast Cancer Diagnosis]]></title>
        <id>breast-cancer-with-naive-bayes</id>
        <link href="https://fatiiates.com/blog/post/breast-cancer-with-naive-bayes"/>
        <updated>2024-03-30T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[A Naive Bayes classifier has been developed to contribute to the diagnosis of breast cancer. It is based on data from breast cancer patients in Wisconsin, USA. The classifier has been compared with an academic article using the same dataset, achieving an accuracy of 96%. It is expected to play a significant role in early diagnosis.]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Abstract</h2><p>In order to contribute to the diagnosis of the ongoing breast cancer problem, a classifier has been developed using the Naive Bayes method based on data from breast cancer patients in the state of Wisconsin, USA. The proposed method has been compared with an academic article previously conducted with the same dataset and presented along with its results. Progress is being made every day in the early diagnosis of breast cancer. With the developed classifier having an accuracy of 96%, it is expected to play a significant role in early diagnosis.</p><h2 id="1-introduction" class="group relative items-center flex"><a href="#1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. Introduction</h2><p>According to research, 2.1 million women are affected by breast cancer worldwide every year, with 20,000 women in our country. One in eight women is at risk of breast cancer throughout her lifetime, and one in 38 women is at risk of dying from breast cancer.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>1</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[1]}</annotation></semantics></math></span></p><p>The human body consists of millions of cells, each with its own specific function. Healthy cells in our body have the ability to divide. While cells divide more rapidly in the early years of life, this rate slows down in adulthood. However, these abilities of cells are limited, they cannot divide infinitely. Each cell has a certain number of divisions throughout its life. A healthy cell knows how much it will divide and also knows when to die if necessary. Normally, for the healthy and smooth functioning of the body, there is a need for cells to grow, divide, and produce more cells. Sometimes, despite this, the process goes awry. Cells continue to divide without the need for new cells. The irregular growth of these cells causes cancer. Thus, cells divide and grow uncontrollably, forming an abnormal mass of tissue called a tumor. Although not every tumor is cancerous, they disrupt and invade the digestive, nervous, and circulatory systems, disrupting the normal functioning of the body.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>2</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[2]}</annotation></semantics></math></span></p><p>Tumors can be benign or malignant. Benign tumors are not cancerous. They are often removed and rarely recur. Cells in benign tumors do not spread to other parts of the body. Most importantly, benign tumors rarely threaten life. Malignant tumors are cancerous. These tumors can compress, infiltrate, or destroy normal tissues. If cancer cells separate from the tumor they originated from, they can travel to other areas of the body through the blood or lymphatic circulation. In the places they go, they form tumor colonies and continue to grow. The spreading of cancer to other parts of the body in this way is called metastasis.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>3</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[3]}</annotation></semantics></math></span></p><p>Breast cancer is a type of cancer that starts in breast cells. After lung cancer, it is the most common cancer worldwide. Although it occurs in men, cases in women are 100 times more common than in men. Since the 1970s, there has been an increase in the incidence of breast cancer, which is attributed to modern, Western lifestyles. The incidence in North America and European countries is higher than in other parts of the world.</p><p>If breast cancer is detected before spreading, the patient has a 96% chance of survival. Every year, one in 44,000 women dies from breast cancer. The best protective measure against breast cancer is early diagnosis.</p><p>The only way to determine whether a lump in the breast is benign or malignant is by biopsy and microscopic examination. But there are some features that can give the examining physician an average idea of what the mass looks like.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>4</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[4]}</annotation></semantics></math></span></p><h2 id="2-methodology" class="group relative items-center flex"><a href="#2-methodology" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. Methodology</h2><h3 id="a-bayes-theorem" class="group relative items-center flex"><a href="#a-bayes-theorem" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>A. Bayes&#39; Theorem</h3><p>Bayes&#39; theorem is an important topic studied in probability theory. This theorem shows the relationship between conditional probabilities and marginal probabilities within a probability distribution for a random variable. This concept is also referred to as Bayes&#39; Rule, Bayes&#39; Theorem, or Bayes&#39; Law.</p><p>In Bayes&#39; Theorem, the occurrence of event A given the occurrence of event B can be described by Equation 2.1.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>A</mi><mi mathvariant="normal">∣</mi><mi>B</mi><mo stretchy="false">)</mo><mo>=</mo><mfrac><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>B</mi><mi mathvariant="normal">∣</mi><mi>A</mi><mo stretchy="false">)</mo><mo>×</mo><mi>P</mi><mo stretchy="false">(</mo><mi>A</mi><mo stretchy="false">)</mo></mrow><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>B</mi><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">P(A|B) = \frac{P(B|A) \times P(A)}{P(B)}</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.1 Bayes' Theorem</figcaption>
                                  </figure><p>Where P(A) and P(B) are the marginal probabilities of events A and B, respectively.</p><p>Here, prior probability adds subjectivity to Bayes&#39; theorem. In other words, for example, P(A) is the information available about event A before any data is collected. On the other hand, P(B|A) is a posterior probability because after collecting data, it provides information about the probability of event B occurring given that event A has occurred.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>5</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[5]}</annotation></semantics></math></span></p><h3 id="b-naive-bayes-classifier" class="group relative items-center flex"><a href="#b-naive-bayes-classifier" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>B. Naive Bayes Classifier</h3><p>Naive Bayes classifiers are a collection of classification algorithms based on Bayes&#39; Theorem. It is not a single algorithm, but a family of algorithms that share a common principle, namely that each feature pair being classified is independent of each other.</p><p>Consider each feature and class label as random variables. Given a set of features: the goal is to predict class Y based on the available data.</p><p>The objective function derived from Bayes&#39; Theorem in 2.A is expressed by Equation 2.2.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>Y</mi><mi mathvariant="normal">∣</mi><msub><mi>X</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>X</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>X</mi><mi>d</mi></msub><mo stretchy="false">)</mo><mo>=</mo><mfrac><mrow><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>X</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>X</mi><mi>d</mi></msub><mi mathvariant="normal">∣</mi><mi>Y</mi><mo stretchy="false">)</mo><mo>×</mo><mi>P</mi><mo stretchy="false">(</mo><mi>Y</mi><mo stretchy="false">)</mo></mrow><mrow><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>X</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>X</mi><mi>d</mi></msub><mo stretchy="false">)</mo></mrow></mfrac></mrow><annotation encoding="application/x-tex">P(Y|X_1, X_2, \ldots, X_d) = \frac{P(X_1, X_2, \ldots, X_d|Y) \times P(Y)}{P(X_1, X_2, \ldots, X_d)}</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.2 Objective function</figcaption>
                                  </figure><p>Here, it is assumed that there are no dependencies between the features Xi (Equation 2.3).</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mn>1</mn></msub><mo separator="true">,</mo><msub><mi>X</mi><mn>2</mn></msub><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><msub><mi>X</mi><mi>d</mi></msub><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mi>j</mi></msub><mo stretchy="false">)</mo><mo>=</mo><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mn>1</mn></msub><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mi>j</mi></msub><mo stretchy="false">)</mo><mo>×</mo><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mn>2</mn></msub><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mi>j</mi></msub><mo stretchy="false">)</mo><mo>×</mo><mo>…</mo><mo>×</mo><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mi>d</mi></msub><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mi>j</mi></msub><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">P(X_1, X_2, \ldots, X_d|Y_j) = P(X_1|Y_j) \times P(X_2|Y_j) \times \ldots \times P(X_d|Y_j)</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.3 Bayes Expansion</figcaption>
                                  </figure><p>The probability value for the classification column is calculated using Equation 2.4.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>X</mi><mo stretchy="false">)</mo><mo>=</mo><msub><mi>N</mi><mi>X</mi></msub><mi mathvariant="normal">/</mi><mi>N</mi></mrow><annotation encoding="application/x-tex">P(X) = N_X / N</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.4 Probability calculation formula for classification column</figcaption>
                                  </figure><p>The probability value for categorical attributes is calculated using Equation 2.5.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><msub><mi>X</mi><mi>i</mi></msub><mi mathvariant="normal">∣</mi><msub><mi>Y</mi><mi>k</mi></msub><mo stretchy="false">)</mo><mo>=</mo><msub><mi>X</mi><mrow><mi>i</mi><mi>k</mi></mrow></msub><mi mathvariant="normal">/</mi><msub><mi>N</mi><mrow><mi>X</mi><mi>k</mi></mrow></msub></mrow><annotation encoding="application/x-tex">P(X_i|Y_k) = X_{ik} / N_{Xk}</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.5 Probability calculation formula for categorical attributes</figcaption>
                                  </figure><h3 id="c-breast-cancer-dataset" class="group relative items-center flex"><a href="#c-breast-cancer-dataset" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>C. Breast Cancer Dataset</h3><p>In this project, the dataset published on UCI (University of California, Irvine) for breast cancer patients diagnosed in the state of Wisconsin, USA, was used.</p><p>Additionally, the dataset is available online at the Machine Learning Repository at the University of California, Irvine. There are 10 real-valued attributes, including radius, texture, perimeter, area, smoothness, compactness, concavity, concave points, symmetry, and fractal dimension.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>6</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[6]}</annotation></semantics></math></span></p><p>Attribute names and meanings are presented in Table 2.1.</p><div class="overflow-x-auto"><table><tr>
<th>Attribute Name</th>
<th>Attribute Description</th>
</tr>
<tr>
<td>id</td>
<td>Unique identifier</td>
</tr>
<tr>
<td>diagnosis</td>
<td>Tumor diagnosis (B= Malignant, M= Benign)</td>
</tr>
<tr>
<td>radius_mean</td>
<td>Mean of distances from center to points on the perimeter</td>
</tr>
<tr>
<td>texture_mean</td>
<td>Standard deviation of gray-scale values</td>
</tr>
<tr>
<td>perimeter_mean</td>
<td>Mean size of the core tumor</td>
</tr>
<tr>
<td>area_mean</td>
<td>Mean of area that the tumor covers</td>
</tr>
<tr>
<td>smoothness_mean</td>
<td>Mean of local variation in radius lengths</td>
</tr>
<tr>
<td>compactness_mean</td>
<td>Mean of compactness ratios based on perimeter and area</td>
</tr>
<tr>
<td>concavity_mean</td>
<td>Mean severity of concave portions of the contour</td>
</tr>
<tr>
<td>concave_points_mean</td>
<td>Mean number of concave portions of the contour</td>
</tr>
<tr>
<td>symmetry_mean</td>
<td>## Unknown</td>
</tr>
<tr>
<td>fractal_dimension_mean</td>
<td>&quot;Mean for &#39;coastline approximation&#39; - 1&quot;</td>
</tr>
<tr>
<td>radius_se</td>
<td>Standard error for the mean of distances from center to points on the perimeter</td>
</tr>
<tr>
<td>texture_se</td>
<td>Standard error for standard deviation of gray-scale values</td>
</tr>
<tr>
<td>perimeter_se</td>
<td>## Unknown</td>
</tr>
<tr>
<td>area_se</td>
<td>## Unknown</td>
</tr>
<tr>
<td>smoothness_se</td>
<td>Standard error for local variation in radius lengths</td>
</tr>
<tr>
<td>compactness_se</td>
<td>Standard error for compactness ratios based on perimeter and area</td>
</tr>
<tr>
<td>concavity_se</td>
<td>Standard error for severity of concave portions of the contour</td>
</tr>
<tr>
<td>concave_points_se</td>
<td>Standard error for number of concave portions of the contour</td>
</tr>
<tr>
<td>symmetry_se</td>
<td>## Unknown</td>
</tr>
<tr>
<td>fractal_dimension_se</td>
<td>&quot;Standard error for &#39;coastline approximation&#39; - 1&quot;</td>
</tr>
<tr>
<td>radius_worst</td>
<td>&quot;Worst&quot; or largest mean of distances from center to points on the perimeter</td>
</tr>
<tr>
<td>texture_worst</td>
<td>&quot;Worst&quot; or largest standard deviation of gray-scale values</td>
</tr>
<tr>
<td>perimeter_worst</td>
<td>## Unknown</td>
</tr>
<tr>
<td>area_worst</td>
<td>## Unknown</td>
</tr>
<tr>
<td>smoothness_worst</td>
<td>&quot;Worst&quot; or largest mean of local variation in radius lengths</td>
</tr>
<tr>
<td>compactness_worst</td>
<td>&quot;Worst&quot; or largest mean of compactness ratios based on perimeter and area</td>
</tr>
<tr>
<td>concavity_worst</td>
<td>&quot;Worst&quot; or largest mean of severity of concave portions of the contour</td>
</tr>
<tr>
<td>concave_points_worst</td>
<td>&quot;Worst&quot; or largest mean of number of concave portions of the contour</td>
</tr>
<tr>
<td>symmetry_worst</td>
<td>## Unknown</td>
</tr>
<tr>
<td>fractal_dimension_worst</td>
<td>&quot;Worst&quot; or largest mean for &#39;coastline approximation&#39; - 1</td>
</tr>
</table></div><figcaption class="text-center">Table 2.1 Attribute names and meanings</figcaption><p>Data set information:</p><ul>
<li>The dataset is characterized by being multivariate.</li>
<li>Attributes consist of real numbers.</li>
<li>There are 569 records (357 benign, 212 malignant).</li>
<li>There are 32 attributes.</li>
<li>There are no missing data in the records.</li>
</ul>
<p>The algorithm used for data classification is presented with the flowchart shown in Figure 2.1.</p><p><figure><img src="/assets/blog/breast-cancer-with-naive-bayes/figure-2.1.png" alt="Flowchart of the Naive Bayes classification method"><figcaption class="text-center">Figure 2.1 Flowchart of the Naive Bayes classification method</figcaption></figure></p><p>All operations on the dataset were performed on a machine with 4GB RAM, AMD Phenom II X2 570 processor, and UBUNTU 20.04 LTS operating system.</p><h2 id="3-results" class="group relative items-center flex"><a href="#3-results" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. Results</h2><p>The developed model diagnoses benign (B) or malignant (M) tumors based on the results obtained from Bayes&#39; theorem. There are correlations between the attributes in this dataset, and these correlations were ignored in the classifier used. 70% of all data were separated as the training set, and 30% as the test set.</p><p>After training the model with the training set, the accuracy value obtained was 95.321%.</p><p>The model was trained with training data split at 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 ratios, and accuracy values were obtained, creating a learning curve. The curve is presented in Figure 3.1.</p><p><figure><img src="/assets/blog/breast-cancer-with-naive-bayes/figure-3.1.png" alt="Learning curve of the Naive Bayes classification method"><figcaption class="text-center">Figure 3.1 Learning curve of the Naive Bayes classification method</figcaption></figure></p><p>For the dataset, 10-fold cross-validation technique was applied, and the values obtained were:</p><ul>
<li>Accuracy (mean): 93.717%</li>
<li>Standard Deviation: 3.403%</li>
</ul>
<p>ROC curves were drawn using the 10-fold technique for the model, and the areas under the curves were found to be: [0.997, 0.919, 0.984, 0.962, 0.989, 0.988, 0.959, 0.996, 0.992, 1].</p><p>The mean value and standard deviation of the areas under the curve:</p><ul>
<li>AUC (mean): 97.496%</li>
<li>Standard Deviation: 2.388%</li>
</ul>
<p>The AUC values plotted on the graph are presented in Figure 3.2.</p><p><figure><img src="/assets/blog/breast-cancer-with-naive-bayes/figure-3.2.png" alt="AUC values of the Naive Bayes classification method"><figcaption class="text-center">Figure 3.2 AUC values of the Naive Bayes classification method</figcaption></figure></p><p>The confusion matrix calculated for the test data of the model is:</p><ul>
<li>True Positive (TP): 60</li>
<li>False Negative (FN): 5</li>
<li>False Positive (FP): 3</li>
<li>True Negative (TN): 103</li>
</ul>
<p>Comparison of the results with a study conducted in 2019 using the same dataset and modeling method is presented in Table 3.1.<span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mrow></mrow><mrow><mo stretchy="false">[</mo><mn>7</mn><mo stretchy="false">]</mo></mrow></msup></mrow><annotation encoding="application/x-tex">^{[7]}</annotation></semantics></math></span></p><div class="overflow-x-auto"><table><tr>
<th>Metric</th>
<th>Current Paper</th>
<th>Other Academic Paper</th>
</tr>
<tr>
<td>Accuracy</td>
<td>95.321%</td>
<td>94.751%</td>
</tr>
<tr>
<td>10-Fold Acc.</td>
<td>93.677%</td>
<td>93.435%</td>
</tr>
<tr>
<td>10-Fold Std</td>
<td>2.844%</td>
<td>5.031%</td>
</tr>
<tr>
<td>AUC Mean</td>
<td>97.496%</td>
<td>98.7%</td>
</tr>
<tr>
<td>AUC Std</td>
<td>2.388%</td>
<td>1.4%</td>
</tr>
<tr>
<td>Precision</td>
<td>95.238%</td>
<td>93%</td>
</tr>
<tr>
<td>Recall</td>
<td>92.307%</td>
<td>98%</td>
</tr>
<tr>
<td>F1</td>
<td>93.75%</td>
<td>95%</td>
</tr>
<tr>
<td>Sensitivity</td>
<td>92.307%</td>
<td>98%</td>
</tr>
<tr>
<td>Specificity</td>
<td>97.169%</td>
<td>87%</td>
</tr>
</table></div><figcaption class="text-center">Table 3.1: Comparison of Data (Specificity and sensitivity values are not specifically mentioned in the paper but calculated from the confusion matrix. Bolded values imply higher reliability.)</figcaption><h2 id="4-references" class="group relative items-center flex"><a href="#4-references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>4. References</h2><p>[1] <a href="https://www.ntv.com.tr/saglik/meme-kanseri-dunyada-her-yil-2-1-milyon-kadini-etkiliyor,hpmaGtGjJk6o0VEcL6YSEg" target="_blank" rel="noopener">NTV News - Breast cancer affects 2.1 million women worldwide every year</a><br>[2] <a href="https://www.researchgate.net/publication/272863357_Diagnosis_of_Breast_Cancer_using_Decision_Tree_Data_Mining_Technique" target="_blank" rel="noopener">Diagnosis of Breast Cancer using Decision Tree Data Mining Technique</a><br>[3] <a href="https://hsgm.saglik.gov.tr/tr/kanser-nedir-belirtileri.html" target="_blank" rel="noopener">Ministry of Health - What is Cancer?</a><br>[4] <a href="https://tr.wikipedia.org/wiki/Meme_kanseri" target="_blank" rel="noopener">Wikipedia - Breast Cancer</a><br>[5] <a href="https://tr.wikipedia.org/wiki/Bayes_teoremi" target="_blank" rel="noopener">Wikipedia - Bayes&#39; theorem</a><br>[6] <a href="https://www.researchgate.net/publication/335444489_Meme_Kanseri_Teshisi_Icin_Yeni_Bir_Skor_Fuzyon_Yaklasimi" target="_blank" rel="noopener">A New Score Fusion Approach for Breast Cancer Diagnosis</a><br>[7] <a href="https://www.researchgate.net/publication/335079111_Breast_Cancer_diagnosis_using_machine_learning_classification_methods_using_Hadoop" target="_blank" rel="noopener">Breast Cancer diagnosis using machine learning classification methods using Hadoop</a></p><h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SOURCES</h2><ul>
<li><a href="/assets/blog/breast-cancer-with-naive-bayes/original-document.pdf" target="_blank" rel="noopener">Original Document - in Turkish</a></li>
<li><a href="https://github.com/fatiiates/breast-cancer-w-naive-bayes" target="_blank" rel="noopener">GitHub Repository</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is translated from Turkish to English using ChatGPT. The original document is written by the in Turkish. The translation may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Naive Bayes"/>
        <category label="Data Analysis"/>
        <category label="Bursa Technical University"/>
        <category label="2021"/>
        <published>2021-03-19T01:16:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
    <entry>
        <title type="html"><![CDATA[Metaheuristic Optimization on Python]]></title>
        <id>metaheuristic-approach-algorithms-on-python</id>
        <link href="https://fatiiates.com/blog/post/metaheuristic-approach-algorithms-on-python"/>
        <updated>2024-03-18T01:16:00.000Z</updated>
        <summary type="html"><![CDATA[Exploring Simulated Annealing and Particle Swarm Optimization algorithms for solving optimization problems across various test functions in Python]]></summary>
        <content type="html"><![CDATA[<div><h2 id="abstract" class="group relative items-center flex"><a href="#abstract" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>Abstract</h2><p>Optimization is the process of obtaining the most optimal solution for a problem within specified constraints and objectives. The evolving world has brought along with it optimization problems. Metaheuristic approach algorithms are algorithms that aim to find the optimum point of an objective varying within a discrete value range through heuristic approaches. It cannot be expected that an optimization algorithm will be successful on every problem or test function. Therefore, the heuristic algorithm to be used should be preferred based on the objective. In this study, Simulated Annealing (SA) and Particle Swarm Optimization (PSO) algorithms are discussed. Investigations were conducted on Ackley, Beale, Goldstein-Price, and Levi test functions using the Python programming language.</p><h2 id="1-introduction" class="group relative items-center flex"><a href="#1-introduction" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>1. Introduction</h2><p>Optimization is the process of finding the optimal solution point in the solution space of a problem under defined constraints. Nowadays, both mathematical and heuristic techniques are employed in solving optimization problems. Mathematical techniques, as they scan the entire solution space during problem-solving, tend to yield more costly results when the solution space is vast. In such cases, it is more advantageous to utilize heuristic algorithms that navigate the solution space intuitively, reaching solutions in a shorter time (Çelik, 2013). Metaheuristic algorithms are solution methods obtained by adapting basic heuristic techniques to specific problems. The term &quot;metaheuristic&quot; is derived from the combination of two Greek words: &quot;meta&quot; (alongside, beyond) and &quot;heuristic&quot; (finding). These algorithms efficiently navigate the solution space using high-level working environments and effective search operations to reach the optimal solution faster (Çelik, 2013). One of the most significant advantages of metaheuristic optimization algorithms is their ability to reach a global solution without getting trapped in local optimal points (Laporte, 2006). Metaheuristic algorithms can be applied to various integrated problems and possess flexible structures (Çelik, 2013). In other words, metaheuristic algorithms can be seen as a general algorithmic structure that can be adapted to specific problems with a few modifications, while also being applicable to different optimization problems. The classification of metaheuristic algorithms is shown in Figure 1.1.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-1.1.png" alt="Classification of Metaheuristic Algorithms"><figcaption class="text-center">Figure 1.1. Classification of Metaheuristic Algorithms (Wikipedia, 2012)</figcaption></figure></p><h2 id="2-metaheuristic-algorithms" class="group relative items-center flex"><a href="#2-metaheuristic-algorithms" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2. Metaheuristic Algorithms</h2><h3 id="2-1-simulated-annealing" class="group relative items-center flex"><a href="#2-1-simulated-annealing" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.1. Simulated Annealing</h3><p>The foundation of the simulated annealing analogy is based on the work of Metropolis et al. (1953). In this study, an algorithm mimicking the thermal equilibrium of a solid at a specific temperature level was developed. Subsequently, Kirkpatrick et al. (1983) proposed an algorithm based on the work of Metropolis et al. (1953) that could be utilized in combinatorial optimization problems (Akbulut, 2020). Simulated annealing (SA) is a stochastic approach based on simulating the statistical process of growing crystals using annealing processes to reach the general minimum internal energy configuration. In simpler terms, it mimics the physical annealing process that enhances the quality of a solid material by first heating it to a certain temperature and then cooling it. In this approach, a solid material like metal is heated to a high temperature and melted, allowing atoms to move freely. However, the movements of atoms are restricted as the temperature is lowered. As the temperature decreases, atoms tend to move less, and crystal formations adopt the lowest possible internal energy. The formation of crystals is primarily related to the rate of cooling. When the cooling rate of molten metals is too fast, it may not achieve a crystalline state because the temperature decreases rapidly. Instead, it may reach a polycrystalline state with higher energy compared to the crystal state. In engineering applications, defects occur within the material after rapid cooling. Therefore, to reach the lowest energy state (internal energy), the heated solid (molten metal) must be slowly and controllably cooled. This slow cooling process is referred to as annealing (Koç, 2019).</p><p>In simulated annealing, the control of the cooling process, or in other words, adjusting the rate at which it occurs, represents the probability of accepting solutions that, although not better during the search for the optimal solution, contribute to the acceptability of solutions that may lead to the overall best solution. At the beginning of the search, this probability should be set to a sufficiently high value to accept inferior solutions and thus avoid local optimal solutions in favor of finding the overall best solution. As the search for the best solution progresses, the probability decreases, making it difficult to escape from local optimal solutions. The objective here is to attempt reaching the overall best solution rather than transitioning to a new local optimal solution by searching through the neighbors of the current local optimal solution (Koç, 2019).</p><p>The probability of selecting a poor solution systematically decreases with temperature. The main objective of the SA algorithm is to leave no unexplored regions in the solution space. Simulated Annealing can be considered as a useful method providing near-optimal solutions for combinatorial optimization problems. SA has been applied to solve many combinatorial optimization problems such as the traveling salesman problem, scheduling, quadratic assignment problem, and network design (Sarıkaya, 2014).</p><p>To utilize the SA algorithm in solving any problem, certain parameters need to be determined. These parameters include the initial temperature (T0), the number of iterations at each temperature, the cooling function, and the stopping criterion for the algorithm. The initial temperature is an input parameter used to control the acceptance probability of poor solutions. The number of iterations represents the number of solutions generated at each temperature. The cooling function determines the temperature at the current iteration based on the temperature of the previous iteration. Together with the initial temperature, the number of iterations, and the cooling function, they form the cooling schedule. This schedule significantly influences solution quality or convergence rate. The SA algorithm stops when the solution obtained at each temperature change does not vary significantly over several consecutive temperature changes (Sarıkaya, 2014).</p><p>Güner and Altıparmak (2003) have expressed the relationship between physical annealing and combinatorial optimization as shown in Table 2.1 (Akbulut, 2020).</p><div class="overflow-x-auto"><table><tr>
<th>Thermodynamic Simulation</th>
<th>Combinatorial Optimization</th>
</tr>
<tr>
<td>System States</td>
<td>Suitable Solutions</td>
</tr>
<tr>
<td>Energy</td>
<td>Objective Function</td>
</tr>
<tr>
<td>State Change</td>
<td>Neighbor Solution</td>
</tr>
<tr>
<td>Temperature</td>
<td>Control Parameter</td>
</tr>
<tr>
<td>Freezing State</td>
<td>Heuristic Solution</td>
</tr>
</table></div><figcaption class="text-center">Table 2.1. Relationship between physical annealing and combinatorial optimization</figcaption><h4 id="2-1-1-methodology" class="group relative items-center flex"><a href="#2-1-1-methodology" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.1.1 Methodology</h4><p>The SA algorithm starts with a randomly generated initial solution and generates the next solution at each iteration with local neighborhood. The new solution, which improves (reduces the energy of the material/system) the objective function representing the system&#39;s energy level, is always accepted. On the other hand, temporary solution suggestions that allow increasing the system&#39;s temperature or deviating/deteriorating from the objective function of the system to a certain extent are also accepted (Akbulut, 2020). The basic operation of the algorithm is represented in Figure 2.1.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.1.png" alt="The Basic Operation of Simulated Annealing Algorithm"><figcaption class="text-center">Figure 2.1. The Basic Operation of Simulated Annealing Algorithm (Koç, 2020)</figcaption></figure></p><p>The energy difference (∆E) between the current and the newly generated solution represents the difference between the objective function of the current solution and the objective function of the newly generated solution through the random neighborhood of the current solution. The acceptance state of the new solution is based on the Boltzmann distribution, as shown in Equation 2.1.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>P</mi><mo stretchy="false">(</mo><mi>E</mi><mo stretchy="false">)</mo><mo>=</mo><msup><mi>e</mi><mrow><mo stretchy="false">(</mo><mo>−</mo><mi mathvariant="normal">Δ</mi><mi>E</mi><mi mathvariant="normal">/</mi><mrow><mi>k</mi><mi>B</mi></mrow><mo>∗</mo><mi>T</mi><mo stretchy="false">)</mo></mrow></msup></mrow><annotation encoding="application/x-tex">P(E) = e^{(-\Delta E/{kB}*T)}</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.1. Boltzmann distribution</figcaption>
                                  </figure><p>If the randomly generated number is smaller than the Boltzmann distribution, the new solution is accepted; otherwise, if the randomly generated number is not smaller than the Boltzmann distribution, the new solution is rejected, and the iteration continues with the old solution. The pseudo-code of the SA algorithm is given in Figure 2.2, and the flowchart is given in Figure 2.3.</p><figure>
                                    <div><pre><code class="language-plaintext">
- Choose initial solution
- Choose initial temperature (𝑇0 &gt; 0)
- Set temperature change counter
- Repeat
    - Set iteration number
    - Repeat
        - Generate a new neighboring solution (Neighbor search algorithm)
        - Calculate objective function change (∆ = abs(f(Neighbor Solution) - f(Solution)))
        - If (f(Neighbor Solution) &lt; f(Solution))
            - Select the new solution
        - Else
            - If 𝑟𝑎𝑛𝑑[0,1) &lt; e(-∆E/kB*T)
                - Select the new solution
        - Increment iteration number
    - Until iteration number reaches N (Temperature Change)
- Increase temperature change
- Update temperature
- Repeat until iteration is completed

</code></pre></div>
                                    <figcaption class="text-center" > Figure 2.2. Pseudo-code of Simulated Annealing</figcaption>
                                  </figure><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.3.png" alt="Simulated Annealing Flowchart"><figcaption class="text-center">Figure 2.3. Simulated Annealing Flowchart (Şefik Temel, Mustafa Ö. Cingiz, Oya Kalıpsız)</figcaption></figure></p><h4 id="2-1-2-results" class="group relative items-center flex"><a href="#2-1-2-results" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.1.2 Results</h4><p>The SA algorithm, expressed in the flowchart in Figure 2.3, was implemented in the Python language, and Ackley, Beale, Goldstein-Price, and Levi Test functions were performed. The results obtained from the tests are presented below in order.</p><p>The parameters and values used for all tests are given in Table 2.2.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>startedLocation</td>
<td>[0.5, -0.5]</td>
</tr>
<tr>
<td>numberOfIterations</td>
<td>[50, 500]</td>
</tr>
<tr>
<td>temperatureValues</td>
<td>700</td>
</tr>
<tr>
<td>fraction</td>
<td>0.88</td>
</tr>
<tr>
<td>functionToOptimize</td>
<td>// Test function</td>
</tr>
<tr>
<td>functionRange</td>
<td>// Test function range</td>
</tr>
</table></div><figcaption class="text-center">Table 2.2. Parameters used in the SA Test functions</figcaption><p>The graph of values generated with the Ackley test function in SA is given in Figure 2.4.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.4.png" alt="Ackley test function graph"><figcaption class="text-center">Figure 2.4. Ackley test function graph</figcaption></figure></p><p>The value range and expected best values for the Ackley test function are given in Table 2.3.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-5, 5], Y =&gt; [-5, 5]</td>
</tr>
<tr>
<td>Expected best solution values</td>
<td>X = 0, Y = 0</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>-0.00119562669897455</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>-0.0008832548326439538</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>0.004263276791252935</td>
</tr>
</table></div><figcaption class="text-center">Table 2.3. Values obtained from the Ackley test function</figcaption><p>The Beale test function was applied using the SA algorithm. The graph of the values generated with the Beale test function in SA is given in Figure 2.5.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.5.png" alt="Beale test function graph"><figcaption class="text-center">Figure 2.5. Beale test function graph</figcaption></figure></p><p>The value range and expected best values for the Beale test function are given in Table 2.4.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-4.5, 4.5], Y =&gt; [-4.5, 4.5]</td>
</tr>
<tr>
<td>Expected best solution values</td>
<td>X = 3, Y = 0.5</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>3.00448000488404</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>0.5025383356664512</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>5.0725312871377724e-05</td>
</tr>
</table></div><figcaption class="text-center">Table 2.4. Values obtained from the Beale test function</figcaption><p>The Goldstein-Price test function was applied using the SA algorithm. The graph of the values generated with the Goldstein-Price test function in SA is given in Figure 2.6.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.6.png" alt="Goldstein-Price test function graph"><figcaption class="text-center">Figure 2.6. Goldstein-Price test function graph</figcaption></figure></p><p>The value range and expected best values for the Goldstein-Price test function are given in Table 2.5.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-2, 2], Y =&gt; [-2, 2]</td>
</tr>
<tr>
<td>Expected best solution values</td>
<td>X = 0, Y = -1</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>3</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>0.004099428038386865</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>-1.0001308106302074</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>3.00436862126945</td>
</tr>
</table></div><figcaption class="text-center">Table 2.5. Values obtained from the Goldstein-Price test function</figcaption><p>The Levi test function was applied using the SA algorithm. The graph of the values generated with the Levi test function in SA is given in Figure 2.7.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.7.png" alt="Levi test function graph"><figcaption class="text-center">Figure 2.7. Levi test function graph</figcaption></figure></p><p>The value range and expected best values for the Levi test function are given in Table 2.6.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-10, 10], Y =&gt; [-10, 10]</td>
</tr>
<tr>
<td>Expected best solution values</td>
<td>X = 1, Y = 1</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>1.008089079742875</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>0.9719072291301988</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>0.006684399680206016</td>
</tr>
</table></div><figcaption class="text-center">Table 2.6. Values obtained from the Levi test function</figcaption><p>As a result, it has been observed that the produced algorithm closely approximates the expected values.</p><h2 id="2-2-particle-swarm-optimization" class="group relative items-center flex"><a href="#2-2-particle-swarm-optimization" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.2 PARTICLE SWARM OPTIMIZATION</h2><p>Particle Swarm Optimization (PSO) is a metaheuristic algorithm developed by observing the social behaviors of bird and fish flocks. It was proposed by Eberhart and Kennedy in 1995. PSO is also referred to as bird swarm optimization (Çetin, 2013).</p><p>In this algorithm, bird and fish flocks search a specific area to find food or shelter. PSO consists of the social behaviors of these flocks. The first behavior is the tendency of each particle in the flock to go to the best position from its past memories. The second behavior is to follow the particle closest to the food within the flock. The last behavior is the past velocity values that enable the particle to explore a wide area. These behaviors constitute the basis of PSO (Çetin, 2013).</p><h3 id="2-2-1-methodology" class="group relative items-center flex"><a href="#2-2-1-methodology" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.2.1 METHODOLOGY</h3><p>The PSO algorithm is a population-based metaheuristic algorithm. It starts with a population containing random solutions and tries to provide a global optimum response by updating at each iteration. Each bird in the swarm represents a solution. At the same time, each bird produces a response in the dimension it moves. Each of the given responses represents the current position of the bird. This position is referred to as <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span>. The best of the <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span> values in the algorithm is called <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{best}</annotation></semantics></math></span>, and this value is the optimum value sought.</p><p>For example, the velocities and positions of S particles moving in a D-dimensional search space can be expressed as follows. Here, the X position matrix is given by Equation 2.2, and the V velocity matrix is given by Equation 2.3.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>X</mi><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mn>11</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mn>12</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mrow><mn>1</mn><mi>D</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mn>21</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mn>22</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mrow><mn>2</mn><mi>D</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋱</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mrow><mi>S</mi><mn>1</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mrow><mi>S</mi><mn>2</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>X</mi><mrow><mi>S</mi><mi>D</mi></mrow></msub></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">
X = \left[ \begin{array}{cccc}
X_{11} &amp; X_{12} &amp; \cdots &amp; X_{1D} \\
X_{21} &amp; X_{22} &amp; \cdots &amp; X_{2D} \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
X_{S1} &amp; X_{S2} &amp; \cdots &amp; X_{SD} \\
\end{array} \right]</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.2</figcaption>
                                  </figure><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>V</mi><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mn>11</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mn>12</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mrow><mn>1</mn><mi>D</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mn>21</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mn>22</mn></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mrow><mn>2</mn><mi>D</mi></mrow></msub></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋱</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mrow><mi>S</mi><mn>1</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mrow><mi>S</mi><mn>2</mn></mrow></msub></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><msub><mi>V</mi><mrow><mi>S</mi><mi>D</mi></mrow></msub></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">
V = \left[ \begin{array}{cccc}
V_{11} &amp; V_{12} &amp; \cdots &amp; V_{1D} \\
V_{21} &amp; V_{22} &amp; \cdots &amp; V_{2D} \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
V_{S1} &amp; V_{S2} &amp; \cdots &amp; V_{SD} \\
\end{array} \right]</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.3</figcaption>
                                  </figure><p>In Equations 2.2 and 2.3, the position of the i-th particle is expressed as <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>X</mi><mi>i</mi></msub><mo>=</mo><mo stretchy="false">[</mo><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mtext> </mtext><msub><mi>X</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mtext> </mtext><mo>⋯</mo><mtext> </mtext><msub><mi>X</mi><mrow><mi>i</mi><mi>D</mi></mrow></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">X_i = [X_{i1} \ X_{i1} \ \cdots \ X_{iD}]</annotation></semantics></math></span>, and the velocity of the i-th particle is expressed as <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>V</mi><mi>i</mi></msub><mo>=</mo><mo stretchy="false">[</mo><msub><mi>V</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mtext> </mtext><msub><mi>V</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mtext> </mtext><mo>⋯</mo><mtext> </mtext><msub><mi>V</mi><mrow><mi>i</mi><mi>D</mi></mrow></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">V_i = [V_{i1} \ V_{i1} \ \cdots \ V_{iD}]</annotation></semantics></math></span> matrix. The best position of the particle (local best, <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span>) is given by the matrix <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span>, as shown in Equation 2.4.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub><mo>=</mo><mrow><mo fence="true">[</mo><mtable rowspacing="0.16em" columnalign="center center center center" columnspacing="1em"><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>11</mn></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>12</mn></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mn>1</mn><mi>D</mi></mrow></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>21</mn></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>22</mn></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mn>2</mn><mi>D</mi></mrow></msub></mrow></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋱</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mi><mi mathvariant="normal">⋮</mi><mpadded height="0em" voffset="0em"><mspace mathbackground="black" width="0em" height="1.5em"></mspace></mpadded></mi></mstyle></mtd></mtr><mtr><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>S</mi><mn>1</mn></mrow></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>S</mi><mn>2</mn></mrow></msub></mrow></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mo lspace="0em" rspace="0em">⋯</mo></mstyle></mtd><mtd><mstyle scriptlevel="0" displaystyle="false"><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>S</mi><mi>D</mi></mrow></msub></mrow></mstyle></mtd></mtr></mtable><mo fence="true">]</mo></mrow></mrow><annotation encoding="application/x-tex">
p_{best} = \left[ \begin{array}{cccc}
pbest_{11} &amp; pbest_{12} &amp; \cdots &amp; pbest_{1D} \\
pbest_{21} &amp; pbest_{22} &amp; \cdots &amp; pbest_{2D} \\
\vdots &amp; \vdots &amp; \ddots &amp; \vdots \\
pbest_{S1} &amp; pbest_{S2} &amp; \cdots &amp; pbest_{SD} \\
\end{array} \right]</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.4</figcaption>
                                  </figure><p>The <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span> matrix holds the best position found by S particles in D dimensions up to the current time. The best position where the i-th particle is located is expressed as <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi><mo separator="true">,</mo><mi>i</mi></mrow></msub><mo>=</mo><mo stretchy="false">[</mo><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>i</mi><mn>1</mn></mrow></msub><mtext> </mtext><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>i</mi><mn>2</mn></mrow></msub><mtext> </mtext><mo>⋯</mo><mtext> </mtext><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>i</mi><mi>D</mi></mrow></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">p_{best,i} = [pbest_{i1} \ pbest_{i2} \ \cdots \ pbest_{iD}]</annotation></semantics></math></span> matrix.</p><p>The global best position where the swarm is located, <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{best}</annotation></semantics></math></span>, represents the best position in the <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span> matrix. Equation 2.5 gives the <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{best}</annotation></semantics></math></span> matrix.</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub><mo>=</mo><mo stretchy="false">[</mo><mi>g</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>11</mn></msub><mtext> </mtext><mi>g</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mn>12</mn></msub><mtext> </mtext><mo>⋯</mo><mtext> </mtext><mi>g</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mn>1</mn><mi>D</mi></mrow></msub><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">
g_{best} = [gbest_{11} \ gbest_{12} \ \cdots \ gbest_{1D}]</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.5</figcaption>
                                  </figure><p>PSO conceptually relies on determining the velocities of particles in each generation based on their own local best positions and the global best position of the swarm. During the evolutionary process, the velocity and position of each particle are updated using Equations 2.6 and 2.7 (Gözde et al., 2008).</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mi>v</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mrow><mo stretchy="false">(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></msubsup><mo>=</mo><mi>w</mi><mo>⋅</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mi>t</mi></msubsup><mo>+</mo><msub><mi>c</mi><mn>1</mn></msub><mo>⋅</mo><msub><mi>r</mi><mn>1</mn></msub><mo>⋅</mo><mo stretchy="false">(</mo><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow></msub><mo>−</mo><msubsup><mi>x</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mi>t</mi></msubsup><mo stretchy="false">)</mo><mo>+</mo><msub><mi>c</mi><mn>2</mn></msub><mo>⋅</mo><msub><mi>r</mi><mn>2</mn></msub><mo>⋅</mo><mo stretchy="false">(</mo><mi>g</mi><mi>b</mi><mi>e</mi><mi>s</mi><msub><mi>t</mi><mi>d</mi></msub><mo>−</mo><msubsup><mi>x</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mi>t</mi></msubsup><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">
v_{i,d}^{(t+1)} = w \cdot v_{i,d}^t + c_1 \cdot r_1 \cdot (pbest_{i,d} - x_{i,d}^t) + c_2 \cdot r_2 \cdot (gbest_d - x_{i,d}^t)</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.6</figcaption>
                                  </figure><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><msubsup><mi>x</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mrow><mo stretchy="false">(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></msubsup><mo>=</mo><msubsup><mi>x</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mi>t</mi></msubsup><mo>+</mo><msubsup><mi>v</mi><mrow><mi>i</mi><mo separator="true">,</mo><mi>d</mi></mrow><mrow><mo stretchy="false">(</mo><mi>t</mi><mo>+</mo><mn>1</mn><mo stretchy="false">)</mo></mrow></msubsup><mspace></mspace></mrow><annotation encoding="application/x-tex">x_{i,d}^{(t+1)} = x_{i,d}^t + v_{i,d}^{(t+1)} \\</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.7</figcaption>
                                  </figure><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>i</mi><mo>=</mo><mn>1</mn><mo separator="true">,</mo><mn>2</mn><mo separator="true">,</mo><mo>…</mo><mo separator="true">,</mo><mi>S</mi></mrow><annotation encoding="application/x-tex">
i = 1, 2, …, S
</annotation></semantics></math></span></div>
                                  </figure><p>In Equation 2.6, c1 and c2 are positive constants that generally vary depending on the problem in the range of [0.2, 2]. A constant coefficient can be given according to the problem. In some problems, dynamic assignments can be made based on values like <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span> due to the inclusion of particle memories. The numbers <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">r_1</annotation></semantics></math></span> and <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">r_2</annotation></semantics></math></span> are randomly generated coefficients. They introduce randomness to the response given to the problem in each iteration. The numbers <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mn>1</mn></msub></mrow><annotation encoding="application/x-tex">r_1</annotation></semantics></math></span> and <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>r</mi><mn>2</mn></msub></mrow><annotation encoding="application/x-tex">r_2</annotation></semantics></math></span> are generally generated in the range [0,1). W is the inertia weight and usually varies between 0.1 and 1 (Çetin, 2013). In PSO, the inertia weight W is used to balance global and local search capabilities. A large inertia moment facilitates global search, while a small inertia moment facilitates local search. Thus, the inertia moment balances the local and global exploration and aims to reach the result with the least number of iterations. Each particle here benefits not only from the best particle in the flock but also from the experiences of all other particles in the flock (Tamer &amp; Karakuzu, 2006).</p><p>The linear decrease of W is given by Equation 2.8 (Kennedy &amp; Eberhart, 1995).</p><figure>
                                    <div><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi>w</mi><mo>=</mo><msub><mi>w</mi><mtext>max</mtext></msub><mo>−</mo><mtext>iteration</mtext><mo>×</mo><mfrac><mrow><msub><mi>w</mi><mtext>max</mtext></msub><mo>−</mo><msub><mi>w</mi><mtext>min</mtext></msub></mrow><msub><mtext>iteration</mtext><mrow><mi>m</mi><mi>a</mi><mi>x</mi></mrow></msub></mfrac></mrow><annotation encoding="application/x-tex">
w = w_{\text{max}} - \text{iteration} \times \frac{w_{\text{max}} - w_{\text{min}}}{\text{iteration}_{max}}</annotation></semantics></math></span>
</div>
                                    <figcaption class="text-center" > Equation 2.8</figcaption>
                                  </figure><p>PSO particles continuously change their positions throughout the iteration period in the multi-dimensional search space. Changes in the search space are given in Figure 2.8.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.8.png" alt="PSO parameters represented as a vector"><figcaption class="text-center">Figure 2.8. PSO parameters represented as a vector (Hamed Hosseini, Mehdi Shahbazian, Mohammad Ali Takassi)</figcaption></figure></p><p>The parameters on Figure 2.8 are as follows:</p><ul>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">x^k</annotation></semantics></math></span>: current location</li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>x</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">x^{k+1}</annotation></semantics></math></span>: new location</li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>v</mi><mi>k</mi></msup></mrow><annotation encoding="application/x-tex">v^k</annotation></semantics></math></span>: current velocity</li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>v</mi><mrow><mi>k</mi><mo>+</mo><mn>1</mn></mrow></msup></mrow><annotation encoding="application/x-tex">v^{k+1}</annotation></semantics></math></span>: new velocity</li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>v</mi><mrow><mi>p</mi><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msup></mrow><annotation encoding="application/x-tex">v^{pbest}</annotation></semantics></math></span>: velocity calculated with <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span></li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msup><mi>v</mi><mrow><mi>g</mi><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msup></mrow><annotation encoding="application/x-tex">v^{gbest}</annotation></semantics></math></span>: velocity calculated with <span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{best}</annotation></semantics></math></span></li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>p</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">p_{best}</annotation></semantics></math></span>: local best location</li>
<li><span class="katex"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><msub><mi>g</mi><mrow><mi>b</mi><mi>e</mi><mi>s</mi><mi>t</mi></mrow></msub></mrow><annotation encoding="application/x-tex">g_{best}</annotation></semantics></math></span>: global best location</li>
</ul>
<p>The pseudo-code for the PSO algorithm is given in Figure 2.9.</p><figure>
                                    <div><pre><code class="language-plaintext">
- Initialize random starting swarm
    - for t=1: maximum iterations
        - Calculate w(omega)
        - for i=1: number of particles
            - for d=1: dimension
                - vi,d(t+1) = w*vi,d(t)+c1*r1*(pi-xi,d(t))+c2*r2*(pg-xi,d(t))
                - xi,d(t+1) = xi,d(t)+vi,d(t+1)
            - Calculate new objective value
        - if f(xi,d(t)) &lt; f(pi(t)) then
            - pi(t) = xi,d(t)
            - f(pg(t)) =f(pi(t))
            - if f(xi,d(t)) &lt; f(gi(t)) then
                - gi(t) = xi,d(t)
                - f(gg(t)) =f(pi(t))
            end
        end
    end
end

</code></pre></div>
                                    <figcaption class="text-center" > Figure 2.9. Pseudo-code for Particle Swarm Optimization</figcaption>
                                  </figure><p>The flowchart for the PSO algorithm is given in Figure 2.10.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.10.png" alt="Particle Swarm Optimization Flowchart"><figcaption class="text-center">Figure 2.10. Particle Swarm Optimization Flowchart</figcaption></figure></p><h3 id="2-2-2-results" class="group relative items-center flex"><a href="#2-2-2-results" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>2.2.2 Results</h3><p>The PSO algorithm, as expressed in the flowchart in Figure 2.10, was implemented in the Python language. Test functions including Ackley, Beale, Goldstein-Price, and Levi were executed. The results obtained from the tests are presented below.</p><p>The parameters and values used for all tests are provided in Table 2.7.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>functionToOptimize</td>
<td>// Test function</td>
</tr>
<tr>
<td>lowerBoundary</td>
<td>// Lower boundary</td>
</tr>
<tr>
<td>upperBoundary</td>
<td>// Upper boundary</td>
</tr>
<tr>
<td>particleSize</td>
<td>100</td>
</tr>
<tr>
<td>c1</td>
<td>0.5</td>
</tr>
<tr>
<td>c2</td>
<td>0.5</td>
</tr>
<tr>
<td>numberOfIteratıons</td>
<td>50</td>
</tr>
</table></div><figcaption class="text-center">Table 2.7. Parameters used in PSO test functions</figcaption><p>The graph of values generated with the Ackley test function in the PSO algorithm is shown in Figure 2.11.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.11.png" alt="Ackley test function graph"><figcaption class="text-center">Figure 2.11. Ackley test function graph</figcaption></figure></p><p>The range of values and the expected best values for the Ackley test function are given in Table 2.8.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-5, 5], Y =&gt; [-5, 5]</td>
</tr>
<tr>
<td>Expected best solution</td>
<td>X = 0, Y = 0</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>-3.1871733347611965e-08</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>1.802381914336243e-07</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>5.177005206746799e-07</td>
</tr>
</table></div><figcaption class="text-center">Table 2.8. Values obtained from the Ackley test function</figcaption><p>The graph of values generated with the Beale test function in the PSO algorithm is shown in Figure 2.12.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.12.png" alt="Beale test function graph"><figcaption class="text-center">Figure 2.12. Beale test function graph</figcaption></figure></p><p>The range of values and the expected best values for the Beale test function are given in Table 2.9.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-4.5, 4.5], Y =&gt; [-4.5, 4.5]</td>
</tr>
<tr>
<td>Expected best solution</td>
<td>X = 3, Y = 0.5</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>3.000004103428678</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>0.5000009276859919</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>2.881213431705946e-12</td>
</tr>
</table></div><figcaption class="text-center">Table 2.9. Values obtained from the Beale test function</figcaption><p>The graph of values generated with the Goldstein-Price test function in the PSO algorithm is shown in Figure 2.13.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.13.png" alt="Goldstein-Price test function graph"><figcaption class="text-center">Figure 2.13. Goldstein-Price test function graph</figcaption></figure></p><p>The range of values and the expected best values for the Goldstein-Price test function are given in Table 2.10.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-2, 2], Y =&gt; [-2, 2]</td>
</tr>
<tr>
<td>Expected best solution</td>
<td>X = 0, Y = -1</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>1.443907680869234e-08</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>-0.999999988551917</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>3.00000000000008</td>
</tr>
</table></div><figcaption class="text-center">Table 2.10. Values obtained from the Goldstein-Price test function</figcaption><p>The graph of values generated with the Levi test function in the PSO algorithm is shown in Figure 2.14.</p><p><figure><img src="/assets/blog/metaheuristic-approach-algorithms-on-python/figure-2.14.png" alt="Levi test function graph"><figcaption class="text-center">Figure 2.14. Levi test function graph</figcaption></figure></p><p>The range of values and the expected best values for the Levi test function are given in Table 2.11.</p><div class="overflow-x-auto"><table><tr>
<th>Parameter</th>
<th>Value</th>
</tr>
<tr>
<td>Value range</td>
<td>X =&gt; [-10, 10], Y =&gt; [-10, 10]</td>
</tr>
<tr>
<td>Expected best solution</td>
<td>X = 1, Y = 1</td>
</tr>
<tr>
<td>Expected optimum value</td>
<td>0</td>
</tr>
<tr>
<td>-----------------------------</td>
<td>-------------------------</td>
</tr>
<tr>
<td>Obtained solution value(X)</td>
<td>0.9999999871832931</td>
</tr>
<tr>
<td>Obtained solution value(Y)</td>
<td>1.0000003902407675</td>
</tr>
<tr>
<td>Obtained optimum value</td>
<td>1.6704346415824158e-13</td>
</tr>
</table></div><figcaption class="text-center">Table 2.11. Values obtained from the Levi test function</figcaption><p>The algorithm produced results that closely approached the expected values. Moreover, due to the limitations of data types in Python, increasing the number of particles allows for reaching the global optimum.</p><h3 id="3-references" class="group relative items-center flex"><a href="#3-references" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>3. REFERENCES</h3><p>Çelik, Y. (2013). Optimizasyon Problemlerinde Bal Arılarının Evlilik Optimizasyonu Algoritmasının Performansının Geliştirilmesi. Doktora Tezi. Konya, Türkiye: Selçuk Üniversitesi Fen Bilimleri Enstitüsü.</p><p>Laporte, G. (2006). Classical And Modern Heuristics For The Vehicle Routing Problem. International transactions in operation research, 285-300.</p><p>Metropolis N [ve diğerleri] Equa-tion of state calculations by fast computing machines [Dergi] // J. Chem. Phys. - 1953. - Cilt 21. - s. 1087–1092 .</p><p>Hatice Erdoğan AKBULUT – Müfredat temelli üniversite ders çizelgeleme problem için bir tavlama benzetimi algoritması 2020 sy. 43-45</p><p>Bilgen Ayann KOÇ – Hemşire nöber çizelgeleme probleminin tavlama benzetimi algoritması ile çözümü 2019 sy. 11-18</p><p>Hüseyin Ali SARIKAYA– Bütünleşik tedarik zinciri ağında tesis yeri seçimi problem için bulanık çok amaçlı programlama modeline sezgisel bir yaklaşım: Tavlama benzetimi algoritması 2014 sy. 92-94</p><p>Güner, Ertan ve Fulya ALTIPARMAK, “İki Ölçütlü Tek Makinali Çizelgeleme Problemi için Sezgisel Bir Yaklaşım” 3003 sy. 27-42</p><p>Erhan ÇETİN – Parçacık sürüsü optimizasyonu tabanlı pıd controller ile AA servomotor denetimi 2013 sy. 18-21</p><p>Gözde, H., Kocaarslan, İ., Taplamacıoğlu, M.C., Çam, E., 2008. İki bölgeli güç sisteminde parçacık sürüsü algoritması ile yük-frekans kontrolü 55 optimizasyonu. Elektrik-Elektronik ve Bilgisayar Mühendisliği Sempozyumu ELECO’08, 26-30Kasım, Bursa, 212-216.</p><p>Yüksel Çelik, İlker Yıldız ve Alper Talha Karadeniz (2019).Avrupa Bilim ve Teknoloji Dergisi Özel Sayı, S. 463-477, Ekim 2019</p><h2 id="sources" class="group relative items-center flex"><a href="#sources" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>SOURCES</h2><ul>
<li><a href="/assets/blog/metaheuristic-approach-algorithms-on-python/original-document.pdf" target="_blank" rel="noopener">Original Document - in Turkish</a></li>
<li><a href="https://github.com/btu-odev/python-programming-project-1" target="_blank" rel="noopener">GitHub Repository</a></li>
<li><a href="https://github.com/fatiiates/simulated-annealing" target="_blank" rel="noopener">GitHub Repository - Simulated Annealing</a></li>
<li><a href="https://github.com/fatiiates/particle-swarm-optimization" target="_blank" rel="noopener">GitHub Repository - Particle Swarm Optimization</a></li>
</ul>
<h2 id="disclaimer" class="group relative items-center flex"><a href="#disclaimer" class="mr-2 -ml-6 opacity-0 group-hover:opacity-100 transition-opacity duration-200 focus:opacity-100">
    <svg viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg>
    </a>DISCLAIMER</h2><blockquote>
<p>This document is translated from Turkish to English using ChatGPT. The original document is written by the in Turkish. The translation may contain errors and inaccuracies.</p></blockquote>
</div>]]></content>
        <author>
            <name>Fatih ATES</name>
            <email>fatiiates@gmail.com</email>
            <uri>https://fatiiates.com</uri>
        </author>
        <category label="Optimization"/>
        <category label="Metaheuristic"/>
        <category label="Python"/>
        <category label="Bursa Technical University"/>
        <category label="2022"/>
        <published>2021-03-01T18:51:00.000Z</published>
        <rights>All rights reserved 2026, Fatih ATES</rights>
    </entry>
</feed>