<?xml version="1.0"?>
<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>JBake</title>
        <link >https://cheroliv.com/</link>
        <atom:link href="https://cheroliv.com//feed.xml" rel="self" type="application/rss+xml" />
        <description>JBake Bootstrap Template</description>
        <language>en-gb</language>
        <pubDate>Fri, 25 Sep 2026 01:40:23 +0000</pubDate>
        <lastBuildDate>Fri, 25 Sep 2026 01:40:23 +0000</lastBuildDate>

        <item>
            <title>HyperFrames-Gradle : ASCIIDoc কে MP4 ভিডিওতে রূপান্তর করুন</title>
            <link >https://cheroliv.com//blog/2026/0126_hyperframes_asciidoc_video_post.html</link>
            <pubDate>Sun, 31 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0126_hyperframes_asciidoc_video_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভিডিও_পাইপলাইনের_ছিদ্র&amp;quot;&amp;gt;ভিডিও পাইপলাইনের ছিদ্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_hyperframes_ইঞ্জিন&amp;quot;&amp;gt;HyperFrames : ইঞ্জিন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্লাগিনের_আর্কিটেকচার&amp;quot;&amp;gt;প্লাগিনের আর্কিটেকচার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_চার_ধাপের_পাইপলাইন&amp;quot;&amp;gt;চার ধাপের পাইপলাইন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অ্যাসসিআইডক_ডিএসএল&amp;quot;&amp;gt;অ্যাসসিআইডক ডিএসএল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_node_js_ব্রিজ&amp;quot;&amp;gt;Node.js ব্রিজ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দুই_ভিডিও_প্লাগইন_দুটি_ব্যবহার&amp;quot;&amp;gt;দুই ভিডিও প্লাগইন, দুটি ব্যবহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রোডম্যাপের_৬টি_epic&amp;quot;&amp;gt;রোডম্যাপের ৬টি EPIC&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_এটি_কাজ_করে&amp;quot;&amp;gt;কেন এটি কাজ করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_অনুপস্থিত_শৃঙ্খল&amp;quot;&amp;gt;উপসংহার: অনুপস্থিত শৃঙ্খল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তথ্যসূত্র&amp;quot;&amp;gt;তথ্যসূত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পড়ার সময় : 8 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;দুই সপ্তাহ আগে, আমি চালু করেছি`capsule-gradle`— একটি প্লাগইন যা রূপান্তর করে একটি ডেক reveal.js WebM ভিডিও ক্যাপসুলে TTS-সহ। আজ, আমি একটি নতুন প্লাগইন unite করছি : &amp;lt;code&amp;gt;hyperframes-gradle&amp;lt;/code&amp;gt;. সে করে কিছু যা capsule-gradle না करे: AsciiDoc-কে সরাসরি MP4 ভিডিও-এ রূপান্তর করা, reveal.js- এর ব্যবহার না করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে কারণ এই প্লাগইন, এটি বর্তমানের সাথে কীভাবে সামঞ্জস্যপূর্ণ, এবং HeyGen-এর HyperFrames ইঞ্জিন কী কী উপায়ে কন্টেন্ট উৎপাদন পাইপলাইনে যোগ দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভিডিও_পাইপলাইনের_ছিদ্র&amp;quot;&amp;gt;ভিডিও পাইপলাইনের ছিদ্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার ডকুমেন্টারি পাইপলাইন দুটি ধরণের ভিডিও তৈরি করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পর্যালোচনার ক্যাপসুল&amp;lt;/strong&amp;gt; (capsule-gradle) — একটি reveal.js ডেক যা WebM‑এ ক্যাপচার করা আছে এবং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;narration TTS. একটি মডিউল পুনরায় পর্যালোচনার জন্য দারুণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অ্যানিমেশন স্লাইড&amp;lt;/strong&amp;gt; (slider-gradle) — একটি আকর্ষণীয় reveal.js HTML ডেক যের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উপস্থিত প্রশিক্ষক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু একটি তৃতীয় ফর্ম্যাট অনুপস্থিত: &amp;lt;strong&amp;gt;স্ট্যান্ডঅ্যালোন ভিডিও&amp;lt;/strong&amp;gt;।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5555%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5.5565%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারের ক্ষেত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্তমান সমাধান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অভাব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্লাইড ফরমেটর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;slider-gradle → reveal.js&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংশোধন ক্যাপসূল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;capsule-gradle → WebM&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনি একজন পেশাদার অনুবাদক। fr থেকে bn এ অনুবাদ করুন। সব &amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt; ব্যাকটিক কোড স্প্যানকে যথাস্থিতি রাখুন — কখনো ব্যাকটিকের কন্টেন্ট, স্পেসিং, বা পজিশন পরিবর্তন করবেন না। এই টেক্সট একটি বড় বাক্যের অংশ হতে পারে — অংশটিকে আরও প্রসঙ্গ অনুরোধ ছাড়াই অনুবাদ করুন। শুধু অনুবাদিত পাঠ্য আউটপুট করুন — কোন ব্যাখ্যা, টীকা, ভূমিকা, বিকল্প, অপশন নেই।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভিডিও টিজিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;না&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অনিমেটেড টেকনিক ডেমো&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Doc-to-video&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;কোনো না&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম ব্যবহারের ক্ষেত্র গুরুত্বপূর্ণ: কীভাবে স্বয়ংক্রিয়ভাবে তৈরি করা যায়? একটি ৬০ সেকেন্ডের ভিডিও যা একটি প্রকল্প বা মডিউলকে উপস্থাপন করে, GSAP অ্যানিমেশনসহ, TTS নারেশন, এবং ব্যাকগ্রাউন্ড মিউজিক — সব একই AsciiDoc ফাইল থেকে স্লাইডগুলো কি ?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Capsule-gradle জবাব দিতে পারে না: এর &amp;lt;strong&amp;gt;এখনও&amp;lt;/strong&amp;gt; একটি ডেক reveal.js দরকার। slider-gradle এই ডেককে ভালোভাবে তৈরি করে, কিন্তু এটি ভিডিও রেন্ডারিংয়ের জন্য ডিজাইন করা হয়নি। একটি সরাসরি পাইপলাইন প্রয়োজন ছিল : AsciiDoc → ভিডিও।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_hyperframes_ইঞ্জিন&amp;quot;&amp;gt;HyperFrames : ইঞ্জিন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আবিষ্কার করেছিhttps://github.com/heygen-com/hyperframes[HyperFrames] il y a কিছু দিন। এইটা হেকজেন দ্বারা তৈরি ওপেন-সোর্স ফ্রেমওয়ার্ক (Apache 2.0), AI ভিডিওयालা ইউনিকর্ন। GitHub-এ ২২,৭০০ স্টার। পิจটি থাকায় একটি বাক্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;HTML লিখো। ভিডিও রেন্ডার করো। এজেন্টদের জন্য নির্মিত।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রিন্সিপ: আপনি HTML লিখেন কিছু`data-*`গুণগুলো, আপনি উল্লেখ করেন একটি GSAP অ্যানিমেশন (CSS, Lottie, Three.js… অথবা), এবং ইঞ্জিন সকলেরকে MP4-এ রেন্ডার করে Puppeteer (headless Chrome) + FFmpeg এর মাধ্যমে। নিশ্চিত ফলাফল: একই ইনপুট, একই ফ্রেম, একই ভিডিও।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;div id=&amp;quot;stage&amp;quot; data-composition-id=&amp;quot;intro&amp;quot; data-start=&amp;quot;0&amp;quot; data-width=&amp;quot;1920&amp;quot; data-height=&amp;quot;1080&amp;quot;&amp;amp;gt;
  &amp;amp;lt;video class=&amp;quot;clip&amp;quot; data-start=&amp;quot;0&amp;quot; data-duration=&amp;quot;6&amp;quot; data-track-index=&amp;quot;0&amp;quot;
         src=&amp;quot;background.mp4&amp;quot; muted playsinline&amp;amp;gt;&amp;amp;lt;/video&amp;amp;gt;

  &amp;amp;lt;h1 id=&amp;quot;title&amp;quot; class=&amp;quot;clip&amp;quot; data-start=&amp;quot;1&amp;quot; data-duration=&amp;quot;4&amp;quot; data-track-index=&amp;quot;1&amp;quot;&amp;amp;gt;
    Formation Docker &amp;amp;amp; Kubernetes
  &amp;amp;lt;/h1&amp;amp;gt;

  &amp;amp;lt;audio data-start=&amp;quot;0&amp;quot; data-duration=&amp;quot;6&amp;quot; data-track-index=&amp;quot;2&amp;quot;
         data-volume=&amp;quot;0.3&amp;quot; src=&amp;quot;music.wav&amp;quot;&amp;amp;gt;&amp;amp;lt;/audio&amp;amp;gt;

  &amp;amp;lt;script src=&amp;quot;https://cdn.jsdelivr.net/npm/gsap@3/dist/gsap.min.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
  &amp;amp;lt;script&amp;amp;gt;
    const tl = gsap.timeline({ paused: true });
    tl.from(&amp;quot;#title&amp;quot;, { opacity: 0, y: 40, duration: 0.8 }, 1);
    window.__timelines = window.__timelines || {};
    window.__timelines.intro = tl;
  &amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;/div&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;HyperFrames Remotion থেকে কী ভিন্ন? কোনো React নেই, কোনো বান্ডলার, JSX নেই। এজেন্ট IAদের যে ন্যাবটিভে HTML লিখতে পারে, তা নকচে HTML। এটি &amp;lt;strong&amp;gt;ঠিকভাবে&amp;lt;/strong&amp;gt; আমার পাইপলাইনের জন্য: planner-gradle সঙ্গে deepseek এই HTMLকে একটি SPG/SPD পরিকল্পনা থেকে তৈরি করতে পারে, এবং একটি গ্রেডল প্লাগিন এটি MP4-এ রূপান্তর করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্লাগিনের_আর্কিটেকচার&amp;quot;&amp;gt;প্লাগিনের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;hyperframes-gradle আমার সব প্লাগইনের মতো একই প্যাটার্ন অনুসরণ করে: এই &amp;lt;a href=&amp;quot;0124_architecture_plugin_gradle_racine_consommateur_independant_post.html&amp;quot;&amp;gt;pattern « স্বাধীন প্লাগইন + ভোক্তা মূল »&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;hyperframes-gradle/
├── settings.gradle.kts          ← racine consommateur (dogfood)
├── build.gradle.kts              ← 3 lignes : apply plugin hyperframes
├── hyperframes-plugin/           ← BUILD INDÉPENDANT
│   ├── gradlew                    ← son propre wrapper
│   ├── build.gradle.kts           ← java-gradle-plugin
│   ├── src/main/kotlin/education/cccp/hyperframes/
│   │   ├── HyperframesPlugin.kt
│   │   ├── GenerateHyperframesHtmlTask.kt
│   │   ├── RenderHyperframesTask.kt
│   │   └── HyperframesExtension.kt
│   ├── .agents/                   ← gouvernance agent
│   └── doc/
│       └── HYPERFRAMES_ARCHITECTURE.adoc
└── video.yml                      ← configuration dogfood&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_চার_ধাপের_পাইপলাইন&amp;quot;&amp;gt;চার ধাপের পাইপলাইন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 11

title পাইপলাইন হাইপারফ্রেমস-গ্র্যাডল
rectangle &amp;quot;AsciiDoc
উৎস&amp;quot; as adoc #LightYellow
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 11

title পাইপলাইন হাইপারফ্রেমস-গ্র্যাডল
rectangle &amp;quot;AsciiDoc
উৎস&amp;quot; as adoc #LightYellow
rectangle &amp;quot;AsciidoctorJ&amp;quot; as asciidoctorj #LightBlue
rectangle &amp;quot;HTML হাইপারফ্রেমস
(data-* attrs)&amp;quot; as html #LightGreen
rectangle &amp;quot;HyperFrames CLI
(Node.js 22+)&amp;quot; as cli #Lavender
rectangle &amp;quot;video.mp4&amp;quot; as mp4 #Gold

adoc -right-&amp;amp;gt; asciidoctorj : parse blocs customs
asciidoctorj -right-&amp;amp;gt; html : génère HTML
html -right-&amp;amp;gt; cli : ProcessBuilder\nnpx hyperframes render
cli -right-&amp;amp;gt; mp4 : Puppeteer + FFmpeg
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;AsciidoctorJ&amp;lt;/strong&amp;gt; AsciiDoc উৎসকে পার্স করে এবং কাস্টম ব্লকগুলোকে নিষ্কাশন করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;[hyperframes-composition]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[hyperframes-track]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;[hyperframes-animation]&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;GenerateHyperframesHtmlTask&amp;lt;/strong&amp;gt; HTML HyperFrames সঙ্গে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`data-*`সংশ্লিষ্ট বৈশিষ্ট্যগুলো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;RenderHyperframesTask&amp;lt;/strong&amp;gt; হাইপারফ্রেমস CLI-মাধ্যমে আহ্বান করে`ProcessBuilder`(Empty output)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;npx hyperframes render --input index.html --output video.mp4&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;MP4 এ স্থাপন করা হয়েছে`output/`সাথে একটি`metadata.json`অর্কেস্ট্রেশনের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অ্যাসসিআইডক_ডিএসএল&amp;quot;&amp;gt;অ্যাসসিআইডক ডিএসএল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনের আসল মূল্যবদ্ধি AsciiDoc DSL। ব্যবহারকারী তিনি কখনও HTML লিখেন না। তিনি তার বিদ্যমান AsciiDoc ডকুমেন্টকে টীকা দেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Formation Docker &amp;amp;amp; Kubernetes
:hyperframes-width: 1920
:hyperframes-height: 1080
:hyperframes-fps: 30

[hyperframes-composition, id=&amp;quot;intro&amp;quot;]
== Introduction

Le titre apparaît avec un fondu GSAP sur fond vidéo.

[hyperframes-track, index=0, start=0, duration=6]
video::assets/background.mp4[muted, playsinline]

[hyperframes-track, index=1, start=1, duration=4]
Formation Docker &amp;amp;amp; Kubernetes

[hyperframes-animation, type=gsap]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;const tl = gsap.timeline({ paused: true }); tl.from(&amp;quot;#title&amp;quot;, { opacity: 0, y: 40, duration: 0.8 }, 1); window.&amp;lt;em&amp;gt;timelines = window.&amp;lt;/em&amp;gt;timelines || {}; window.__timelines.intro = tl;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডকইনফো অ্যাট্রিবিউটগুলো (&amp;lt;code&amp;gt;:hyperframes-width:&amp;lt;/code&amp;gt;) তারা আকারগুলো কনফিগার করে। কাস্টম ব্লকগুলি কম্পোজিশন এবং ট্র্যাকগুলো নির্ধারণ করে। ব্লকটি `[hyperframes-animation]`এ অপরिष्कৃত GSAP কোড — যা AI-এজেন্ট এটি প্রাকৃতিক ভাষার বিবরণ থেকে তৈরি করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_node_js_ব্রিজ&amp;quot;&amp;gt;Node.js ব্রিজ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একমাত্র প্রযুক্তিগত ধর্ষণ পয়েন্ট: HyperFrames Node.js/TypeScript-এ, এবং আমার প্লাগইনগুলো Kotlin/JVM-এ। সমাধানটি একটি`ProcessBuilder`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class RenderHyperframesTask : DefaultTask() {

    @TaskAction
    fun render() {
        val process = ProcessBuilder(
            &amp;quot;npx&amp;quot;, &amp;quot;hyperframes&amp;quot;, &amp;quot;render&amp;quot;,
            &amp;quot;--input&amp;quot;, inputHtml.absolutePath,
            &amp;quot;--output&amp;quot;, outputMp4.absolutePath
        )
            .inheritIO()
            .start()

        val exitCode = process.waitFor()
        require(exitCode == 0) {
            &amp;quot;HyperFrames render failed with exit code $exitCode&amp;quot;
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জেভিএম ↔ নোডজএস কোডের কোনো জোড়া নেই। চুক্তি কমান্ড লাইনের মাধ্যমে। এবং ডিস্কে ফাইলগুলো। এটি একই প্যাটার্ন যা`plantuml-gradle` (যে PlantUML CLI-কে ডাকে) অথবা`slider-gradle`(যে AsciidoctorJ-কে ডেকে নেয় ). সূর্যের অধীনে কোনো নতুন কিছু নেই — শুধুমাত্র একটি আপডেট করা সরঞ্জামে প্রয়োগ করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দুই_ভিডিও_প্লাগইন_দুটি_ব্যবহার&amp;quot;&amp;gt;দুই ভিডিও প্লাগইন, দুটি ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.7619%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.762%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;capsule-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;hyperframes-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Source&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডেক reveal.js (উপরিচিত HTML)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;AsciiDoc → HTML HyperFrames&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারের ক্ষেত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংশোধন ক্যپسুল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বতন্ত্র ব্যাখ্যামূলক ভিডিও&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রকৃতি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Slides → ভিডিও&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডকুমেন্ট → ভিডিও&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রস্তুত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Playwright Java → WebM&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HyperFrames CLI → MP4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যানিমেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ট্রানজিশন reveal.js নেটিভ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GSAP/CSS ডেটা-অট্রিবিউট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্ট্যাক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;১০০% JVM (Kotlin)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JVM + Node.js CLI বাহ্যিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এগুলো একে অপরে প্রতিস্থাপন করেন না। তারা একে অপরের পূরক। সম্পূর্ণ মূল্য শৃঙ্খলা:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc ──→ slider-gradle ──→ deck reveal.js ──→ capsule-gradle ──→ WebM (সংশোধন ক্যাপসুল)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc ──→ hyperframes-gradle ──→ MP4 (ভিডিও স্বাধীন)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যবহারকারী একটি একক AsciiDoc ফাইল লিখে। slider-gradle স্লাইডগুলো তৈরি করে। capsule-gradle সমীক্ষা ক্যাপসুল উৎপাদন করে। hyperframes-gradle উৎপাদন করে টিজার ভিডিও এবং টেকনিক্যাল ডেমো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রোডম্যাপের_৬টি_epic&amp;quot;&amp;gt;রোডম্যাপের ৬টি EPIC&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি 6টি EPIC-এ গঠিত:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1682%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;EPIC&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিবরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রাধান্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Bootstrap গভর্নেন্স + আর্কিটেকচার ফ্রেমিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅ সমাপ্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গ্রেডল স্টাব প্লাগইন + AsciidoctorJ ইন্টিগ্রেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পুল CLI হাইপারফ্রেমস (ProcessBuilder → npx → MP4)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DSL AsciiDoc প্রথা (ব্লক, docinfo, টেমপ্লেট)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রানার-গ্রেডল একীকরণ (metadata.json)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রয়োগযোগ্য টেমপ্লেট (title-card, code-diff, captions)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HF-6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CI + প্রকাশন Maven Central / Gradle Portal&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;P3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন 000 (bootstrap) ইতিমধ্যে শেষ হয়েছে। সেশন 001 HF-1‑এ আক্রমণ করবে : গ্রেডল প্লাগইন স্টাব ও AsciidoctorJ ইন্টিগ্রেশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_এটি_কাজ_করে&amp;quot;&amp;gt;কেন এটি কাজ করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি কারণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;HyperFrames আছে &amp;quot;built for agents&amp;quot;&amp;lt;/strong&amp;gt;. আমার পাইপলাইন নির্ভর করে এজেন্ট কৃত্রিম বুদ্ধিমত্তা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(planner-gradle + deepseek) যা কন্টেন্ট তৈরি করে। HyperFrames গ্রহণ করে কাঁচা HTML — যে ফরম্যাটটি LLM-গুলো সবচেয়ে ভালো করে বুঝে। কোনো React নাও, কোনো JSX-এর, এজেন্টের জন্য কোনো শেখার-avকশ নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আসciiডক DSL স্বাভাবিক&amp;lt;/strong&amp;gt;. আমার সম্পূর্ণ ইকোসিস্টেম AsciiDoc কথা বলে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;slider-gradle, codex-gradle, training-gradle — তারা উপভোগ করে`.adoc`. কাস্টম ব্লক যোগ করুন`[hyperframes-composition]`একটি এক্সটেনশন তর্কগত, ভাঙা না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Node.js bridge একটি পরীক্ষিত প্যাটার্ন&amp;lt;/strong&amp;gt;. ProcessBuilder JVM-এর বাইরে,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটাই আমি ইতিমধ্যে PlantUML, Graphviz, Piper জন্য করছি। HyperFrames যোগ করুন এটি অ্যার্কিটেকচার পরিবর্তন না — এটি একটি অতিরিক্ত বাহ্যিক টুল, Gradle থেকে পরিচালিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্যাটার্নের সত্যী Shakti, এর mdhye কোনো npm নির্ভরতা নেই Gradle বিল্ড। প্লাগইনটি কোনো Node.js কোড আমদানি করে না। এটি একটি শেল কমান্ড. যদি HyperFrames পরিবর্তিত হয় বা ভাঙে, প্লাগইনটি জোড়িত নয় — কমান্ড আপডেট করা যথেষ্ট।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_অনুপস্থিত_শৃঙ্খল&amp;quot;&amp;gt;উপসংহার: অনুপস্থিত শৃঙ্খল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হাইপারফ্রেমস-গ্রেডলের সঙ্গে, আমার ভিডিও পাইপলাইন সম্পূর্ণ। আমার আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এগুলো &amp;lt;strong&amp;gt;ইন্টারেক্টিভ স্লাইড&amp;lt;/strong&amp;gt; (slider-gradle)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন ক্যাপসুলগুলো&amp;lt;/strong&amp;gt; (capsule-gradle)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্বাধীন ভিডিওস&amp;lt;/strong&amp;gt; (hyperframes-gradle)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি ফরম্যাট। একক উৎস ফাইল: l&amp;amp;#8217;AsciiDoc.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরবর্তী লক্ষ্য হল HF-1: প্লাগইন কম্পাইল করা এবং একটি তৈরি করা প্রথম HTML HyperFrames একটি টীকা যোগ করা AsciiDoc ডকুমেন্ট থেকে। সেশন 001 ইতিমধ্যে ফ্রেম করা আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;hyperframes-gradle রয়েছে। শাসন ব্যবস্থা স্থাপিত আছে। ব্যাকলগ এটি লিখা হয়েছে। আর্কিটেক্টা নথিভুক্ত করা হয়েছে। প্লাগইন জন্মগ্রহণ করেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_তথ্যসূত্র&amp;quot;&amp;gt;তথ্যসূত্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১২৪ — স্বতন্ত্র প্লাগইন আর্কিটেকচার + ভোক্তা মূল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/heygen-com/hyperframes&amp;quot;&amp;gt;HyperFrames — গিটহাব&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://hyperframes.heygen.com/introduction&amp;quot;&amp;gt;HyperFrames — ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;foundry/public/hyperframes-gradle/hyperframes-plugin/doc/HYPERFRAMES_ARCHITECTURE.adoc&amp;lt;/code&amp;gt;— বিস্তারিত কাঠামো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>আমার LLM ব্যবহার অডিট : SQLite, OpenCode, Ollama Cloud, এবং আমার প্রো সাবস্ক্রিপশন ব্যাঙ্গлайছে বিশ্বব্যাপী বাজার</title>
            <link >https://cheroliv.com//blog/2026/0125_audit_conso_opencode_methodologie_comparaison_prix_llm_post.html</link>
            <pubDate>Mon, 18 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0125_audit_conso_opencode_methodologie_comparaison_prix_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্ট্যাক_বোঝা_কে_কী_করছে&amp;quot;&amp;gt;স্ট্যাক বোঝা: কে কী করছে ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা_একটি_অডিট_কেন&amp;quot;&amp;gt;ভূমিকা : একটি অডিট কেন ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ওপেনকোড_ডেটাবেস_একটি_স্বর্ণ_খনি&amp;quot;&amp;gt;ওপেনকোড ডেটাবেস: একটি স্বর্ণ খনি&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্কিম&amp;quot;&amp;gt;স্কিম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এক্সট্র্যাকশন_কোড&amp;quot;&amp;gt;এক্সট্র্যাকশন কোড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফলাফল_73_দিনের_ব্যবহার&amp;quot;&amp;gt;ফলাফল : 73 দিনের ব্যবহার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশ্বদৃশ্য&amp;quot;&amp;gt;বিশ্বদৃশ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মডেল_ও_সরবাহকারী_द्वारा_বেনটিলেশন&amp;quot;&amp;gt;মডেল ও সরবাহকারী द्वारा বেনটিলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অন্তর_সেশান_মডেল_সেশন_টেবিল_যা_দেখে_না&amp;quot;&amp;gt;অন্তর-সেশান মডেল: সেশন টেবিল যা দেখে না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টারিফের_তুলনা_পশ্চিমিম_সরবরাহকারী&amp;quot;&amp;gt;টারিফের তুলনা — পশ্চিমিম সরবরাহকারী&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_anthropic_claude&amp;quot;&amp;gt;Anthropic — Claude&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_openai_gpt&amp;quot;&amp;gt;OpenAI — GPT&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_google_gemini&amp;quot;&amp;gt;Google — Gemini&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_huggingface_অনুমান_প্রদানকারী&amp;quot;&amp;gt;HuggingFace অনুমান প্রদানকারী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_groq&amp;quot;&amp;gt;Groq&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ট্যারিফ_তুলনা_চীনা_সরবাহকারীদের&amp;quot;&amp;gt;ট্যারিফ তুলনা — চীনা সরবাহকারীদের&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_deepseek_api_direct_platform_deepseek_com&amp;quot;&amp;gt;DeepSeek API Direct (platform.deepseek.com)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কিমি_মুনশট_platform_kimi_com&amp;quot;&amp;gt;কিমি মুনশট (platform.kimi.com)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_alibaba_bailian_bailian_aliyun_com&amp;quot;&amp;gt;Alibaba Bailian (bailian.aliyun.com)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সারসংক্ষেপ_সারণি_সব_প্রদানকারী&amp;quot;&amp;gt;সারসংক্ষেপ সারণি — সব প্রদানকারী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লুকানো_খরচ_prompt_engineering_এবং_অবরতী&amp;quot;&amp;gt;লুকানো খরচ: Prompt Engineering এবং অবরতী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ollama_ক্লাউড_প্রো_সাবস্ক্রিপ্টগুলো_একত্রিত_করা_ডকার_পদ্ধতি&amp;quot;&amp;gt;Ollama ক্লাউড প্রো সাবস্ক্রিপ্টগুলো একত্রিত করা: ডকার পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অডিট_যা_পরিমাপ_করে_না&amp;quot;&amp;gt;অডিট যা পরিমাপ করে না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ_সংখ্যার_বিচার&amp;quot;&amp;gt;নিষ্কর্ষ : সংখ্যার বিচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টারিফের_উৎস&amp;quot;&amp;gt;টারিফের উৎস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pাঠনের সময় : 22 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আমাকে কখনো কখনো জিজ্ঞাসা হয় যে আমার AI ব্যবহার খরচ কত। আমি উত্তর দিই « ২০ টাকা প্রতি মাস » এবং আমাকে চোখ বড়িয়ে দেখানো হয়। তাই আজ, আমি আপনাদের কালো ডিবাক্স খুলব। এই নিবন্ধটি আমার 73 দিনের ভাইব কোডিংয়ের সম্পূর্ণ অডিট: OpenCode SQLite ডেটাবেস থেকে ডেটা বের করার পদ্ধতি, টেবিলগুলোর কোয়েরি করার জন্য SQL কোড, এবং বাজারের &amp;lt;strong&amp;gt;সব&amp;lt;/strong&amp;gt; সরবরাহকারীর সাথে সম্পূর্ণ তুলনা — পাশ্চাত্য seperti চীনীয়। ফলটি এতন অসমমিত যে আমাকে আমার গণনা তিনবার যাচাই করতে হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;(empty)&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_স্ট্যাক_বোঝা_কে_কী_করছে&amp;quot;&amp;gt;স্ট্যাক বোঝা: কে কী করছে ?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সংখ্যাগুলোতে ডুবি যাওয়ার আগে, আমাদের আর্কিটেকচারটি স্পষ্ট করি। আমার সেটআপে তিনটি ভিন্ন অভিনেতা আছে, এবং এগুলোকে মিশিয়ে না নিশ্চিত করা গুরুত্বপূর্ণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 11) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title আমার LLM স্ট্যাকের তিনটি অভিনেতা
left to right direction

actor &amp;quot;আমি (ডেভেলপার)&amp;quot; as Dev

package &amp;quot;OpenCode\n(github.com/anomalyco/opencode)&amp;quot; as OC {
  rectangle &amp;quot;CLI এর vibe coding
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title আমার LLM স্ট্যাকের তিনটি অভিনেতা
left to right direction

actor &amp;quot;আমি (ডেভেলপার)&amp;quot; as Dev

package &amp;quot;OpenCode\n(github.com/anomalyco/opencode)&amp;quot; as OC {
  rectangle &amp;quot;CLI এর vibe coding
মুক্ত উৎস, বিনামূল্যে&amp;quot; as CLI
  note right of CLI
    C&amp;#39;est l&amp;#39;outil que j&amp;#39;utilise
    pour coder avec des agents IA.
    Il ne fournit AUCUN modèle.
    C&amp;#39;est un terminal + un orchestrateur.
  end note
}

package &amp;quot;Ollama (স্থানীয় ইনস্টলেশন)&amp;quot; as OL {
  rectangle &amp;quot;অনুমান ক্লায়েন্ট
আমার মেশিনে ইনস্টল করা হয়েছে&amp;quot; as Client
  note right of Client
    C&amp;#39;est le logiciel qui fait tourner
    les modèles. Il peut les exécuter
    en local OU les déléguer au cloud
    selon le tag (:cloud).
    Il s&amp;#39;authentifie via clé SSH.
  end note
}

package &amp;quot;Ollama ক্লাউড
(ollama.com)&amp;quot; as OCloud {
  rectangle &amp;quot;ক্লাউড অনুমান সেবা
প্রো সাবস্ক্রিপশন : 20€/মাস&amp;quot; as Cloud
  note right of Cloud
    C&amp;#39;est le fournisseur d&amp;#39;inférence.
    Mes modèles avec le tag :cloud
    sont exécutés sur LEURS serveurs.
    L&amp;#39;abonnement Pro donne accès
    à des quotas supérieurs.
  end note
}

Dev --&amp;amp;gt; CLI : &amp;quot;আমি প্রম্পট টাইপ করি&amp;quot;
CLI --&amp;amp;gt; Client : &amp;quot;এই মডেলকে ডাকো&amp;quot;
Client --&amp;amp;gt; Cloud : &amp;quot;এসএসএইচ কী + অনুরোধ
(মডেলগুলো :cloud)&amp;quot;
Client --&amp;amp;gt; Client : &amp;quot;স্থানীয় নिष্পাদন
(মডেল ছাড়া :cloud)&amp;quot;

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;OpenCode কোনো মডেল প্রদানকারী নয়।&amp;lt;/strong&amp;gt;এটি একটি ওপেন-সোর্স CLI (&amp;lt;a href=&amp;quot;https://github.com/anomalyco/opencode&amp;quot;&amp;gt;github.com/anomalyco/opencode&amp;lt;/a&amp;gt;) যা কৃত্রিম বুদ্ধিমত্তা (IA) এজেন্টদেরকে পরিচালনা করে। এটি কোনো সাবস্ক্রিপশন বিক্রি করে না, কোনো অনুমান প্রদান করে না। এটি তার সমতুল্য।&amp;lt;code&amp;gt;git`সংস্করণের জন্য : একটি সরঞ্জাম, একটি পরিষেবা না. &amp;lt;strong&amp;gt;Ollama Cloud হল অনুমানের প্রদানকারী।&amp;lt;/strong&amp;gt;আমার স্থানীয় ওllamা ইনস্টলেশন একটি &amp;lt;strong&amp;gt;client&amp;lt;/strong&amp;gt; হিসেবে কাজ করে — এটি একটি অনন্য SSH কী (Device Key) এর মাধ্যমে ওllamা সার্ভারদের সাথে প্রমাণীকরণ করে এবং ট্যাগ করা মডেল들의実行কে সে সার্ভার들에게প্রভুক্ত করে।&amp;lt;/code&amp;gt;:cloud`। প্রো সাবস্ক্রিপশন (২০€/মাস) Ucch quota উন্মুক্ত করে এবং একই মেশিনে Docker এর মাধ্যমে একাধিক অ্যাকাউন্ট একত্রিত করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা_একটি_অডিট_কেন&amp;quot;&amp;gt;ভূমিকা : একটি অডিট কেন ?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুই মাস আগে, আমি স্থানীয় Ollama ইনস্টলেশনে মডেলগুলো বিনামূল্যে ব্যবহার করছিলাম। তারপর প্রথমবারের মতো Ollama Cloud Pro সাবস্ক্রিপশন নিয়েছি ২০ ইউরো/মাসে, যা আমাকে ক্লাউড মডেল (যেগুলোর ট্যাগ`:cloud`) প্রোভাইডারের মাধ্যমে`ollama-cloud`. দ্বিতীয় সাবস্ক্রিপশন একটি মাস পরে অনুসরণしていた, একটি আলাদা ডকার ইনস্ট্যান্সে, যেখানে এর নিজস্ব অ্যাকাউন্ট এবং নিজস্ব SSH কী ছিল — &amp;lt;a href=&amp;quot;0120_cumuler_deux_abonnements_ollama_pro_docker_post.html&amp;quot;&amp;gt;সাবস্ক্রিপশন সংযোঁড়ের বিষয়ে আমার লেখা&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাকে উদ্বিগ্ন করিতていた প্রশ্ন: &amp;lt;strong&amp;gt;এই ২০ ইউরো/মাস কি সঠিক?&amp;lt;/strong&amp;gt; অনুমান দ্বারা নয়। সংখ্যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তর দিতে, আমাকে সঠিক ডেটা দরকার ছিল। অনুমান নয়। গড় নয়। আমার &amp;lt;strong&amp;gt;বাস্তব&amp;lt;/strong&amp;gt; ব্যবহার, টোকেন করে টোকেন, মডেল করে মডেল, সেশন করে সেশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং OpenCode — CLI — সব এইককে একটি SQLite ডেটাবেজে সংরক্ষণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ওপেনকোড_ডেটাবেস_একটি_স্বর্ণ_খনি&amp;quot;&amp;gt;ওপেনকোড ডেটাবেস: একটি স্বর্ণ খনি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OpenCode তার সেশনের পুরো ইতিহাসকে একটি SQLite ফাইলে সংরক্ষণ করে যা অবস্থিত`~/.local/share/opencode/opencode.db`. La mienne pèse 660 Mo pour 73 jours d&amp;amp;#8217;utilisation — une base de données de production tout à fait respectable.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ls -lh ~/.local/share/opencode/opencode.db
-rw-r--r-- 1 cheroliv cheroliv 660M mai 18 12:25 opencode.db&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্কিম&amp;quot;&amp;gt;স্কিম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেটাবেসে প্রায় বিশ টেবিল আছে, কিন্তু তিনটি আমাদের অডিটের জন্য গুরুত্বপূর্ণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/schema-principal.svg&amp;quot; alt=&amp;quot;schema principal&amp;quot; width=&amp;quot;684&amp;quot; height=&amp;quot;397&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেবিল`session`এটি বিশ্বব্যাপী নিরীক্ষণের জন্য পরিপূর্ণ: প্রতিটি সেশনে সমষ্টিগত টোকেন সংখ্যা, ব্যবহৃত মডেল ও খরচ আছে। খেত্র`model`কাঁচা JSON:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;id&amp;quot;: &amp;quot;deepseek-v4-pro:cloud&amp;quot;,
  &amp;quot;providerID&amp;quot;: &amp;quot;ollama-cloud&amp;quot;,
  &amp;quot;variant&amp;quot;: &amp;quot;default&amp;quot;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক্ষেত্র`cost`ওপেনকোড ডেটাবেসে শুধুমাত্র &amp;lt;strong&amp;gt;বাহ্যিক API ফি&amp;lt;/strong&amp;gt; কনসাম্পশন অনুযায়ী API কী দিয়ে পরিশোধ করা হয় (Google Gemini, OpenAI, ইত্যাদি)। Ollama- এর মাধ্যমে API কল — স্থানীয়ভাবে অথবা Ollama Cloud Pro- এর মাধ্যমে — চিহ্নিত করা হয়`cost=0`কারণ খরচটি সাবস্ক্রিপশন-ভিত্তিক, প্রতি-টোকেন না। এই 콜দের সত্য খরচ, মাসিক সাবস্ক্রিপশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এক্সট্র্যাকশন_কোড&amp;quot;&amp;gt;এক্সট্র্যাকশন কোড&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোনো জিনিস ইনস্টলের দরকার নেই। Node.js 22+ একটি পরীক্ষামূলক SQLite মডিউলANTARBHUKTO KEDE (&amp;lt;code&amp;gt;node:sqlite&amp;lt;/code&amp;gt;) যেটি পূর্ণাঙ্গরূপে কাজ করে। এখানে স্ক্রিপ্টটি দেওয়া হয়েছে যা আমাকে সবকিছু দিয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;const { DatabaseSync } = require(&amp;#39;node:sqlite&amp;#39;);
const db = new DatabaseSync(
  `${process.env.HOME}/.local/share/opencode/opencode.db`,
  { readonly: true }
);

// 1. Statistiques globales
const global = db.prepare(`
  SELECT
    COUNT(*) as sessions,
    SUM(tokens_input) as total_input,
    SUM(tokens_output) as total_output,
    SUM(tokens_reasoning) as total_reasoning,
    SUM(tokens_cache_read) as total_cache_read,
    SUM(cost) as total_cost
  FROM session
`).get();

// 2. Ventilation par modèle et fournisseur
const byModel = db.prepare(`
  SELECT
    json_extract(model, &amp;#39;$.id&amp;#39;) as model_id,
    json_extract(model, &amp;#39;$.providerID&amp;#39;) as provider,
    COUNT(*) as sessions,
    SUM(tokens_input) as total_input,
    SUM(tokens_output) as total_output,
    SUM(cost) as total_cost
  FROM session
  WHERE model IS NOT NULL
  GROUP BY model_id, provider
  ORDER BY SUM(tokens_input) DESC
`).all();

// 3. Par mois
const monthly = db.prepare(`
  SELECT
    strftime(&amp;#39;%Y-%m&amp;#39;, datetime(time_created/1000, &amp;#39;unixepoch&amp;#39;)) as month,
    COUNT(*) as sessions,
    SUM(tokens_input) as total_input,
    SUM(tokens_output) as total_output,
    SUM(cost) as total_cost
  FROM session
  WHERE time_created IS NOT NULL
  GROUP BY month
  ORDER BY month
`).all();

// 4. Messages par modèle (détection des changements intra-session)
const msgByModel = db.prepare(`
  SELECT
    json_extract(m.data, &amp;#39;$.model.providerID&amp;#39;) as provider,
    json_extract(m.data, &amp;#39;$.model.modelID&amp;#39;) as model_id,
    COUNT(*) as messages
  FROM message m
  WHERE json_extract(m.data, &amp;#39;$.model&amp;#39;) IS NOT NULL
  GROUP BY provider, model_id
  ORDER BY COUNT(*) DESC
`).all();

console.log({ global, byModel, monthly, msgByModel });
db.close();&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ঝাঁড়`--experimental-sqlite`Node.js 22.x-এ প্রয়োজন। Node.js 24+ -এ মডিউল স্থিতিশীল এবং আর কোনো ফ্ল্যাগ প্রয়োজন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফলাফল_73_দিনের_ব্যবহার&amp;quot;&amp;gt;ফলাফল : 73 দিনের ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশ্বদৃশ্য&amp;quot;&amp;gt;বিশ্বদৃশ্য&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মেট্রিক&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মান&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রেক্ষাপট&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Sessions OpenCode&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1 022&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রতি দিন গড়েও প্রায় ১৪ সেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;টোকেন ইনপুট&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;২.৬২ আर्ब&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;যে 94,5M ক্যাশ হিটে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Tokens Output&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;২১ মিলিয়ন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(No output, as no French text was provided for translation)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;টোকেন তর্কবিচার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;141 000&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ গুরুত্বপূর্ণ — প্রায় কোনো চিন্তা না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বাহ্যিক API খরচ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$0,22&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সাবস্ক্রিপশন বাইরের খরচ (Gemini + free tiers)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই \$0,22 সংখ্যা গুরুত্বপূর্ণ: এটি হলো যে আমি Ollama Cloud Pro সাবস্ক্রিপশনের &amp;lt;strong&amp;gt;বাড়তি&amp;lt;/strong&amp;gt; অংশে পরিশোধ করেছি, অর্থাৎ تقریباً কিছু না। সাবস্ক্রিপশনটি জরুরি বিষয়গুলো কভার করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title মাসিক উন্নয়ন — টোকেন ইনপুট
rectangle &amp;quot;মার্চ ২০২৬
৯ সেশন
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title মাসিক উন্নয়ন — টোকেন ইনপুট
rectangle &amp;quot;মার্চ ২০২৬
৯ সেশন
৩৭,৭M টোকেন&amp;quot; as MARS #FFE082
rectangle &amp;quot;এপ্রিল ২০২৬
৪৮৬ সেশন
১,৩৩ মিলিয়ন টোকেন&amp;quot; as AVR #81C784
rectangle &amp;quot;মে ২০২৬\n527 সেশন\n১.২৫ বিলিয়ন টোকেন&amp;quot; as MAI #64B5F6

MARS -right-&amp;amp;gt; AVR : ×35
AVR -right-&amp;amp;gt; MAI : stable (période en cours)

note bottom of MAI
  Mai comptabilisé jusqu&amp;#39;au 18.
  Projection mois complet : ~2,1 Md tokens
  si la tendance se maintient.
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মার্চ ও এপ্রিলের মধ্যে উঠানবাজা অদ্ভুত: একটি মাসে ×35 বৃদ্ধি। এটি « test » ব্যবহার থেকে « production » ব্যবহারে সক্রিয়ান্তার — যখন আমিGradle প্লাগইনের জন্য সতatamente OpenCode এজেন্ট চালু করার শুরু&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মডেল_ও_সরবাহকারী_द्वारा_বেনটিলেশন&amp;quot;&amp;gt;মডেল ও সরবাহকারী द्वारा বেনটিলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Wait, that has Devanagari &amp;quot;द्वारा&amp;quot;. Need to use Bengali &amp;quot;দ্বারা&amp;quot;. So correct: &amp;quot;মডেল ও সরবাহকারী দ্বারা বেনটিলেশন&amp;quot;. Let&amp;amp;#8217;s output exactly.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মডেল ও সরবাহকারী দ্বারা বেনটিলেশন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক্ষেত্র`model`টেবিলের`session`JSON হলে,`json_extract()`শুদ্ধভাবে বাতাস বাহন করতে সক্ষম :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2727%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1819%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল × প্রদানকারী&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সেশন&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;Input&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;(Note: Since no French text was provided to translate, the output is empty.)&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;খরচ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;deepseek-v4-pro @ ollama-cloud&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;63&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;220 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1,94 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;deepseek-v4-pro @ ollama-b&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;124&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;463 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4,15 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;deepseek-v4-pro @ ollama&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;100&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;252 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2,25 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;deepseek-v4-flash-free @ opencode&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;16&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1,3 M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;279 K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;qwen3.6-plus-free @ opencode&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;369 K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;25 K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;gemini-2.5-flash @ google&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;211 K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;19 K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,04&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি ভিন্ন providers পুরোপুরি একই DeepSeek V4 Pro মডেলের জন্য :
* &amp;lt;code&amp;gt;ollama-cloud&amp;lt;/code&amp;gt;→ via &amp;lt;strong&amp;gt;পরিশোধিত Pro সাবস্ক্রিপশন&amp;lt;/strong&amp;gt; (Ollama द्वारा পরিচালিত ক্লাউড)
* &amp;lt;code&amp;gt;ollama-b&amp;lt;/code&amp;gt;→ &amp;lt;strong&amp;gt;দ্বিতীয় Pro সাবস্ক্রিপশন&amp;lt;/strong&amp;gt;, একটি পৃথক Docker কনটেইনারে পৃথক করা হয়েছে
* &amp;lt;code&amp;gt;ollama&amp;lt;/code&amp;gt;→ instance native locale, &amp;lt;strong&amp;gt;নিরুখ্য&amp;lt;/strong&amp;gt; (আমার মেশিনে সরাসরি চলে)
তিনের যোগফল 936M ইনপুট, 8,4M আউটপুট — এটি মোট ব্যবহার আমার DeepSeek V4 Pro, সব প্রোভাইডর মিলিয়ে। শুধু`ollama-cloud`(220M input) একটি সাবস্ক্রিপশন খরচ হয়। বাকি 716M মুক্ত (স্থানীয় অথবা সাবস্ক্রিপশনের সমন্বয়)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অন্তর_সেশান_মডেল_সেশন_টেবিল_যা_দেখে_না&amp;quot;&amp;gt;অন্তর-সেশান মডেল: সেশন টেবিল যা দেখে না&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেবিল`session`শুধু সেশনের &amp;lt;strong&amp;gt;প্রধান&amp;lt;/strong&amp;gt; মডেলটি ক্যাপচার করে। কিন্তু একই সেশনে, একটি OpenCode এজেন্ট বিভিন্ন মডেলের মধ্যে পরিবর্তন করতে পারে। টেবিল`message`প্রকাশ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;Modèles utilisés dans les messages (ollama-cloud provider) :
├─ deepseek-v4-pro      1 441 msgs  (32%)
├─ qwen3.5:397b         1 217 msgs  (27%)
├─ glm-5.1                712 msgs  (16%)
├─ kimi-k2.6:cloud        634 msgs  (14%)
├─ qwen3-coder:480b       414 msgs   (9%)
├─ gpt-oss:20b             34 msgs  (0,8%)
├─ qwen3-coder-next        27 msgs  (0,6%)
└─ gemma4:31b               7 msgs  (0,2%)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি এখন Qwen, GLM, Kimi এবং অন্যান্য মডেল ব্যবহার করি না। তারা ইতিহাসে প্রদর্শিত হয় কারণ আমি অপ্রিলে অনেক জিনিষ পরীক্ষা করেছি। মাঝে-মে থেকে, আমি DeepSeek V4 Pro-এ সীমাবদ্ধ আছি — এটি একমাত্র মডেল যা দীর্ঘ কনটেক্সটে agent governance সহ লোডকে বজায় রাখে (cf. &amp;lt;a href=&amp;quot;0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html&amp;quot;&amp;gt;ma comparaison Kimi/GLM/DeepSeek&amp;lt;/a&amp;gt;)। ইতিহাসে deepseek বার্তার 32% মিথyai: আজ এটি 100%।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টারিফের_তুলনা_পশ্চিমিম_সরবরাহকারী&amp;quot;&amp;gt;টারিফের তুলনা — পশ্চিমিম সরবরাহকারী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অস্বস্তিকর প্রশ্ন : এই একই مصرفের খर्च ঐ প্রথাগত সরবরাহদাতাদের কাছে কতো হতো?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার গণনার ভিত্তি tulnar jonny :&amp;lt;strong&amp;gt;২২০M টোকেন ইনপুট + ১,৯M টোকেন আউটপুট&amp;lt;/strong&amp;gt;— &amp;lt;strong&amp;gt;শুধু&amp;lt;/strong&amp;gt; পাস করা আয়তন`ollama-cloud`(একমাত্রটি যা আমার প্রিমিয়াম সাবসক্রিপশনের সাথে মেলে)। বাকি 716Mটি বিনামূল্যে (Ollama স্থানীয় এবং Docker B ইনস্ট্যান্স)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 23.0769%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3847%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রদানকারী&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;\$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;মার সেটআপ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;\~20€&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;1×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_anthropic_claude&amp;quot;&amp;gt;Anthropic — Claude&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2727%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1819%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপাস ৪.৭&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$25&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1 148&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;57×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সোনেট ৪.৬&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$689&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;34×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Haiku 4.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$230&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;11×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবেন Haiku 4.5, ক্লোডের সবচেয়ে আর্থিক মডেল, ১১ গুণ আমার সাবস্ক্রিপশনের খরচ। এবং এটি আমার কোডবেসের কিছু না জানে, আমার শৈলিতে কিছু উৎপন্ন করে না, এবং গড়াল কোটলিন DSL API-কে হ্যালুসিনেট করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_openai_gpt&amp;quot;&amp;gt;OpenAI — GPT&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2727%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1819%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$30&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1 157&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;58×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$2,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$579&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;29×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4 মিনি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,75&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$4,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$174&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;9×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_google_gemini&amp;quot;&amp;gt;Google — Gemini&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2727%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1819%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;\$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জেমיני ৩.১ প্রো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$2,00&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$459&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;২৩ বার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জেমিনি ৩ ফ্ল্যাশ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,30&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$69&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;3,5×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gemini 3 Flash 69€-এ শুধুমাত্র « নিকট » মূলyat প্রতিযোগী — কিন্তু এটি হালকা ঘন মডেল, DeepSeek V4 Pro এর মতো 1.6T MoE নয়। উৎপন্ন কোডের গুণমান কোনো সম্পর্ক নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_huggingface_অনুমান_প্রদানকারী&amp;quot;&amp;gt;HuggingFace অনুমান প্রদানকারী&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;HuggingFace নিজে কোনো inferences করে না — এটি তৃতীয়-পক্ষ &amp;lt;strong&amp;gt;providers&amp;lt;/strong&amp;gt; (Novita, Together, DeepInfra, Cerebras, SambaNova, Fireworks, Groq…)কে একটি একত্রিত API-কে মাধ্যমে জুড়ে। আমরা সস্তে বা দ্রুততম provider-কে বেছে নিই। এখানে মে ২০২৬-এ সংগ্রহিত DeepSeek V4 Pro-এর মূল্যাবলী দেওয়া হল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2727%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1819%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রোভাইডার HF&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট $/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নভিটা (সেরা সাশ্রয়ী)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,67&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3,38&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$374&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;১৯×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepInfra&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,74&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3,48&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$389&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;19×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একসঙ্গে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$2,10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$4,40&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;৪৭০ ডলার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;23×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আবজ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গোপন ট্যারিফ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(no output, as no French text was provided to translate)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;—&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;—&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হ্যাগিংফেস (Novita) এ সবচেয়ে সস্তা প্রদানকারীও আমার সাবস্ক্রিপশনের মূল্যের ১৯ গুণ খরচ করে। Ollama Cloud-এ বিপরীত, হ্যাগিংফেস &amp;lt;strong&amp;gt;অতিরিক্ত&amp;lt;/strong&amp;gt; প্ল্যাটফর্ম ফি খরচ করে যদি আপনার PRO HF সাবস্ক্রিপশন না থাকে (\$9/মাস)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_groq&amp;quot;&amp;gt;Groq&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Groq-এ &amp;lt;strong&amp;gt;কোনো&amp;lt;/strong&amp;gt; মডেল যা আমি ব্যবহার করি না — তাদের ক্যাটালগ শুধুমাত্র GPT-OSS, Llama এবং Qwen 32B-এ সীমিত। তুলনা করা সম্ভব নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ট্যারিফ_তুলনা_চীনা_সরবাহকারীদের&amp;quot;&amp;gt;ট্যারিফ তুলনা — চীনা সরবাহকারীদের&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সত্যি পরীক্ষাটি চীনের বাজার। যদি DeepSeek একটি চীনীয় মডেল, তাহলে Its নেটিভ API সাশত হওয়া উচিত, না?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_deepseek_api_direct_platform_deepseek_com&amp;quot;&amp;gt;DeepSeek API Direct (platform.deepseek.com)&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 22.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 22.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 22.2223%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কাল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;\$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আউটপুট \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;খরচ/মাস&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রমো -75% (শেষ ৩১ মে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,435&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,87&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$৯৮&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পূর্ণ টারিফ (জুনের থেকে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,74&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3,48&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$390&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DeepSeek-এর আগ্রহী প্রচার (-75% দীর্ঘমেয়াদি) থাকলেও, সরাসরি API খরচ হয়&amp;lt;strong&amp;gt;৫×&amp;lt;/strong&amp;gt;বেশি ব্যয়বহুল. নিয়মিত দামে,&amp;lt;strong&amp;gt;20×&amp;lt;/strong&amp;gt;. এই &amp;lt;strong&amp;gt;শুধুমাত্র&amp;lt;/strong&amp;gt; DeepSeek — অন্য কোন মডেলে অ্যাক্সেস নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কিমি_মুনশট_platform_kimi_com&amp;quot;&amp;gt;কিমি মুনশট (platform.kimi.com)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kimi শুধু তার নিজের মডেলগুলো প্রস্তাব করে। DeepSeek নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_alibaba_bailian_bailian_aliyun_com&amp;quot;&amp;gt;Alibaba Bailian (bailian.aliyun.com)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুধুমাত্র এক প্রদানকারী যা সমস্ত চীনীয় মডেলকে জোড়া দেয় — কিন্তু বিক্রয়ের মাধ্যমে margin দিয়ে। মূল্যগুলো JavaScript-এ গতিশীলভাবে লোড হয়, যা স্ক্র্যাপিংকে অসম্ভব করে তোলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারসংক্ষেপ_সারণি_সব_প্রদানকারী&amp;quot;&amp;gt;সারসংক্ষেপ সারণি — সব প্রদানকারী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 23.0769%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3846%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 15.3847%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রদানকারী&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মডেল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;\$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;Output \$/M&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাসিক খরচ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;× আমার সাবস্ক্রিপশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Ollama ক্লাউড প্রো&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রায় ২০ ইউরো&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;1×&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জেমিনি 3 ফ্ল্যাশ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gemini 3 Flash&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,30&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$69&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3,5×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek API (প্রমোশন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,44&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,87&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$98&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4 Mini&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4 মিনি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$0,75&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$4,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$174&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;9×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Claude Haiku 4.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্লোড হাইকু 4.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$230&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;11×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;HuggingFace/Novita&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 প্রো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,67&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3,38&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$374&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;19×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek API (সাধারন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1,74&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3,48&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$390&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;20×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একসাথে AI&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek V4 Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$2,10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$4,40&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$470&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;23×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$2,50&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$579&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;29×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Claude Sonnet 4.6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Claude Sonnet 4.6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$689&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;34×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্লোড ওপাস ৪.৭&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Claude Opus 4.7&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$25&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1 148&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;57×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GPT 5.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$30&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\$1 157&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;58×&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 11

title প্রত্যাশিত মাসিক খরচ — ২২০M ইনপুট + ১.৯M আউটপুট
rectangle &amp;quot;Ollama Cloud Pro
~20€&amp;quot; as OC #4CAF50
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 11

title প্রত্যাশিত মাসিক খরচ — ২২০M ইনপুট + ১.৯M আউটপুট
rectangle &amp;quot;Ollama Cloud Pro
~20€&amp;quot; as OC #4CAF50
rectangle &amp;quot;Gemini Flash
$69&amp;quot; as GF #8BC34A
rectangle &amp;quot;DeepSeek প্রমো
$98&amp;quot; as DSP #FFC107
rectangle &amp;quot;GPT Mini
$174&amp;quot; as GM #FF9800
rectangle &amp;quot;ক্লোড হাইকু
$230&amp;quot; as CH #FF5722
rectangle &amp;quot;HF/Novita
\$374&amp;quot; as HF #F44336
rectangle &amp;quot;DeepSeek সাধারণ
\$390&amp;quot; as DSN #F44336
rectangle &amp;quot;GPT 5.4
$579&amp;quot; as G4 #D32F2F
rectangle &amp;quot;Claude Sonnet\n\$689&amp;quot; as CS #D32F2F
rectangle &amp;quot;Claude Opus
\$1 148&amp;quot; as CO #B71C1C
rectangle &amp;quot;GPT 5.5\n\$1 157&amp;quot; as G5 #880E4F

note bottom of OC
  DeepSeek V4 Pro 1.6T MoE
  + accès à tout le catalogue
  Ollama Cloud (Qwen, GLM, Kimi...)
  Inclus dans l&amp;#39;abonnement
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লুকানো_খরচ_prompt_engineering_এবং_অবরতী&amp;quot;&amp;gt;লুকানো খরচ: Prompt Engineering এবং অবরতী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টোকেন খরচ শুধুমাত্র সমীকরণের একটি অংশ। সত্য খরচ হল ডেভেলপারের সময়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OpenCode + Ollama Cloud Pro + আমার গবর্নেন্স এজেন্ট (EAGER/LAZY/Hot/Warm/Cold, &amp;lt;a href=&amp;quot;0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;গবর্নেন্স বিষয়ক নিবন্ধে&amp;lt;/a&amp;gt; বর্ণিত), আমি পাই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;0 প্রম্পট ইঞ্জিনিয়ারিং পুনরাবৃত্তিমূলক&amp;lt;/strong&amp;gt;: প্রসঙ্গটি স্বয়ংক্রিয়ভাবে ইনজেক্ট করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;90%+ প্রথম শট সঠিক&amp;lt;/strong&amp;gt;কোড প্রথম চেষ্টায় কম্পাইল করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;deepseek 8 সমব্যাপ্ত সেশনে শূন্য হ্যালুসিনেশন&amp;lt;/strong&amp;gt;(থেকে ডকুমেন্ট করা হয়েছে &amp;lt;a href=&amp;quot;0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html&amp;quot;&amp;gt;Kimi/GLM/DeepSeek তুলনা&amp;lt;/a&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক্লaud বা GPT &amp;lt;strong&amp;gt;বিনা&amp;lt;/strong&amp;gt; ফাইন-টিউন ও governance ছাড়াই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;2-3 পুনরাবৃত্তি প্রতি কাজে গড়ভাবে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সিস্টেম্যাটিক প্রম্পট ইঞ্জিনিয়ারিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Kotlin/Gradle API-এ হ্যালুসিনেশন হয়, যখন কনটেক্সট 30K টোকেনের বেশি হয়ে যায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মাসিক « effectif » খরচ — টোকেন × পুনরাবৃত্তি × সংশোধন সময় — আমার সমাধানের চেয়ে ২৭ গুণ থেকে ৫৪ গুণ, যেমন আমি দেখायেছি &amp;lt;a href=&amp;quot;0122_ratio_efficacite_27x_45x_flotte_experts_ia_vs_claude_gpt_post.html&amp;quot;&amp;gt;দক্ষতার অনুপাত নibond&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ এটা শুধুমাত্র টোকেন প্রতি দামের ব্যাপার নয়। একটি Claude Opus, যা ৫৭× মূল্যে এবং ৩× বেশি ইটারেশন প্রয়োজন, এর কার্যকর খরচ প্রায় ১৭০× বেশি। সরাসরি বললে: একটি ইੰਟার্নকে একটি ম্যাককিনজি পার্টনারের বেতন দেওয়ার মতো। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ollama_ক্লাউড_প্রো_সাবস্ক্রিপ্টগুলো_একত্রিত_করা_ডকার_পদ্ধতি&amp;quot;&amp;gt;Ollama ক্লাউড প্রো সাবস্ক্রিপ্টগুলো একত্রিত করা: ডকার পদ্ধতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সাবস্ক্রিপশন পর্যাপ্ত না হলে, আমরা এগুলো সংচয় করি। নিয়ম হলো প্রতিটি সাবস্ক্রিপশনকে তার নিজস্য ওল Lama ইনস্টলেশনে পৃথক করা, সঙ্গে তার নিজস্য SSH প্রমাণীকরণ কী থাকা। ডকার এটি সহজ করে দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ পদ্ধতিটি &amp;lt;a href=&amp;quot;0120_cumuler_deux_abonnements_ollama_pro_docker_post.html&amp;quot;&amp;gt;ডক্কার সংযোগের নিবন্ধে&amp;lt;/a&amp;gt; বিস্তারিতভাবে বর্ণিত, এখানে নীতি দেওয়া হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title আর্কিটেকচার — দুটি ওলামা ক্লাউড প্রো সাবস্ক্রিপশন একটি মেশিনে
left to right direction

node &amp;quot;আমার ফিজিক্যাল মেশিন&amp;quot; {
  frame &amp;quot;Ollama Instance A (native)
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

title আর্কিটেকচার — দুটি ওলামা ক্লাউড প্রো সাবস্ক্রিপশন একটি মেশিনে
left to right direction

node &amp;quot;আমার ফিজিক্যাল মেশিন&amp;quot; {
  frame &amp;quot;Ollama Instance A (native)
পোর্ট :11434&amp;quot; as Native {
    database &amp;quot;আইডেন্টিটি A
/usr/share/ollama/.ollama/id_ed25519&amp;quot;
  }
  frame &amp;quot;Ollama ইন্সটেন্স B (ডকর)
পোর্ট :11435&amp;quot; as Docker {
    database &amp;quot;Identity B
~/ollama-b-data/id_ed25519&amp;quot;
  }
}

cloud &amp;quot;Ollama Cloud&amp;quot; {
  actor &amp;quot;অ্যাকাউন্ট প্রফেশনাল A
(ইমেইল 1)&amp;quot; as A
  actor &amp;quot;প্রো অ্যাকাউন্ট B\n(ইমেইল 2)&amp;quot; as B
}

Native --&amp;amp;gt; A : &amp;quot;ডিভাইস কী A&amp;quot;
Docker --&amp;amp;gt; B : &amp;quot;ডিভাইস কী B&amp;quot;

note bottom of Docker
  Conteneur Docker isolé :
  - Clé SSH distincte
  - Port réseau distinct (11435)
  - Volume persistant (~/ollama-b-data)
  - restart: always
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্যাটার্নটি সহজ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি ভলিউম তৈরি করুন`~/ollama-b-data`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি Docker কন্টেইনার চালু করুন`ollama/ollama:0.20.2`মানচিত্রে অঙ্কিত`11435:11434`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কন্টেইনার থেকে SSH কী অর্জন করুন → ollama.com-এ এটি সংরক্ষণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;করা`ollama signin`দ্বিতীয় ইমেলের সাথে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;OpenCode কে দুটি প্রোভাইডার সঙ্গে কনফিগার করুন (`ollama`পর :11434,`ollama-b`উপর :11435)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুইটি অ্যাকাউন্ট, একটি নীল কার্ড, কোন সংঘর্ষ নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অডিট_যা_পরিমাপ_করে_না&amp;quot;&amp;gt;অডিট যা পরিমাপ করে না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 60%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অদৃশ্য কোণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;উত্পাদিত কোডের গুণমান&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2,6 কোটি টোকেন বলে না যে কোড কম্পাইল হয় কি না। আমার 8 সেশন DeepSeek V4 Pro-এর first-shot হার &amp;amp;gt;90%।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ইকোসিস্টেম OpenCode&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CLI-এ (এজেন্ট, স্যান্ডবক্স, ইতিহাস, প্রম্পট ক্যাশিং) এর মূল্য অসংখ্য, তবে এটি বিনামূল্যে। এটি সাবস্ক্রিপশন মূল্যে অন্তর্ভুক্ত নয় — এটি একটি আলাদা সরঞ্জাম।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অবসর খরচ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রতি দিন 2 ঘন্টা নিম্নমানের মডেলের হালসিনেশন ডিবাগ করা 20€/মাস থেকে বেশি খরচ হয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;মানের শান্তি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ধারাবাহিক ফি = কোনো আশ্চর্য নেই। প্রতি-টোকেনের মাধ্যমে, গতিবিদyarের স্পাইক খুব কষ্ট দিতে পারে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;⚠️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উद्धৃত দামগুলো মে ২০২৬-এর। ছয় মাসে সবشيء কমে যাবে। কিন্তু গঠনগত বলের সমীকরণ —স্থির সাবস্ক্রিপশন vs ব্যবহার অনুযায়ী পেমেন্ট— বড় ব্যবহারকারীদের জন্য সাবস্ক্রিপশনকে এখনও অনুকূল রাখবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ_সংখ্যার_বিচার&amp;quot;&amp;gt;নিষ্কর্ষ : সংখ্যার বিচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;৭৩ দিন পর, ১,০২২ OpenCode সেশন, এবং ২.৬ বিলিয়ন টোকেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 60%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মেট্রিক&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিচারের সিদ্ধান্ত&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংযোজিত বাহ্যিক API খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$০.২২&amp;lt;/strong&amp;gt;(প্রায় শূন্য)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সাবস্ক্রিপশন খরচ Ollama Cloud Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;~২০€/মাস&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমতুল্য Claude Opus&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$1 148/প্রতি মাস&amp;lt;/strong&amp;gt;— 57× আরো মূল্যবান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমকúl GPT 5.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$1 157/মাস&amp;lt;/strong&amp;gt;— 58× বেশি দামের&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমান HuggingFace/Novita&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$374/মাস&amp;lt;/strong&amp;gt;— ১৯ গুন বেশি দামি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek API-এর সরাসরি সমতুল্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$390/মাস&amp;lt;/strong&amp;gt;— 20× বেশি মূল্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সর্বনিম্ন খরচের সমতুল্য (Gemini Flash)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;$69/মাস&amp;lt;/strong&amp;gt;— 3,5× বেশি দামের, নিম্ন মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বাজারের সেরা অফার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Ollama Cloud Pro ২০ ইউরো/মাস&amp;lt;/strong&amp;gt;— অপরাজেয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(empty) প্রতি মাসে 20€ দিয়ে DeepSeek V4 Pro (1.6T প্যারামিটার, MoE, CSA+HCA, 1M কনটেক্সট) Ollama Cloud‑এর মাধ্যমে অ্যাক্সেস পাওয়ার জন্য, আমি বিশ্বব্যাপার বাজারের শ্রেষ্ঠ মূল্য‑গুণমান অনুপাত পেয়েছি। চীনের সরাসরি সরবরাহকারীদেরও 5 গুণ থেকে 20 গুণ বেশি মূল্য লাগে। HuggingFace‑কেেও, তার low‑cost providers এর সমাহার দিয়ে, 19 গুণ বেশি মূল্য লাগে। পশ্চিমিম বাজার (Claude, GPT) 50‑60 গুণের দামে — একটি অন্য গ্রহের মতো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই অনুপাত অতিশয় অসंतুলিত, যা শাশ্বতভাবে থাকতে পারে না। যতক্ষণ এই উপস্থিত থাকে, ততক্ষণ এটি উপভোগ করুন। &amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তো হ্যাঁ, আমার মাসে ২০ টাকা, এটি আমার ডেভেলপারের জীবনে সবচেয়ে ভালো টেকনিকাল বিনিয়োগ। এবং এখন আপনার কাছে এটি সঠিকভাবে প্রমাণ করতে সংখ্যাগুলো আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;অনুচ্ছেদ 0108 — শাসন এজেন্ট EAGER/LAZY/Hot/Warm/Cold&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html&amp;quot;&amp;gt;অনুচ্ছেদ ০১১২ — DeepSeek V4 Pro vs Kimi K2.6 vs GLM 5.1&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0119_benchmark_dgx_spark_vs_cloud_abonnement_llm_post.html&amp;quot;&amp;gt;অনুচ্ছেদ ০১১৯ — বেঞ্চমার্ক DGX Spark vs Cloud vs LLM সাবস্ক্রিপশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১২০ — Ollama Cloud Pro-এর দুটি সাবস্ক্রিপশন Docker-এর সাথে মিশ্রণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অর্টিকেল 0121 — Gradle প্লাগইন দুটি Ollama ইনস্ট্যান্স পরিচালনার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0122_ratio_efficacite_27x_45x_flotte_experts_ia_vs_claude_gpt_post.html&amp;quot;&amp;gt;আর্টিকেল 0122 — কার্যকারিতা অনুপাত 27× থেকে 54×&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_টারিফের_উৎস&amp;quot;&amp;gt;টারিফের উৎস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://ollama.com/pricing&amp;quot;&amp;gt;Ollama Cloud — 프로 পরিকল্পনা $20/মাস&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://api-docs.deepseek.com/quick_start/pricing&amp;quot;&amp;gt;DeepSeek API — সরকারি দাম V4 Pro&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://platform.kimi.com/docs/pricing/chat-k26&amp;quot;&amp;gt;Kimi Moonshot — দর K2.6&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://huggingface.co/inference/models&amp;quot;&amp;gt;HuggingFace Inference Providers — প্রদানকারী প্রতি মূল্য&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.anthropic.com/pricing&amp;quot;&amp;gt;Anthropic — Claude API দাম&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://openai.com/api/pricing/&amp;quot;&amp;gt;OpenAI — জিপিটি API দাম&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://together.ai/pricing&amp;quot;&amp;gt;Together AI — অনুমানের দাম&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://groq.com/pricing&amp;quot;&amp;gt;Groq — API শুলক&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://deepinfra.com/pricing&amp;quot;&amp;gt;DeepInfra — GPU মূল্য এবং মডেল&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://help.aliyun.com/zh/model-studio/text-generation-model/&amp;quot;&amp;gt;Alibaba Bailian — উপলব্ধ মডেল[&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/anomalyco/opencode&amp;quot;&amp;gt;OpenCode — CLI ওপেন সোর্স GitHub-এ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>স্বাধীন প্লাগিন + ব্যবহারকারী রুট আর্কিটেকচার: আমার Gradle বিল্ডগুলো কেন ডুপ্লিকেট হয়?</title>
            <link >https://cheroliv.com//blog/2026/0124_architecture_plugin_gradle_racine_consommateur_independant_post.html</link>
            <pubDate>Thu, 14 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0124_architecture_plugin_gradle_racine_consommateur_independant_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_তিনটি_আর্কিটেকচার_যা_আমাকে_সময়_বर्बাদ_করতে_বाध्य&amp;quot;&amp;gt;সমস্যা: তিনটি আর্কিটেকচার যা আমাকে সময় বर्बাদ করতে বाध्य&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্প_১_আইসোলেটেড_প্লাগইন_কukaanি_না&amp;quot;&amp;gt;বিকল্প ১ : আইসোলেটেড প্লাগইন (কukaanি না)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্প_২_ক্লাসিক_মোনোরেপো_includeplugin&amp;quot;&amp;gt;বিকল্প ২ : ক্লাসিক মোনোরেপো (&amp;lt;code&amp;gt;include(&amp;quot;:plugin&amp;quot;)&amp;lt;/code&amp;gt;)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্প_৩_কম্পোজিট_বিল্ড_includebuild&amp;quot;&amp;gt;বিকল্প ৩ : কম্পোজিট বিল্ড (&amp;lt;code&amp;gt;includeBuild()&amp;lt;/code&amp;gt;)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_দুই_builds_স্বাধীন_একটি_ভোক্তা_মূল&amp;quot;&amp;gt;সমাধান : দুই Builds স্বাধীন, একটি ভোক্তা মূল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কর্মপ্রবাহ&amp;quot;&amp;gt;কর্মপ্রবাহ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তব_কর্মপ্রবাহ&amp;quot;&amp;gt;বাস্তব কর্মপ্রবাহ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_আর্কিটেকচার_কেন_আমাকে_জয়_নিয়েছে&amp;quot;&amp;gt;এই আর্কিটেকচার কেন আমাকে জয় নিয়েছে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_১_নেটিভ_ডগফিডিং_তৎক্ষণিক_ফিডব্যাক&amp;quot;&amp;gt;১. নেটিভ ডগফিডিং, তৎক্ষণিক ফিডব্যাক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_জিরো_কনফিগ_ক্লোনিং&amp;quot;&amp;gt;2. জিরো-কনফিগ ক্লোনিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_constructions_isolées_ci_indépendants&amp;quot;&amp;gt;3. Constructions isolées, CI indépendants&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাব_ফোল্ডারের_অ্যানাটমি_name_plugin&amp;quot;&amp;gt;সাব-ফোল্ডারের অ্যানাটমি `{name}-plugin/&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বার্সন_ক্যাটালগ_দুটি_পৃথক_ফাইল&amp;quot;&amp;gt;বার্সন ক্যাটালগ : দুটি পৃথক ফাইল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যা_আমরা_করি_না&amp;quot;&amp;gt;যা আমরা করি না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তুলনা_তিনটি_আর্কিটেকচার_ডগফুডিং_এর_মুখে&amp;quot;&amp;gt;তুলনা : তিনটি আর্কিটেকচার ডগফুডিং-এর মুখে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ড্যাগ_কনট্র্যাক্ট_একটি_রুট_বিল্ড_কখনও_না_একটি_সাবফোল্ডার_থেকে&amp;quot;&amp;gt;ড্যাগ কনট্র্যাক্ট : একটি রুট বিল্ড কখনও না একটি সাবফোল্ডার থেকে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সারাংশ_প্রত্যাশিত_ডুপ্লিকেশন_যা_সময়_বাঁচায়&amp;quot;&amp;gt;সারাংশ : প্রত্যাশিত ডুপ্লিকেশন যা সময় বাঁচায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উল্লেখ&amp;quot;&amp;gt;উল্লেখ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পড়ার সময় : 11 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি Gradle প্লাগইন সংগ্রহস্থল ক্লোন করেন। আপনি একটি টার্মিনাল খুলেন। আপনি কি টাইপ করেন? পরে?&amp;lt;code&amp;gt;./gradlew tasks&amp;lt;/code&amp;gt;, অবশ্যই. কিন্তু কোন ফোল্ডারে? রুট? সাবমডিউল? কি প্রথমে একটি README পড়া দরকার হচ্ছে বিল্ড করতে কীভাবে জানার জন্য? যদি আপনি হিচকিচ্ছেন, না কি&amp;amp;#8230;&amp;amp;#8203; শুধুমাত্র একটি সেকেন্ড, প্রকল্পের আর্কিটেকচার ভাঙ্গে গেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে বলা যাচ্ছে যে আমি কিভাবে এই সমস্যাটি একবারেই সমাধান করেছি — এবং কেন প্যাটার্ন আজ আমার সব Gradle প্লাগনের স্বাক্ষর মধ্যে`foundry/public/`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_তিনটি_আর্কিটেকচার_যা_আমাকে_সময়_বर्बাদ_করতে_বाध्य&amp;quot;&amp;gt;সমস্যা: তিনটি আর্কিটেকচার যা আমাকে সময় বर्बাদ করতে বाध्य&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বর্তমান প্যাটার্নে সংযোজনের আগে, আমি তিনটি পদ্ধতির মধ্যে ভুলভুলি grades for organizing a Gradle plugin. Each had a disqualifying flaw.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিকল্প_১_আইসোলেটেড_প্লাগইন_কukaanি_না&amp;quot;&amp;gt;বিকল্প ১ : আইসোলেটেড প্লাগইন (কukaanি না)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পটি শুধুমাত্র প্লাগইন ধারণ করে। ব্যাবহারের কোনো উদাহরণ নেই। না প্রকল্প যা এতে ব্যায়াম করে। এইটিকে পরীক্ষা করতে, একটি বাহ্যিক প্রকল্প তৈরি করতে হবে, সেখানে প্লাগইনকে মাধ্যমে রেফার`mavenLocal`অথবা একটি কমপজিট বিল্ড, এবং শুধু সেখানে পরীক্ষা কর যে এটি কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-shell hljs&amp;quot; data-lang=&amp;quot;shell&amp;quot;&amp;gt;$ git clone mon-plugin
$ cd mon-plugin
$ ./gradlew build          # le plugin compile
$ # ... et maintenant ? comment je l&amp;#39;essaie ?&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;⚠️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কনসুমশন উদাহরণহীন গ্রেডল প্লাগইন, একটি লাইব্রেরি মতো এकीকরণ পরীক্ষা। আপনি কখনও জানতে পারবেন না যে শেষ পরিবর্তন ব্যবহারকারীর অভিজ্ঞতা টুটিয়ে গেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিকল্প_২_ক্লাসিক_মোনোরেপো_includeplugin&amp;quot;&amp;gt;বিকল্প ২ : ক্লাসিক মোনোরেপো (&amp;lt;code&amp;gt;include(&amp;quot;:plugin&amp;quot;)&amp;lt;/code&amp;gt;)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle`init`উত্পন্ন করে`settings.gradle.kts`সাথে`include(&amp;quot;plugin&amp;quot;)`। রুট এবং সাব-মডিউল একই ডায়েমন এবং একই কনফিগারেশন শেয়어 করে, এই একই ক্যাটালগগুলো. ব্যাবহারিক, কিন্তু সংযুক্ত.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;.
├── settings.gradle.kts   → include(&amp;quot;plugin&amp;quot;)
├── build.gradle.kts      → plugins { id(&amp;quot;mon-plugin&amp;quot;) }
├── plugin/
│   └── build.gradle.kts  → java-gradle-plugin
└── gradle/
    └── libs.versions.toml&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কী সমস্যা:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;রুট&amp;lt;strong&amp;gt;করতে হবে&amp;lt;/strong&amp;gt;সাব-মডিউলের মতো গ্র্যাডলের একই সংস্করণ থাকা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`libs.versions.toml`বাগশে — সাধারণ সংস্করণ ক্যাটালগ, নির্ভরতা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যারা একটি মডিউল থেকে অন্য মডিউলে পালাচ্ছেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনকে রুট থেকে স্বাধীনভাবে বিল্ড করা অসম্ভব।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;CI-এর দুটি মডিউল তৈরি করতে হবে, যদিও শুধুমাত্র প্লাগইন পরিবর্তিত হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিকল্প_৩_কম্পোজিট_বিল্ড_includebuild&amp;quot;&amp;gt;বিকল্প ৩ : কম্পোজিট বিল্ড (&amp;lt;code&amp;gt;includeBuild()&amp;lt;/code&amp;gt;)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা দুটিকে আলাদা Gradle বিল্ডে ভাগ করে এবং এদেরকে সংযুক্ত করি &amp;lt;code&amp;gt;includeBuild(&amp;quot;mon-plugin&amp;quot;)`মধ্যে`settings.gradle.kts&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি ইতিমধ্যে ভালো। প্লাগইনের বিল্ডটি পৃথক করা হয়েছে। কিন্তু ব্যবহারকারী এক্সটার্নাল বিল্ডকে স্পষ্টভাবে উল্লেখ করতে হবে — এবং আউটপুটের `./gradlew tasks`রুটের সঠিক কনফিগারেশনের উপর নির্ভর করে সম্প্রিত। ক্লোনিং নয় শূন্য কনফিগারেশন: জানা দরকার যে প্লাগইনটি একটি আলাদা ফোল্ডারে আছে, রুট এটি উল্লেখ করে, ইত্যাদি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-shell hljs&amp;quot; data-lang=&amp;quot;shell&amp;quot;&amp;gt;.
├── settings.gradle.kts   → includeBuild(&amp;quot;plugin-build/&amp;quot;)
├── build.gradle.kts      → plugins { id(&amp;quot;mon-plugin&amp;quot;) }
└── plugin-build/
    ├── settings.gradle.kts
    └── build.gradle.kts&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি ভালো খোঁজছিলাম। খুব ভালো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_দুই_builds_স্বাধীন_একটি_ভোক্তা_মূল&amp;quot;&amp;gt;সমাধান : দুই Builds স্বাধীন, একটি ভোক্তা মূল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে প্যাটার্নটি যা আমি শেষে গ্রহণ করলাম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;.
├── settings.gradle.kts          ← racine consommateur
├── build.gradle.kts              ← 3 lignes : apply plugin + dogfood
├── gradle/
│   └── libs.versions.toml        ← catalogue du consommateur
├── {name}-plugin/                ← BUILD INDÉPENDANT
│   ├── gradlew                    ← son propre wrapper
│   ├── settings.gradle.kts        ← rootProject.name = &amp;quot;{name}-plugin&amp;quot;
│   ├── build.gradle.kts           ← java-gradle-plugin, signing, publish
│   ├── gradle/
│   │   ├── libs.versions.toml     ← catalogue du plugin
│   │   └── wrapper/
│   ├── src/                       ← sources du plugin
│   ├── .agents/                   ← gouvernance agent
│   └── *.adoc                     ← AGENT, PROMPT_REPRISE, snapshot, etc.
└── site.yml / slides-context.yml / ...   ← configs dogfood&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;চabi:`{name}-plugin/`এটি একটি সম্পূর্ণ এবং স্বায়ত্ত Gradle প্রকল্প। তার নিজের র্যাপার, তার নিজের সেটিংস, তার নিজের ক্যাটালগের সংস্করণ। এটি নিজেই ক্লোন করে, বিল্ড করে, টেস্ট করে এবং প্রকাশ করে, রুট ছাড়া। তার অস্তিত্বে সতর্ক থাকুক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রুট, সে, শুধুমাত্র &amp;lt;strong&amp;gt;একটি&amp;lt;/strong&amp;gt; কাজ করে : প্লাগইন প্রয়োগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;plugins {
    alias(libs.plugins.bakery)
}

repositories {
    mavenLocal()
    mavenCentral()
}

bakery { configPath = file(&amp;quot;site.yml&amp;quot;).absolutePath }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কেসের জন্য তিনটি লাইন`bakery-gradle`আর কিছু না. শূন্য`include()&amp;lt;code&amp;gt;, শূন্য`includeBuild()&amp;lt;/code&amp;gt;, শূন্য উপ-প্রকল্প। একটি ক্লাসিক Gradle বিল্ড যেটি একটি প্লাগইন প্রয়োগ করে zoals যে কোনো কোনো ভোগকারী তা করবে?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কর্মপ্রবাহ&amp;quot;&amp;gt;কর্মপ্রবাহ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 32) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

left to right direction

package &amp;quot;মূল (ভোক্তা)&amp;quot; #CCFFCC {
    usecase &amp;quot;রিপোজিটরিটি ক্লোন করুন&amp;quot; as Clone
    usecase &amp;quot;./gradlew tasks&amp;quot; as Tasks
    usecase &amp;quot;./gradlew bake&amp;quot; as Dogfood
    note bottom of Dogfood
        Exerce le plugin
        Feedback immédiat
        Zéro config
    end note
}

package &amp;quot;{name}-plugin/ (স্বতন্ত্র বিল্ড)&amp;quot; #CCE5FF {
    usecase &amp;quot;./gradlew build&amp;quot; as BuildPlugin
    usecase &amp;quot;./gradlew publishToMavenLocal&amp;quot; as MavenLocal
    usecase &amp;quot;./gradlew test&amp;quot; as TestPlugin
    note bottom of BuildPlugin
        Cycle de vie isolé
        Tests unitaires + Cucumber
        CI dédiée possible
    end note
}

Clone -down-&amp;amp;gt; Tasks
Tasks -down-&amp;amp;gt; Dogfood
Dogfood ..&amp;amp;gt; MavenLocal : &amp;quot;প্লাগ인의 উপর নির্ভর করে
স্থানীয়ভাবে প্রকাশিত&amp;quot;
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontSize 12

left to right direction

package &amp;quot;মূল (ভোক্তা)&amp;quot; #CCFFCC {
    usecase &amp;quot;রিপোজিটরিটি ক্লোন করুন&amp;quot; as Clone
    usecase &amp;quot;./gradlew tasks&amp;quot; as Tasks
    usecase &amp;quot;./gradlew bake&amp;quot; as Dogfood
    note bottom of Dogfood
        Exerce le plugin
        Feedback immédiat
        Zéro config
    end note
}

package &amp;quot;{name}-plugin/ (স্বতন্ত্র বিল্ড)&amp;quot; #CCE5FF {
    usecase &amp;quot;./gradlew build&amp;quot; as BuildPlugin
    usecase &amp;quot;./gradlew publishToMavenLocal&amp;quot; as MavenLocal
    usecase &amp;quot;./gradlew test&amp;quot; as TestPlugin
    note bottom of BuildPlugin
        Cycle de vie isolé
        Tests unitaires + Cucumber
        CI dédiée possible
    end note
}

Clone -down-&amp;amp;gt; Tasks
Tasks -down-&amp;amp;gt; Dogfood
Dogfood ..&amp;amp;gt; MavenLocal : &amp;quot;প্লাগ인의 উপর নির্ভর করে
স্থানীয়ভাবে প্রকাশিত&amp;quot;
BuildPlugin -up-&amp;amp;gt; MavenLocal
TestPlugin -up-&amp;amp;gt; BuildPlugin

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তব_কর্মপ্রবাহ&amp;quot;&amp;gt;বাস্তব কর্মপ্রবাহ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-shell hljs&amp;quot; data-lang=&amp;quot;shell&amp;quot;&amp;gt;# 1. Builder le plugin
$ cd codebase-plugin
$ ./gradlew publishToMavenLocal

# 2. L&amp;#39;exercer depuis la racine
$ cd ..
$ ./gradlew indexCodebase queryCodebase snapshot

# La boucle est fermée. Le plugin est testé dans des conditions
# réelles de consommation, par le projet même qui l&amp;#39;héberge.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এই_আর্কিটেকচার_কেন_আমাকে_জয়_নিয়েছে&amp;quot;&amp;gt;এই আর্কিটেকচার কেন আমাকে জয় নিয়েছে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি সুবিধা, যেগুলো সম্মিলিত হলে, &amp;quot;duplication&amp;quot; -এর খরচের বদিলে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_১_নেটিভ_ডগফিডিং_তৎক্ষণিক_ফিডব্যাক&amp;quot;&amp;gt;১. নেটিভ ডগফিডিং, তৎক্ষণিক ফিডব্যাক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি Gradle প্লাগইনকে পরীক্ষা করার সবচেয়ে ভালো উপায় হলো এটি ব্যবহার করা। একটি মক করা ইউনিট টেস্ট নেই। একটি না`GradleRunner`একটি প্রকল্প সঙ্গে টেস্টের. একটি &amp;lt;strong&amp;gt;vrai&amp;lt;/strong&amp;gt; বিল্ড যে প্লাগইনটি প্রয়োগ করে বাস্তব ফাইলগুলো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-shell hljs&amp;quot; data-lang=&amp;quot;shell&amp;quot;&amp;gt;$ git clone bakery-gradle
$ cd bakery-gradle
$ ./gradlew bake    # ← le plugin est exercé immédiatement&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি প্লাগইনটি ভাঙ্গে, মূল বিল্ডটি এটি বলে। যেতে দরকার নেই বহিরাগত পরীক্ষা প্রকল্প খুঁজে বের করা। ডগফুডিং হল &amp;lt;strong&amp;gt;প্রথম&amp;lt;/strong&amp;gt; নতুন অবদানকারী চালানো টাস্ক। এটি সর্বশেষ ধোঁয়া পরীক্ষা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিয়মটি সহজ: যদি মূলটি কম্পাইল হয় এবং`./gradlew tasks` আপনার প্লাগইনের কাজগুলি দেখানো হচ্ছে, প্লাগইনটি কার্যকর। কোন আশ্চর্য নয়। উৎপাদনে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_জিরো_কনফিগ_ক্লোনিং&amp;quot;&amp;gt;2. জিরো-কনফিগ ক্লোনিং&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Un `git clone &amp;amp;amp;&amp;amp;amp; ./gradlew tasks`এবং নতুন আসন্ন সমস্ত কিছু দেখে হাঁটা কোনো কনফিগার না করে। এ`build.gradle.kts`মূল আছে প্লাগইনের ব্যবহারের জীবিত ডকুমেন্টেশন। লে`site.yml`পাশে প্রত্যাশিত কনফিগারেশন দেখায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিকল্পের সাথে তুলনা করুন: একটি তিন-অনুচ্ছেদ README যা বিল্ড কিভাবে প্লাগিন তৈরি করবেন এবং বিল্ড কিভাবে প্রজেক্ট তৈরি করবেন টেস্টের. একটি নতুন অবদানকারী README-কে ঝকঝক পড়ে, ভুল করে, একটি ইসু খুলে — Whereas তথ্য devenir &amp;lt;strong&amp;gt;চালনযোগ্য&amp;lt;/strong&amp;gt; হওয়া&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বশক্তিশালী নথিকাঠামো সেটি নয় যা পড়া হয়। এটি সে যে&amp;lt;strong&amp;gt;চালায়&amp;lt;/strong&amp;gt;. মূল বিল্ড হল ডকুমেন্টেশন প্লাগইনের এক্সিকিউটেবল&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_3_constructions_isolées_ci_indépendants&amp;quot;&amp;gt;3. Constructions isolées, CI indépendants&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনের নিজস্ব Gradle wrapper és নিজস্ব লাইফসাইকেল আছে, তাদের নিজস্ব পরীক্ষা। আপনি পারেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনে Gradle আপগ্রেড করুন, রুটকে ছুঁই না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনে একটি নির্ভরতা যোগ করুন যাতে তা রুটে প্রবেশ না করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি ভাঙ্গে দিন, মূল বিল্ডকে প্রভাবিত না করেই (যতক্ষণ না আপনি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টুটি সংস্করণটি প্রকাশ করবেন না)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি CI থাকবে যা প্লাগইনকে বিল্ড/টেস্ট করে, আরেকটি যা এটি ব্যবহার করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;root — স্বতন্ত্রভাবে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;.github/workflows/
├── test-plugin.yml      → codebase-plugin/.gradlew build
├── test-root.yml        → .gradlew tasks (vérifie que le plugin est consommable)
└── publish.yml          → codebase-plugin/.gradlew publish&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাব_ফোল্ডারের_অ্যানাটমি_name_plugin&amp;quot;&amp;gt;সাব-ফোল্ডারের অ্যানাটমি `{name}-plugin/&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আরো বিস্তারিতವಾಗಿ দেখা করা যাক, প্লাগইন ফোল্ডারের মধ্যে যা বাস করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;codebase-plugin/
├── gradlew                           ← wrapper indépendant
├── settings.gradle.kts               ← @Suppress(&amp;quot;UnstableApiUsage&amp;quot;)
│                                       + foobar-resolver-convention
├── build.gradle.kts                  ← java-gradle-plugin + signing + publish
├── gradle/
│   ├── libs.versions.toml            ← catalogue complet (langchain4j, pgvector...)
│   └── wrapper/
├── buildSrc/                         ← classes utilitaires buildSrc
│   ├── build.gradle.kts
│   └── src/main/kotlin/
│       ├── codebase/                 ← CodebaseYmlAnonymizer, CodebaseConfiguration
│       ├── benchmark/                ← BenchmarkConfig, BenchmarkProtocol
│       ├── readme/                   ← ReadmeYmlAnonymizer
│       ├── site/                     ← SiteYmlAnonymizer
│       ├── slider/                   ← SliderYmlAnonymizer
│       └── snapshot/                 ← SnapshotManager
├── src/
│   ├── main/kotlin/codebase/
│   │   ├── CodebasePlugin.kt         ← class Plugin&amp;amp;lt;Project&amp;amp;gt;
│   │   ├── rag/                      ← pgvector, embedding, anonymization...
│   │   ├── benchmark/                ← BenchmarkRunner, export, comparison...
│   │   └── walker/                   ← WorkspaceWalker
│   └── test/
│       ├── kotlin/codebase/scenarios/ ← steps Cucumber
│       ├── features/                  ← .feature files
│       └── resources/datasets/        ← fixtures .adoc, .yml, .json
├── .agents/                          ← gouvernance agent (INDEX, SESSIONS, etc.)
├── AGENT.adoc                        ← règles agent
├── PROMPT_REPRISE.adoc              ← mission session
├── BACKLOG.adoc                      ← backlog produit
├── snapshot.adoc                     ← snapshot auto-généré du projet
└── embeds.yml                        ← config RAG embeds&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবকিছু এখানে আছে। মূল এবং সাবফোল্ডারের মধ্যে কোনো ছড়ানয় নেই। প্লাগইনে কাজ করার ডেভেলপার কখনও দরকার নেই প্রস্থান করা`codebase-plugin/`. ডেভেলপার যে প্লাগইন ব্যবহার করে শুধু মূলটি দেখে — এবং`build.gradle.kts`3 লাইনের তিনি তাকে যা জানার দরকার তা বলেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বার্সন_ক্যাটালগ_দুটি_পৃথক_ফাইল&amp;quot;&amp;gt;বার্সন ক্যাটালগ : দুটি পৃথক ফাইল&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 37.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 37.5%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;gradle/libs.versions.toml&amp;lt;/code&amp;gt;(মূল)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;{name}-plugin/gradle/libs.versions.toml&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নির্ভরতাগুলোর সংখ্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2-3 (plugin + readme সম্ভবত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;30+ (&amp;lt;code&amp;gt;langchain4j&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;pgvector&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cucumber&amp;lt;/code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভুমিকা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্লাগইন ব্যবহার করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিল্ডার প্লাগইনটি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;যে তা পড়ে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্লাগইন ব্যবহারকারী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্লাগইন ডেভেলপার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রুটের ইচ্ছামত সীমিত একটি ক্যাটালগ আছে। প্লাগইনের একটি ক্যাটালগ আছে। সম্পূর্ণ। বিলঙ্কন অসম্ভব : প্রতিটি বিল্ডের নিজস্ব স্কোপ আছে। নির্ভরতাগুলোর.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি আপনি ইতিমধ্যে একটি নির্ভরতা সংঘর্ষকে ডিবাগ করতে এক ঘণ্টা খরচ করেছেন আপনার প্লাগইন এবং আপনার টেস্ট প্রকল্পের মধ্যে, আপনি তার মূল্য বুঝেন এই বিভাজন। স্বাধীন ক্যাটালগগুলো এই সমস্যা দূরে করে। निर्मাণে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_যা_আমরা_করি_না&amp;quot;&amp;gt;যা আমরা করি না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্যাটার্নটি জাদুকরী নয়। এটি একটি সীমাবদ্ধতা প্রয়োগ করে যা আমি সে খুশি করে আমাকে কষ্ট দেয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;রুট প্লাগইন তৈরি করে না।&amp;lt;/strong&amp;gt; আপনাকে`publishToMavenLocal` ou রুট এটি ব্যবহার করতে পারার আগে একটি রিপোজিটরিতে স্থাপন করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি ন্যूनতম খরচ, এবং এটি &amp;lt;strong&amp;gt;সঠিক&amp;lt;/strong&amp;gt; সীমাবদ্ধতা। রুট প্লাগইনকে বাহ্যিক ক্লায়েন্টের रूपে ব্যবহার করুন — Mavenের মাধ্যমে. সঠিক যেমন একটি তৃতীয় পক্ষের প্রকল্প করবে। যদি প্লাগইন প্রকাশযোগ্য না হয়, root আপনকে এই-та বলে অবিলম্বে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-shell hljs&amp;quot; data-lang=&amp;quot;shell&amp;quot;&amp;gt;# La seule &amp;quot;friction&amp;quot; du pattern
$ cd codebase-plugin &amp;amp;amp;&amp;amp;amp; ./gradlew publishToMavenLocal &amp;amp;amp;&amp;amp;amp; cd ..
$ ./gradlew tasks --group=codebase&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_তুলনা_তিনটি_আর্কিটেকচার_ডগফুডিং_এর_মুখে&amp;quot;&amp;gt;তুলনা : তিনটি আর্কিটেকচার ডগফুডিং-এর মুখে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আলাদা প্লাগইন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Monorepo`include()`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সামগ্রিক`includeBuild()`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;রুট + স্বাধীন প্লাগইন.&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`git clone &amp;amp;amp;&amp;amp;amp; gradlew tasks`প্লাগইনের কাজগুলো দেয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(Empty)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[No French text was provided for translation, so the output is empty.]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রুট থেকে স্বাধীন প্লাগিন তৈরি করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(Empty output)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিভক্ত সংস্করণ ক্যাটালগ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না`include()` ni &amp;lt;code&amp;gt;includeBuild()&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব ব্যাটিক কোড স্পান (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) অপরিবর্তিত রাখুন — কখনো ব্যাটিক কন্টেন্ট, স্পেসিং বা পজিশন পরিবর্তন করবেন না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ন্যাটিভ Dogfood কনফিগ ছাড়া&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[No output]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;⚠️&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CI plugin স্বাধীন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রুট একটি বাস্তব ভোগের উদাহরণ।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;⚠️&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডান কলাম সকল বক্স চেক করে। এই কারণে আমি না আমি আরও পিছনে ফিরব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ড্যাগ_কনট্র্যাক্ট_একটি_রুট_বিল্ড_কখনও_না_একটি_সাবফোল্ডার_থেকে&amp;quot;&amp;gt;ড্যাগ কনট্র্যাক্ট : একটি রুট বিল্ড কখনও না একটি সাবফোল্ডার থেকে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্কিটেকচার স্বাভাবিকভাবে DAG N0→N3-এ একত্রিত আমার workspsace- এর. প্যাটার্ন হলো: &amp;lt;strong&amp;gt;N2 প্লাগইন হুব নিজের নিজের নির্ভরতাগুলির, N3 রুট একটি টার্মিনাল যে হাবস&amp;lt;/strong&amp;gt; প্রয়োগ করে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/contrat-dag-architecture.svg&amp;quot; alt=&amp;quot;contrat dag architecture&amp;quot; width=&amp;quot;1747&amp;quot; height=&amp;quot;5532&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le &amp;lt;code&amp;gt;codebase-gradle/build.gradle.kts`6 লাইন তৈরি করে. না`src/&amp;lt;/code&amp;gt;, না`buildSrc/&amp;lt;code&amp;gt;, না`gradle/rag-bench.gradle.kts&amp;lt;/code&amp;gt;. শুধু &amp;lt;code&amp;gt;plugins { alias(libs.plugins.codebase) }`এবং রিপোজিটরিগুলো। সব জটিলতা বাস করে`codebase-plugin/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারাংশ_প্রত্যাশিত_ডুপ্লিকেশন_যা_সময়_বাঁচায়&amp;quot;&amp;gt;সারাংশ : প্রত্যাশিত ডুপ্লিকেশন যা সময় বাঁচায়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যখন আমি এই কাঠামো কাউকে দেখাই, প্রথম প্রতিক্রিয়া সাধারণত : « কিন্তু তুমি দুটি আছে`gradlew`, ২`settings.gradle.kts`, দুই`libs.versions.toml`— এটা নকল!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হ্যাঁ। এবং না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডুপ্লিকেশন », মানে একই তথ্য দুটি স্থানেই পুনরাবৃত্তি করা। এখানে, দুটি &amp;lt;strong&amp;gt;বিভিন্ন&amp;lt;/strong&amp;gt; ফাইল দুটি &amp;lt;strong&amp;gt;বিভিন্ন&amp;lt;/strong&amp;gt; usagesকে ব্যবহৃত হয় : প্লাগিনের ক্যাটালগ (30+ বিল্ডারের জন্য নির্ভরতা) এবং ক্যাটালগ মূল থেকে (২-৩ নির্ভরতাগুলি খচ করতে)। প্লাগইনের র্যাপার (বিকাশের জন্য লকড সংস্করণ) এবং রুট র‍্যাপার (সম্ভবত ভিন্ন সংস্করণ, প্লাগইনের অনুশীলনের জন্য).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি ডুপ্লিকেশন নয়। এটি &amp;lt;strong&amp;gt;বিচ্ছেদের দায়িত্ব&amp;lt;/strong&amp;gt; বিল্ড সিস্টেমে প্রয়োগ করা হয়েছে। প্রতিটি বিল্ড একটি কাজ করে, এবং শুধু এটাই। মূলটি ভোগ করে। প্লাগইনটি তৈরি হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;খরচ ? একটি অর্ডার`publishToMavenLocal`প্লাগিনের নির্মাণের মধ্যে এবং রুটের বিল্ড। লাভ? একটি স্থapat্য স্পষ্টতা যে অগ্রসর ডিবাগিং ঘন্টা সরিয়ে ফেলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্যাটার্নটি প্রয়োগ করলেই`bakery-gradle`, &amp;lt;code&amp;gt;plantuml-gradle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;codebase-gradle&amp;lt;/code&amp;gt;, এবং অন্যান্য প্লাগইনের`foundry/public/&amp;lt;code&amp;gt;, আমি নাই একটি টার্মিনাল খোলার সময় আমার একটি রিপোজিটরিতে আবার হিজ্জত করা হয়নি।এটি প্রথম প্রতিক্রিয়া —&amp;lt;/code&amp;gt;./gradlew tasks`— চল সবসময়, দে সবসময় ভালো কাজগুলো, এবং তাৎক্ষণে বলে যে সব ঠিক আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এইই, ভাল আর্কিটেকচার। এটি README-এ পড়া যায় না। এটি টার্মিনালে দশ সেকেন্ডের কমে পরীক্ষিত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উল্লেখ&amp;quot;&amp;gt;উল্লেখ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0105_integrer_graphify_workflow_gradle_post.html&amp;quot;&amp;gt;অর্ডিকেল ০১০৫ — Graphify-কে একটি Gradle ওয়ার্কফ্লোএ একীভূত করা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0117_granularisation_oss_css_repositorie_workspace_post.html&amp;quot;&amp;gt;Article 0117 — La Granularisation OSS/CSS&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Knowledge Graphকে সুপারিশের ইঞ্জিন হিসেবে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Knowledge Graph একটি সুপারিশ ইঞ্জিন: কিভাবে আমি কালKrমে « সংলগ্ন নিবন্ধ » গুলোকে মারা দিয়েছিলাম</title>
            <link >https://cheroliv.com//blog/2026/0123_knowledge_graph_moteur_recommandation_articles_connexes_post.html</link>
            <pubDate>Tue, 12 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0123_knowledge_graph_moteur_recommandation_articles_connexes_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃশ্য_মঙ্গলবার_১২_মে_সন্ধ্যা_৫৩০&amp;quot;&amp;gt;দৃশ্য: মঙ্গলবার, ১২ মে, সন্ধ্যা ৫:৩০&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নির্দেশনা_তিন_ধরনের_সম্পর্ক_যে_কোনো_টেমপ্লেট_দেখে_না&amp;quot;&amp;gt;নির্দেশনা: তিন ধরনের সম্পর্ক যে কোনো টেমপ্লেট দেখে না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_একটি_gradle_পাইপলাইন_একটি_গরম_llm_কল_নয়&amp;quot;&amp;gt;সমাধান: একটি Gradle পাইপলাইন, একটি গরম LLM কল নয়&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আর্কিটেকচার_ব্যাকেরি_গ্রাফিফাই_ইম্পোর্ট_করে_ইঞ্জিন_নয়&amp;quot;&amp;gt;আর্কিটেকচার : ব্যাকেরি গ্রাফিফাই ইম্পোর্ট করে, ইঞ্জিন নয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইন_স্ক্যান_গ্রাফ_টেমপ্লেট&amp;quot;&amp;gt;পাইপলাইন : স্ক্যান → গ্রাফ → টেমপ্লেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফালব্যাক_ক্রমবর্ধমান&amp;quot;&amp;gt;ফালব্যাক ক্রমবর্ধমান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এমার্জেন্টঅন্টোলজি_যখন_নিবন্ধগুলো_একে_অপরে_জানেন_না_তবে_একত্রিত_হয়&amp;quot;&amp;gt;এমার্জেন্টঅন্টোলজি : যখন নিবন্ধগুলো একে অপরে জানেন না, তবে একত্রিত হয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_dag_চুক্তি_কে_কে_গুরুত্বপূর্ণ&amp;quot;&amp;gt;DAG চুক্তি: কে কে গুরুত্বপূর্ণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আমরা_কী_পাই_এবং_কী_পাই_না&amp;quot;&amp;gt;আমরা কী পাই (এবং কী পাই না)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃষ্টিকোণ_ব্লগ_পাবলিক_নোলেজ_গ্রাফের_মতো&amp;quot;&amp;gt;দৃষ্টিকোণ: ব্লগ পাবলিক নোলেজ গ্রাফের মতো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_ফাইল_সিস্টেম_টেমপ্লেট_যা_উপেক্ষা_করে_তা_জানে&amp;quot;&amp;gt;উপসংহার : ফাইল সিস্টেম টেমপ্লেট যা উপেক্ষা করে তা জানে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সূত্রাবলি&amp;quot;&amp;gt;সূত্রাবলি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pdfের সময়: 14 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি নিবন্ধ পড়ছেন pgvector ও LangChain4j এর একীভূতির সম্পর্কে. পৃষ্ঠার নিচে, JBake আপনাকে « সংযুক্ত লেখা » শিফারস দেয়। আপনি ক্লিক করেন। এটি … কনফিগারেশনের উপর একটি লেখা। কিটি টার্মিনাল থেকে। উইদের মধ্যে একমাত্র সাধারণ বিন্দু কি? তারা কম মাত্রে প্রকাশিত Hoy ১৫ দিনের পার্থক্য। এটি একটি সুপারিশ নয়। এটি একটি আড়াল পতিত ক্যালেন্ডার সম্পাদকীয়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_মঙ্গলবার_১২_মে_সন্ধ্যা_৫৩০&amp;quot;&amp;gt;দৃশ্য: মঙ্গলবার, ১২ মে, সন্ধ্যা ৫:৩০&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি একটু আমার নিবন্ধ গুলো পুনর্চর্চা করছি — &amp;lt;a href=&amp;quot;0106_knowledge_graph_outil_compréhension_codebase_post.html&amp;quot;&amp;gt;এটি জ্ঞান গ্রাফকে কোডবেস বোঝার সরঞ্জাম হিসেবে ব্যবহার করে&amp;lt;/a&amp;gt;। বিষয়বস্তু ঘনিষ্ঠ : নোড, किनার, কমিউনিটি, PlantUML, অনবোর্ডিং। একটি নিবন্ধ ১৫ মিনিটের পড়ার পদ্ধতি যা সক্রিয় করে`graphify-gradle`, &amp;lt;code&amp;gt;plantuml-gradle&amp;lt;/code&amp;gt;, এবং গ্রাফ তপোলজির ধারণাগুলি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পৃষ্ঠার নিচে, « সংশ্লিষ্ট নিবন্ধ »গুলো আমাকে প্রস্তাব করছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নিবন্ধে Firebase Contact Form (0113)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নিবন্ধ ইগার/লেজি মেকানিজম (0108) সম্পর্কে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নিবন্ধ Gradle স্ক্রিপ্ট → প্লাগইন মাইগ্রেশন (0102) সম্পর্কে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Ollama Pro সাবস্ক্রিপশন সংচয় সম্পর্কে একটি প্রবন্ধ (0120)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই চারটি আর্টিকেলের মধ্যে tiga টিতে &amp;lt;strong&amp;gt;কোনো&amp;lt;/strong&amp;gt; Knowledge Graph-এর সাথে رابطه নেই। যেহেতু তারা শেষে প্রকাশিত, তাই তারা এখানে আছে — সময়ের নিকটতাবন্ধন, না শব্দার্থিক পাসপাশ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি টেমপ্লেটটি দেখছি`post.thyme`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xhtml hljs&amp;quot; data-lang=&amp;quot;xhtml&amp;quot;&amp;gt;&amp;amp;lt;!-- Articles connexes (liens internes SEO) --&amp;amp;gt;
&amp;amp;lt;th:block th:each=&amp;quot;post,postStat : ${published_posts}&amp;quot;&amp;amp;gt;
    &amp;amp;lt;th:block th:if=&amp;quot;${!post.uri.equals(content.uri) and postStat.index lt 4}&amp;quot;&amp;amp;gt;
        ...
    &amp;amp;lt;/th:block&amp;amp;gt;
&amp;amp;lt;/th:block&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`published_posts`এটি একটি কালানুক্রমিক তালিকা।`postStat.index lt 4`তাদের নেয় বর্তমান পোস্ট নয় এমন প্রথম چارটি। এইটাই। কোনো যুক্তি নেই। সামান্যের. বিষয় সংক্রান্ত কোন ধারণা নেই. শুধুমাত্র একটি লুপ`for`ভেষে সুপারিশ.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;⚠️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি JBake এর একটি বাগ নয়। এটি সবকিছু-এর ডিফল্ট আচরণ। স্ট্যাটিক সাইট জেনারেটর: পোস্টদের তালিকা সমতল এবং তারিখ অনুযায়ী সাজানো হয়েছে। টেমপ্লেট তার যা করতে পারে তা করে, যা আছে সেটি দিয়ে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এটি গ্রহণের কোনো কারণ নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নির্দেশনা_তিন_ধরনের_সম্পর্ক_যে_কোনো_টেমপ্লেট_দেখে_না&amp;quot;&amp;gt;নির্দেশনা: তিন ধরনের সম্পর্ক যে কোনো টেমপ্লেট দেখে না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার নিবন্ধ সংগ্রহ — ৪ মাসে ২৩ পোস্ট — এর একটি সমৃদ্ধ গঠন আছে যে সময়সূচী টেমপ্লেটটি পূর্ণরূপে অতিক্রম করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রত্যক্ষ উল্লেখ&amp;lt;/strong&amp;gt; : আমি ব্যবহার করি`xref:`প্রচুরপরিমাণে আমার লেখাগুলোতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ 0122 উল্লেখ 0106 (knowledge graph) এবং 0116 (compartimentage অপιστήমিক). এই লিঙ্কগুলো এডিটোরিয়াল &amp;lt;strong&amp;gt;hard linking&amp;lt;/strong&amp;gt; — আমি সুচিতভাবে সিদ্ধান্ত নেওয়া হয়েছে এই ধারণাগুলি সংযুক্ত করার জন্য.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ট্যাগ শেয়ার করা&amp;lt;/strong&amp;gt; : প্রত_writer এর কিছু আছে`:jbake-tags:`. অ্যারিকেলটি উপর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Graphify + PlantUML (0105) আছে`gradle, graphify, plantuml, knowledge-graph`. Knowledge Graph (0106) সম্পর্কিত নিবন্ধ এটিতে &amp;lt;code&amp;gt;knowledge-graph, graphify, আছে plantuml&amp;lt;/code&amp;gt;। সাত ট্যাগে মধ্যে তিনটি ট্যাগ সামান্য — ৪৩% ওভারল্যাপ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সহ-অবস্থিত নামযুক্ত ইক্যাবjective : « pgvector », « RAG », « embedding&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একসাথে চারটি ভিন্ন লেখায় উপস্থিত হয়। « LangChain4j »,  Ollama », « Gradle plugin » ছয় অন্যান্য মধ্যে। এইগুলো ট্যাগ নয়। সত্য — সেগুলো &amp;lt;strong&amp;gt;উত্থitando প্যাটার্ন&amp;lt;/strong&amp;gt; কোরপাসের যeket শুধু একটি NLP সনাক্ত করতে পারে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/trois-couches-relation-articles.svg&amp;quot; alt=&amp;quot;trois couches relation articles&amp;quot; width=&amp;quot;1773&amp;quot; height=&amp;quot;5516&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আজ, আমার সাইট &amp;lt;strong&amp;gt;কোনো&amp;lt;/strong&amp;gt; এই তিনটি স্তর ব্যবহার করে না। এটি ব্যবহার জিরো স্তর: জাভা তালিকায় সংযোজনের ক্রম।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_একটি_gradle_পাইপলাইন_একটি_গরম_llm_কল_নয়&amp;quot;&amp;gt;সমাধান: একটি Gradle পাইপলাইন, একটি গরম LLM কল নয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম আকর্ষণটি হবে বেক সময়ে একটি LLM আহবান করা: « প্রে এই আর্টিকেলটি, কর্পাস থেকে সবচেয়ে সমান তিনটি আর্টিকেল খুঁজে বের করে।  এটা করবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটিতে একটি LLM কল`./gradlew bake`খরচ হয় সময়, টাকা, এবং আপনার বিল্ডে অ-নিশ্চিততা প্রবর্তন করে। LLM-এর উত্তর পারে দুই বিল্ডস মধ্যে পরিবর্তন করছেন যখন কনটেন্ট পরিবর্তিত হয়নি। আপনার CI হয়ে যায় অপ্রতিলিপ্য, আপনার পরীক্ষা অস্থির হয়ে উঠেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নির্দেশক সমাধান: একটি Gradle পাইপলাইন যা গ্রাফটি পূর্বে গণনা করে সাদৃশ্য এবং তা সংরক্ষণ করে`graph.json`. টেমপ্লেট ফলাফল পড়ে — সে কখনো একটি হিসাব শুরু করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আর্কিটেকচার_ব্যাকেরি_গ্রাফিফাই_ইম্পোর্ট_করে_ইঞ্জিন_নয়&amp;quot;&amp;gt;আর্কিটেকচার : ব্যাকেরি গ্রাফিফাই ইম্পোর্ট করে, ইঞ্জিন নয়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি আর্কিটেকচারের সবচেয়ে গুরুত্বপূর্ণ বিষয়। আকর্ষণ হতো সহযোগিতাকে তারে দেওয়া`engine/build.gradle.kts`: ইঞ্জিন প্রয়োগ করে গ্র্যাফিফাই স্ক্যানের জন্য, ব্যাকেরি বেকিংয়ের জন্য, এবং ইঞ্জিন দুটির মধ্যে সেতু তৈরি করে। দুইটি.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি অ্যান্টি‑প্যাটার্ন। Engine একটি &amp;lt;strong&amp;gt;ব্যবহারকারী টার্মিনাল&amp;lt;/strong&amp;gt; — এটি প্রয়োগ করে। প্লাগইনগুলো, এটি ব্যবসায়িক যুক্তি প্রয়োগ করে না। নিয়ম হল : &amp;lt;strong&amp;gt;প্রমাণের দায়িত্ব মালিকানাধীন প্লাগইনে আছে।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/bakery-import-graphify.svg&amp;quot; alt=&amp;quot;bakery import graphify&amp;quot; width=&amp;quot;1770&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. সঠিক আর্কিটেকচার — বেকারি Graphify আমদানি করে&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DAG চুক্তি মেনে চলা হয়েছে : bakery (N2) graphify (N0) র امپোর্ট করে, N2 &amp;amp;gt; N0, কোনো লঙ্ঘন নেই। Engine (N3) bakery (N2) আমদানি করে, N3 &amp;amp;gt; N2, OK.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ইঞ্জিনের &amp;lt;strong&amp;gt;কোনো&amp;lt;/strong&amp;gt; কোড লাইন রেফারেন্স করা নেই`graph.json`, &amp;lt;code&amp;gt;relatedPosts&amp;lt;/code&amp;gt;, অন্য কোনো সমতার ধারণা। সে ব্যাকারি প্রয়োগ করে, বিন্দু। লা সহযোগিতা বেকারের अभ্যন্তরে রয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাইপলাইন_স্ক্যান_গ্রাফ_টেমপ্লেট&amp;quot;&amp;gt;পাইপলাইন : স্ক্যান → গ্রাফ → টেমপ্লেট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি হলো তিন ধাপে সম্পূর্ণ পাইপলাইন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Scan&amp;lt;/strong&amp;gt; (graphify) :`graphify-plugin`workspaceni স্ক্যান করে। এর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বর্তমান রূপে, এটি ইতিমধ্যে এইগুলো সনাক্ত করে`xref:`মধ্যে`.adoc`এবং প্রদর্শন করে এতে`graph.json`যেমন ধরণের কিনारे`reference`.&amp;lt;br&amp;gt;
এটি সম্পাদকীয় কন্টেন্টের জন্য সমৃদ্ধ করা হয় : * পার্স কর মেটাডেটা JBake (&amp;lt;code&amp;gt;:jbake-tags:&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;:jbake-description:&amp;lt;/code&amp;gt;) প্রতিটির`.adoc`ব্লগের ট্যাগের সহ-পূর্ববৃত্তি গণনা করুন → edges`tag_cooccurrence`ওজন সহ * TF-IDF ব্যবহার করে বিবরণ থেকে নামযুক্ত エンিটি নিষ্কাশন করা → edges`entity_overlap` * একটি অংশ ইনজেক্ট করে`blog_articles`এর মধ্যে`graph.json`বিদ্যমান (No output, as no French text was provided to translate)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// Extrait de l&amp;#39;enrichissement graphify pour le blog
fun enrichBlogSection(graphJson: File, blogDir: File): GraphJson {
    val articles = blogDir.listFiles { f -&amp;amp;gt; f.extension == &amp;quot;adoc&amp;quot; }
        .map { parseJbakeMetadata(it) }

    val nodes = articles.map { ArticleNode(it.slug, it.title, it.tags) }
    val edges = mutableListOf&amp;amp;lt;GraphEdge&amp;amp;gt;()

    // Couche 1 : xref (déjà fait par scanWorkspace)

    // Couche 2 : co-occurrences de tags
    for (a in articles) {
        for (b in articles) {
            if (a.slug == b.slug) continue
            val common = a.tags.intersect(b.tags)
            if (common.isNotEmpty()) {
                edges.add(GraphEdge(
                    source = a.slug,
                    target = b.slug,
                    type = &amp;quot;tag_cooccurrence&amp;quot;,
                    weight = common.size.toDouble() / (a.tags.size + b.tags.size)
                ))
            }
        }
    }

    return graphJson.copy(
        blogArticles = BlogSection(nodes, edges)
    )
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বেক&amp;lt;/strong&amp;gt; (ব্যাকারি) : সময়ের`./gradlew bake`, `BakeryPlugin`পড়া&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`graph.json`এবং প্রতিটি পোস্টের জন্য সংশ্লিষ্ট লেখাগুলো সমাধান করে।&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// BakeryPlugin — résolution des articles connexes
fun resolveRelatedPosts(
    currentSlug: String,
    graph: GraphJson,
    maxResults: Int = 4
): List&amp;amp;lt;RelatedPost&amp;amp;gt; {
    val edges = graph.blogArticles.edges
        .filter { it.source == currentSlug || it.target == currentSlug }

    return edges
        .sortedByDescending { it.weight }
        .take(maxResults)
        .map { edge -&amp;amp;gt;
            val relatedSlug = if (edge.source == currentSlug) edge.target else edge.source
            graph.blogArticles.nodes.first { it.slug == relatedSlug }
        }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Template&amp;lt;/strong&amp;gt; (&amp;lt;code&amp;gt;post.thyme&amp;lt;/code&amp;gt;) : JBake মডেল এখন একটি মানচিত্র পায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সতর কালানুক্রমিক তালিকার বদলে সংগঠিত&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xhtml hljs&amp;quot; data-lang=&amp;quot;xhtml&amp;quot;&amp;gt;&amp;amp;lt;!-- Articles connexes basés sur le Knowledge Graph --&amp;amp;gt;
&amp;amp;lt;th:block th:if=&amp;quot;${relatedPosts != null and !relatedPosts.empty}&amp;quot;&amp;amp;gt;
    &amp;amp;lt;section class=&amp;quot;mt-5 pt-4 border-top&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2 class=&amp;quot;h4 mb-3&amp;quot;&amp;amp;gt;Articles connexes&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;th:block th:each=&amp;quot;related : ${relatedPosts}&amp;quot;&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;mb-2&amp;quot;&amp;amp;gt;
                &amp;amp;lt;a th:href=&amp;quot;${content.rootpath} + ${related.uri}&amp;quot;
                   th:text=&amp;quot;${related.title}&amp;quot; class=&amp;quot;fw-semibold&amp;quot;&amp;amp;gt;&amp;amp;lt;/a&amp;amp;gt;
                &amp;amp;lt;br/&amp;amp;gt;
                &amp;amp;lt;small class=&amp;quot;text-muted&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;th:block th:each=&amp;quot;reason,iterStat : ${related.reasons}&amp;quot;&amp;amp;gt;
                        &amp;amp;lt;span class=&amp;quot;badge bg-light text-dark&amp;quot;
                              th:text=&amp;quot;${reason}&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
                    &amp;amp;lt;/th:block&amp;amp;gt;
                &amp;amp;lt;/small&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/th:block&amp;amp;gt;
    &amp;amp;lt;/section&amp;amp;gt;
&amp;amp;lt;/th:block&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেমপ্লেটটি একই — এটি &amp;lt;strong&amp;gt;কোথা থেকে&amp;lt;/strong&amp;gt; ডেটা আসে না জানা। বেকের리와 JBake এর মধ্যে শুধুমাত্র চুক্তি পরিবর্তিত হয়েছে:`published_posts`(সুচি) ক্রোনোলজিকাল) হয়`relatedPosts`(map_weighted_by_the_graph)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যাজ «কারণ» (উদাহরণ:`xref 0122`, &amp;lt;code&amp;gt;tag:gradle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cluster:pgvector-rag&amp;lt;/code&amp;gt;) পাঠককে ব্যাখ্যা করে &amp;lt;strong&amp;gt;কেন&amp;lt;/strong&amp;gt; এই নিবন্ধটি সংযুক্ত। এটি নয় শুধু স্বচ্ছতা — এটি টপোলজি বিষये শিক্ষার পদ্ধতি আপনার নিজের কন্টেন্ট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফালব্যাক_ক্রমবর্ধমান&amp;quot;&amp;gt;ফালব্যাক ক্রমবর্ধমান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Si `graph.json`অনুপস্থিত(স্থানীয় বিল্ড প্রাক্কালিক স্ক্যান ছাড়া, πρώτο) বিন্যাস, CI যা এখন পর্যন্ত গ্রাফাই স্ক্যানকে অন্তর্ভুক্ত করেনি), টেমপ্লেট সৌম্যভাবে অবমূল্যন করা উচিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun resolveRelatedPosts(currentSlug: String, graph: GraphJson?): List&amp;amp;lt;RelatedPost&amp;amp;gt; {
    if (graph != null &amp;amp;amp;&amp;amp;amp; graph.blogArticles != null) {
        return resolveFromGraph(currentSlug, graph)
    }
    // Fallback chronologique — même comportement qu&amp;#39;aujourd&amp;#39;hui
    logger.warn(&amp;quot;[bakery] graph.json absent — fallback chronologique&amp;quot;)
    return resolveFromChronology(currentSlug)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্ট আচরণ বর্তমানে আচরণের সাথে একই। এইটি সুপারিশ ইঞ্জিন একটি &amp;lt;strong&amp;gt;প্রগতিশীল উন্নতি&amp;lt;/strong&amp;gt; — না একটি ব্রেকিং চেঞ্জ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এমার্জেন্টঅন্টোলজি_যখন_নিবন্ধগুলো_একে_অপরে_জানেন_না_তবে_একত্রিত_হয়&amp;quot;&amp;gt;এমার্জেন্টঅন্টোলজি : যখন নিবন্ধগুলো একে অপরে জানেন না, তবে একত্রিত হয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবচেয়ে আকর্ষণীয় স্তরটি তৃতীয়টি : উদ্ভূত অন্তর্ভুক্ত। যে নিবন্ধগুলি উদ্ধৃত হয় না, যাদের.tags একই নয়, কিন্তু যারা &amp;lt;strong&amp;gt;একই বিষয় নিয়ে কথা বলেন&amp;lt;/strong&amp;gt; কিন্তু তা না জানেন.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আসুন একটি বাস্তব উদাহরণ নেয়া যাক। আমার কোর্পাসের তিনটি রচনা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;0119 — DGX Spark বেনচমার্ক vs ক্লাউড সাবস্ক্রিপশন LLM&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;0121 — Gradle প্লাগইন দুটি Ollama Pro ইন্সট্যান্স পরিচালনা করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;0122 — অনুপাত কার্যকারিতা 27x 45x বাস্পার বিশেষজ্ঞ কৃত্রিম বুদ্ধিমত্তা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তিনটি লেখার মধ্যে &amp;lt;strong&amp;gt;কোনও&amp;lt;/strong&amp;gt; xref নেই। তাদের ট্যাগ না ২০% পর্যন্ত (« ollama », « llm » সাধারণ) মেলে। কিন্তু একটি হালকা NLP বিবরণগুলো রে স্পষ্ট ক্লাস্টার প্রকাশ করে: « খরচ », « সাবস্ক্রিপশন »,  ক্লাউড », « GPU », « API কী », « ওল্লামা প্রো », « কার্যকারিতা », « অনুপাত&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারা একটি অন্তর্ভুক্ত ক্লাস্টার তৈরি করেন : &amp;lt;strong&amp;gt;সেলফ-হোস্টেড LLM এর অর্থনীতি বনাম&amp;lt;/strong&amp;gt; cloud*. এই cluster* কোথাও ঘোষিত হয় না। এটি corpus থেকে উদ্ভব হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/cluster-ontologique-exemple.svg&amp;quot; alt=&amp;quot;cluster ontologique exemple&amp;quot; width=&amp;quot;1783&amp;quot; height=&amp;quot;5480&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই অন্টলজিক্যাল ক্লাস্টার ম intermédiaire একটি কম্পোজিট এজ হয়`graph.json`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;source&amp;quot;: &amp;quot;0119-benchmark-dgx-spark&amp;quot;,
  &amp;quot;target&amp;quot;: &amp;quot;cluster:economie-llm&amp;quot;,
  &amp;quot;type&amp;quot;: &amp;quot;entity_cluster&amp;quot;,
  &amp;quot;weight&amp;quot;: 0.73,
  &amp;quot;metadata&amp;quot;: {
    &amp;quot;clusterLabel&amp;quot;: &amp;quot;Économie LLM Self-Hosted vs Cloud&amp;quot;,
    &amp;quot;commonEntities&amp;quot;: [&amp;quot;coût&amp;quot;, &amp;quot;GPU&amp;quot;, &amp;quot;abonnement&amp;quot;, &amp;quot;Ollama Pro&amp;quot;, &amp;quot;ratio&amp;quot;],
    &amp;quot;articlesInCluster&amp;quot;: [
      &amp;quot;0119-benchmark-dgx-spark&amp;quot;,
      &amp;quot;0121-ollama-pro-deux-instances&amp;quot;,
      &amp;quot;0122-ratio-efficacite-flotte-experts&amp;quot;
    ]
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এনএলপি ইচ্ছামত হালকা — TF-IDF + cosine similarity উপরে বর্ণনা। BERT এর প্রয়োজন নেই, ভাষা মডেলের প্রয়োজন নেই। কর্পাসে 23টি নিবন্ধ আছে, সাদৃশ্য মেট্রিক্স একটি 50 কিবি JSON ফাইল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;NLP-এর শক্তি অ্যালগরিদমের জটিলতায় থেকে আসে না, কিন্তু &amp;lt;strong&amp;gt;কর্পোরাসের আকার&amp;lt;/strong&amp;gt; এবং &amp;lt;strong&amp;gt;বর্ণনের গুণমান&amp;lt;/strong&amp;gt; এর কারণে। এক `:jbake-description:`ভালভাবে লেখা ১৫০ অক্ষরের অংশে আরও বেশি TF-IDF-এর জন্য একটি পুরো ৩০০০ শব্দের নিবন্ধের সিগন্যাল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_dag_চুক্তি_কে_কে_গুরুত্বপূর্ণ&amp;quot;&amp;gt;DAG চুক্তি: কে কে গুরুত্বপূর্ণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি বিন্দু যেখানে স্থাপত্য শাখা ফল দেয়. DAG N0→N3 সংজ্ঞায়িত`engine/build.gradle.kts`একটি সহজ নিয়ম দেয় : কোন প্রকল্প একটি উচ্চ-স্তরের প্রকল্পকে আমদানি করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 18.1818%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.2728%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ব্যবহারকারী প্লাগইন&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আমদানি করা প্লাগাইন&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ভোগোয়ার স্তর&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আপোর্টকৃত স্তর&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বৈধ ?&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;bakery-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;graphify-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ N2 &amp;amp;gt; N0 — OK&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ইঞ্জিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;bakery-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ N3 &amp;amp;gt; N2 — OK&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ইঞ্জিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;graphify-gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ প্রযুক্তিগত ঠিক, কিন্তু &amp;lt;strong&amp;gt;ধারণামূলকভাবে ভুল&amp;lt;/strong&amp;gt; — सहयोगিতা bakery-এর ভিতরে (Note: The Bengali text above preserves the emoji, punctuation, asterisks, and spacing, with only the linguistic content translated.)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ইঞ্জিন বেকারি প্রয়োগ করে। বেকারি গ্রাফাই প্রয়োগ করে। এটাই সব। একদিন আমি গবেষণায় ভেক্টর স্টোর কোডবেস (N1) যোগ করতে চাই ক্রস-কর্পস শব্দার্থ, বেকারি তােও আমদানি করে। ইঞ্জিনটি পরিবর্তন করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্যাটার্ন হল: &amp;lt;strong&amp;gt;N2 প্লাগইন তার নিজের নির্ভরতাগুলির হাব&amp;lt;/strong&amp;gt; Engine N3 একটি hub নয় — এটি একটি টার্মিনাল যা হাব প্রয়োগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আমরা_কী_পাই_এবং_কী_পাই_না&amp;quot;&amp;gt;আমরা কী পাই (এবং কী পাই না)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান লাভ সম্পাদনামূলক, প্রযুক্তিগত নয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আগে&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;পরে&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংশ্লিষ্ট লেখাগুলি = গত ৪টি পোস্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংশ্লিষ্ট নিবন্ধ = ওজন অনুযায়ী জ্ঞান গ্রাফে শীর্ষ ৪&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাঠক RAG থেকে পড়ে → কিটি টার্মিনালের সুপারিশ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাঠক RAG পড়ে → pgvector, chunking, vector store সুপারিশ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কেনে কোনো স্বচ্ছতা নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যadge`xref 0122`, &amp;lt;code&amp;gt;tag:gradle&amp;lt;/code&amp;gt;, `cluster:rag`দৃশ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JBake স্ট্যান্ডার্ড, জিরো ইফোর্ট, জিরো মূল্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গ্র্যাডল পাইপলাইন, নির্ধারিত, পুনরাবৃত্তিমূলক, পরীক্ষাযোগ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাঠকের জন্য কোনও শেখার বক্ররেখা নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাঠক আমার কন্টেন্টের &amp;lt;strong&amp;gt;টপোলজি&amp;lt;/strong&amp;gt; খুঁজে পায়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যা কেউ &amp;lt;strong&amp;gt;ne&amp;lt;/strong&amp;gt; জয় না করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এটি একটি « সত্য » সুপারিশ ইঞ্জিন নয় (সহযোগিতার কোনো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফিল্টারিং, কোনো A/B টেস্টিং না, কোনো ফিডব্যাক লুপ না)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গुणমান JBake মেটাডেটার সমৃদ্ধি উপর নির্ভর করে — যদি আপনার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিবরণগুলো খালি, TF-IDF কিছুই দেখে না&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;NLP অফলাইন — নতুন নিবন্ধগুলোকে শুধুমাত্র &amp;amp;#8230;&amp;amp;#8203;-এ ক্লাস্টার করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আগামী স্ক্যান (এটা ভালো: বিল্ডটি deterministic (নির্ধারক) থাকে)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃষ্টিকোণ_ব্লগ_পাবলিক_নোলেজ_গ্রাফের_মতো&amp;quot;&amp;gt;দৃষ্টিকোণ: ব্লগ পাবলিক নোলেজ গ্রাফের মতো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বৈশিষ্ট্য একটি বিস্তৃত দৃষ্টিভঙ্গি খুলে দেয়: এবং যদি`cheroliv.com` তিনি নিজেকে একটি &amp;lt;strong&amp;gt;নেভিগযোগ্য জ্ঞান গ্রাফ&amp;lt;/strong&amp;gt; হচ্ছিলেন?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আর্টিকেলগুলো নোড। ট্যাগগুলো সম্প্রদায়। xrefগুলো এড়োকে। পাঠক আর একটি বিচ্ছিন্ন নিবন্ধ পড়ে না — সে একটিতে নেভিগেট করে &amp;lt;strong&amp;gt;জ্ঞান গ্রাফ&amp;lt;/strong&amp;gt; যেটির বর্তমান প্রবন্ধ প্রবেশের বিন্দু।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;कल्पনা করুন একটি হোমপেজ যা কালানুক্রমিক তালিকা দেখায় না শেষ পোস্টগুলো, কিন্তু একটি &amp;lt;strong&amp;gt;carte du corpus&amp;lt;/strong&amp;gt; : ওনটোলজিক্যাল ক্লাস্টার, পিভোট আর্টিকেল (যেগুলোর সবচেয়ে বেশি কিনার), পড়ার পথ প্রস্তাবিত « আপনি যদি Graphify সম্পর্কিত নিবন্ধটি পছন্দ করেন, তাহলে পরবর্তীটি পড়ুন যেটি Knowledge Graph-কে বোঝার সরঞ্জাম হিসাবে )&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি আরও একটি ব্লগ নয়। এটি একটি &amp;lt;strong&amp;gt;সেমানটিক অ্যাটলাস&amp;lt;/strong&amp;gt;।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং এটি বিজ্ঞান ফিকশন নয়। এটা`graph.json`এতিমধ্যে বিদ্যমান। তার কেবল নেভিগেশন ইন্টারফেস দরকার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_ফাইল_সিস্টেম_টেমপ্লেট_যা_উপেক্ষা_করে_তা_জানে&amp;quot;&amp;gt;উপসংহার : ফাইল সিস্টেম টেমপ্লেট যা উপেক্ষা করে তা জানে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই মঙ্গলবার সন্ধ্যায় আমি যা উঁচু progett করেছি, তা হল একটি হিউরিস্টিকের প্রতিস্থাপন অলস (কালাক্রমিক) দ্বারা একটি বিশ্বস্ত প্রতিনিধিত্বের আমার কর্পাসের গঠন (জ্ঞান গ্রাফ)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেমপ্লেট`post.thyme`বদলে না। যা পরিবর্তিত হয়, তা আমরা তাকে খabar দেয়। পূর্বে: একটি জাভা তালিকা অনুযiare`date`. একটি ওজনযুক্ত গ্রাফ — তিনটি বিশ্লেষণ স্তর থেকে উৎপন্ন — xrefs, সহ-উপস্থিতি tags-এর, এবং NLP দ্বারা উদ্ভত ওন্টোলজি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফেরত লুপ বন্ধ হয়েছে। graphify ওয়ার্কস্পেসটি স্ক্যান করে। Bakery পড়ে গ্রাফ এবং টেমপ্লেটকে পুষ্টি করে। পাঠক সুপারিশগুলি দেখে প্রাসঙ্গিক। এবং ইঞ্জিন — কন্ডাক্টর — এটা навіত না জানে সব cái বিদ্যমান আছে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এইইই, ভাল আর্কিটেকচার। প্রতিটি প্লাগইন একটি কাজ করে। এবং গ্রাহক টার্মিনালকে কীভাবে জানার দরকার নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সূত্রাবলি&amp;quot;&amp;gt;সূত্রাবলি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১০৫ — গ্রেডল ওয়ার্কফ্লো-এ গ্রাফিফাইকে একীভূত কর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0106_knowledge_graph_outil_comprehension_codebase_post.html&amp;quot;&amp;gt;অ্যরটিকেল 0106 — Knowledge Graph একটি বোঝার সরঞ্জাম&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0117_granularisation_oss_css_repositorie_workspace_post.html&amp;quot;&amp;gt;Article 0117 — ওএসএস/সিএসএসের ডকসান্ধারণ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0121_plugin_gradle_piloter_deux_instances_ollama_pro_post.html&amp;quot;&amp;gt;অনুচ্ছেদ ০১২১ — প্লাগইন গ্রেডল পাইলট করো দুটি ইনস্ট্যান্স ওলামা প্রো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0122_ratio_efficacite_27x_45x_flotte_experts_ia_vs_claude_gpt.post.html&amp;quot;&amp;gt;আর্টিকেল ০১২২ — ২৭× থেকে ৪৫× বেশি কার্যকর : কৃত্রিম বুদ্ধিমত্তার বিশেষজ্ঞদের দল&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>27× থেকে 45× Claude এবং GPT- থেকে বেশি কার্যকর : কিভাবে 23টি fine-tuned AI বিশেষজ্ঞের একটি ফ্লট বাজারকে ধ্বংস করে</title>
            <link >https://cheroliv.com//blog/2026/0122_ratio_efficacite_27x_45x_flotte_experts_ia_vs_claude_gpt_post.html</link>
            <pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0122_ratio_efficacite_27x_45x_flotte_experts_ia_vs_claude_gpt_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_ফাইনটিউন_কেন_এবং_র্যাগ_না&amp;quot;&amp;gt;সমস্যা: ফাইন‑টিউন কেন এবং র্যাগ না?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইদিয়া_বিশজ্ঞদের_একটি_দল_একক_মডেলও_না&amp;quot;&amp;gt;ইদিয়া : বিশজ্ঞদের একটি দল, একক মডেলও না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্রজে_নজরে_codebase_৭_৯০০_ফাইল_১_৪৪_০০০_লাইন&amp;quot;&amp;gt;ব্রজে নজরে codebase : ৭ ৯০০ ফাইল, ১ ৪৪ ০০০ লাইন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pাঠনের সময় : 22 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;প্রতিদিন সফ্টওয়্যার ডেভলপমেন্টের জন্য একটি LLM ব্যবহার করার সময়, আপনি সর্বদা একই দিwałyে আটকে যান: মডেলটি &amp;lt;strong&amp;gt;আপনার&amp;lt;/strong&amp;gt; কোডবেসকে জানে না। ও জানে না যে আপনি এই প্যাটার্নটি ব্যবহারhttps://fr.wikipedia.org/wiki/Graphe_orient%C3%A9_acyclique[DAG], এইরকম Gradle কনভেনশন, এইরকম জ্ঞানশাস্ত্রীয় স্তরীকরণ আপনারhttps://fr.wikipedia.org/wiki/AsciiDoc[.adoc]তাহলে আমরা তাকে কনটেক্সট ইনজেক্ট করি, পুনরাবৃত্তি করি, সংশোধন করি এবং আবার পুনরাবৃত্তি করি। এবং সময় — এবং টাকা — যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অতএব আমি নIENTে প্রশ্ন করলাম : আমার ওয়ার্কস্পেসে ফাইন-টিউনড মডেলের একটি দলে কত খরচ होगा, যরা আমার শৈলিতে কোড উঁচু দিতে সক্ষম, প্রতibar ব্যাখ্যা দিতে হবে না? আর আরও গুরুত্বপূর্ণভাবে : এই পদ্ধতি ক্লাসিক মালিকানাধীন সমাধান — Claude, GPT, Gemini, Grok — সাথে কীভাবে তুলনা করে?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিক্রিয়াটি আমাকে বিস্ময়িত করেছে। আমার কল্পনার থেকে অনেক কম। এবং শিল্পের বিশালদের সম্মুখে খরচ/কার্যকারিতা অনুপাত অস্বীকারযোগ্য। এখানে পূর্ণ বিবরণ দেওয়া হল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_ফাইনটিউন_কেন_এবং_র্যাগ_না&amp;quot;&amp;gt;সমস্যা: ফাইন‑টিউন কেন এবং র্যাগ না?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;RAG, ভালো। &amp;lt;a href=&amp;quot;0106_knowledge_graph_outil_comprehension_codebase_post.html&amp;quot;&amp;gt;Mon knowledge graph&amp;lt;/a&amp;gt; এবং &amp;lt;a href=&amp;quot;0116_compartimentage_epistemique_automatise_llm_post.html&amp;quot;&amp;gt;mon compartimentage épistémique&amp;lt;/a&amp;gt; কাজ করে। কিন্তু RAG-এ একটি মৌলিক ত্রুটি আছে : প্রতিটি কোয়েরি জন্য, তুমি প্রাসঙ্গিক Context পুনরায় ইনজেক্ট করতে হবে। তোর প্রম্পট দীর্ঘ হয়ে যায়, তোর লেটেন্সি বাড়ে, এবং মডেল &amp;lt;code&amp;gt;n*&amp;#39;intériorise*&amp;#39;&amp;lt;/code&amp;gt; কখনো তোর প্যাটার্নগুলোকে ভিতরের ভাবে গ্রহণ করে না — এটি প্রতিবার তেগুলোকে একটি বাহ্য ডকুমেন্টের মতো পড়ে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইন-টিউন, তার জন্য, হলো পেশি স্মৃতি। মডেল &amp;lt;strong&amp;gt;sait&amp;lt;/strong&amp;gt; যে তুমি লেখছো`build.gradle.kts`মidiumে রেকর্ড করা কাজের ساتھ`tasks.register`, যে তের`AGENTS.adoc`একটি মানকীকারিত সিনট্যাক্স অনুসরণ করেন, যে তোর ওয়ার্কস্পেস বরো-এ গঠিত। ত Biele দরকার নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইন-টিউন RAG-এর একটি প্রতিস্থাপন নয়। এটি একটি পূরক স্তর। RAG ঘন ঘন পরিবর্তিত হওয়া ডেটা (লগ, টিকট, সাম্প্রতিক কমিট) এর জন্য এখনও প্রাসঙ্গিক। ফাইন-টিউন দীর্ঘমেয়াদী &amp;lt;strong&amp;gt;structurelle&amp;lt;/strong&amp;gt; এবং &amp;lt;strong&amp;gt;stylistique&amp;lt;/strong&amp;gt; জ্ঞানের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ইদিয়া_বিশজ্ঞদের_একটি_দল_একক_মডেলও_না&amp;quot;&amp;gt;ইদিয়া : বিশজ্ঞদের একটি দল, একক মডেলও না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার পুরো ওয়ার্কস্পেসে মাত্র একটি ফাইন-টিউন্ড মডেল, তা ইতিমধ্যেই ভাল। কিন্তু তা অপ্টিমাল নয়। আমার ওয়ার্কস্পেশে প্রচুর ভিন্ন-BHinn ক্ষেত্র আছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Gradle প্লাগইন (Kotlin, কনভেনশন প্লাগইন, কম্পোজিট বিল্ড)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;DAG ইঞ্জিন (Kotlin, পরিকল্পনা, নিষ্পাদন)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এজেন্ট LLM (Python, LangChain4j, RAG)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;মহাকাশিক নথীবদ্ধতা (AsciiDoc, শাসন)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইনফ্রা/DevOps (Docker, GitHub Actions, CI/CD)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি একক মডেল সব জায়গায় ভাল থাকা উচিত, কোথাও অসাধারণ নয়। সমাধান? একটি&amp;lt;strong&amp;gt;বিশেষজ্ঞ মডেলের ফ্লোট&amp;lt;/strong&amp;gt;, একটি ওরকেস্ট্রেটর যা প্রতিটি অনুরোধটি সঠিক বিশেষজ্ঞের দিকে পাঠায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FAFAFA
skinparam defaultFontSize 13

package &amp;quot;Ollama ক্লাউড&amp;quot; {
  rectangle &amp;quot;DeepSeek V4-Pro
1.6T / 49B সম্পদ&amp;quot; as V4Pro #FF6B6B
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FAFAFA
skinparam defaultFontSize 13

package &amp;quot;Ollama ক্লাউড&amp;quot; {
  rectangle &amp;quot;DeepSeek V4-Pro
1.6T / 49B সম্পদ&amp;quot; as V4Pro #FF6B6B
  rectangle &amp;quot;6× V4-Flash-FT
292B / 13B সক্রিয়&amp;quot; as Flash #4ECDC4
  rectangle &amp;quot;6× Gemma4 26B-FT
26B / 3.8B সক্রিয়&amp;quot; as Gemma #FFE66D
  rectangle &amp;quot;5× Qwen3.6 35B-FT
35B / 3B অ্যাক্টিভ&amp;quot; as Qwen36 #A8E6CF
  rectangle &amp;quot;5× Qwen3.5 35B-FT
35B / 3B সক্রিয়&amp;quot; as Qwen35 #FF8B94
}

note bottom of Qwen35
  À partir de 17€/mois
  (1× Ollama Pro annual)
  Extensible par cumul
  de comptes Pro selon
  la méthode Docker.
end note

actor Utilisateur as User

User --&amp;amp;gt; V4Pro : Requête
V4Pro --&amp;amp;gt; Flash : &amp;quot;জটিল Gradle টাস্ক&amp;quot;
V4Pro --&amp;amp;gt; Gemma : &amp;quot;AsciiDoc ফরম্যাটিং&amp;quot;
V4Pro --&amp;amp;gt; Qwen36 : &amp;quot;কটলিন রিফ্যাক্টরিং&amp;quot;
V4Pro --&amp;amp;gt; Qwen35 : &amp;quot;Bash স্ক্রিপ্ট&amp;quot;

note right of V4Pro
  L&amp;#39;orkestrateur route
  la requête vers l&amp;#39;expert
  le plus pertinent.
  Zéro prompt engineering
  répétitif.
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মোট বেড়ালো :&amp;lt;strong&amp;gt;1 অর্কেস্ট্রেটর + 22 বিশেষজ্ঞ = 23 মডেল&amp;lt;/strong&amp;gt;। এবং মাসিক অনুমান খরচ?&amp;lt;strong&amp;gt;১৭ ইউরো/মাস&amp;lt;/strong&amp;gt;ওলামা প্রো বার্ষিক সাবস্ক্রিপশন — অ্যাকাউন্টের জমি দিয়ে মাত্রা অতিক্রম করলে এটি প্রসারনযোগ্য, যেমন &amp;lt;a href=&amp;quot;0120_cumuler_deux_abonnements_ollama_pro_docker_post.html&amp;quot;&amp;gt;ডকার মাল্টি-অ্যাকাউন্ট পদ্ধতি&amp;lt;/a&amp;gt;। ১৭€ থেকে শুরু, প্রতি ধাপে ২০€ যোগ করা হয় প্রকৃত প্রয়োজন অনুযায়ী। কোনো বর্জ্য না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ব্রজে_নজরে_codebase_৭_৯০০_ফাইল_১_৪৪_০০০_লাইন&amp;quot;&amp;gt;ব্রজে নজরে codebase : ৭ ৯০০ ফাইল, ১ ৪৪ ০০০ লাইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রশিক্ষণের খরচ অনুমান করার আগে, জানা দরকার যে কীকে প্রশিক্ষণ দিতে হবে। আমি Git‑এর উপেক্ষিত সবকিছুকে কঠোরভাবে বাদ দিয়ে আমার কর্মস্থলকে অডিট করেছি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;----
----
build/    out/    node_modules/    runtimes/    .gradle/    dist/
target/   venv/   __pycache__/     .cache/      .tox/
----

ট্র্যাক করা ফাইলগুলো শুধুমাত্রের ফলাফল হলো:

[cols=&amp;quot;2,2&amp;quot;]
|===
|মেট্রিক |মূল্য

|ট্র্যাক করা উত্স ফাইলগুলো |**7 896** |কোডের লাইন (LOC) |**143 805** |রিপোজিটরি গিট |**২৬** |প্রধান ভাষাসমূহ |Kotlin (1 903), AsciiDoc (2 765), Python (5 029)
|===

[IMPORTANT]
====
এই 5 000+ পাইথন ফাইলগুলো অন্তর্ভুক্ত করে`runtimes/`নোটবুক এবং উপযোগী স্ক্রিপ্ট। প্রয়োগের কোর (Gradle pluгин, DAG ইঞ্জিন, এজেন্ট) প্রমুখভাবে Kotlin এবং AsciiDoc-এ লিখা।
====

এই ভর থেকে, আমি মনে করি যে আমি একটি সিন্থেটিক ডেটাসেট তৈরি করতে পারবো।**~170 মিলিয়ন টোকেন**একটি শিক্ষক LLM এর মাধ্যমে (কোডবেসকে শিক্ষা-উত্তর জোড়ায় distillation).

=== বিশেষজ্ঞের ধরণ অনুযায়ী ডেটাসেটের বিস্তার

[source,text]
----
Dataset maître (généraliste V4-Flash) :    50M tokens
Expert Gradle/Build        :    15M tokens
Expert Kotlin/DAG          :    15M tokens
Expert AsciiDoc/Gouvernance:    15M tokens
Expert Agent/LLM/Python    :    15M tokens
Expert Infra/CI-CD         :    15M tokens
Micro-experts Qwen/Gemma   :   ~5M tokens chacun
----

== মডেলের বেছে নেওয়া: 100% MoE, শূন্য ঘনতা

এইটিই স্থানে স্থাপত্য বাস্তবে কার্যকর হয়।

একটি *dense* মডেল প্রতিটি টোকেনে এর সব ওজনকে সক্রিয় করে। একটি *MoE* (Mixture of Experts) মডেল শুধুমাত্র এর প্যারামিটারের একটি অংশকে সক্রিয় করে। অনুমানের খরচ — এবং ফাইন‑টিউনিং — এর প্যারামিটারের সাথে आनुपাতিক।**সক্রিয়**, পরামিতিগুলোর জন্য নয়**সংরক্ষিত**.

আজ Ollama Cloud-এ বাজারটি MoE-এ কী প্রস্তাব করছে তা দেখি :

[cols=&amp;quot;3,2,2,1,3&amp;quot;]
|===
|মডেল |মোট প্যারামিটার |সক্রিয় |সক্রিয়করণ |Ollama মেঘ

|ডিপসিক V4-প্রো |1.6T |49B |3.1% |✅ নিবাসী |DeepSeek V4-Flash |292B |13B |4.5% |✅ স্থানীয় |Gemma 4 26B-A4B |26B |3.8B |14.6% |✅ দেশীয় |Qwen3.6-35B-A3B |35B |3B |8.6% |❌ (এখনো অন্তর্ভুক্ত হয়নি) |Qwen3.5-35B-A3B |35B |3B |8.6% |✅ স্থানীয়
|❌ Qwen3.5-27B |২৭B |27B |১০০% ঘন |অপসারিত |[No output, as there is no French text provided to translate] |4B/9B |4B/9B |১০০% ঘন |অপনীত |❌ Gemma 4 31B |31B |31B |১০০% ঘন |বিলupt? Wait correct spelling: বিলুপ্ত

So answer: বিলুপ্ত (with proper Unicode). Ensure not adding extra spaces. We&amp;#39;ll output simply:

বিলুপ্ত
|🧪 Gemma ৪ E2B/E4B |5B/8B |5B/8B |100% ঘন |যাচাই পাইপলাইন
|===

[CAUTION]
====
অ্যাকটিভেশন অনুপাত হল বিভেদক মানদণ্ড। একটি Gemma ৪ ২৬B-A4B মডেল তার ২৬B প্যারামিটার মাত্রে শুধু ৩.8B অ্যাক্টিভেট করে — এটা ঘন ধارة ২৭B তুলনায় ৭× কম, কোডিং এজেন্টের তুলনামূলক পারফরম্যান্সের জন্য (LiveCodeBench v6-এ ৭৭.১% vs ৮০%)।
====

=== কেন আমি ঘন মডেলগুলো ত্যাগ করছি?

অপवाद: Gemma 4 E2B এবং E4B। এই দুটি মডেল, Apache 2.0-এর অধীনে, কম খরচে একটি ট্রেনিং পাইপলাইন পরীক্ষা এবং যাচাই করার জন্য দমদার। একটি E2B-এ ২-৩ ঘণ্টা রান করার খরচ $5 থেকে কম — যদি ডেটাসেট বা হাইপারপ্যারামিটারগুলি ভুল হয়, তাহলে কিলো ডলারের কিছু অংশে তা জানে। একবার পাইপলাইনটি টিউন হও গেলে, তারা অল্পমাত্রা মাইক্রো-কার্য (ট্রিভিয়াল রিফরম্যাটিং, বাইনারি শ্রেণীবিন্যাস) এর জন্যও ব্যবহার করা যেতে পারে। কিন্তু প্রধান ফ্লিটের বিশেষজ্ঞদের জন্য, আমি MoE-এ থাকি। এ কারণ:

.কিন্তু শুধু নয় : এগুলো Gemma 4 E2B/E4B, বেনামীকারণের সূক্ষ্ম বিশেষজ্ঞ

[NOTE]
====
Google এই ছোট মডেলগুলোকে নেটিভ টুল কলিংয়ে প্রতিযোগিতামূলকভাবে ডিজাইন করেছে — তারা ফাংশন কল করতে পারে, regex ম্যানিপুলেট করতে পারে, প্যাটার্ন খোঁজে পারে। একবার আননিমাইজেশন উদাহরণ (ইমেইল, টোকেন, UUID, ফাইল পাথ) এর上ে fine‑tune করা হলে, তারা হয়**অγνωomitemকরণকারীরা dataset**অতিরিক্ত দ্রুত। আমরা তাদের একটি কাঁচা পাঠ্য ব্লক দিই, তারা বুলায়`sed`/`regex`একটি টুল কলের&amp;amp;lt;/tool_call&amp;amp;gt;ে এবং সাফ করা ব্লকটি ফিরিয়ে দান। ইনফারেন্স খরচ নিম্নমূল্য : 5B সক্রিয়, এটি একটি এন্ট্রি-লেভেল GPU-এ যায়। এই মডেলগুলি পেশাগত বিশেষজ্ঞ নয় — এগুলো**বিশেষজ্ঞ শ্রমিক**ডেটাসেটের উত্পাদন শৃঙ্খলে
====

* তার প্রশিক্ষণের VRAM (এও QLoRA-এ) অনুপাতিক**27B মোট**
* তার প্রশিক্ষণ সময় সমানুপातিক**27B সক্রিয়**

তুলনা করি একটি Qwen3.6-35B-A3B (MoE):

[cols=&amp;quot;3,2,2,2&amp;quot;]
|===
| |Qwen3.5-27B (অনুশীল) |Qwen3.6-35B-A3B (MoE) |অনুপাত

|VRAM QLoRA |~55 GB |~35 GB |1.6× |GPU-ঘন্টা (8M টোক) |প্রায় ১২টা |~৪ ঘন্টা |**3×** |প্রতি ফাইন-টিউন খরচ |~$24 |~$8 |**৩×** |SWE-bench Verified |75.0% |73.4% |তুলনামূলক
|===

MoE-এর প্রশিক্ষণ খরচ ৩ গুণ কম হয়, ফলে agent-code কর্মক্ষমতা praticamente ৫% বেশি পাওয়া যায়। ২২ বিশেষজ্ঞের মধ্যে, পার্থক্য হাজার ইউরোর পরিমাণে প্রকাশিত হয়।

== প্রশিক্ষণের অনুমান : ৮১১ H100-ঘন্টা

আমি QLoRA 4‑bit-এ মডেল বাই মডেল প্রশিক্ষণ খরচটি ভাগ করে দিয়েছি, উপরে বর্ণিত ডেটাসেটগুলো ব্যবহার করে।

=== সুক্ষ্ম বিশেষজ্ঞ MoE হালকা (3-3.8B সক্রিয়)

এই মডেলগুলকে প্রতি রানে ১টি H100 (80 GB) প্রয়োজন। Q4-এ মডেলের VRAM প্রায় ১৩-১৮ GB, যা LoRA অপ্টিমাইজারের স্টেট এবং অ্যাক্টিভেশনের জন্য পর্যাপ্ত জায়গা রেখে দেবে।

[cols=&amp;quot;4,2,3,2&amp;quot;]
|===
|মডেল |NB এর রান |GPU-ঘন্টা/চালান |মোট GPU-ঘণ্টা

|Gemma 4 26B-A4B-FT |6 |3.5 h |**২১ ঘন্টা** |Qwen3.6-35B-A3B-FT |5 |4.0 h |**20 ঘন্টা** |Qwen3.5-35B-A3B-FT |5 |4.0 h |**২০টা** |সাবটোটাল মাইক্রো | | |*61 h*
|===

=== এক্সিকিউটিভস V4-ফ্ল্যাশ (১৩B সক্রিয় / ২৯২B সংরক্ষিত)

DeepSeek V4-Flash একটি বিশেষ ক্ষেত্র। যদিও শুধুমাত্র 13B টোকেনে সক্রিয় করা হয়, Q4-এ পূর্ণ মডেলটি প্রায় ১৪২ GB ওজন — প্রশিক্ষণের সময় সব বিশেষজ্ঞদেরক VRAM-এ থাকতে হবে। অতএব,**3× H100**রান করে আরামদায়ক হওয়ার জন্য

[cols=&amp;quot;4,2,3,3,2&amp;quot;]
|===
|মডেল |ডেটাসেট |GPUs |ঘন্টা |মোট GPU-ঘন্টা

|V4-Flash-Base সাধারণ |50M টক |3× H100 |50 h |**১৫০ ঘণ্টা** |V4-Flash expert ×5 |১৫ মিলিয়ন টোকেন |3× H100 |40 h |**৬০০ ঘন্টা** |একজিকিউটিভ সাবটোটাল | | | |*750 h*
|===

[cols=&amp;quot;3,2,1&amp;quot;]
|===
|**মোট** | |**811 H100-h**
|===

[NOTE]
====
তুলনামূলকে, একটি সম্পূর্ণ ফাইন‑টিউনিং V4-Flash (QLoRA ছাড়া, সমস্ত ওজন) প্রায় ৪ ০০০ H100‑ঘন্টা খরচ করবে শুধুমাত্র ৬ মডেলের জন্য। QLoRA খরচকে ৫ দিয়ে ভাগ করে। এই স্কেলে প্রকল্পটি অর্থনৈতিকভাবে বজায় রাখার এটি একমাত্র উপায়।
====

=== GPU দাম : মে ২০২৬-এ কে কী ভাড়ায়?

আমি H100-এর প্রমুখ কিরা দেলালர்களকে ব্যাঞ্চমার্ক করেছি। মিটারের ভিত্তিতে দাম, ৮১১ ঘন্টার জন্য

[cols=&amp;quot;3,2,2,2&amp;quot;]
|===
|ভাড়াচালান |$/H100·h |মোট 811ঘন্টা |বিশ্বস্ততা

|**Vast.ai স্থান** |$1.60 |**$1 298** |★★☆ interruptible |**Crusoe মেঘ** |$2.00 |**$1 622** |★★★★ datacenter বিশ্বাসনীয় |FluidStack |$1.98 |$1 606 |&amp;amp;lt;/think&amp;amp;gt; |TensorDock |$1.80 |$1 460 |★★☆ |RunPod |$2.29 |$1 857 |★★★ ভাল সমঝোতা |CoreWeave |$2.25 |$1 825 |★★★★ উদ্যোগ |ল্যাম্ব্ডা ল্যাবস |$2.49 |$2 019 |★★★★ প্রিমিয়াম
|===

[TIP]
====
Vast.ai spot সবচেয়ে সস্তে কিন্তু তোর রানগুলো যে কোনো সময় বন্ধ হতে পারে। ট্রেনিং এর জন্য এটি ঝুঁকিপূর্ণ। Crusoe $2.00/h সেরাজী ভালো নির্ভরযোগ্যতা-মূল্য অনুপাত প্রদান করে। $324 vs Vast এর অতিরিক্ত খर्च মানসিক শান্তির মূল্য দাঁড়ায়।
====

=== Wall-clock : সবকিছু প্রশিক্ষণের জন্য কত সময় লাগবে ?

একটি নোড 3× H100 সহ, ৩১ রান (১ জেনারালিস্ট + ৩০ বিশেষজ্ঞ) ক প্রায়**১২ দিন**ক্রমিকভাবে. যদি তুমি ২ নোডকে সমান্তরালে ভাড়া দাও, তাহলে এটি কমে যায়**৬ দিন**.

বাস্তবে, মাইক্রো-এক্সপারটস আলাদা আলাদা নোডে ঘুরে ফেরা পারে (প্রতিটি 1 H100) যখন V4-Flash 3× H100 নোডটি খ্যাপন করে। बुद्धिमান পরিকল্পনা সহ:

----

Nœud A (3× H100) : V4-Flash généraliste → V4-Flash experts ×5       (11 jours) Nœud B (1× H100) : Gemma 4 26B ×6 → Qwen 36 ×5 → Qwen 35 ×5        (6 jours)

7 দিনের ভাড়া, সবই গুঁড়ানো

== অনুমান : 23 মডেল Ollama Cloud-এ 17€/মাস থেকে

এটি আর্কিটেকচারের সবচেয়ে সুন্দর অংশ।

Ollama Cloud প্রাইভেট মডেল আপলোড করার অনুমতি দেয় (Pro প্ল্যানের ফিচার)। আমার 22 ফাইন-টিউনড মডেলটি আপলোড করা হচ্ছে`.gguf`আমার Ollama স্পেসে, গোপনীয় হিসাবে চিহ্নিত, এবং স্ট্যান্ডার্ড API এর মাধ্যমে অ্যাক্সেসযোগ্য।

[plantuml, inference-flow, svg]
----
@startuml
skinparam backgroundColor #FAFAFA
skinparam defaultFontSize 12

|Utilisateur|
start
:Tâche de développement;

|Orkestrateur (V4-Pro)|
:Classifier la tâche\n(domaine + complexité);
if (Tâche simple,\nspécialisée ?) then (oui)
  :Router vers micro-expert\n(Gemma 4 26B-A4B-FT\n ou Qwen3.6-35B-A3B-FT);
elseif (Tâche complexe,\nconventions fortes ?) then (oui)
  :Router vers exécutif\n(V4-Flash-FT);
else (non)
  :Résoudre avec V4-Pro\n(architecture, décision);
endif

|Modèle ciblé|
:Génère le code/output\n**dans mon style**,\n90%+ first-shot correct;
:Retourne la réponse;

stop
@enduml
----

=== আমরা মাসে ১৭ ইউরো দিয়ে শুরু করি, প্রয়োজন হলে স্কেল করি।

Ollama Pro পরিকল্পনা (17€/মাসে वार्षিক) 3টি প্রতিযোগী ক্লাউড মডেল অনুমতি দেয়। এই স্থাপত্যে, আমি কখনও 2-3 বিশেষজ্ঞের বেশি একসাথে প্রয়োজন হয় না :

* শ্রেণীবিন্যাসের পর্যায় (V4-Pro) ১ স্লট অবাস করে, কয়েক সেকেন্ড
* লক্ষ্য করা বিশেষজ্ঞ ১ স্লট আশোল করে, তার উত্তর তৈরি করার সময়
* ৩য় স্লট সমান্তরাল কাজের জন্য সংরক্ষিত AKBে

�যদি ব্যবহার বাড়ে, আমি Docker পদ্ধতির মাধ্যমে বর্ণিত অতিরিক্ত Pro অ্যাকাউন্ট যোগ করি `xref:0120_cumuler_deux_abonnements_ollama_pro_docker_post.adoc[mon article sur le cumul d&amp;#39;abonnements]`. 100€/মাসের জন্য কোনো Max পরিকল্পনা নেই — আমি শুধুমাত্র آنچه আমি সত্যিই দরকার hozzá যোগ করি

একমাত্র সীমিতকারী ফ্যাক্টর হল**কোটা GPU-সময়**Ollama মাসিক (প্রো এর বিনামূল্যে প্ল্যানের ৫০ গুণ)। আমার দৈনিক কয়েকশত কোয়েরি ব্যবহারের জন্য, এটি পর্যাপ্ত।

[IMPORTANT]
====
V4-Pro (49B সক্রিয়) এর একটি কলের সীমানতী খরচ বนาม Gemma 4 26B-A4B (3.8B সক্রিয়) এর এটা**এমনই আমার জন্য : শূন্য**এটা ওllamার প্যাকেজ গননার পার্থক্য শোষণ করে। আমার একমাত্র সূচক বিলম্ব।
====

=== বাস্তবে রুটিং&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Volume de requêtes estimé : ~500/jour&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;├─ 50% → Gemma 4 26B-A4B-FT    (micro, 3.8B actifs)
│        Formatage AsciiDoc, scripts simples, conventions nommage
│
├─ 25% → V4-Flash-FT            (exécutif, 13B actifs)
│        Plugins Gradle, refactoring Kotlin, génération DAG
│
├─ 15% → Qwen 35B MoE-FT       (micro, 3B actifs)
│        Tâches intermédiaires, review de code, documentation
│
└─ 10% → V4-Pro                 (orkestrateur, 49B actifs)
         Décisions architecturales, refactoring transverse,
         problèmes vraiment nouveaux&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;ট্যাফিকের বৃহৎ অংশ ছোটদের দিয়ে যায়। বড় মডেল শুধুমাত্র শেষ পছন্দとして हस्तक्षেপ করে।

== ব্যাথাদায়ক তুলনা: Claude, GPT, Gemini, Grok vs আমার ফ্লোটা

এখানে পার্থক্য উচ্চোচ্চ হয়ে ওঠে। চলুন দেখি একই পরিমাণের কাজ (প্রতি দিন ৫০০ অনুরোধ, গড়ভাবে ৩০০ টোকেন ইনপুট + ২০০০ টোকেন আউটপুট) বাজারের মালিকানাধীন সমাধানগুলো দিয়ে মে ২০২৬ কত খরচ হবে।

=== অ্যানথ্রপিক — ক্লোড (মে ২০২৬র শুল্ক)

অ্যান্থ্রপিক gầnে তার দাম *কমিয়েছে*। DeepSeek ও Qwen মতো open-weight সমাধানerb এর চাপ মসুস হচ্ছে।

[cols=&amp;quot;3,2,2,2,2&amp;quot;]
|===
|মডেল |$/MTok |(Empty output) |প্রতি দিন খরচ |**মাসিক খরচ**

|Opus 4.7 (সর্বোত্তম বুদ্ধিমান) |$5 |$25 |$25.75 |**৭৭২ ডলার** |সোনেট 4.6 (সंतুলিত) |$3 |$15 |$15.45 |**$৪৬৩** |Haiku 4.5 (ও + দ্রুত) |$1 |$5 |$5.15 |**$১৫৪**
|===

[CAUTION]
====
এই দামগুলো *পরে* Anthropic-র শেষ মূল্য কমতো (মে ২০২৬)। এটা আগে, Opus $15/$75 প্রতি MTok-এ ছিল। অপেন-ওয়েটের ভয় বাস্তব।
====

ক্লোডের সবচেয়ে সস্তা মডেল — হাইকু ৪.৫ পর্যন্ত**১৫৪€/মাস**— 9× বেশি খরচ হয় আমার Ollama Pro সাবস্ক্রিপশনের চেয়ে যা ১৭ইউরো। এবং Haiku আমার কোডবেস জানে না, আমার শৈলীতে তৈরি করে না, এবং সিস্টেমেটিক প্রম্পট ইঞ্জিনিয়ারিং প্রয়োজন।

সবচেয়ে বুদ্ধিমান — Opus 4.7 — বাজেটে বিস্ফোর করে**৭৭২€/মাস**প্রতিদিন 500টি অনুরোধের মাঝারি পরিমাণের জন্য. অথবা**৪৫ গুণ বেশি দামি**আমার সমাধান।

=== OpenAI — GPT (টариফ মে ২০২৬)

[cols=&amp;quot;3,2,2,2,2&amp;quot;]
|===
|মডেল |$/MTok |$/MTok |খরচ/দিন |**মাসিক খরচ**

|GPT 5.5 (এটি + বুদ্ধিমান) |$5 |$30 |$30.90 |**$927** |GPT 5.4 (standard) |$2.50 |$15 |$15.45 |**$463** |GPT 5.4 Mini |$0.75 |$4.50 |$4.64 |**$139**
|===

একই OpenAI‑র «অর্থনৈতিক» মডেল — GPT 5.4 Mini ১৩৯€/মাস — আমার সাবস্ক্রিপশনের ৮ গুণ খরচ হয়, যেটি একটি মডেল যা আমার কোনো কনভেনশন *কিছুও না* জানে এবং ভারী প্রম্পট ইঞ্জিনিয়ারিং প্রয়োজন।

GPT 5.5, jejich flagship :**927€/মাস**. আমার কোডবেসে *zero-shot* ব্যবহারের জন্য। 2-3 ইটারেশন প্রতি কাজের জন্য, অকुशল শৈলির কারণে, সঠিক মাসিক খরচ সহজেই দ্বিগুণ হয়ে যায়।

=== Google — Gemini (মে ২০২৬ টারিফ)

[cols=&amp;quot;3,2,2,2,2&amp;quot;]
|===
|মডেল |$/MTok |$/MTok |খরচ/দিন |**মাসিক খরচ**

|Gemini 3.1 Pro (উচ্চ) |$3.50 |$17.50 |$18.00 |**$540** |জেমিনি 3.1 প্রো |$2 |$10 |$10.30 |**$৩০৯** |Gemini 3 Flash |$0.30 |$1.50 |$1.54 |**$৪৬**
|===

Gemini 3 Flash 46€/মাসে শুধু মূল্যে প্রতিযোগিতামূলক — কিন্তু fine-tune ছাড়াই, এটি «জেনেরিক» কোড তৈরি করে। *Cheroliv* কোড নয়।

=== Grok — xAI (মে ২০২৬ দাম)

[cols=&amp;quot;3,2,2,2,2&amp;quot;]
|===
|মডেল |$/MTok |$/MTok |খরচ/দিন |**খরচ/মাস**

|গ্রোক ৪ |$4 |$16 |$16.48 |**$494** |Grok 4 Mini |$0.80 |$3.20 |$3.30 |**$99**
|===

=== মাইক্রোসফট — Azure OpenAI (মে ২০২৬ দর)

Azure সরাসরি OpenAI API এর মতোই দাম প্রযোয করে, কিন্তু অবশ্যই অবকাঠামো ও নেটওয়ার্কের জন্য অতিরিক্ত চার্জও প্রযোয করে। মенеджেড সার্ভিসের জন্য ১০-২০% অতিরিক্ত খরচ বিবেচনা করতে হবে।

[cols=&amp;quot;3,2,2,2,2&amp;quot;]
|===
|মডেল |$/MTok |$/MTok |খরচ/দিন |**মাসিক খরচ**

|GPT 5.4 (Azure, Global) |$2.50 |$15 |$15.45 |**$463** |GPT 5.4 + infrastructure |১৫% অতিরিক্ত খরচ |অতিরিক্ত খরচ ১৫% |$17.77 |**$৫৩৩**
|===

[NOTE]
====
উপরোক্ত দামগুলি API-কে বোঝায়, « চ্যাট » সাবস্ক্রিপশন নয় (Claude Pro $20/মাস, ChatGPT Plus $20/মাস)। এখানে *ডেভেলপার* ব্যবহার তুলনা করা হয়, যেখানে তুমি API এর মাধ্যমে দিনে শতাধিক অনুরোধ দিয়ে তৈরি, রিফ্যাক্টর ও ডকুমেন্ট করেন। সাধারণ জনতার সাবস্ক্রিপশনের কোটা 500 অনুরোধ/দিন থেকে trướcেই বিস্ফোরিত হয়।
====

=== সর্বশেষ তুলনামূলক সারণী

[cols=&amp;quot;3,2,2,2,2,2&amp;quot;]
|===
|সমাধান |জ্ঞান codebase |একীকৃত শৈলী |মাসিক খরচ |পুনরাবৃত্তি |**বাস্তব খরচ**

|**আমার ফ্লিট (Ollama Pro)** |�✅ সুস্পষ্টভাবে টিউনকৃত |�✅ ওজনগুলো |**17€** |0-1 |**17€** |Claude Opus 4.7 |❌ জিরো-শট |�❌ প্রয়োজনীয় প্রম্প্ট |$772 |2-3 |$1 500-2 300 |Claude Haiku 4.5 |�❌ শূন্য-শট |❌ প্রম্পট প্রয়োজন |$154 |3-4 |$460-615 |GPT 5.5 |❌ Zero-shot |�❌ জরুরী প্রম্পট |$927 |2-3 |$1 854-2 781 |GPT 5.4 |�❌ Zero-shot |�❌ প্রয়োজনীয় প্রম্পট |$463 |2-3 |$925-1 390 |GPT 5.4 Mini |❌ জিরো-শট |❌ প্রয়োজনীয় প্রম্পট |$139 |3-5 |$417-695 |জেমিনি ৩.১ প্রো হাই |�❌ শূন্য-শট |❌ প্রয়োজনীয় প্রম্পট |$540 |2-3 |$1 080-1 620 |Grok 4 |❌ Zero-shot |�❌ প্রয়োজনীয় প্রম্পট |$494 |2-3 |$988-1 482 |**Azure GPT ৫.৪** |❌ জিরো-শট |প্রয়োজনীয় প্রম্পট |$533 |2-3 |$1 066-1 600
|===

[plantuml, cost-comparison, svg]&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@startuml
skinparam backgroundColor #FAFAFA&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;title খরচ-কার্যকারিতা অনুপাত — আমার ফ্লেট vs বাজার (মে ২০২৬)
rectangle &amp;quot;17€/মাস&amp;quot; as OURS #4ECDC4
rectangle &amp;quot;Opus 4.7
772€&amp;quot; as OPUS #FF6B6B
rectangle &amp;quot;সোনেট 4.6
463€&amp;quot; as SONNET #FF8B94
rectangle &amp;quot;GPT 5.5\n927€&amp;quot; as GPT #FFD93D
rectangle &amp;quot;Gemini 3.1 Pro
৫৪০€&amp;quot; as GEMINI #6C5CE7
rectangle &amp;quot;Grok 4
494€&amp;quot; as GROK #A8E6CF
rectangle &amp;quot;Haiku 4.5\n154€&amp;quot; as HAIKU #DFE6E9
rectangle &amp;quot;GPT 5.4 Mini\n139€&amp;quot; as MINI #B2BEC3&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;note bottom of OURS
  Avec fine-tune intégré.
  Zéro prompt engineering.
  90%+ first-shot correct.
end note&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@enduml&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;১৭€/মাসে ২৩ টি ফাইন-টিউন করা কৃত্রিম বুদ্ধিমত্তা বিশেষজ্ঞের জন্য। ফ্ল্যাগশিপ Claude Opus ৪.৭ খরচ করে**45× বেশি মূল্যবান***আমার* কোডবেজে নিম্নমানের গুণমানের জন্য। GPT 5.5 খরচ**54× বেশি দর**. বাজারের সবচেয়ে সস্তা মডেল (Gemini Flash ৪৬€)ও খরচ হয়।**2.7× অধিক**আমার ওয়ার্কস্পেসের জ্ঞান ছাড়া.

বিচার সীমারহীন : ২০২৬ সালে MoE আর্কিটেকচারের ফাইন‑টিউন শুধু « সাশ্রয় » নয়। এটি কার্যকারিতার একটি গুণক।**27× থেকে 54×**খर्च/গুণোত্তর অনুপাতের রিপোর্ট মালিকানাধীন সমাধানের সম্মুখীন। Anthropic, OpenAI, Google — সবাই এটি বুঝে, এবং সেক্ষেত্রে তারা আতंकীয়ভাবে তাদের দাম কমিয়ে দিচ্ছে।

== কुशলতা ফ্যাক্টর : V4-Pro একবারে ব্যবহারের তুলনায় 5-8×

আমরা দুটি প্রান্তিক বিন্দুর তুলনা করি।

=== সেনারিয়ো A : শুধুমাত্র V4-Pro সবকিছু জন্য

[cols=&amp;quot;3,2&amp;quot;]
|===
|মেট্রিক |মূল্য

|কোডবেসের জ্ঞান |0 (শূন্য-শট) |কনভেনশন নামকরণ |40-60% প্রথম চেষ্টা সঠিক |প্রম্পট ইঞ্জিনিয়ারিং প্রয়োজনীয় |হ্যাঁ, সিস্টেম্যাটিক |কাজের প্রতি পুনরাবৃত্তি |2-3 |অনুমান খরচ |$100/প্রতি মাস (Ollama Max) |গড় লেটেন্সি |~20 tok/s + নেটওয়ার্ক
|===

=== অ্যופן B : MoE ফ্লেট অর্কেস্ট্রেটেড

[cols=&amp;quot;3,2&amp;quot;]
|===
|মেট্রিক |মান

|codebase-er jnan |একীকৃত (fine-tune) |কনভেনশন নামকরণ |90-95% প্রথম চেষ্টায় সঠিক |প্রম্পট প্রকৌশল |না (শৈলি ওজনগুলোতে আছে) |কাজে প্রতি ইটারেশন |0-1 |খরচ অনুমান |$60/মাস (3× Ollama Pro) |গড় বিলম্ব |~50 tok/s (হালকা মডেলগুলো)
|===

[cols=&amp;quot;4,2,2,2&amp;quot;]
|===
|মাত্রা |শুধু V4-Pro |বাহিনা MoE |ডাকিয়া

|মাসিক ক্লাউড খরচ |$100 |**$60** |1.7× |ইনজেক্ট করার জন্য প্রেক্ষাপট |উচ্চ (prompt) |**শূন্য** |�∞ |গড় পুনরাবৃত্তি |2-3 |**0-1** |2-3× |অনুভূত অবিলম্ব |20 tok/s |50 tok/s |**২.৫×** |প্রথম-শট সঠিক |50% |90%+ |**1.8×**
|===

**সামগ্রিক কার্যক্ষমতা গুণক : 5-8×**— ডেভেলপারের প্রোডাক্টিভিটি অনুভূত

[NOTE]
====
অবয়বকে টোকেন বা ডলার মধ্যে মাপা যায় না। এটিকে « আমি মডেলকে কী জানাতে দরকার তা কত সময় ব্যয় করি » এর মধ্যে নাপা হয়। মিনিটিউনড মডেলসের সাথে, এই সময় শূন্য দিকে প্রবণ হয়।
====

== সম্পূর্ণ বাজেট: একটি one-shot বিনিয়োগ, একটি হাস্যাস্পদ প্যাকেজ

[cols=&amp;quot;3,2&amp;quot;]
|===
|পোস্ট |পরিমাণ

|প্রশিক্ষণ GPU (811 H100-h, Crusoe $2/h) |**$1 622** |সিন্থেটিক ডেটাসেট জেনারেশন (API LLM) |**৪০০ ডলার** |Inference (Ollama Pro বার্ষিক, $17/মাস) |**$204** |**প্রথম বছরের মোট** |**$২ ২২৬** |**সমতুল্য মাসিক** |**$186** |**প্রতিটি কুয়েরির অনুমানিত খরচ** |&amp;amp;lt; $0.01
|===

[plantuml, budget-breakdown, svg]&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@startuml
skinparam backgroundColor #FAFAFA&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;rectangle &amp;quot;বাজেট বছর ১ : $২ ২২৬&amp;quot; as Total #E8E8E8 {
  rectangle &amp;quot;প্রশিক্ষণ GPU
$1 622 (73%)&amp;quot; as Train #FF6B6B
  rectangle &amp;quot;ডেটাসেট
ডিস্টিলেশন
$400 (18%)&amp;quot; as Data #FFE66D
  rectangle &amp;quot;Ollama Pro
$204 (9%)&amp;quot; as Cloud #4ECDC4
}&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;note bottom of Total
   $186/mois équivalent année 1.
   Dès l&amp;amp;#8217;an 2 : $17/mois.
   Amorti par ~$235 de CA
   mensuel avec marge 95%.
end note&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@enduml&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;$186/মাস প্রথম বছর,**$17/মাস**২য় বছর থেকে। প্রিমিয়াম নেটফ্লিক্স সাবস্ক্রিপশনের দাম, ২৩ জন AI বিশেষজ্ঞদের একটি দলে যারা ২৪/৭ উপলব্ধ, যারা *আমার শৈলীতে* কোড লিখে, যাতে আমাকে তাদের আমার কনভেনশন ব্যাখ্যা দিতে হয় না।

=== লাভমূল্যের গণনা

edster.cloud এবং এর ~95% মার্জিনের সাথে, ব্রেক‑ইভেন পয়েন্ট**~$২,৩৪০ অতিরিক্ত বিক্রয় রোনো**বcsolা. Behavior :

* 1টি সফটওয়ার পাইলটাজ মিশন → $3 000-5 000 → বিনিয়োগ সুরক্ষিত + profit
* 1 কোর্পোরেট ট্রেনিং → $5 000-10 000 → আরামদায়ক
* অস্পষ্ট আপসেল : &amp;quot;আমার AI টিম আমার সফটওয়্যারের ফورجকে আয়ত্ত করে&amp;quot; → বাণিজ্যিক বৈকল্পিকতা

বছর ২ থেকে, ট্রেনিংকে আর অর্থ দিতে হবে না (ডেটাসেট আপডেটের ব্যতিক্রমে)। বার্ষিক খরচ কমে যায়**$204**(১৭ ডলার/মাস)। খরচ/মানের অনুপাত হল একটা ইউনিকোর্নের মতো : প্রায় শূন্য।

== অবশয়ের সীমা

এটি এখনও একটি *আঙুলি ভেজা অনুমান*। কئی ভেরিয়েবল বাজেট পরিবর্তন করতে পারে :

[cols=&amp;quot;2,3&amp;quot;]
|===
|পরিবর্তনীয় |প্রভাব

|সিনθετিক ডেটাসেটের উৎপಾದন |�যদি ডিস্টিলেশন API ব্যর্থ হয় (হ্যালুসিনেশন, ভুল আকারের জোড়া), মানবিক সময়ের জন্য কিউরেটিং করতে দরকার। লুকানো খরচ। |কোটা GPU-time Ollama |�যদি ব্যবহার প্রো প্ল্যানের কোটার চেয়ে বেশি হয়, তাহলে প্ল্যান উন্নত করা উচিত বা ডেডিকেটেড GPU-এ স্যুইচ করা উচিত। |ফাইন-টিউনসের বাস্তব মান |একটি ব্যর্থ ফাইন-টিউন → পুনরায় করার জন্য। বাস্তুযক্ত ঝুঁকি হাইপারপ্যারামিটার, GPU-এর অবস্থান নয়। |মডেলের দ্রুত উন্নতি |Qwen3.6/Gemma 4 টি &amp;amp;lt; 1 মাস আগে প্রকাশিত ছিল। 6 মাস পর, পরবর্তী প্রজন্মটি উন্নত এবং fine-tune করার জন্য খরচ কম হবে।
|===

[WARNING]
====
প্রশিক্ষণের ৮১১ ঘন্টার জন্য চালু না করুন, প্রথমে *একটি একক* মাইক্রো-মডেলে পাইপলাইনের পরীক্ষা নেওয়া ছাড়াই। একটি Qwen 35B-A3B-এ ৩-৪ ঘন্টা চালানোর খরচ $৮। যদি ডেটাসেটটি দুষিত হয়, তাহলে আপনি $৮ দিয়েই এটি জানবেন, কিন্তু $1 622 নয়।
====

== উপসংহার : ফাইন-টিউন এখন সহজে পেতে পারা একটি বিলাসিতা হয়েছে

এক বছর আগে, ২৯২B প্যারামিটারের একটি মডেলকে ফাইন‑টিউন করা (এven QLoRA-এ) গবেষণা ছিল। আজ, মে ২০২৬, এটি একজন স্বাধীন ডেভেলপারদের জন্য একটি সম্ভাব্য প্রকল্প:

* **811 H100-ঘন্টা** de training — $1 622 chez Crusoe
* **23 বিশেষজ্ঞ মডেল**ওল্লামা ক্লাউডে লোড করা হয়েছে —**$17/মাস**
* **0 সার্ভার, 0 স্থানীয় GPU, 0 মেইনটেনান্স ইনফ্রা**

গণতান্ত্রীকরণটি তিনটি সমবেতגור থেকে এসেছে :

1. **MoE আর্কিটেকচারগুলো**— যারা দক্ষতার সাথে মডেলকে ফাইন-টিউন করতে অনুমতি দেয়, যেখানে শুধুমাত্র ওজনের একটি ভগ্নাংশই সক্রিয় হয়
2. **Les plans fixes d&amp;#39;Ollama Cloud**— যারা একটি পরিবর্তনশীল খরচ (per-token) কে একটি স্থায়ী খরচ (অবনমনে) রূপান্তর করে
3. **উচ্চ গুণমানের ওপেন-ওইট মডেলগুলো**— DeepSeek V4, Qwen3.6, Gemma 4 MIT/Apache 2.0 লাইসেন্সের অধীনে

সভ্যতা গুরুত্বপূর্ণ অপারেশনের সংখ্যা বাড়িয়ে দিয়ে অগ্রসর হয়, যা আমরা চিন্তা কর ছাড়াই করতে পারি।

ফাইন‑টিউন, সেটি কেবলমাত্র এটা : একটি অপারেশন যা তুমি মেশিনে ডেলিগেট করেন যাতে আর সেটি ভাবতে হয় না। এবং ২০২৬ সালে, এটি জুনিয়র ডেভেলপারের মাসিক তনখা থেকে সাশ্রয়ী।

---

_লেখ প্রকাশিত {jbake-date}_

== ফ্লটের ফাইন-টিউনড মডেলস

[cols=&amp;quot;2,2,2,2,3&amp;quot;]
|===
|আকার সক্রিয় |সংখ্যা |বেস মডেল |বিভাগ |ডেটাসেট

|13B |1 |DeepSeek-V4-Flash-Base |সাধারণ ওয়ার্কস্পেস |50M টোকেন |13B |5 |DeepSeek-V4-Flash |Gradle, Kotlin, DAG, Doc, Infra |১৫ মিলিয়ন টোকেন |3.8B |6 |Gemma 4 26B-A4B |মাইক্রো-টাস্ক, ফরম্যাটিং, স্ক্রিপ্ট |5M টোকেন |3B |5 |Qwen3.6-35B-A3B |Refactoring, পর্যালোচনা, মধ্যস্থ দস্তাবেজ |৫ মিলিয়ন টোকেন |3B |5 |Qwen3.5-35B-A3B |লিগ্যাসি টাস্ক, সামঞ্জস্য |5M টোকেন
|===

== সম্পদ

=== হাগিংফেইসের open-weight মডেল

* https://huggingface.co/deepseek-ai/DeepSeek-V4-Flash-Base[DeepSeek V4-Flash-Base — 292B প্যারামিটার, লাইসেন্স MIT]
* https://huggingface.co/Qwen/Qwen3.6-35B-A3B[Qwen3.6-35B-A3B — 35B/3B সক্রিয়, Apache 2.0 লাইসেন্স]
* https://huggingface.co/Qwen/Qwen3.5-35B-A3B[Qwen3.5-35B-A3B — 35B/3B সক্রিয়, Apache 2.0 লাইসেন্স]
* https://huggingface.co/google/gemma-4-26B-A4B-it[Gemma 4 26B-A4B — 26B/3.8B সক্রিয়, Apache 2.0 লাইসেন্স]

=== তরিফের উৎস (মে ২০২৬)

* https://ollama.com/pricing[ওলামা ক্লাউড টারিফ – প্রো প্ল্যান $17/মাস বার্ষিক]
* https://www.anthropic.com/pricing[অ্যান্থ্রোপিক — Claude API ব মূল্য (Opus 4.7 $5/$25, Sonnet 4.6 $3/$15, Haiku 4.5 $1/$5)]
* https://openai.com/api/pricing/[OpenAI ট্যারিফ — GPT API (GPT 5.5 $5/$30, GPT 5.4 $2.50/$15)]
* https://deepinfra.com/pricing[DeepInfra দর — GPU ইন্সট্যান্স H100 $1.79/ঘণ্টা, B200 $2.79/ঘণ্টা]
* Vast.ai, Crusoe Cloud, FluidStack, TensorDock, RunPod, CoreWeave, Lambda Labs — মে ২০২৬ তারিখযুক্ত ম্যানুয়াল দামের তালিকা

=== সরকারী ঘোষণাবলী

* https://qwen.ai/blog?id=qwen3.6-35b-a3b[রস্মি ঘোষণা Qwen3.6-35B-A3B — কুয়েন ব্লগ]— এজেন্টিক কোডিং, Apache 2.0, 262K কনটেক্সট&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>মেসন Gradle প্লাগইন: দুটি Ollama Pro উদাহরণকে সমান্তরালে চালানোর জন্য</title>
            <link >https://cheroliv.com//blog/2026/0121_plugin_gradle_piloter_deux_instances_ollama_pro_post.html</link>
            <pubDate>Fri, 8 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0121_plugin_gradle_piloter_deux_instances_ollama_pro_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গ্রেডেল_ইন্ফ্রাস্ট্রাকচার_জন্য_কেন&amp;quot;&amp;gt;গ্রেডেল ইন্ফ্রাস্ট্রাকচার জন্য কেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পূর্ণ_build_gradle_kts&amp;quot;&amp;gt;পূর্ণ build.gradle.kts&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রধান_কাজের_গঠন&amp;quot;&amp;gt;প্রধান কাজের গঠন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_startollamab_লঞ্চার&amp;quot;&amp;gt;startOllamaB` — লঞ্চার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_signinb_ইন্টারেক্টিভ&amp;quot;&amp;gt;signInB` — ইন্টারেক্টিভ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_pullmodelb_কনফিগারযোগ্য&amp;quot;&amp;gt;pullModelB` — কনফিগারযোগ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_statusollamaall_নিদান&amp;quot;&amp;gt;statusOllamaAll` — নিদান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_cleanollamab_পরিচয়_সংরক্ষণকারী_পরিষ্কার&amp;quot;&amp;gt;cleanOllamaB` — পরিচয় সংরক্ষণকারী পরিষ্কার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_workflow_সম্পূর্ণ_শূন্য_থেকে_দুই_সেশন&amp;quot;&amp;gt;Workflow সম্পূর্ণ — শূন্য থেকে দুই সেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_সত্য_gradle_প্লাগইন_তৈরি_করার_কথা_কেন_না&amp;quot;&amp;gt;একটি সত্য Gradle প্লাগইন তৈরি করার কথা কেন না?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখানো_পাঠ&amp;quot;&amp;gt;শেখানো পাঠ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সামগ্রী&amp;quot;&amp;gt;সামগ্রী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পড়ার সময় : 18 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;ডকার কমান্ড ম্যানুয়ালি টাইপ করার জন্য কেন, যখন আমরা সকলেরকে গ্রেডল টাস্কে সংযোজিত করতে পারি? এইভাবে আমি আমার dual-Ollama Pro কনফিগারেশনকে কোনো বাহ্যিক শেল স্ক্রিপ্ট ছাড়া শিল্পীভূত করে ফেলেছি। শুরু, বন্ধ, পরিচয়, সাইন-ইন, পুল — সবই দিয়ে যায়`./gradlew`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আগের নিবন্ধে, আমি দেখিয়েছিলাম কিভাবে একই মেশিনে দুটি ওllamা প্রো অ্যাকাউন্টকে ডকার কনটেইনারের ভিতরে দ্বিতীয় ইনস্ট্যান্সকে আলাদা করে বসিয়ে চালানো যায়। সেটআপ কাজ করে, তবে দৈনন্দিন ব্যবস্থাপনা দ্রুত কষ্টদায়ক হয়ে উঠে: কনটেইনারার نام মনে রাখতে হয়, সঠিক কমান্ডগুলো পুনরায় চালাতে হয়।&amp;lt;code&amp;gt;docker exec&amp;lt;/code&amp;gt;, কোন পোর্ট সক্রিয় আছে তা জাঁচ করুন&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি সেই মুহূর্তকে জানেন যখন আপনার কাছে ১৪ টি টার্মিনাল খোলা থাকে এবং আপনি টাইপ করছেন।`docker exec ollama-instance-b ollama list`চতুর্থবার, এবং আপনি মনে করেন « একটি আরও পরিষ্কার উপায় থাকতে হবে » ?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি Gradle&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোড তৈরি করার জন্য শুধুমাত্র নয়। Gradle একটি স্থানীয় অবকাঠামোর কন্ডাক্টরের মতো। provisioning, যাচাই, পরীক্ষা এবং পরিষ্কার করার কাজগুলো। সবকিছু একটি সংস্করণ-কন্ট্রোলের মধ্যে`build.gradle.kts`যে পাশে বাস করে`docker-compose.yml`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/architecture-gradle-ollama.svg&amp;quot; alt=&amp;quot;architecture gradle ollama&amp;quot; width=&amp;quot;699&amp;quot; height=&amp;quot;511&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_গ্রেডেল_ইন্ফ্রাস্ট্রাকচার_জন্য_কেন&amp;quot;&amp;gt;গ্রেডেল ইন্ফ্রাস্ট্রাকচার জন্য কেন?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রশ্নটি উদ্দীপক। Grade‑এর মাধ্যমে যে টুলটি ব্যবহৃত হয় তা হলো build tool। স্বাভাবিকভাবে এটি কম্পাইল করে, টেস্ট করে এবং প্যাকেজ করে। না, এটি ডকার কন্টেইনার চালায় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদিও Gradle একটি ডিপেন্ডেন্সি গ্রাফ ইঞ্জিনও — এবং এটিই আমাদের ক্ষেত্রে আকর্ষণীয় হয়ে ওঠে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা চাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনটেইনারেরকে সাইন-ইন থেকে আগে চালু করা উচিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পরিচয়টি মডেল পিলের আগে যাচাই করা উচিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি API টেস্ট চুপচুপে ব্যর্থ হয় যদি কনটেইনার বন্ধ থাকে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুদ্ধ নির্ভরশীলতা গ্রাফ। Gradle এই কাজের জন্য তৈরি করা হয়েছে। Kotlin DSL কাজের লেখাকে সহজ ও সুস্বচ্ছ করে, এবং`doLast`সিস্টেম কমান্ড চালিয়েapplication code এর মতো ব্যবহার করতে দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং বিশেষ করে : কোনো বাশআরসি রক্ষা করতে হবে না, কোনো স্ক্রিপ্ট যা আড়াই বসে আছে`~/bin`, docker-compose এর পাশে কোন Makefile নেই। সব একটি একক ফাইলে বাস করে, প্রকল্পের কোডের একই স্থানে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পূর্ণ_build_gradle_kts&amp;quot;&amp;gt;পূর্ণ build.gradle.kts&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি হলো ফাইলটি যা আমি শেষে লিখেছি। এটি ভলিউম প্রোভিশনিং থেকে যাচাইকরণের curl-এ, ইন্টারেক্টিভ সাইন-ইন দিয়ে সমস্ত কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.io.ByteArrayOutputStream

plugins {
    base
}

// -------------------------------------------------------------------------
// Configuration
// -------------------------------------------------------------------------
val instanceName   = &amp;quot;ollama-instance-b&amp;quot;
val instancePort   = 11435
val instanceImage  = &amp;quot;ollama/ollama:0.20.2&amp;quot;
val dataDir        = file(&amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}/ollama-b-data&amp;quot;)
val nativePort     = 11434

// Modèles à gérer — cloud Pro + un modèle local gratuit pour les tests
val proModels      = listOf(&amp;quot;deepseek-v4-pro:cloud&amp;quot;, &amp;quot;gemma4:31b-cloud&amp;quot;)
val freeModels     = listOf(&amp;quot;qwen3:0.6b&amp;quot;)

// -------------------------------------------------------------------------
// Tâche préparatoire — création du volume si absent
// -------------------------------------------------------------------------
val prepareVolume by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Crée le répertoire de volume pour l&amp;#39;instance B si absent&amp;quot;
    doLast {
        if (!dataDir.exists()) {
            dataDir.mkdirs()
            println(&amp;quot;Volume créé : ${dataDir.absolutePath}&amp;quot;)
        } else {
            println(&amp;quot;Volume existant : ${dataDir.absolutePath}&amp;quot;)
        }
    }
}

// -------------------------------------------------------------------------
// Démarrage du conteneur Docker
// -------------------------------------------------------------------------
val startOllamaB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Lance le conteneur Docker pour l&amp;#39;instance Ollama B&amp;quot;
    dependsOn(prepareVolume)

    commandLine(
        &amp;quot;docker&amp;quot;, &amp;quot;run&amp;quot;, &amp;quot;-d&amp;quot;,
        &amp;quot;--name&amp;quot;, instanceName,
        &amp;quot;-p&amp;quot;, &amp;quot;$instancePort:11434&amp;quot;,
        &amp;quot;-v&amp;quot;, &amp;quot;${dataDir.absolutePath}:/root/.ollama&amp;quot;,
        &amp;quot;-e&amp;quot;, &amp;quot;OLLAMA_HOST=0.0.0.0&amp;quot;,
        &amp;quot;--restart&amp;quot;, &amp;quot;always&amp;quot;,
        instanceImage
    )
    isIgnoreExitValue = true

    doLast {
        val alreadyRunning = executionResult.get().exitValue != 0
        if (alreadyRunning) {
            logger.lifecycle(&amp;quot;Le conteneur &amp;#39;$instanceName&amp;#39; existe déjà — tentative de démarrage&amp;quot;)
        } else {
            logger.lifecycle(&amp;quot;Conteneur &amp;#39;$instanceName&amp;#39; lancé&amp;quot;)
        }
    }
}

// -------------------------------------------------------------------------
// Arrêt du conteneur
// -------------------------------------------------------------------------
val stopOllamaB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Arrête le conteneur Docker de l&amp;#39;instance B&amp;quot;

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;stop&amp;quot;, instanceName)
    isIgnoreExitValue = true

    doLast {
        logger.lifecycle(&amp;quot;Conteneur &amp;#39;$instanceName&amp;#39; arrêté&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Affichage de la clé publique (Device Key)
// -------------------------------------------------------------------------
val checkIdentity by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Affiche la clé publique SSH de l&amp;#39;instance B&amp;quot;
    dependsOn(startOllamaB)

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, instanceName, &amp;quot;cat&amp;quot;, &amp;quot;/root/.ollama/id_ed25519.pub&amp;quot;)
    standardOutput = ByteArrayOutputStream()

    doLast {
        val pubKey = standardOutput.toString().trim()
        println(&amp;quot;=&amp;quot;.repeat(60))
        println(&amp;quot;Device Key (Instance B)&amp;quot;)
        println(&amp;quot;=&amp;quot;.repeat(60))
        println(pubKey)
        println(&amp;quot;=&amp;quot;.repeat(60))
        println(&amp;quot;→ Enregistre cette clé sur https://ollama.com/settings/keys&amp;quot;)
        println(&amp;quot;→ Puis exécute : ./gradlew signInB&amp;quot;)
        println(&amp;quot;=&amp;quot;.repeat(60))
    }
}

// -------------------------------------------------------------------------
// Sign-in interactif (Ouvrira le navigateur)
// -------------------------------------------------------------------------
val signInB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Lance l&amp;#39;authentification interactive Ollama pour le compte B&amp;quot;
    dependsOn(startOllamaB)

    standardInput  = System.`in`
    standardOutput = System.out
    errorOutput    = System.err

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, &amp;quot;-it&amp;quot;, instanceName, &amp;quot;ollama&amp;quot;, &amp;quot;signin&amp;quot;)

    doFirst {
        logger.lifecycle(&amp;quot;Authentification pour le Compte Pro B...&amp;quot;)
        logger.lifecycle(&amp;quot;Ouvre ton navigateur et connecte-toi avec l&amp;#39;email du compte B&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Pull d&amp;#39;un modèle (paramétrable via propriété Gradle)
// -------------------------------------------------------------------------
val pullModelB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Pull un modèle sur l&amp;#39;instance B. Usage : ./gradlew pullModelB -Pmodel=nom:tag&amp;quot;
    dependsOn(startOllamaB)

    val modelName = project.findProperty(&amp;quot;model&amp;quot;) as? String ?: &amp;quot;qwen3:0.6b&amp;quot;

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, instanceName, &amp;quot;ollama&amp;quot;, &amp;quot;pull&amp;quot;, modelName)

    doFirst {
        logger.lifecycle(&amp;quot;Pull du modèle &amp;#39;$modelName&amp;#39; sur l&amp;#39;instance B...&amp;quot;)
    }

    doLast {
        logger.lifecycle(&amp;quot;Modèle &amp;#39;$modelName&amp;#39; pullé avec succès&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Pull de tous les modèles Pro (batch)
// -------------------------------------------------------------------------
val pullAllProModels by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Pull tous les modèles cloud Pro sur l&amp;#39;instance B&amp;quot;
    dependsOn(startOllamaB)

    doLast {
        proModels.forEach { model -&amp;amp;gt;
            logger.lifecycle(&amp;quot;→ Pull $model...&amp;quot;)
            val process = ProcessBuilder(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, instanceName, &amp;quot;ollama&amp;quot;, &amp;quot;pull&amp;quot;, model)
                .inheritIO()
                .start()
            process.waitFor()
        }
        logger.lifecycle(&amp;quot;Tous les modèles Pro pullés&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Pull de tous les modèles gratuits (batch / première install)
// -------------------------------------------------------------------------
val pullAllFreeModels by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Pull tous les modèles locaux gratuits sur l&amp;#39;instance B&amp;quot;
    dependsOn(startOllamaB)

    doLast {
        freeModels.forEach { model -&amp;amp;gt;
            logger.lifecycle(&amp;quot;→ Pull $model...&amp;quot;)
            val process = ProcessBuilder(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, instanceName, &amp;quot;ollama&amp;quot;, &amp;quot;pull&amp;quot;, model)
                .inheritIO()
                .start()
            process.waitFor()
        }
        logger.lifecycle(&amp;quot;Tous les modèles gratuits pullés&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Liste des modèles disponibles sur l&amp;#39;instance B
// -------------------------------------------------------------------------
val listModelsB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Liste les modèles disponibles sur l&amp;#39;instance B&amp;quot;
    dependsOn(startOllamaB)

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;exec&amp;quot;, instanceName, &amp;quot;ollama&amp;quot;, &amp;quot;list&amp;quot;)
}

// -------------------------------------------------------------------------
// Health check — test API sur les deux instances
// -------------------------------------------------------------------------
val testOllamaB by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Teste la connectivité API de l&amp;#39;instance B avec un simple chat&amp;quot;
    dependsOn(startOllamaB)

    doLast {
        val model = project.findProperty(&amp;quot;model&amp;quot;) as? String ?: &amp;quot;qwen3:0.6b&amp;quot;
        logger.lifecycle(&amp;quot;Test de l&amp;#39;instance B avec le modèle &amp;#39;$model&amp;#39;...&amp;quot;)

        val payload = &amp;quot;&amp;quot;&amp;quot;
            {
              &amp;quot;model&amp;quot;: &amp;quot;$model&amp;quot;,
              &amp;quot;messages&amp;quot;: [{&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: &amp;quot;Réponds uniquement par OK&amp;quot;}],
              &amp;quot;max_tokens&amp;quot;: 5
            }
        &amp;quot;&amp;quot;&amp;quot;.trimIndent()

        val process = ProcessBuilder(
            &amp;quot;curl&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;http://localhost:$instancePort/v1/chat/completions&amp;quot;,
            &amp;quot;-H&amp;quot;, &amp;quot;Content-Type: application/json&amp;quot;,
            &amp;quot;-d&amp;quot;, payload
        ).start()

        val response = process.inputStream.bufferedReader().readText()
        process.waitFor()

        if (response.contains(&amp;quot;\&amp;quot;id\&amp;quot;:\&amp;quot;chatcmpl&amp;quot;) || response.contains(&amp;quot;\&amp;quot;choices\&amp;quot;&amp;quot;)) {
            println(&amp;quot;✓ Instance B OK — port $instancePort répond&amp;quot;)
            println(&amp;quot;  Response: ${response.take(120)}...&amp;quot;)
        } else {
            println(&amp;quot;✗ Instance B INACTIVE — vérifie le conteneur avec &amp;#39;./gradlew statusOllamaAll&amp;#39;&amp;quot;)
            println(&amp;quot;  Raw: $response&amp;quot;)
        }
    }
}

// -------------------------------------------------------------------------
// Health check sur les deux instances simultanément
// -------------------------------------------------------------------------
val statusOllamaAll by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Vérifie le statut des deux instances Ollama (native + Docker)&amp;quot;

    doLast {
        // Instance native
        runCatching {
            val process = ProcessBuilder(
                &amp;quot;curl&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;-o&amp;quot;, &amp;quot;/dev/null&amp;quot;, &amp;quot;-w&amp;quot;, &amp;quot;%{http_code}&amp;quot;,
                &amp;quot;http://localhost:$nativePort/api/tags&amp;quot;
            ).start()
            val code = process.inputStream.bufferedReader().readText().trim()
            process.waitFor()
            println(if (code == &amp;quot;200&amp;quot;) &amp;quot;✓ Instance Native   — port $nativePort OK (HTTP $code)&amp;quot;
                    else &amp;quot;✗ Instance Native — port $nativePort (HTTP $code)&amp;quot;)
        }.getOrElse {
            println(&amp;quot;✗ Instance Native — injoignable sur le port $nativePort&amp;quot;)
        }

        // Instance Docker
        runCatching {
            val process = ProcessBuilder(
                &amp;quot;curl&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;-o&amp;quot;, &amp;quot;/dev/null&amp;quot;, &amp;quot;-w&amp;quot;, &amp;quot;%{http_code}&amp;quot;,
                &amp;quot;http://localhost:$instancePort/api/tags&amp;quot;
            ).start()
            val code = process.inputStream.bufferedReader().readText().trim()
            process.waitFor()
            println(if (code == &amp;quot;200&amp;quot;) &amp;quot;✓ Instance Docker B — port $instancePort OK (HTTP $code)&amp;quot;
                    else &amp;quot;✗ Instance Docker B — port $instancePort (HTTP $code)&amp;quot;)
        }.getOrElse {
            println(&amp;quot;✗ Instance Docker B — injoignable sur le port $instancePort&amp;quot;)
        }

        // Info conteneur
        runCatching {
            val process = ProcessBuilder(&amp;quot;docker&amp;quot;, &amp;quot;ps&amp;quot;, &amp;quot;--filter&amp;quot;, &amp;quot;name=$instanceName&amp;quot;,
                &amp;quot;--format&amp;quot;, &amp;quot;table {{.Names}}\\t{{.Status}}\\t{{.Ports}}&amp;quot;).start()
            val status = process.inputStream.bufferedReader().readText()
            process.waitFor()
            println()
            println(&amp;quot;Conteneur Docker :&amp;quot;)
            println(status)
        }
    }
}

// -------------------------------------------------------------------------
// Nettoyage complet
// -------------------------------------------------------------------------
val cleanOllamaB by tasks.registering(Exec::class) {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Arrête et supprime le conteneur Docker de l&amp;#39;instance B&amp;quot;
    dependsOn(stopOllamaB)

    commandLine(&amp;quot;docker&amp;quot;, &amp;quot;rm&amp;quot;, instanceName)
    isIgnoreExitValue = true

    doLast {
        logger.lifecycle(&amp;quot;Conteneur &amp;#39;$instanceName&amp;#39; supprimé&amp;quot;)
        logger.lifecycle(&amp;quot;Le volume ${dataDir.absolutePath} est conservé (identité persistante)&amp;quot;)
    }
}

// -------------------------------------------------------------------------
// Affichage des instructions
// -------------------------------------------------------------------------
val helpOllama by tasks.registering {
    group       = &amp;quot;ollama&amp;quot;
    description = &amp;quot;Affiche l&amp;#39;aide des tâches Ollama disponibles&amp;quot;

    doLast {
        println(&amp;quot;&amp;quot;&amp;quot;
        ╔══════════════════════════════════════════════════════════════╗
        ║         Tâches Gradle — Pilotage Dual Ollama Pro            ║
        ╠══════════════════════════════════════════════════════════════╣
        ║  ./gradlew startOllamaB      Démarrer l&amp;#39;instance Docker B   ║
        ║  ./gradlew stopOllamaB       Arrêter l&amp;#39;instance Docker B    ║
        ║  ./gradlew checkIdentity     Afficher la clé SSH publique   ║
        ║  ./gradlew signInB           Sign-in interactif compte B    ║
        ║  ./gradlew pullModelB        Pull un modèle (-Pmodel=...)   ║
        ║  ./gradlew pullAllProModels  Pull tous les modèles Pro      ║
        ║  ./gradlew pullAllFreeModels Pull tous les modèles gratuits ║
        ║  ./gradlew listModelsB       Lister les modèles instance B  ║
        ║  ./gradlew testOllamaB       Test API avec un chat simple   ║
        ║  ./gradlew statusOllamaAll   Santé des 2 instances          ║
        ║  ./gradlew cleanOllamaB      Supprimer le conteneur         ║
        ║  ./gradlew helpOllama        Cette aide                     ║
        ╚══════════════════════════════════════════════════════════════╝
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে। ১২টি কাজ, একটি অনন্য প্রবেশ বিন্দু, এবং শূন্য ঘর্ষণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রধান_কাজের_গঠন&amp;quot;&amp;gt;প্রধান কাজের গঠন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_startollamab_লঞ্চার&amp;quot;&amp;gt;startOllamaB` — লঞ্চার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিছু জাদুকরী নয় : একটি`docker run -d`সঠিক প্যারামিটার দিয়ে। ট্রিকটি আছে`isIgnoreExitValue = true`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;isIgnoreExitValue = true&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি কন্টেইনারটি ইতিমধ্যে বিদ্যমান থাকে, তবে কমান্ডটি`docker run`ব্যর্থ হয় (exit code ≠ 0)। এই বৈশিষ্ট্য না থাকলে, Gradle পুরো বিল্ডকে ত্রুটি হিসেবে বন্ধ করত। এখানে, ব্যর্থতা নীরব — এবং`doLast`যাচাই করে যে এটি কি একটি &amp;#39;আরও বিদ্যমান&amp;#39; ছিল বাস্তব ত্রুটি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `doLast`এটি কমান্ড চালানোর &amp;lt;strong&amp;gt;পরে&amp;lt;/strong&amp;gt; ঘুমে, যা পরিদর্শনের অনুমতি দেয়।`executionResult.get().exitValue`এবং একটি উপযুক্ত বার্তা লগ করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_signinb_ইন্টারেক্টিভ&amp;quot;&amp;gt;signInB` — ইন্টারেক্টিভ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই একমাত্র টাস্কটি মানব মিথ্যাক্সের প্রয়োজন করে। Gradle প্রেরণ করে`System.in`প্রক্রিয়াতে প্রম্পটের জন্য`ollama signin`সঠিকভাবে দেখানো যেতে পারে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;standardInput  = System.`in`
standardOutput = System.out
errorOutput    = System.err&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেটা ছাড়া, সাইন-ইন ব্লক হবে কারণ stdin বন্ধ থাকবে এবং আপনি هرگز প্রম্পট দেখবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_pullmodelb_কনফিগারযোগ্য&amp;quot;&amp;gt;pullModelB` — কনফিগারযোগ্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি জেনেরিক টাস্ক যা একটি প্যারামিটার গ্রহণ করে এর মাধ্যমে`-P`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew pullModelB -Pmodel=deepseek-v4-pro:cloud
./gradlew pullModelB                           # fallback : qwen3:0.6b&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফালব্যাক গুরুত্বপূর্ণ :`project.findProperty(&amp;quot;model&amp;quot;) as? String ?: &amp;quot;qwen3:0.6b&amp;quot;`এটি নিশ্চিত করে যে, প্যারামিটার ভুলে গেলে কাজটি ভাঙা নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_statusollamaall_নিদান&amp;quot;&amp;gt;statusOllamaAll` — নিদান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুই`curl`বন্দরের স্বাস্থ্য`11434` et &amp;lt;code&amp;gt;11435&amp;lt;/code&amp;gt;, একটি fallback-এ`runCatching`কোনো ইন্সট্যান্স বন্ধ থাকলে 크্যাশ না হওয়ার জন্য. আউটপুট স্ট্রাকচার্ড :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;✓ Instance Native   — port 11434 OK (HTTP 200)
✓ Instance Docker B — port 11435 OK (HTTP 200)

Conteneur Docker :
NAMES               STATUS         PORTS
ollama-instance-b   Up 3 hours     0.0.0.0:11435-&amp;amp;gt;11434/tcp&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি নজরে, তুমি ঠিকভাবে জানো যে কোনটা চলছে এবং কোনটা ভাঙ্গে গেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_cleanollamab_পরিচয়_সংরক্ষণকারী_পরিষ্কার&amp;quot;&amp;gt;cleanOllamaB` — পরিচয় সংরক্ষণকারী পরিষ্কার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;commandLine(&amp;quot;docker&amp;quot;, &amp;quot;rm&amp;quot;, instanceName)
isIgnoreExitValue = true&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কনটেইনারটি মুছে ফেলা হয়েছে, কিন্তু ভলিউমটি`~/ollama-b-data`আছে&amp;lt;strong&amp;gt;সংরক্ষিত&amp;lt;/strong&amp;gt;). SSH পরিচয় পরিষ্কার করার পরেও বাঁচে থাকে। পরবর্তি`startOllamaB`, একই কীগুলো পুনরায় ব্যবহার করা হবে — সাইন-ইন করার প্রয়োজন নেই এবং ডিভাইস কী পুনরায় রেজিস্টার করার প্রয়োজন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;cleanOllamaB`বলিউমটি স্পর্শ না করো। যদি তুমি B পরিচয়টি মুছে ফেলতে চাও (এবং সবকিছু শূন্য থেকে শুরু করতে), তাহলে মুছে ফেলতে হবে।&amp;lt;/code&amp;gt;~/ollama-b-data` manuellement. C&amp;amp;#8217;est volontaire — un `clean`প্রমাণীকরণ শংসাপত্র নষ্ট করা উচিত নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_workflow_সম্পূর্ণ_শূন্য_থেকে_দুই_সেশন&amp;quot;&amp;gt;Workflow সম্পূর্ণ — শূন্য থেকে দুই সেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে প্রকল্পে আসে যে ডকুমেন্টেশন খোলা না করেই সবকিছু সেট আপ করতে চান, তার জন্য এইটি আদর্শক্রম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;# 1. Premier contact — que faire ?
$ ./gradlew helpOllama

# 2. On démarre l&amp;#39;instance B
$ ./gradlew startOllamaB

# 3. On récupère la Device Key et on l&amp;#39;enregistre sur ollama.com
$ ./gradlew checkIdentity
# → copier-coller de la clé sur https://ollama.com/settings/keys

# 4. Authentification interactive
$ ./gradlew signInB

# 5. Pull d&amp;#39;un petit modèle gratuit pour tester la plomberie
$ ./gradlew pullModelB

# 6. Test API
$ ./gradlew testOllamaB

# 7. Si tout est vert, pull des modèles Pro
$ ./gradlew pullAllProModels

# 8. Vérification finale des deux instances
$ ./gradlew statusOllamaAll&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুই মিনিটের কমে, সবকিছু প্রদান করা হয়েছে। পড়তে কোন README নেই, সেট করতে কোন পরিবেশ ভেরিয়েবল নেই। কাজটি`helpOllama`একীকৃত ডকুমেন্টেশন作为 কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml




...
... ( skipping 127 lines )
...
  BackgroundColor white
  BorderColor black
}
skinparam StereotypeI {
  BackgroundColor white
  BorderColor black
}
skinparam StereotypeN {
  BackgroundColor white
  BorderColor black
}
skinparam UseCaseStereoType {
  FontColor black
  FontName Verdana
}
skinparam DefaultFontSize 11

actor Développeur as Dev
participant &amp;quot;Gradle\n(build.gradle.kts)&amp;quot; as Gradle
participant &amp;quot;Docker
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
!theme plain
skinparam DefaultFontSize 11

actor Développeur as Dev
participant &amp;quot;Gradle\n(build.gradle.kts)&amp;quot; as Gradle
participant &amp;quot;Docker
ড্যামন&amp;quot; as Docker
participant &amp;quot;Ollama\nইন্সট্যান্স B&amp;quot; as OllamaB
participant &amp;quot;Ollama\nCloud&amp;quot; as Cloud

== Provisionnement ==
Dev -&amp;amp;gt; Gradle : helpOllama
Gradle --&amp;amp;gt; Dev : Aide et instructions

Dev -&amp;amp;gt; Gradle : startOllamaB
Gradle -&amp;amp;gt; Docker : docker run -d ollama/ollama:0.20.2
Docker -&amp;amp;gt; OllamaB : Génération clés SSH (id_ed25519)
Docker --&amp;amp;gt; Gradle : conteneur lancé
Gradle --&amp;amp;gt; Dev : OK

Dev -&amp;amp;gt; Gradle : checkIdentity
Gradle -&amp;amp;gt; Docker : cat id_ed25519.pub
Gradle --&amp;amp;gt; Dev : Clé publique SSH

Dev -&amp;amp;gt; Cloud : Enregistrement clé SSH\n(sur ollama.com/settings/keys)

== Authentification ==
Dev -&amp;amp;gt; Gradle : signInB
Gradle -&amp;amp;gt; Docker : ollama signin (interactif)
Dev &amp;amp;lt;-&amp;amp;gt; Cloud : Login navigateur (compte B)
Docker -&amp;amp;gt; Cloud : Échange token ⇔ Device Key
Gradle --&amp;amp;gt; Dev : Authentifié

== Vérification ==
Dev -&amp;amp;gt; Gradle : pullModelB
Gradle -&amp;amp;gt; Docker : ollama pull qwen3:0.6b
Gradle --&amp;amp;gt; Dev : Modèle pullé

Dev -&amp;amp;gt; Gradle : testOllamaB
Gradle -&amp;amp;gt; Docker : curl /v1/chat/completions
Gradle --&amp;amp;gt; Dev : ✓ Instance B OK

== Production ==
Dev -&amp;amp;gt; Gradle : pullAllProModels
Gradle -&amp;amp;gt; Docker : ollama pull deepseek-v4-pro:cloud
Gradle -&amp;amp;gt; Docker : ollama pull gemma4:31b-cloud
Gradle --&amp;amp;gt; Dev : Modèles Pro pullés

Dev -&amp;amp;gt; Gradle : statusOllamaAll
Gradle --&amp;amp;gt; Dev : ✓ Native ✓ Docker B
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_সত্য_gradle_প্লাগইন_তৈরি_করার_কথা_কেন_না&amp;quot;&amp;gt;একটি সত্য Gradle প্লাগইন তৈরি করার কথা কেন না?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বৈধ প্রশ্ন। এইটি বের করুন`build.gradle.kts`একটি স্বতন্ত্র Gradle প্লাগইনের সুবিধাগুলো থাকত: প্রকল্পের মধ্যে পুনরব্যবহার, ঘোষণামূলক কনফিগারেশন, DSL এক্সটেনশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন পর্যন্ত, এর কোনো অর্থ নেই। এই বিল্ডে জটিল ব্যবসায়িক লজিক নেই — এটি Docker এবং curl কমান্ডের আশেপাশে একটি র্যাপার। একটি সম্পূর্ণ Gradle প্লাগইনের (এক্সটেনশন, ইউনিট টেস্ট, প্রকাশের সঙ্গে) উপরে একটি স্তর তৈরি করা ১২টি ইউটিলিটি কাজের জন্য অপ্রporporশনীয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `build.gradle.kts`inline প্রয়োজনীয় প্রকল্পে বসেছে। এটি অন্য জায়গায় কপি করা সহজ। যদি একদিন আমার তিনটি প্রকল্প থাকে যা তার উপর নির্ভর করে, তাহলে আমি তারকে একটি প্লাগইনে রূপান্তর করব। এখন পর্যন্ত, KISS.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তুমি যখন তিনটি আছে সেই দিন`build.gradle.kts`তিন প্রকল্পে একই, এটি একটি প্লাগইন বের করার সিগন্যাল। এই আগে, ডুপ্লিকেশনটি অBSтракশন থেকে কম খরচবাহুল। ডেভের জ্ঞান.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখানো_পাঠ&amp;quot;&amp;gt;শেখানো পাঠ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Gradle কেবলমাত্র একটি বিল্ড টুল নয়&amp;lt;/strong&amp;gt;অশ্রয়শীল গ্রাফ ইঞ্জিনটি এটিকে একটি ভয়ঙ্কর অবকাঠামো অরকে՛স্ট্রেটার করে তোলে।&amp;lt;code&amp;gt;doLast&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;isIgnoreExitValue&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dependsOn&amp;lt;/code&amp;gt;: এই তিনটি প্রিমিটিভই ডকার কন্টেইনার চালানোর জন্য CI পাইপলাইনের মতোই নির্ভরযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;isIgnoreExitValue` তোমার বন্ধু&amp;lt;/strong&amp;gt;— একটি আদর্শ বিশ্বে,&amp;lt;code&amp;gt;docker run`一个既存在的容器会返回一个警告而不是错误退出码。在实际世界中，你放置。`isIgnoreExitValue = true`এবং তুমি নিদানটি পরিচালনা করো`doLast&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কনফিগারযোগ্য কাজ অস্পষ্টতাকে মারে&amp;lt;/strong&amp;gt; — Un &amp;lt;code&amp;gt;pullModelB`সাধারন সঙ্গে&amp;lt;/code&amp;gt;-Pmodel=&amp;amp;#8230;&amp;amp;#8203;`Nটি বিশেষকৃত কাজকে প্রতিস্থাপন করে। একটি কাজ, একটি ডকুমেন্ট, একটি আচরণ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;runCatching` স্বাস্থ্য পরীক্ষার জন্য&amp;lt;/strong&amp;gt;— যখন আপনি Nটি endpoints পরীক্ষা করছেন, প্রথমের ক্র্যাশ আপনাকে বাকিগুলো পরীক্ষা করতে বাধা দিতে পারে না।&amp;lt;code&amp;gt;runCatching&amp;lt;/code&amp;gt;+`getOrElse`প্রতিটি ইন্ডপয়েন্টের জন্য, আংশিক ব্যর্থতা হলেও ডায়াগনস্টিক সম্পূর্ণ থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কাজ &amp;lt;code&amp;gt;helpOllama&amp;lt;/code&amp;gt; হিসেবে কার্যকর ডকুমেন্টেশন&amp;lt;/strong&amp;gt; — Un `println()`সুন্দরভাবে বিন্যাসিত একটি ত্রি-পারাগ্রাফ README প্রতিস্থাপন করে। এটি স্ব-ডকুমেন্টেটд, সর্বদা আপডেট, এবং টার্মিনাল বাহিয়ে যাবেন নাconditionle অ্যাক্সেসযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা ম্যানুয়ালি টাইপ করা ডকার কমান্ড থেকে পূর্ণাঙ্গ, সংস্করণযুক্ত, পুনরায় ব্যবহারযোগ্য গ্রেডল ওয়ার্কফ্লোতে য้าย করেছি। ১২ টাস্ক সম্পূর্ণ জীবনচক্রকে কভার করে: প্রোভিশনিং, আইডেন্টিটি, সাইন-ইন, পুল, টেস্ট, ডায়াগনস্টিক, ক্লিনিং।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;docker-compose + build.gradle.kts + opencode.json কোম্বো একটি পরিষ্কার ত্রয়মুর্তি তৈরি করে: ডকারকে পৃথকীকরণ (isolation) এর জন্য, Gradleকে অর্কেস্ট্রেশন (orchestration) এর জন্য, OpenCodeকে ব্যবহার (consumption) এর জন্য। প্রতিটি স্তরের একটি দায়িত্ব আছে, এবং কোনোটিই অতিক্রম করে অন্য স্তরে যায় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরবর্তী ধাপ? CI-এ লাইফ সাইকেলকে অটোমেট করুন যাতে Ollama ইনস্ট্যান্সগুলি অস্থায়ী ডেভেলপমেন্ট পরিবেশে উপলব্ধ হয়। কিন্তু এটা একটি অন্য নিবন্ধ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সামগ্রী&amp;quot;&amp;gt;সামগ্রী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/tutorial_using_tasks.html&amp;quot;&amp;gt;ব্যবহারকারী নির্দেশিকা Gradle — কাজগুলি&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/custom_tasks.html&amp;quot;&amp;gt;ব্যবহারকারী ম্যানুয়াল Gradle — কাস্টম টাস্ক&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://hub.docker.com/r/ollama/ollama&amp;quot;&amp;gt;ডক্সার ওllamার ইমেজ ডক্সার হাবে&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://kotlinlang.org/docs/gradle.html&amp;quot;&amp;gt;Gradle DSL Kotlin — ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রকাশিত নিবন্ধ 2026-05-08&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একই মেশিনে Docker ব্যবহার করে দুটি Ollama Pro সাবস্ক্রিপশন একত্রিত করা</title>
            <link >https://cheroliv.com//blog/2026/0120_cumuler_deux_abonnements_ollama_pro_docker_post.html</link>
            <pubDate>Fri, 8 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0120_cumuler_deux_abonnements_ollama_pro_docker_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিচয়&amp;quot;&amp;gt;পরিচয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_একই_জিনিসকে_দুবার_করা_হয়&amp;quot;&amp;gt;কেন একই জিনিসকে দুবার করা হয়?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যার_হৃদয়_ডিভাইস_কী&amp;quot;&amp;gt;সমস্যার হৃদয় : ডিভাইস কী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেটআপ_ধাপে_ধাপে&amp;quot;&amp;gt;সেটআপ — ধাপে ধাপে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পূর্বশর্ত&amp;quot;&amp;gt;পূর্বশর্ত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_ভলিউম_তৈরি_করুন&amp;quot;&amp;gt;ধাপ ১: ভলিউম তৈরি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_2_ডッカー_কন্টেইনার_চালু_করুন&amp;quot;&amp;gt;ধাপ 2: ডッカー কন্টেইনার চালু করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_3_সার্বজনী_কী_প্রাপ্ত_করা&amp;quot;&amp;gt;ধাপ 3: সার্বজনী কী প্রাপ্ত করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৪_কী_সংরক্ষণ_করুন_ollama_com_এ&amp;quot;&amp;gt;ধাপ ৪ : কী সংরক্ষণ করুন Ollama.com-এ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্টেপ_৫_একটি_ছোট_বিনামূল্য_মডেল_দিয়ে_পরীক্ষা_করুন&amp;quot;&amp;gt;স্টেপ ৫: একটি ছোট বিনামূল্য মডেল দিয়ে পরীক্ষা করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এপিআই_এর_ফাঁদ_v1models&amp;quot;&amp;gt;এপিআই-এর ফাঁদ `/v1/models&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফল_দুটি_সেশন_দুটি_অ্যাকাউন্ট_শূন্য_সংঘর্ষ&amp;quot;&amp;gt;ফল: দুটি সেশন, দুটি অ্যাকাউন্ট, শূন্য সংঘর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখে_পাওয়া_পাঠ&amp;quot;&amp;gt;শেখে পাওয়া পাঠ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pড়ার সময় : 14 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;দুটি Pro সদসysetা, একটি পিসি, একটি ব্যাংক কার্ড, এবং নেটওয়ার্ক সংঘাত শূন্য। কীভাবে Docker আমাকে আমার ক্লাউড অনুমান কাপাসিটি দ্বিগুণ করতে অনুমতি দিয়েছে, একটি দ্বিতীয় পিসি কেনা ছাড়া।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পরিচয়&amp;quot;&amp;gt;পরিচয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি বেশ কিছু মাস থেকে Ollama Pro ব্যবহার করছি আমার OpenCode সেশনগুলিকে ক্লাউড মডেল দ্বারা চালানোর জন্য। কিন্তু সত্য হচ্ছে, Pro সাবস্ক্রিপশন থাকলেও, একাধিক এজেন্ট সমান্তরালে চালালে &amp;lt;strong&amp;gt;rate limiting&amp;lt;/strong&amp;gt; দ্রুত সীমাবদ্ধতায় পড়ে। স্পষ্ট সমাধান: একটি দ্বিতীয় সাবস্ক্রিপশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এখানে, এটি দুর্ভাগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ollama প্রতিটি মেশিনকে একটি অনন্য SSH কী দিয়ে চিহ্নিত করে — এর বিখ্যাত &amp;lt;strong&amp;gt;Device Key&amp;lt;/strong&amp;gt;। একই অপারেটিং সিস্টেমের দুটি ইনস্ট্যান্স একই পরিচয় ভাগ করবে, এবং একই ডিভাইসে দুটি Pro অ্যাকাউন্টকে জোড়া দেওয়া সম্ভব নয়। এবং kuten আপনি অনুমান করেছেন, আমি শুধুমাত্র এই原因েই একটি দ্বিতীয় ল্যাপটপ কিনার জন্য যাচ্ছিলাম না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমাধান : ঘষ। উল라마কে মনে করাবেন যে এটি দুটি ভिन्न মেশিনে চলছে, তবে প্রকৃতভাবে তারা একই সিপিইউ, র্যাম এবং নেটওয়ার্ক সংযোগ শেয়ার করে। ডকার আমাদের জন্য একটি সম্পূর্ণ বিছিন্ন বুবল তৈরি করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 11) ]

@startuml




...
... ( skipping 131 lines )
...
  BackgroundColor white
  BorderColor black
}
skinparam StereotypeN {
  BackgroundColor white
  BorderColor black
}
skinparam UseCaseStereoType {
  FontColor black
  FontName Verdana
}
skinparam BoxPadding 10
skinparam DefaultFontSize 12

left to right direction

node &amp;quot;ভৌত মেশিন&amp;quot; {
  frame &amp;quot;Ollama ইনস্ট্যান্স A (স্থানীয়)&amp;quot; as Native {
    database &amp;quot;অন্যাতন\n/usr/share/ollama/.ollama/id_ed25519&amp;quot; as KeyA
    portin &amp;quot;API
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
!theme plain
skinparam BoxPadding 10
skinparam DefaultFontSize 12

left to right direction

node &amp;quot;ভৌত মেশিন&amp;quot; {
  frame &amp;quot;Ollama ইনস্ট্যান্স A (স্থানীয়)&amp;quot; as Native {
    database &amp;quot;অন্যাতন\n/usr/share/ollama/.ollama/id_ed25519&amp;quot; as KeyA
    portin &amp;quot;API
:11434&amp;quot; as PortA
  }

  frame &amp;quot;Ollama ইনস্ট্যান্স B (Docker)&amp;quot; as Docker {
    database &amp;quot;ব্যক্তিত্ব\n~/ollama-b-data/id_ed25519&amp;quot; as KeyB
    portin &amp;quot;API\n:11435&amp;quot; as PortB
  }
}

cloud &amp;quot;ওললামা ক্লাউড&amp;quot; {
  actor &amp;quot;প্রো অ্যাকাউন্ট A\n(ইমেইল 1)&amp;quot; as AccountA
  actor &amp;quot;প্রো B অ্যাকাউন্ট
(ইমেইল 2)&amp;quot; as AccountB
}

KeyA --&amp;amp;gt; AccountA : &amp;quot;কী SSH A&amp;quot;
KeyB --&amp;amp;gt; AccountB : &amp;quot;এসএসএই কী B&amp;quot;
PortA --&amp;amp;gt; AccountA : &amp;quot;অনুরোধ A&amp;quot;
PortB --&amp;amp;gt; AccountB : &amp;quot;প্রশ্নাবলি B&amp;quot;

note bottom of Docker
  Conteneur isolé : identité SSH distincte,
  port réseau distinct, volume persistant
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_একই_জিনিসকে_দুবার_করা_হয়&amp;quot;&amp;gt;কেন একই জিনিসকে দুবার করা হয়?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আমাকে মানসিক Bogoli বলার আগে, আমাকে usagesের ক্ষেত্র আপনাকে ব্যাখ্যা করতে দিন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি Pro সাবস্ক্রিপশন দিয়ে, আমি একটি মডেল চালু করতে পারি যেমন`deepseek-v4-pro:cloud`একটি OpenCode সেশনে। সমস্যা তখন উঠে আসে যখন আমি &amp;lt;strong&amp;gt;দুই&amp;lt;/strong&amp;gt; সমকালীন সেশন চাই। রেট লিমিটিং কোটা nedeniyle দ্বিতীয় সেশনের গতি ধীর হয় বা তা সম্পূর্ণরূপে প্রত্যাখ্যান করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি স্বাধীন প্রো সাবস্ক্রিপশন সঙ্গে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সেশন OpenCode 1 → অ্যাকাউন্ট প্রো A`localhost:11434`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সেশন OpenCode 2 → প্রো বি অ্যাকাউন্ট`localhost:11435`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি সেশনের নিজস্ব কোটা এবং নিজস্ব প্রসঙ্গ রয়েছে, এবং এটি অন্য সেশনে বाधা দেয় না। এটি মানবিক মাল্টি-প্রসেসিং।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি প্রো সাবস্ক্রিপশন = দুটি ভিন্ন ইমেইল। একই ব্যাংক কার্ড কাজ করে — ওলামা পেমেন্ট সিস্টেম একই পেমেন্ট পদ্ধতির থেকে একাধিক সাবস্ক্রিপশন ব্লক করে না। আমি যাচাই করেছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যার_হৃদয়_ডিভাইস_কী&amp;quot;&amp;gt;সমস্যার হৃদয় : ডিভাইস কী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি Ollama ইনস্টল করলে, একটি SSH ed25519 কী জোড়া শনাক্তকরণ ডিরেকটরিতে তৈরি হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAI...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কীটি Ollama সার্ভারে আপলোড করা হয় যখন`ollama signin`. ওই বলে, &amp;quot;এই মেশিনটি কোনও Pro অ্যাকাউন্টের&amp;quot;.&amp;quot; যদি আপনার দুটি ইন্সট্যান্স একই ফাইলটি শেয়ার করে`id_ed25519`, তারা একই পরিচয়টি ভাগ করে। গেম শেষ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পারেড : আমাদের দ্বিতীয় উদাহরণকে তার নিজস্ব পরিচয় ডিরেক্টরি দিতে হবে, যা একটি Docker ভলিউমে isolate করা আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেটআপ_ধাপে_ধাপে&amp;quot;&amp;gt;সেটআপ — ধাপে ধাপে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পূর্বশর্ত&amp;quot;&amp;gt;পূর্বশর্ত&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Ollama-এর একটি কার্যকরী নেটিভ ইনস্টলেশন (আधিকারিক স্ক্রিপ্ট)&amp;lt;code&amp;gt;curl | sh&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডকার ইনস্টল করা হয়েছে এবং কাজ করছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডিপ্লয়মেন্টের জন্য পোর্টেইনার বা ডকার-কম্পೋಜ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;দুটি Ollama অ্যাকাউন্ট, দুটি আলাদা ইমেইল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি সংস্করণটি ব্যবহার করেছি`0.20.2`— এই অফিসিয়াল স্ক্রিপ্ট द्वारा প্রদত্ত এবং মিলে যাওয়া Docker ইমেজ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_১_ভলিউম_তৈরি_করুন&amp;quot;&amp;gt;ধাপ ১: ভলিউম তৈরি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সাধারণ ডিরেক্টরি হোস্টে থাকবে উদাহরণ B‑এর পরিচয়ের জন্য একটি স্থায়ী ভলিউম :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/ollama-b-data&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফোল্ডারটি ডকার কন্টেইনারে mount করা হবে, যেমন`/root/.ollama`, waarin Ollama তার পরিচয় কী সংরক্ষণ করে, তার ইতিহাস এবং এর মডেল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_2_ডッカー_কন্টেইনার_চালু_করুন&amp;quot;&amp;gt;ধাপ 2: ডッカー কন্টেইনার চালু করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-yaml hljs&amp;quot; data-lang=&amp;quot;yaml&amp;quot;&amp;gt;# docker-compose.yml
services:
  ollama-instance-b:
    image: ollama/ollama:0.20.2
    container_name: ollama-instance-b
    ports:
      - &amp;quot;11435:11434&amp;quot;
    volumes:
      - /home/cheroliv/ollama-b-data:/root/.ollama
    environment:
      - OLLAMA_HOST=0.0.0.0
    restart: always&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে কি ঘটছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বন্দর&amp;lt;strong&amp;gt;১১৪৩৫&amp;lt;/strong&amp;gt;হোস্টের চিত্রাঙ্কিত করা হয়েছে&amp;lt;strong&amp;gt;১১৪৩৪&amp;lt;/strong&amp;gt;কন্টেইনারের ভিতরে। অতএব, ডকার ইন্সট্যান্স শুনে`:11435`নেটিভ উদাহরণের সাথে কোনো দ্বন্দ্ব নেই যা দখল করছে`:11434`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বলিউম`~/ollama-b-data`উপর মাউন্ট করা হয়েছে`/root/.ollama`— এটাই যেখানে SSH পরিচয় সংরক্ষিত হবে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`OLLAMA_HOST=0.0.0.0`কন্টেইনারের বাহ্যিক সংযোগ গ্রহণ করতে অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি এই স্ট্যাকটি পোর্টাইনারের মাধ্যমে স্থাপন করেছি, কিন্তু একটি সহজ`docker compose up -d`একই ভালোভাবে কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_3_সার্বজনী_কী_প্রাপ্ত_করা&amp;quot;&amp;gt;ধাপ 3: সার্বজনী কী প্রাপ্ত করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কন্টেইনারটি প্রথমবার চালু হলে খালি থাকলে, Ollama স্বয়ংক্রিয়ভাবে ভলিউমে একটি নতুন SSH কী জোড়া তৈরি করে। আমরা পাবলিক কীটি পাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ docker exec ollama-instance-b cat /root/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ+dvnfmuo49q5O8LOlvgZ39SKORFw47ry9k4H2jPc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি যাচাই করি যে এই কী &amp;lt;strong&amp;gt;অন্য&amp;lt;/strong&amp;gt; সেই নেটিভ উদাহরণের চাবির মতো নয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Instance native
$ cat /usr/share/ollama/.ollama/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGyF...(différente)

# Instance Docker
$ cat ~/ollama-b-data/id_ed25519.pub
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDDQ...(différente)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি আলাদা কী, দুটি পৃথক পরিচয়। কাজটি শেষ হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;য�যদি আপনার কন্টেইনার পুনরায় চালু হয়, তবে এটি &amp;lt;strong&amp;gt;পুনরায় ব্যবহার করে&amp;lt;/strong&amp;gt; ভলিউমে উপস্থিত কীগুলোকে। ওटा ধ্রুবক। আপনি Pro অ্যাকাউন্টের সাথে সংযুক্তি হারবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৪_কী_সংরক্ষণ_করুন_ollama_com_এ&amp;quot;&amp;gt;ধাপ ৪ : কী সংরক্ষণ করুন Ollama.com-এ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নির্দেশনা &amp;lt;a href=&amp;quot;https://ollama.com/settings/keys&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://ollama.com/settings/keys&amp;lt;/a&amp;gt; → SSH কী যোগ করুন। ডকার ইন্সট্যান্সের পাবলিক কীটি পেস্ট করুন এবং নিশ্চিত করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একে, এই পরিচয়টি Pro B অ্যাকাউন্টে সংযুক্ত করা ہے :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ docker exec -it ollama-instance-b ollama signin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্রাউজারটি খুলে, আমরা অ্যাকাউন্ট B-এর ইমেইল দিয়ে সংযোগ করি এবং টোকেনটি কনটেইনারের SSH কী সঙ্গে যুক্ত হয়। আমরা যাচাই করি যে সব ঠিক আছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ docker exec -it ollama-instance-b ollama signin
User: cherolivpro&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টেপ_৫_একটি_ছোট_বিনামূল্য_মডেল_দিয়ে_পরীক্ষা_করুন&amp;quot;&amp;gt;স্টেপ ৫: একটি ছোট বিনামূল্য মডেল দিয়ে পরীক্ষা করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রো সাবস্ক্রিপশনের মূল্য বিবেচনা করার আগে, আমি নিশ্চিত হতে চাই যে পাইপটি কাজ করছে। আমি সংযোগ যাচাই করতে একটি ছোট স্থানীয় এবং মুক্ত মডেলটি টেনে আনা ছাই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ docker exec ollama-instance-b ollama pull qwen3:0.6b
pulling manifest
pulling 7f4030143c1c: 100% ▕██████████████████▏ 522 MB
success

$ curl -s http://localhost:11435/api/tags
{&amp;quot;models&amp;quot;:[{&amp;quot;name&amp;quot;:&amp;quot;qwen3:0.6b&amp;quot;,&amp;quot;model&amp;quot;:&amp;quot;qwen3:0.6b&amp;quot;,...}]}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বন্দর`11435`উত্তর দেয়, মডেলটি পরিবেশন করা হয়েছে। ইনস্ট্যান্স B জীবিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একbart নিশ্চিত হওয়ার পর, আমি সত্য ক্লাউড Pro মডেলের pull-এ পরিবর্তন করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ docker exec ollama-instance-b ollama pull deepseek-v4-pro:cloud
pulling manifest
pulling 31c3059e137e: 100% ▕██████████████████▏  344 B
success&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;344 বাইট ক্লাউড মডেলের ম্যানিফেস্টের জন্য — স্বাভাবিকভাবে, inference সার্ভার‑সাইডে হয়, স্থানীয়ভাবে নয়। এবং এখানে সর্বোচ্চ পরীক্ষা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ curl -s http://localhost:11435/v1/chat/completions \
  -H &amp;quot;Content-Type: application/json&amp;quot; \
  -d &amp;#39;{&amp;quot;model&amp;quot;:&amp;quot;deepseek-v4-pro:cloud&amp;quot;,&amp;quot;messages&amp;quot;:[{&amp;quot;role&amp;quot;:&amp;quot;user&amp;quot;,&amp;quot;content&amp;quot;:&amp;quot;Dis bonjour en une phrase courte.&amp;quot;}]}&amp;#39;

{
  &amp;quot;id&amp;quot;: &amp;quot;chatcmpl-480&amp;quot;,
  &amp;quot;model&amp;quot;: &amp;quot;deepseek-v4-pro&amp;quot;,
  &amp;quot;choices&amp;quot;: [{
    &amp;quot;message&amp;quot;: { &amp;quot;content&amp;quot;: &amp;quot;Bonjour !&amp;quot; },
    &amp;quot;finish_reason&amp;quot;: &amp;quot;stop&amp;quot;
  }],
  &amp;quot;usage&amp;quot;: { &amp;quot;total_tokens&amp;quot;: 181 }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নমস্কার, তুইও, instance B&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এপিআই_এর_ফাঁদ_v1models&amp;quot;&amp;gt;এপিআই-এর ফাঁদ `/v1/models&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি একটি মুর্খ বিস্তারের জন্য ২০ মিনিট হারিয়েছি। যখন আমি প্রোভাইডারটি কনফিগার করেছি`ollama-b`OpenCode-এ, মডেল নির্বাচনকারীতে কিছুই দেখায়নি। কোনো কিছু না। কোনো কাজও না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কারণ? L&amp;amp;#8217;API`/v1/models`বি ইনস্ট্যান্স থেকে ফেরত আসত`{&amp;quot;object&amp;quot;:&amp;quot;list&amp;quot;,&amp;quot;data&amp;quot;:null}`বদলে`{&amp;quot;object&amp;quot;:&amp;quot;list&amp;quot;,&amp;quot;data&amp;quot;:[]}`কোনো মডেলটি পুল করা হয়নি. মান`null`OpenCode পার্সিং পার্শকে क्र্যাশ करিয়ে দিল, যা প্রদর্শককে দেখাননি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমাধান : OpenCode কনফিগারেশনে মডেলগুলি &amp;lt;strong&amp;gt;স্পশ্ট&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/strong&amp;gt; ঘোষণা করা, বরং গতিশীল খুঁজিবারের উপর নির্ভর করার_LOCATION.replace না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;~/.config/opencode/opencode.json&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;$schema&amp;quot;: &amp;quot;https://opencode.ai/config.json&amp;quot;,
  &amp;quot;provider&amp;quot;: {
    &amp;quot;ollama&amp;quot;: {
      &amp;quot;npm&amp;quot;: &amp;quot;@ai-sdk/openai-compatible&amp;quot;,
      &amp;quot;name&amp;quot;: &amp;quot;Ollama (local)&amp;quot;,
      &amp;quot;options&amp;quot;: { &amp;quot;baseURL&amp;quot;: &amp;quot;http://localhost:11434/v1&amp;quot; },
      &amp;quot;models&amp;quot;: {
        &amp;quot;gemma4:e2b&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;Gemma 4 E2B (local)&amp;quot; }
      }
    },
    &amp;quot;ollama-b&amp;quot;: {
      &amp;quot;npm&amp;quot;: &amp;quot;@ai-sdk/openai-compatible&amp;quot;,
      &amp;quot;name&amp;quot;: &amp;quot;Ollama Instance B (Docker)&amp;quot;,
      &amp;quot;options&amp;quot;: { &amp;quot;baseURL&amp;quot;: &amp;quot;http://localhost:11435/v1&amp;quot; },
      &amp;quot;models&amp;quot;: {
        &amp;quot;qwen3:0.6b&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;Qwen3 0.6B (B)&amp;quot; },
        &amp;quot;deepseek-v4-pro:cloud&amp;quot;: { &amp;quot;name&amp;quot;: &amp;quot;DeepSeek V4 Pro (B)&amp;quot; }
      }
    }
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্পষ্ট ঘোষণা দিয়ে, OpenCode তৎক্ষণেই প্রদানকারী B এবং তার মডেলগুলো দেখে। একটি সেশন রিস্টার্ট, এবং সিলেক্টর`/models`দুইটি উদাহরণকে পাশাপাশি দেখায়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আপনার কাস্টম প্রদানকারীটি দেখতে পাচেন না যদি`/models`, ne perdez pas trois heures à redémarrer votre terminal. Déclarez les modèles manuellement dans`opencode.json`— এটি সমস্যা তৎক্ষণে সমাধান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফল_দুটি_সেশন_দুটি_অ্যাকাউন্ট_শূন্য_সংঘর্ষ&amp;quot;&amp;gt;ফল: দুটি সেশন, দুটি অ্যাকাউন্ট, শূন্য সংঘর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শেষে, আমি দুটি OpenCode সেশন সমসাময়িকভাবে চালু করতে পারি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;Session 1 → /models → Ollama (local) → deepseek-v4-pro:cloud → Compte A
Session 2 → /models → Ollama Instance B (Docker) → deepseek-v4-pro:cloud → Compte B&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি সেশনের নিজের কোটা, নিজের রেট লিমিট রয়েছে, এবং তারা একে অপরের পায়ে ঘষবেন না। একই মেশিন, একই নীল কার্ড, দুটি ইমেল আলাদা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং সবচেয়ে ভালো? ডকার কনটেইনারটি`restart: always`এটি সিস্টেম রিবুটের পর কোনো ম্যানুয়াল হস্তক্ষেপ ছাড়া সাশ্রয়ী থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখে_পাওয়া_পাঠ&amp;quot;&amp;gt;শেখে পাওয়া পাঠ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Docker সবকিছুকে পৃথক করে, এমনকি পরিচয়কেও&amp;lt;/strong&amp;gt;— একটি সহজ bind mount de volume কন্টেইনারের নিজস্ব SSH কী সেট দিতে পর্যাপ্ত, এটি Ollama এর চোখে কোনো ভিন্ন ফিজিক্যাল মেশিন থেকে আলাদা নয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;দুই ইমেইল, একই CB&amp;lt;/strong&amp;gt;— Ollama একই পরিশোধ পদ্ধতির থেকে একাধিক সাবস্ক্রিপশন ব্লক করে না। শুধুমাত্র ইমেইল আলাদা হতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রারম্ভে বিনামূল্যে টেস্ট করুন, পরে পরিশোধ করুন&amp;lt;/strong&amp;gt; — Un &amp;lt;code&amp;gt;ollama pull qwen3:0.6b&amp;lt;/code&amp;gt; (modèle libre, 522 Mo) permet de valider toute la chaîne réseau sans débourser un centime. Vous validez le plomberie d&amp;amp;#8217;abord, vous activez le Pro ensuite.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;/v1/models` সঙ্গে &amp;lt;code&amp;gt;data: null&amp;lt;/code&amp;gt; OpenCode-কে ভাঙ্গে&amp;lt;/strong&amp;gt;— আপনি একটি কাস্টম provider কনফিগার করেন ও`&amp;quot;models&amp;quot;: {}`, OpenCode API এর মাধ্যমে মডেলগুলি খুঁজে বের করার চেষ্টা করে। যদি API প্রতিক্রিয়া দেয়`data: null`, প্রোভাইডার দেখা দেয় না। মডেলগুলো স্পষ্টভাবে ঘোষণা করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;দুইটি অ্যাকাউন্ট, এটি মানবিক মাল্টি-প্রসেসিং&amp;lt;/strong&amp;gt;— একটি Pro অ্যাকাউন্ট = একটি সক্রিয় OpenCode সession। দুই অ্যাকাউন্ট = দুটি প্যারালেল সেশন। যদি কেউ একই সময়ে çeşitli Gradle প্রকল্পকে পরিচালনা করে, সেটা গেম চেঞ্জার।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://ollama.com/settings/keys&amp;quot;&amp;gt;Ollama Settings — SSH কী ব্যবস্থাপনা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.ollama.com/&amp;quot;&amp;gt;ওলামার অফিসিয়াল ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://hub.docker.com/r/ollama/ollama&amp;quot;&amp;gt;Docker Hub-এ Docker Ollama ইমেজ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://opencode.ai/docs/providers/#ollama&amp;quot;&amp;gt;OpenCode — কনফিগারেশন প্রদানকারী Ollama&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;প্রকাশিত নিবন্ধ 2026-05-08&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Kitty টার্মিনাল ইন্সটল করুন এবং Zsh কে Xubuntu-এ ডিফল্ট শেল হিসেবে কনফিগার করুন</title>
            <link >https://cheroliv.com//blog/2025/0080_kitty_term_post.html</link>
            <pubDate>Thu, 7 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0080_kitty_term_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_kitty_এবং_zsh_কেন_বেছে_নবেন&amp;quot;&amp;gt;Kitty এবং Zsh কেন বেছে নবেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিস্টেমের_প্রয়োজনীয়তা&amp;quot;&amp;gt;সিস্টেমের প্রয়োজনীয়তা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডাউনলোড_এবং_কিটির_ইনস্টলেশন&amp;quot;&amp;gt;ডাউনলোড এবং কিটির ইনস্টলেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন_স্ক্রিপ্ট_ডাউনলোড_করুন&amp;quot;&amp;gt;ইনস্টলেশন স্ক্রিপ্ট ডাউনলোড করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিম্বলিক_লিংকদের_সৃষ্টি&amp;quot;&amp;gt;সিম্বলিক লিংকদের সৃষ্টি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_xubuntu_এ_kitty_র_একীকরণ&amp;quot;&amp;gt;Xubuntu-এ Kitty-র একীকরণ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডেস্কটপ_ফাইল_কপি_করুন&amp;quot;&amp;gt;ডেস্কটপ ফাইল কপি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডেস্কটপ_ফাইলটি_পরিবর্তন_করুন&amp;quot;&amp;gt;ডেস্কটপ ফাইলটি পরিবর্তন করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কিটিকে_ডিফল্ট_টার্মিনাল_হিসেবে_সংযুক্ত_করুন_ঐচ্ছিক&amp;quot;&amp;gt;কিটিকে ডিফল্ট টার্মিনাল হিসেবে সংযুক্ত করুন (ঐচ্ছিক)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_zsh_ইনস্টলেশন&amp;quot;&amp;gt;Zsh ইনস্টলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_zshকে_ডিফল্ট_শেল_sebagai_সেট_করুন&amp;quot;&amp;gt;Zshকে ডিফল্ট শেল sebagai সেট করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সার্বজনীন_পদ্ধতি_সব_টার্মিনালের_জন্য&amp;quot;&amp;gt;সার্বজনীন পদ্ধতি (সব টার্মিনালের জন্য)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_kitty_নির্দিষ্ট_পদ্ধতি&amp;quot;&amp;gt;Kitty-নির্দিষ্ট পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_zshের_কনফিগারেশন_ঐচ্ছিক&amp;quot;&amp;gt;Zshের কনফিগারেশন (ঐচ্ছিক)&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_zshrc_ফাইল_তৈরি_করা&amp;quot;&amp;gt;একটি .zshrc ফাইল তৈরি করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ন্যূনতম_কনফিগারেশনের_উদাহরণ&amp;quot;&amp;gt;ন্যূনতম কনফিগারেশনের উদাহরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_ওয়ার্কফ্লো_সারাংশ&amp;quot;&amp;gt;সম্পূর্ণ ওয়ার্কফ্লো সারাংশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেষ_পরীক্ষা&amp;quot;&amp;gt;শেষ পরীক্ষা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কনফিগারেশন_ফাইল_খোলুন&amp;quot;&amp;gt;📂 কনফিগারেশন ফাইল খোলুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_️_যোগ_বা_পরিবর্তন_করুন_font_size&amp;quot;&amp;gt;🖋️ যোগ বা পরিবর্তন করুন `font_size&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সংরক্ষণ_করুন_এবং_কিটি_পুনরায়_চালু_করুন&amp;quot;&amp;gt;💾 সংরক্ষণ করুন এবং কিটি পুনরায় চালু করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গতিশীল_সমন্বয়_অস্থায়ী_জুম&amp;quot;&amp;gt;✅ গতিশীল সমন্বয় (অস্থায়ী জুম)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_oh_my_zsh_এর_ইনস্টলেশন_ও_কনফিগারেশন&amp;quot;&amp;gt;Oh My Zsh এর ইনস্টলেশন ও কনফিগারেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_oh_my_zsh_এর_ইন্সটলেশন&amp;quot;&amp;gt;Oh My Zsh-এর ইন্সটলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_থিম_পরিবর্তন_করুন&amp;quot;&amp;gt;থিম পরিবর্তন করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যাচাই&amp;quot;&amp;gt;যাচাই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইউজ_কেসের_ডায়াগ্রাম&amp;quot;&amp;gt;ইউজ কেসের ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কিটি_এ_ট্রান্স್ಲুসিডিটি_সক্রিয়_করুন&amp;quot;&amp;gt;কিটি-এ ট্রান্স್ಲুসিডিটি সক্রিয় করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পারদর্শিতার_পূর্বশর্ত&amp;quot;&amp;gt;পারদর্শিতার পূর্বশর্ত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_kitty_conf_এ_পরদর্শিতার_কনফিগারেশন&amp;quot;&amp;gt;kitty.conf-এ পরদর্শিতার কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পুনরায়_চালু_kitty&amp;quot;&amp;gt;পুনরায় চালু Kitty&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্ভব_পূরক&amp;quot;&amp;gt;সম্ভব পূরক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্রম_diaগ্রাম_kitty_র_আরম্ভ_পারদর্শিতায়&amp;quot;&amp;gt;ক্রম diaগ্রাম - Kitty-র আরম্ভ পারদর্শিতায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিচিত_সীমাবদ্ধতাগুলো&amp;quot;&amp;gt;পরিচিত সীমাবদ্ধতাগুলো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শব্দযুক্ত_বিপ_নিষ্ক্রিয়_করুন&amp;quot;&amp;gt;শব্দযুক্ত বিপ নিষ্ক্রিয় করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_kitty_আপডেট&amp;quot;&amp;gt;Kitty আপডেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উদ্ধৃতি&amp;quot;&amp;gt;উদ্ধৃতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গাইড ধাপে ধাপে কীভাবে Xubuntu-তে &amp;lt;strong&amp;gt;kitty&amp;lt;/strong&amp;gt; টার্মিনাল ইনস্টল করতে হয়, এটি সঠিকভাবে কনফিগার করতে হয়, এবং bash-কে &amp;lt;strong&amp;gt;zsh&amp;lt;/strong&amp;gt;-তে প্রতিস্থাপন করে ডিফল্ট শেল হিসাবে সেট করতে হয়, এই বিষয়গুলি ব্যাখ্যা করে। কিটি প্রোজেক্ট এখানে উপলব্ধ: &amp;lt;a href=&amp;quot;https://github.com/kovidgoyal/kitty&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/kovidgoyal/kitty&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ Kitty একটি আধুনিক, দ্রুত এবং কনফিগারযোগ্য টার্মিনাল, বিশেষভাবে উন্নত ডেভেলপারদের জন্য উপযুক্ত। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_kitty_এবং_zsh_কেন_বেছে_নবেন&amp;quot;&amp;gt;Kitty এবং Zsh কেন বেছে নবেন?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty উদ্ভuted হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;GPU ত্বরন দিয়ে উত্কৃষ্ট কর্মক্ষমতা,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি পাঠ্য ফাইল-ভিত্তিক কনফিগারেশন যা সম্পূর্ণরূপে একক ফাইলে ভিত্তি পড়ে,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফন্ট এবং লিগেচারদের দারুণ সমর্থন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Zsh নিজে নিজে একটি শক্তিশালী ইন্টারেক্টিভ শেল যা প্রদান করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বুদ্ধিমান পূরন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি কাস্টমাইজযোগ্য প্রম্পট,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;bashের সাথে ব্যাপক সামঞ্জস্য.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty ও Zsh একত্রিত করলে আপনি একটি উত্পাদনশীল এবং শোভন পরিবেশ পাবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/kitty-zsh-overview.png&amp;quot; alt=&amp;quot;kitty zsh overview&amp;quot; width=&amp;quot;729&amp;quot; height=&amp;quot;305&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গাইড ইচ্ছামত স্ক্রিপ্টের মাধ্যমে ইনস্টলেশন এবং Xubuntu পর্যন্ত সীমাবদ্ধ রাখা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সিস্টেমের_প্রয়োজনীয়তা&amp;quot;&amp;gt;সিস্টেমের প্রয়োজনীয়তা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুরু করার আগে, নিশ্চিত করুন যে আপনার :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Xubuntu ইনস্টল করা হয়েছে,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইন্টারনেট অ্যাক্সেস,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি কাজের যোগ্য বাশ শেল স্ক্রিপ্ট চালানোর জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার পরিবেশ পরীক্ষা করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;uname -a
lsb_release -a&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডাউনলোড_এবং_কিটির_ইনস্টলেশন&amp;quot;&amp;gt;ডাউনলোড এবং কিটির ইনস্টলেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty একটি অফিসিয়াল স্ক্রিপ্টের মাধ্যমে ইন্সটলের পরামর্শ দেয় যা ফাইলগুলো রাখে`~/.local/kitty.app`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;Important&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি প্যাকেজ ম্যানেজারের থেকে স্বাধীন (না`apt`)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইনস্টলেশন_স্ক্রিপ্ট_ডাউনলোড_করুন&amp;quot;&amp;gt;ইনস্টলেশন স্ক্রিপ্ট ডাউনলোড করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনুসারিত কমান্ডটি চালু করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কমান্ড সম্পাদন করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বাইনারি ডাউনলোড,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নিষ্কাশন মধ্যে`~/.local/kitty.app`,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সিম্বলিক লিঙ্কের তৈরি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/download-install.svg&amp;quot; alt=&amp;quot;download install&amp;quot; width=&amp;quot;264&amp;quot; height=&amp;quot;336&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিম্বলিক_লিংকদের_সৃষ্টি&amp;quot;&amp;gt;সিম্বলিক লিংকদের সৃষ্টি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আনুমান করতে সক্ষম হওয়ার জন্য`kitty`টার্মিনাল থেকে, একটি সিম্বলিক লিঙ্ক তৈরি করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;ln -s ~/.local/kitty.app/bin/kitty ~/.local/bin/kitty&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যোগ করুন`~/.local/bin`আপনার PATH-এ যোগ করুন যদি এখনো না করা হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;echo &amp;#39;export PATH=&amp;quot;$HOME/.local/bin:$PATH&amp;quot;&amp;#39; &amp;amp;gt;&amp;amp;gt; ~/.zshrc
source ~/.zshrc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি ইনস্টলেশন পরীক্ষা করতে পারেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;kitty --version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_xubuntu_এ_kitty_র_একীকরণ&amp;quot;&amp;gt;Xubuntu-এ Kitty-র একীকরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কটি অ্যাপ্লিকেশন মেনুতে প্রদর্শিত হওয়ার জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডেস্কটপ_ফাইল_কপি_করুন&amp;quot;&amp;gt;ডেস্কটপ ফাইল কপি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি কপি করুন`.desktop`제공 :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;cp ~/.local/kitty.app/share/applications/kitty.desktop ~/.local/share/applications/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডেস্কটপ_ফাইলটি_পরিবর্তন_করুন&amp;quot;&amp;gt;ডেস্কটপ ফাইলটি পরিবর্তন করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি সম্পাদনা করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;nano ~/.local/share/applications/kitty.desktop&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত লাইনগুলো পরীক্ষা করুন অথবা পরিবর্তন করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;[Desktop Entry]
Version=1.0
Type=Application
Name=Kitty Terminal
Comment=Fast GPU-based terminal emulator
Exec=/home/$USER/.local/kitty.app/bin/kitty
Icon=kitty
Categories=System;TerminalEmulator;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বদল করুন`YOURUSER`আপনার ব্যবহারকারীর নাম&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/desktop-integration.png&amp;quot; alt=&amp;quot;desktop integration&amp;quot; width=&amp;quot;373&amp;quot; height=&amp;quot;335&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কিটিকে_ডিফল্ট_টার্মিনাল_হিসেবে_সংযুক্ত_করুন_ঐচ্ছিক&amp;quot;&amp;gt;কিটিকে ডিফল্ট টার্মিনাল হিসেবে সংযুক্ত করুন (ঐচ্ছিক)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিতিকে ডিফল্ট টার্মিনাল হিসেবে চালু করা হলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo update-alternatives --install /usr/bin/x-terminal-emulator x-terminal-emulator ~/.local/kitty.app/bin/kitty 50
sudo update-alternatives --config x-terminal-emulator&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নির্বাচন করুন`kitty`প্রস্তাবিত মেনুতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_zsh_ইনস্টলেশন&amp;quot;&amp;gt;Zsh ইনস্টলেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি Zsh এখনও ইনস্টল করা হয়নি, চালান :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install zsh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেটআপ যাচাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;zsh --version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_zshকে_ডিফল্ট_শেল_sebagai_সেট_করুন&amp;quot;&amp;gt;Zshকে ডিফল্ট শেল sebagai সেট করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আপনার শেলটি বিশ্বব্যাপীভাবে পরিবর্তন করতে পারেন শুধুমাত্র কিটি কনসোলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সার্বজনীন_পদ্ধতি_সব_টার্মিনালের_জন্য&amp;quot;&amp;gt;সার্বজনীন পদ্ধতি (সব টার্মিনালের জন্য)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মূল পথ সনাক্ত করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;which zsh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাধারণত`/usr/bin/zsh`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্ট শেল পরিবর্তন করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;chsh -s /usr/bin/zsh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাহিরিয়ে যান এবং আবার লগইন করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/zsh-default-shell.svg&amp;quot; alt=&amp;quot;zsh default shell&amp;quot; width=&amp;quot;546&amp;quot; height=&amp;quot;341&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_kitty_নির্দিষ্ট_পদ্ধতি&amp;quot;&amp;gt;Kitty-নির্দিষ্ট পদ্ধতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি কিটিতে শেলটি শুধু পরিবর্তন করা পছন্দ করেন, কনফিগারেশন ফাইলটি সম্পাদনা করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;nano ~/.config/kitty/kitty.conf&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই লাইনটি যোগ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;shell zsh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty-কে সংরক্ষণ করুন এবং পুনরায় শুরু করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_zshের_কনফিগারেশন_ঐচ্ছিক&amp;quot;&amp;gt;Zshের কনফিগারেশন (ঐচ্ছিক)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার Zsh কাস্টমাইজ করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_zshrc_ফাইল_তৈরি_করা&amp;quot;&amp;gt;একটি .zshrc ফাইল তৈরি করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;touch ~/.zshrc
nano ~/.zshrc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ন্যূনতম_কনফিগারেশনের_উদাহরণ&amp;quot;&amp;gt;ন্যূনতম কনফিগারেশনের উদাহরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;export ZSH_THEME=&amp;quot;robbyrussell&amp;quot;
export PATH=&amp;quot;$HOME/.local/bin:$PATH&amp;quot;
alias ll=&amp;quot;ls -la&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পূর্ণ_ওয়ার্কফ্লো_সারাংশ&amp;quot;&amp;gt;সম্পূর্ণ ওয়ার্কফ্লো সারাংশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নীচের আকৃতিটি সম্পূর্ণ প্রক্রিয়ার সারাংশ দায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/full-workflow.png&amp;quot; alt=&amp;quot;full workflow&amp;quot; width=&amp;quot;317&amp;quot; height=&amp;quot;643&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষ_পরীক্ষা&amp;quot;&amp;gt;শেষ পরীক্ষা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিটি চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;kitty&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি দেখতে পাবেন যে`zsh`সক্রিয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;echo $SHELL&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রত্যাশিত ফলাফল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;/usr/bin/zsh&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফন্টের আকার পরিবর্তন করতে&amp;lt;strong&amp;gt;Kitty&amp;lt;/strong&amp;gt;, প্রত্যাপকটি সামঞ্জস্য করতে হবে`font_size`কনফিগারেশন ফাইলে। এখানে বিস্তারিত প্রক্রিয়া:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কনফিগারেশন_ফাইল_খোলুন&amp;quot;&amp;gt;📂 কনফিগারেশন ফাইল খোলুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান কনফিগারেশন ফাইলটি সাধারণত নিম্নলিখিত স্থানে অবস্থিত ہے :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;~/.config/kitty/kitty.conf&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি এই ফাইলটি এখনও না থাকলে, আপনি এটি তৈরি করতে পারেন। উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;nano ~/.config/kitty/kitty.conf&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_️_যোগ_বা_পরিবর্তন_করুন_font_size&amp;quot;&amp;gt;🖋️ যোগ বা পরিবর্তন করুন `font_size&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত নির্দেশিকাটি যোগ করুন, বা যদি এটি ইতিমধ্যে থাকে, তবে এটি পরিবর্তন করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;font_size 14.0&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে`14.0`ইচ্ছিত আকারের সাথে মেলে। আপনি দশমিক সংখ্যার যেকোনো মান ব্যবহার করতে পারেন, উদাহরণস্বরূপ`12.0`, &amp;lt;code&amp;gt;15.5&amp;lt;/code&amp;gt;, এবং অন্যান্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সংরক্ষণ_করুন_এবং_কিটি_পুনরায়_চালু_করুন&amp;quot;&amp;gt;💾 সংরক্ষণ করুন এবং কিটি পুনরায় চালু করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সেভ করুন (&amp;lt;code&amp;gt;Ctrl + O&amp;lt;/code&amp;gt;, পরে`Entrée`) এবং প্রস্থান করุ่น (&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Oops extra ন? I wrote &amp;quot;করุ่น&amp;quot;. Should be &amp;quot;করুন&amp;quot;. Let&amp;amp;#8217;s correct.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;) এবং প্রস্থান করুন (&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Now output.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt; ) এবং প্রস্থান করুন (&amp;lt;code&amp;gt;Ctrl + X&amp;lt;/code&amp;gt;) যদি আপনি ব্যবহার করেন`nano`।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কিটির সব উইন্ডো বন্ধ করে দিন, তারপরে টার্মিনাল রিস্টার্ট করুন যাতে পরিবর্তনটি প্রযোজ্য হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গতিশীল_সমন্বয়_অস্থায়ী_জুম&amp;quot;&amp;gt;✅ গতিশীল সমন্বয় (অস্থায়ী জুম)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি কনফিগারেশন পরিবর্তন না করে অস্থায়ীভাবে জুম ইন/আউট করতে চান, ডিফল্ট কীবোর্ড শর্টকাটগুলি ব্যবহার করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফন্টের আকার বাড়ান&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;Ctrl + Shift + =&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফন্টের আকার কমান&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;Ctrl + Shift + -&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আকার রিসেট করুন&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;Ctrl + Shift + Backspace&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সেটিংস টার্মিনাল বন্ধ হওয়ার পরে বজায় রাখা হয় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_oh_my_zsh_এর_ইনস্টলেশন_ও_কনফিগারেশন&amp;quot;&amp;gt;Oh My Zsh এর ইনস্টলেশন ও কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Zsh ইনস্টল ও ডিফল্ট শেল হিসেবে কনফিগার করলে, আপনি &amp;lt;strong&amp;gt;Oh My Zsh&amp;lt;/strong&amp;gt; ব্যবহার করে আপনার পরিবেশকে সমৃদ্ধ করতে পারেন। এটি Zsh কনফিগারেশন ব্যবস্থাপনার একটি ফ্রেমওয়ার্ক যা অফার করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রম্পটের জন্য একটি থিম সংগ্রহ,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বহু সংখ্যক প্লাগইন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশনের স্পষ্ট সংগঠন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_oh_my_zsh_এর_ইন্সটলেশন&amp;quot;&amp;gt;Oh My Zsh-এর ইন্সটলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিশ্চিত করুন যে Zsh সক্রিয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;zsh --version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যে প্রয়োজন হলে, চালু করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;zsh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপর অফিশিয়াল ইনস্টলেশন স্ক্রিপ্টটি ডাউনলোড করুন এবং চালান:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sh -c &amp;quot;$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্ক্রিপ্ট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডিরেক্টরি তৈরি করুন`~/.oh-my-zsh`,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সম্ভবত আপনার ফাইল সংরক্ষণ করুন`~/.zshrc`,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্বয়ংক্রিয়ভাবে নতুন প্রম্পটটি সক্রিয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_থিম_পরিবর্তন_করুন&amp;quot;&amp;gt;থিম পরিবর্তন করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার কনফিগারেশন ফাইলটি খুলুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;nano ~/.zshrc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বেরিয়েবলটি পরিবর্তন করুন`ZSH_THEME`অন্য একটি থিম বেছে নেওয়ার জন্য (উদাহরণস্বরূপ`agnoster`) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ZSH_THEME=&amp;quot;agnoster&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সংরক্ষণ করুন এবং তারপর কনফিগারেশনটি রিলোড করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;source ~/.zshrc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_যাচাই&amp;quot;&amp;gt;যাচাই&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty চালু করুন এবং যাচাই করুন যে প্রম্পটটি সঠিকভাবে পরিবর্তিত হয়েছে। আপনি Oh My Zsh সক্রিয় নিশ্চিত করতে পারেন চালিয়ে দিয়ে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;echo $ZSH&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফলটি এইভাবে হওয়া উচিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;/home/তোমার_ব্যবহারকারী/.oh-my-zsh&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইউজ_কেসের_ডায়াগ্রাম&amp;quot;&amp;gt;ইউজ কেসের ডায়াগ্রাম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/ohmyzsh-installation.png&amp;quot; alt=&amp;quot;ohmyzsh installation&amp;quot; width=&amp;quot;550&amp;quot; height=&amp;quot;480&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কিটি_এ_ট্রান্স್ಲুসিডিটি_সক্রিয়_করুন&amp;quot;&amp;gt;কিটি-এ ট্রান্স್ಲুসিডিটি সক্রিয় করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty এর সবচেয়ে বেশি পছন্দের বৈশিষ্ট্য এর একটি হল টার্মিনালের পটভূমিতে &amp;lt;strong&amp;gt;প্রস্পষ্টতা&amp;lt;/strong&amp;gt; যোগ করার ক্ষমতা। এটি অ নিচের পরিবেশ (উইন্ডো, ডেস্কটপ, ইত্যাদি)কে হালকা দেখতে দেয়, যা মাল্টি টাস্কিংয়ে বিশেষভাবে উপযোগী।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পারদর্শিতার_পূর্বশর্ত&amp;quot;&amp;gt;পারদর্শিতার পূর্বশর্ত&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kitty-এ পারদর্শকতা &amp;amp;#8230;&amp;amp;#8203;-এর উপর নির্ভর করে&amp;lt;strong&amp;gt;ঝরনো সংগীতস্রষ্টা&amp;lt;/strong&amp;gt;গ্রাফিক পরিবেশ द्वारा ব্যবহৃত. Xubuntu-এ (XFCE-এ ভিত্তিক), নিশ্চিত করুন যে&amp;lt;strong&amp;gt;কম্পোজিশন সক্রিয়&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;যাচাই করতে হবে :&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডেস্কটপে ডান-ক্লিক &amp;amp;gt; সেটিংস &amp;amp;gt;&amp;lt;strong&amp;gt;উইন্ডো ম্যানেজারের সেটিংস&amp;lt;/strong&amp;gt;,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ট্যাব&amp;lt;strong&amp;gt;সঙ্গীতরচয়িতা&amp;lt;/strong&amp;gt;: চেকবক্স &amp;lt;strong&amp;gt;কম্পোজিশন সক্ষম করুন&amp;lt;/strong&amp;gt; চেক করতে হবে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/transparency-usecase.png&amp;quot; alt=&amp;quot;transparency usecase&amp;quot; width=&amp;quot;593&amp;quot; height=&amp;quot;222&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_kitty_conf_এ_পরদর্শিতার_কনফিগারেশন&amp;quot;&amp;gt;kitty.conf-এ পরদর্শিতার কনফিগারেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার কনফিগারেশন ফাইলটি খুলুন`~/.config/kitty/kitty.conf` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;nano ~/.config/kitty/kitty.conf&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত লাইনগুলো যোগ করুন বা পরিবর্তন করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-conf hljs&amp;quot; data-lang=&amp;quot;conf&amp;quot;&amp;gt;background_opacity 0.85&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্যারামিটারটি মধ্যে মান গ্রহণ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;1.0&amp;lt;/code&amp;gt;→ অটকানো (কোনো পারদর্শিতা নেই),&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;→ সম্পূর্ণরূপে পারদর্শী (অব্যবহার্য),&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;মাঝারি মানগুলো যেমন`0.90`, &amp;lt;code&amp;gt;0.75&amp;lt;/code&amp;gt;, এবং অন্যান্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ভালো দৃষ্টিগোচর সমঝোতা सामान्यত মধ্যে`0.85` et &amp;lt;code&amp;gt;0.95&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পুনরায়_চালু_kitty&amp;quot;&amp;gt;পুনরায় চালু Kitty&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিটির সব উদাহরণ বন্ধ করুন, তারপর পরিবর্তনগুলি কার্যকর হওয়ার জন্য একটি নতুন উইন্ডো পুনরায় চালু করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;kitty&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্ভব_পূরক&amp;quot;&amp;gt;সম্ভব পূরক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি একটি কাস্টম টার্মিনাল ব্যাগ্রাউন্ড ব্যবহার করেন, আপনি RGBA-এ পারদর্শকীয় ব্যাগ্রাউন্ড রঙও সেট করতে পারেন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-conf hljs&amp;quot; data-lang=&amp;quot;conf&amp;quot;&amp;gt;background #1e1e2eff&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বশেষ উপাদান (&amp;lt;code&amp;gt;ff&amp;lt;/code&amp;gt;) অপারমিতি (এর`00` à &amp;lt;code&amp;gt;ff&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্রম_diaগ্রাম_kitty_র_আরম্ভ_পারদর্শিতায়&amp;quot;&amp;gt;ক্রম diaগ্রাম - Kitty-র আরম্ভ পারদর্শিতায়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/transparency-sequence.png&amp;quot; alt=&amp;quot;transparency sequence&amp;quot; width=&amp;quot;777&amp;quot; height=&amp;quot;422&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরিচিত_সীমাবদ্ধতাগুলো&amp;quot;&amp;gt;পরিচিত সীমাবদ্ধতাগুলো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;Warning&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অপারদর্শন কাজ করবে না যদি : - XFCE কম্পোজার নিষ্ক্রিয়, - একটি অসঙ্গত উইন্ডো ম্যানেজার ব্যবহার করা হচ্ছে, - আপনি Kitty-কে &amp;lt;strong&amp;gt;tmux&amp;lt;/strong&amp;gt; মোডে ব্যাকগ্রাউন্ডে ব্যবহার করছেন, প্রারবণার সমর্থন ছাড়া।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শব্দযুক্ত_বিপ_নিষ্ক্রিয়_করুন&amp;quot;&amp;gt;শব্দযুক্ত বিপ নিষ্ক্রিয় করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্টভাবে, Kitty &amp;lt;strong&amp;gt;bip&amp;lt;/strong&amp;gt; শব্দ উৎস করে যখন একটি ভুল কমান্ড দাখিল করা হয় বা একটি টার্মিনাল ইভেন্ট এটি ট্রিগার করে। এই শব্দ দ্রুত অস্বস্তিকর হতে পারে, বিশেষ করে একটি তীব্র উন্নয়ন পরিবেশে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আচরণটি নিষ্ক্রিয় করতে, ফাইলে নিম্নলিখিত নির্দেশনা যোগ করুন`~/.config/kitty/kitty.conf`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-conf hljs&amp;quot; data-lang=&amp;quot;conf&amp;quot;&amp;gt;audible_bell no&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি &amp;lt;strong&amp;gt;retour visuel&amp;lt;/strong&amp;gt; সক্রিয় করতে পারেন, বিপ শব্দের পরিবর্তে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-conf hljs&amp;quot; data-lang=&amp;quot;conf&amp;quot;&amp;gt;visual_bell yes&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_kitty_আপডেট&amp;quot;&amp;gt;Kitty আপডেট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিটি একটি স্ক্রিপ্টের মাধ্যমে ইনস্টল করা হয়েছে, প্যাকেজ ম্যানেজার না থাকায়, আপডেট করা হয় অফিসিয়াল ইনস্টলেশন স্ক্রিপ্টটি পুনঃচালিত করে। এটি আপনাকে সর্বশেষ সংস্করণটি ডাউনলোড করতে এবং আপনার বিদ্যমান ইনস্টলেশনটি আপডেট করতে দেয়।&amp;lt;code&amp;gt;~/.local/kitty.app&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রত্যয়`.app`পথে`~/.local/kitty.app`est কিটির_official স্ক্রিপ্টের মাধ্যমে ইন্সটলেশনের প্রথা, এবং কোনও পাশেও macOS-সহ এককর সামঞ্জsony সূচিত করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;Important&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপডেট কমান্ড চালানোর আগে, নিশ্চিত করুন যে আপনি আপনার হোম ডিরেক্টরите আছেন (&amp;lt;code&amp;gt;~&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার হোম ডিরেক্টরি থেকে নিম্নলিখিত কমান্ডটি চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;curl -L https://sw.kovidgoyal.net/kitty/installer.sh | sh /dev/stdin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্ক্রিপ্টটি নিম্নলিখিত কাজগুলোকে সম্পাদন করবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নতুন সংস্করণের বাইনারি ফাইলগুলো ডাউনলোড করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বের করুন ফাইলগুলো মধ্যে`~/.local/kitty.app`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রয়োজন হলে সিম্বলিক লিঙ্কগুলো আপডেট করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপডেট করার পর, Kitty-এর সমস্ত ইনস্ট্যান্স বন্ধ করে এবং পুনরায় চালু করা পরামর্শ দেওয়া হয়, যাতে নতুন সংস্করণটি সঠিকভাবে গ্রহণ করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উদ্ধৃতি&amp;quot;&amp;gt;উদ্ধৃতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি কাস্টমাইজেশনকে আরও গভীরে খুঁজে বের করতে চান, তাহলে অফিসিয়েল ডকুমেন্টেশনটি পর্যালোচনা করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Kitty : &amp;lt;a href=&amp;quot;https://sw.kovidgoyal.net/kitty/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://sw.kovidgoyal.net/kitty/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.background_opacity&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.background_opacity&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.audible_bell&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://sw.kovidgoyal.net/kitty/conf/#opt-kitty.audible_bell&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Zsh : &amp;lt;a href=&amp;quot;https://zsh.sourceforge.io/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://zsh.sourceforge.io/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Github: &amp;lt;a href=&amp;quot;https://github.com/kovidgoyal/kitty&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/kovidgoyal/kitty&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Zsh: &amp;lt;a href=&amp;quot;https://zsh.sourceforge.io/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://zsh.sourceforge.io/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://ohmyz.sh/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://ohmyz.sh/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/ohmyzsh/ohmyzsh/wiki&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/ohmyzsh/ohmyzsh/wiki&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.xfce.org/xfce/xfwm4/compositor&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://docs.xfce.org/xfce/xfwm4/compositor&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি এখন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি আধুনিক এবং কর্মক্ষম টার্মিনাল (Kitty) এর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি শক্তিশালী এবং কাস্টমাইজযোগ্য শেল (Zsh)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি পরিষ্কার এবং সিস্টেম প্যাকেজ থেকে স্বতন্ত্র কনফিগারেশনের&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি সৌন্দর্যোদয়ী ও কার্যকর Oh My Zsh দিয়ে সজ্জিত টার্মিনালের&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>DGX Spark vs Cloud vs Abonnements LLM — অর্থনৈতিক বেঞ্চমার্ক যা স্থানীয় হার্ডওয়্যারের স্বপ্নকে হত্যা করে</title>
            <link >https://cheroliv.com//blog/2026/0119_benchmark_dgx_spark_vs_cloud_abonnement_llm_post.html</link>
            <pubDate>Wed, 6 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0119_benchmark_dgx_spark_vs_cloud_abonnement_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রেক্ষাপট_একটি_বাজার_যা_ঝুকে_গেছে&amp;quot;&amp;gt;প্রেক্ষাপট : একটি বাজার যা ঝুকে গেছে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অপশন_প্যানেল&amp;quot;&amp;gt;অপশন প্যানেল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আমি_যা_বাদ_দিয়eschi_এবং_কেন&amp;quot;&amp;gt;আমি যা বাদ দিয়eschi (এবং কেন)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সরল_অনুমান_স্থানীয়_হার্ডওয়্যারের_মৃত্যু&amp;quot;&amp;gt;সরল অনুমান : স্থানীয় হার্ডওয়্যারের মৃত্যু&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গণনা&amp;quot;&amp;gt;গণনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশালভাবে_ব্যবহার_করলেও&amp;quot;&amp;gt;বিশালভাবে ব্যবহার করলেও&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাইন_টিউনিং_ক্লাউড_অপরাজেয়&amp;quot;&amp;gt;ফাইন-টিউনিং : ক্লাউড অপরাজেয়&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ফাইন_টিউনের_বাস্তব_খরচ&amp;quot;&amp;gt;একটি ফাইন-টিউনের বাস্তব খরচ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশেষজ্ঞ_অভিনেতারা&amp;quot;&amp;gt;বিশেষজ্ঞ অভিনেতারা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একমাত্র_সত্যিক_কারণ_ডেটা_সোভারান্টি&amp;quot;&amp;gt;একমাত্র সত্যিক কারণ : ডেটা সোভারান্টি&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গোপনীয়তারের_সত্য_গণনা&amp;quot;&amp;gt;গোপনীয়তারের সত্য গণনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সংক্ষেপ_সিদ্ধান্ত_মেট্রিক্স&amp;quot;&amp;gt;সংক্ষেপ: সিদ্ধান্ত মেট্রিক্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশেষ_ক্ষেত্র_পেশাদার_সাবস্ক্রিপশন_চীন_মডেলদের_সম্মুখে&amp;quot;&amp;gt;বিশেষ ক্ষেত্র: পেশাদার সাবস্ক্রিপশন চীন মডেলদের সম্মুখে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_চাইনিজ_মডেলগুলো_কেন_সবকিছু_পরিবর্তন_করে&amp;quot;&amp;gt;চাইনিজ মডেলগুলো কেন সবকিছু পরিবর্তন করে?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_হার্ডওয়্যার_er_জন্য_এটি_কি_বোঝায়&amp;quot;&amp;gt;হার্ডওয়্যার-er জন্য এটি কি বোঝায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এবং_হোয়াইওয়াই&amp;quot;&amp;gt;এবং হোয়াইওয়াই?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাপ্তি_সন্নিকটতর_বিলাসিতা&amp;quot;&amp;gt;সমাপ্তি : সন্নিকটতর বিলাসিতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pাঠনের সময় : 14 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;NVIDIA DGX Spark-কে একটি « ডেস্কটপ IA সুপারকম্পিউটার » হিসেবে $4 699-এ বিক্রি করে। Ollama তার ক্লাউড মডেলগুলো $20/মাসে অফার করে। একটি H100 Vast.ai-এ $1.38/ঘণ্টায় ভাড়ায়ে দেওয়া হয়। এবং চীনের ওপেন-সোর্স মডেলস — DeepSeek, Qwen, GLM — সর্বত্র উপলব্ধ, বিনামূল্যে, কোনো কার্ড কেনা ছাড়াই। তাহলে, এই Spark কী কাজে লাগে? আমি গণনা করেছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রেক্ষাপট_একটি_বাজার_যা_ঝুকে_গেছে&amp;quot;&amp;gt;প্রেক্ষাপট : একটি বাজার যা ঝুকে গেছে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মে ২০২৬ে, কৃত্রিম বুদ্ধিমত্তা (AI) এর দৃশ্য র্যাডিকালি পরিবর্তিত হয়েছে CES ২০২৫-এ DGX Spark ঘোষণা-এর তুলনায়। তিনটি বল একত্রিত হয়েছে স্থানীয় হার্ডওয়্যারকে যথেষ্ট কঠিনचित্তিমূল্যে করা হয়ে উঠেছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;GPU ক্লাউডের দর পতন&amp;lt;/strong&amp;gt;: একটি H100 $1.38 থেকে $3/h ভাড়ায়, $5-8/h ১৮ মাস আগের তুলনায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;চীনীয় মুক্ত-কোড মডেলের Bisphoron&amp;lt;/strong&amp;gt;: DeepSeek-V4, Qwen-3, GLM-5 পশ্চিমীয় মডেলসের সাথে প্রতিযোগী, নিঃশуль্কভাবে উপলব্ধ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রबंधিত inference প্ল্যাটফর্মের উত্থান&amp;lt;/strong&amp;gt;: Ollama, Groq, Together AI আকরমণাত্মক মূল্যে API প্রদান করে এবং উদার বিনামূল্য টিয়ার প্রদান করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DGX Spark, $2 999-এ ঘোষিত, তারপর $4 699-এ বৃদ্ধি পেয়ে, এমন একটি বিশ্বে আসে, যেখানে এর আর কোনো দরকার নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অপশন_প্যানেল&amp;quot;&amp;gt;অপশন প্যানেল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে মে ২০২৬-এ উপলব্ধ LLMs চালানোর সমাধানগুলো, সর্বোচ্চ হালকা থেকে_server বारी :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.5%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিকল্প&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;VRAM / ক্ষমতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উপলব্ধ মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রধান বাধা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Ollama মুক্ত&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$0/মাস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হালকা মেঘ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব সার্বজনীন মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সীমিত ব্যবহার, 1 সমতৎসই মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Claude Pro&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$20/মাস (~$240/বছর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;N/A (API বন্ধ)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Claude 4.x একমাত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একক মডেল, ওপেন-সোর্স নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Ollama Pro&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$20/মাস (প্রায় $200/বছর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্লাউড মাধ্যম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব পাবলিক মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অধিকতম ৩টি সমবেত মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Ollama Max&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$100/মাস (~$1 200/বছর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভারী মেঘ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সকল সার্বজনীন মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;10 একসাথে মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ক্লাউড GPU (H100)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$1.38-3/h&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;80 Go HBM&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব মডেল, ফাইন-টিউনিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ঘন্টা ভিত্তিক ভাড়া, সেটআপ প্রয়োজন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;DGX স্পার্ক&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$4 699 (ক্রয়)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;128 Go unifié&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Tous modèles &amp;amp;lt;128 Go&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ধীর (~10x কম H100-এর চেয়ে), স্থির&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Mac Studio M3 Ultra&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;~$5 000+&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;192 Go unifié&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Tous modèles &amp;amp;lt;192 Go&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কিউডিএ নয়, এমএলএক্স ইকোসিস্টেম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদ্ধৃত GPU ক্লাউড দাম Vast.ai ও RunPod-এর, ২০২৬ মে — স্পট/অন-ডিমান্ড, সংরক্ষিত না। হাইপারস্কেলারদের (AWS, GCP, Azure) দাম ২-৩ গুন বেশি থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আমি_যা_বাদ_দিয়eschi_এবং_কেন&amp;quot;&amp;gt;আমি যা বাদ দিয়eschi (এবং কেন)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি ইচ্ছামত এই বেঞ্চমার্ক থেকে নিম্নলিখিত অপশনগুলিকে বাদ দিয়েছি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;API OpenAI / Anthropic / Google&amp;lt;/strong&amp;gt;: এই বিষয়টি ওপেন-সোর্স মডেলগুলো চালাতে যাওয়া যাতে এগুলোকে বেছে নেওয়া, ফাইন-টিউন করা এবং একটি একক বিক্রেতার উপর নির্ভর না করা যায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Huawei Ascend / Atlas&amp;lt;/strong&amp;gt; : Huawei ne commercialise pas d&amp;amp;#8217;équivalent desktop au DGX Spark. La gamme Ascend (910C, 910D) et Atlas (300I Duo, 350) est orientée datacenter — cartes PCIe, serveurs rack — pas des boîtiers compacts prêts à brancher. La puce Ascend 910C embarque 128 Go HBM mais c&amp;amp;#8217;est une puce serveur, pas un système autonome. L&amp;amp;#8217;Atlas 300I Duo offre 96 Go pour ~$1 400 mais nécessite une machine hôte&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সরল_অনুমান_স্থানীয়_হার্ডওয়্যারের_মৃত্যু&amp;quot;&amp;gt;সরল অনুমান : স্থানীয় হার্ডওয়্যারের মৃত্যু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাধারণত ব্যবহৃত ব্যবহারের ক্ষেত্রে শুরু করি : একটি LLM সহ চ্যাট করা, কোড রিভিউ করা, টেক্সট তৈরি করা। ফাইন-টিউনিং নেই, ব্যাচ প্রসেসিং নেই, শুধু ইন্টারেক্টিভ অনুমান।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গণনা&amp;quot;&amp;gt;গণনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি DGX Spark $৪ ৬৯৯-এ। প্রত্যেক সাবস্ক্রিপশনের বার্ষিক هزینه দিয়ে ভাগ করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-breakeven&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title সীমা লাভ — DGX Spark ($4 699) vs সাবস্ক্রিপশন
rectangle &amp;quot;DGX Spark
$4 699&amp;quot; as spark #FFCDD2
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title সীমা লাভ — DGX Spark ($4 699) vs সাবস্ক্রিপশন
rectangle &amp;quot;DGX Spark
$4 699&amp;quot; as spark #FFCDD2

rectangle &amp;quot;Ollama Pro
$200/বcsol&amp;quot; as opro #C8E6C9
rectangle &amp;quot;Claude Pro
$240/বছর&amp;quot; as cpro #C8E6C9
rectangle &amp;quot;Ollama Max
$১ ২০০/বছর&amp;quot; as omax #FFF9C4
rectangle &amp;quot;ক্লাউড H100
$3/ঘন্টা × 10 ঘন্টা/সপ্তাহ&amp;quot; as cloud #BBDEFB

spark --&amp;amp;gt; opro : 23.5 années ⏳
spark --&amp;amp;gt; cpro : 19.6 années ⏳
spark --&amp;amp;gt; omax : 3.9 années
spark --&amp;amp;gt; cloud : 3.0 années (à 10h/semaine, intermittent)

note bottom of spark
  Sans compter l&amp;#39;électricité (~$150/an)
  Sans compter l&amp;#39;obsolescence hardware
  Sans compter qu&amp;#39;il est 10x plus lent
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিচার খারাপ। অনুমানের জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Ollama Pro&amp;lt;/strong&amp;gt;আপনাকে লাগতó&amp;lt;strong&amp;gt;২৩ বছর&amp;lt;/strong&amp;gt;একটি DGX Sparkকে পরিশোধ করার জন্য. স্পার্ক ২০ বছর অপ্রচলিত থাকবে.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ওল্লামা ম্যাক্স&amp;lt;/strong&amp;gt; : &amp;lt;strong&amp;gt;৪ বছর&amp;lt;/strong&amp;gt;— Spark 24/7 ব্যবহার করার শর্তে, যে কারও তা করেনি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Claude Pro&amp;lt;/strong&amp;gt;: একই সমস্যা,&amp;lt;strong&amp;gt;২০ বছর&amp;lt;/strong&amp;gt;একটি বন্ধ single-model-er জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_  ডেস্কটপ AI সুপার কম্পিউটারের » প্রত্যাশা একটি মৌলিক হিসাববিজ্ঞান বাস্তবতা সঙ্গে সংঘর্ষ করছে : $4 699 / $20 প্রতি মಾಸ = কোনো ব্যক্তিগত ব্যবহারে কখনো লাভজনক নয়। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশালভাবে_ব্যবহার_করলেও&amp;quot;&amp;gt;বিশালভাবে ব্যবহার করলেও&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক্লাউডের জন্য সবচেয়ে খারাপ পরিস্থিতি ধরে নেওয়া হয় যে আপনি একটি H100কে ৮ ঘণ্টা/দিন, সপ্তাহে ৫ দিন, বার্ষিক ৫২ সপ্তাহ চালু রাখেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;8 × 5 × 52 = 2 080 heures/an&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;2 080 × $2/h (গড় স্পট মূল্য H100) =&amp;lt;strong&amp;gt;$4 160/বছর&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্পার্ক ($4 699) উপকারী হয়&amp;lt;strong&amp;gt;১৩ মাস&amp;lt;/strong&amp;gt;। কিন্তু :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;H100 একটি&amp;lt;strong&amp;gt;প্রায় ১০x দ্রুত&amp;lt;/strong&amp;gt;স্পার্কের GB10-এর চেয়ে. আপনি ১ ঘন্টায় করেন যা স্পার্ক ১০ ঘন্টায় করে। একই কর্মতালের জন্য, H100 আপনাকে $416/বছর খরচ করে, $4 160 নয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Le H100 a 80 Go HBM à 3.35 To/s de bande passante. Le Spark a 128 Go LPDDR5X à 273 Go/s. Pour les gros modèles, la bande passante compte plus que la capacité.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;1 ঘন্টা H100-এর সাথে 1 ঘন্টা Spark-এর তুলনার কোন অর্থ নেই। H100 কাজটি 10x দ্রুত করে। একটি নির্দিষ্ট workload-এর জন্য সঠিক ক্লাউড খরচ অত এখন ~10x কম হয় ঘন্টা ভিত্তি সহজ গণনার তুলনায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাইন_টিউনিং_ক্লাউড_অপরাজেয়&amp;quot;&amp;gt;ফাইন-টিউনিং : ক্লাউড অপরাজেয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্পার্কের সমর্থকদের ক্লাসিক যুক্তি: « হ্যাঁ কিন্তু ফাইন-টিউনিংয়ের জন্য, এটি ভিন্ন ».&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;না, এটি নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_ফাইন_টিউনের_বাস্তব_খরচ&amp;quot;&amp;gt;একটি ফাইন-টিউনের বাস্তব খরচ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Unsloth-এ 7B মডেলের জন্য একটি LoRA/QLoRA ফাইন-টিউн :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;~2-3ঘন্টা একটি H100-এ =&amp;lt;strong&amp;gt;$5 থেকে $9&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্পার্কে একই জিনিস =&amp;lt;strong&amp;gt;20-30 ঘণ্টা&amp;lt;/strong&amp;gt;(10x ধীর), মেশিন ব্লক করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্পার্কের $4 699 দিয়ে, আপনি অর্থায়ন করতে পারবেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;~500 থেকে ~900 fine-tunes&amp;lt;/strong&amp;gt;H100 ক্লাউডে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Ou &amp;lt;strong&amp;gt;প্রায় ২৩ বছর&amp;lt;/strong&amp;gt;d&amp;amp;#8217;Ollama Pro&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Ou &amp;lt;strong&amp;gt;প্রায় ৪ বছর&amp;lt;/strong&amp;gt;ওলামা ম্যাক্স থেকে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং বড় মডেলের জন্য (70B+) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Le Spark avec ses 128 Go peut charger un 70B en Q4 — mais le fine-tune sera extrêmement lent&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Un H100 avec 80 Go peut fine-tuner un 70B en QLoRA 4-bit en quelques heures&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফুল ফাইন-টিউনের জন্য মাল্টি-জিপিইউ প্রয়োজন — স্পার্ক প্রতিযোগিতায় অংশ নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশেষজ্ঞ_অভিনেতারা&amp;quot;&amp;gt;বিশেষজ্ঞ অভিনেতারা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;২০২৬ সালে, Unsloth, Modal, Replicate এবং Together AI সার্ভারলেস ফাইন‑টিউনিং প্রদান করো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জিপিইউ ব্যবস্থা নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোনো পরিবেশ কনফিগারেশন নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;মিনিট প্রতি পরিশোধ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অন্তর্ভুক্ত অপ্টিমাইজেশন (ফ্ল্যাশ আটেনশন, স্বয়ংক্রীয় কোয়ান্টাইজেশন)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-fine-tuning-cost&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-fa651b2d570becdcbdf668943b2c8cc9.svg&amp;quot; alt=&amp;quot;Comparaison des coûts de fine-tuning&amp;quot; width=&amp;quot;626&amp;quot; height=&amp;quot;244&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একমাত্র_সত্যিক_কারণ_ডেটা_সোভারান্টি&amp;quot;&amp;gt;একমাত্র সত্যিক কারণ : ডেটা সোভারান্টি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনুমান, ফাইন-টিউনিং এবং গুণমান/কীমাতের অনুপাত অপসারিত করার পর — Spark-এর জন্য কী বাকি রেখে গেছে?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পরিপূর্ণ গোপনীয়তা।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গোপনীয়তা নয় « আমি চাই না যে আমার প্রম্পটগুলো ওপেনএআই-এর কোনো কর্মচারী পড়বে »। এটাই, ২০২৬ সালের একটি মিথ্যা সমস্যা: Ollama, Groq, এবং尽责的_providerদের জিরো-লগ এবং जिरो‑रिटेनशन নীতি আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সত্য গোপনীয়তা, এটি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিধিমূলক এয়ার-গ্যাপ&amp;lt;/strong&amp;gt;: রক্ষা, দূতনীতিমূলক, স্বাস্থ্য — ডেটা &amp;lt;strong&amp;gt;শারীরিকভাবে&amp;lt;/strong&amp;gt; ভবন থেকে বের হতে পারে না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গুরুত্বপূর্ণ গোপনীয় ডেটা&amp;lt;/strong&amp;gt;: সোর্স কোড অপ্রকাশিত পণ্যের, শিল্পীয় গোপনীয়তা, ট্রেডিং অ্যালগরিদম&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নেটওয়ার্কের নমনীয়তা&amp;lt;/strong&amp;gt;এআই অবশ্যই চালিয়ে যেতে হবে, এমনকি ইন্টারনেট বন্ধ হলে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু আমরা সৎবরত থাকি: DGX Spark ক্রয়কারীদের কত শতাংশ_realistically_ এই ক্ষেত্রে আছে? ১% ? বাকি অংশটি, « nice to have » কে $4 699 খরচে পরিণত করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গোপনীয়তারের_সত্য_গণনা&amp;quot;&amp;gt;গোপনীয়তারের সত্য গণনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যক্তিগত ব্যবহার :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Ollama Pro&amp;lt;/strong&amp;gt;($20/মাস) + মডেলস ওপেন সোর্স চীনীয় = সমাধান প্রায়োগিক&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;যদি Ollama-এ কোন প্রম্পট লেক হয়, তাহলে এটি দৈনিক মিলিয়নের অনুরোধের সাগরে ডूबে যায়। এটি সমুদ্রের একটি জলবিন্দু।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বাস্তবিক ঝুঁকি হলো একটি প্রম্পটের লিকেজ নয়, বরং এটি আপনার ডেটার অমতো প্রশিক্ষণ। এবং সেটি, গंभीর প্রদানকারীরা চুক্তি অনুযায়ী এটাকে নিষেধ করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_  distiller son prompt dans le LLM »-এর ভয় একটি ব্যক্তিগত তথ্য প্রসারের ধ্রুবক মাত্রা, যা অত্যন্ত পাতলা হয়ে গেছে এবং সত্য আপত্তি বদলে চিন্তার বেশি। উद्यোগিক স্তরে, এটি ভিন্ন। কিন্তু ব্যক্তিগত স্তরে, এটি শুধু শব্দ। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সংক্ষেপ_সিদ্ধান্ত_মেট্রিক্স&amp;quot;&amp;gt;সংক্ষেপ: সিদ্ধান্ত মেট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;diag-decision-matrix&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-9a25403f976e9d92dd848db15106c406.svg&amp;quot; alt=&amp;quot;Matrice de décision pour choisir sa solution LLM&amp;quot; width=&amp;quot;2012&amp;quot; height=&amp;quot;433&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2222%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.2232%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মানদণ্ড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Ollama Free&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Ollama Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্লাউড GPU H100&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DGX Spark&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অনুমান&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅ সীমিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅ আরামদায়ক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ অতিরিক্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;⚠️ স্লো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ফাইন-টিউনিং&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ অপরাজেয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সম্ভব কিন্তু ধীর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বার্ষিক খরচ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$200&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পরিবর্তনশীল (~$416-2 080*)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;$4 699 আগে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;গোপনীয়তা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�⚠️ Cloud US&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�⚠️ ক্লাউড US&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�⚠️ ক্লাউড US (পরিবারিত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ মোট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;রক্ষণাবেক্ষণ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সেটআপ অনন্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিদ্যুৎ, আপডেট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অপ্রচলিততা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনও না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;৩-৫ বছর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;সফটওয়্যার ইকোসিস্টেম&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সকল খোলা মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব মডেল খোলা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সব খোলা মডেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CUDA (আরও ধীর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ত্যাজ্য&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রায়াশ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;সুপারিশকৃত&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Pros/খোঁজা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Air-gap শুধুমাত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;*কামের ভলিউম অনুযায়ী পরিবর্তনশীল ; H100 গতি ~10x &amp;amp;gt; Spark, একটি নির্দিষ্ট workload এর জন্য effecitve খরচ নিম্ন.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিশেষ_ক্ষেত্র_পেশাদার_সাবস্ক্রিপশন_চীন_মডেলদের_সম্মুখে&amp;quot;&amp;gt;বিশেষ ক্ষেত্র: পেশাদার সাবস্ক্রিপশন চীন মডেলদের সম্মুখে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি বিষয় নিশ্চিতভাবে উজ্জ্বল করা উচিত : সমন্বয়&amp;lt;strong&amp;gt;Ollama Pro $20/মাসে + ওপেন-সোর্স চীনা মডেল&amp;lt;/strong&amp;gt;এটি সম্ভবত consumer AI-এর ইতিহাসের সবচেয়ে ভালো মান-মূল্য অনুপাত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_চাইনিজ_মডেলগুলো_কেন_সবকিছু_পরিবর্তন_করে&amp;quot;&amp;gt;চাইনিজ মডেলগুলো কেন সবকিছু পরিবর্তন করে?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DeepSeek-V4-Pro&amp;lt;/strong&amp;gt;: 1.6T প্যারামিটার, CSA+HCA, 1M কনটেক্সট, Claude 4 এবং GPT-5 এর সাথে কোডের জন্য প্রতিযোগিতামূলক&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Qwen-3&amp;lt;/strong&amp;gt;: 235B, 256K প্রসঙ্গ, চমৎকার ফরাসি এবং তর্ক&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;GLM-5.1&amp;lt;/strong&amp;gt;: 744B, MLA+DSA, 200K পরিসর, এজেন্টিকের জন্য তৈরি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সব উপলব্ধ Ollama-এ। সব মুক্ত-কোড (অনুমদাতক লাইসেন্স)। সব সীমাবদ্ধতাহীনভাবে ব্যবহারযোগ্য $20/মাসের সাবস্ক্রিপশনের মাধ্যমে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ollama Pro-এ, আপনি একটি বন্ধ মডেলের (Claude Pro) মূল্যে ~5টি ওপেন-সোর্স « frontier » মডেলের অ্যাক্সেস পাবেন। মানটি অত্যন্ত অসমানিত, যা প্রায় অহাস্য হয়ে উঠেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_হার্ডওয়্যার_er_জন্য_এটি_কি_বোঝায়&amp;quot;&amp;gt;হার্ডওয়্যার-er জন্য এটি কি বোঝায়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বোত্ত মান ও মানের অনুপাত যদি $20/মাসে ক্লাউড সাবস্ক্রিপশন হয়, তাহলে স্থানীয় হার্ডওয়্যার &amp;lt;strong&amp;gt;comfort&amp;lt;/strong&amp;gt; অথবা &amp;lt;strong&amp;gt;principle&amp;lt;/strong&amp;gt;-এর একটি পছন্দ হয়ে যায় — অর্থনৈতিক পছন্দ নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি DGX Spark $4 699 তে, এর সমতুল্য হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ওলামা প্রো-এর ২৩৫ মাস&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;23 AAA গেম রিলিজের দিন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;4 MacBook Air M4&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;লিয়নের একটি T2 ফ্ল্যাটের এক বছরের ভাড়া&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গণনার জন্য। ধীর।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এবং_হোয়াইওয়াই&amp;quot;&amp;gt;এবং হোয়াইওয়াই?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কারণ প্রশ্নটি আমাকে গবেষণ করার সময় করা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যা_বjuddho_থাকে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আরোহণ ৯১০সি&amp;lt;/strong&amp;gt; : 128 Go HBM, 800 TFLOPS FP16 — mais c&amp;amp;#8217;est une puce serveur, pas un desktop&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Atlas 300I Duo&amp;lt;/strong&amp;gt; : 96 Go LPDDR4X, carte PCIe à ~$1 400 — nécessite un hôte&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Atlas 350&amp;lt;/strong&amp;gt; : 112 Go HBM, 1.56 PFLOPS FP4 — accélérateur datacenter, pas un boîtier compact&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Huawei reste focalisé sur le marché des serveurs et des centres de données. Pour un boîtier compact « prêt à brancher » avec 120+ Go de VRAM, le DGX Spark (128 Go unifié) et le Mac Studio M3 Ultra (192 Go unifié) sont les seules options en 2026. Et pour l&amp;amp;#8217;instant, aucun constructeur chinois n&amp;amp;#8217;a annoncé de produit équivalent dans ce format.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাপ্তি_সন্নিকটতর_বিলাসিতা&amp;quot;&amp;gt;সমাপ্তি : সন্নিকটতর বিলাসিতা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DGX Spark খারাপ পণ্য নয়। এটি 99% পটেনশিয়াল ক্রেতার জন্য খারাপ বিনিয়োগ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-verdict&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title ২০২৬-এর কৃত্রিম বুদ্ধিমত্তা দৃশ্য — কোনটিই শাসন করে ?
left to right direction

package &amp;quot;ব্যক্তিগত ব্যবহার / সিমিট ও মাঝারি উদ্যোগ&amp;quot; #C8E6C9 {
  rectangle &amp;quot;�🏆 Ollama Pro
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title ২০২৬-এর কৃত্রিম বুদ্ধিমত্তা দৃশ্য — কোনটিই শাসন করে ?
left to right direction

package &amp;quot;ব্যক্তিগত ব্যবহার / সিমিট ও মাঝারি উদ্যোগ&amp;quot; #C8E6C9 {
  rectangle &amp;quot;�🏆 Ollama Pro
$20/মাস&amp;quot; as pro
  rectangle &amp;quot;Ollama মুক্ত
$0/মাস&amp;quot; as free
  rectangle &amp;quot;ক্লাউড GPU স্পট
$1-3/ঘন্টা&amp;quot; as spot
}

package &amp;quot;ব্যবহার গাঢ় / প্রফেশনাল&amp;quot; #FFF9C4 {
  rectangle &amp;quot;🏆 Ollama Max
$100/মাস&amp;quot; as max
  rectangle &amp;quot;🏆 ক্লাউড GPU নির্ধারিত
$2-4/h&amp;quot; as dedicated
  rectangle &amp;quot;Modal / Together AI
সার্ভারলেস&amp;quot; as serverless
}

package &amp;quot;Air-Gap বাধyatামূলক&amp;quot; #FFCDD2 {
  rectangle &amp;quot;DGX Spark
$৪ ৬৯৯&amp;quot; as spark
  rectangle &amp;quot;Mac Studio M3U
~$5 000&amp;quot; as mac
}

note bottom of spark
  1% des cas d&amp;#39;usage — défense,
  santé réglementée, secrets
  industriels critiques
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ ২০২৬ সালে DGX Spark কিনা মানে ২০১০ সালে মেইল সার্ভার কিনা মতো: প্রযুক্তিগতভাবে সম্ভব, দর্শনীয়ভাবে সুখদ, অর্থনৈতিকভাবে ব্যক্তিগত জন্য অস্পষ্ট। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গণনা সহজ, এবং এটি মিথ্যা বলে না:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;$0&amp;lt;/strong&amp;gt;DeepSeek-এর সাথে Ollama Free-এ চ্যাট করার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;$200/বছর&amp;lt;/strong&amp;gt;Ollama Pro-এ গंभीরভাবে কাজ করার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;$৫-৯&amp;lt;/strong&amp;gt;একটি অসাময়িক ফাইন-টিউন ক্লাউড GPU-তে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;$4 699&amp;lt;/strong&amp;gt;pour&amp;amp;#8230;&amp;amp;#8203; একটি NVIDIA কেসের অভিজ্ঞতা তার ডেস্কের উপরে ?&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাজার সিদ্ধান্ত নিয়েছে। ক্লাউড সাবস্ক্রিপশন এবং চীন উহ্য-সোর্স মডেলগুলো মূল্যের জয়ী হয়েছে। স্থানীয় হার্ডওয়্যার নিয়ামক ভাগে বাঁচে, বিকাশকারীদের অফিসে নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ DGX Spark কোনো লাভজনক টুল নয়। এটি একটি বিবৃতি। « আমার নিজের কৃত্রিম বুদ্ধিমত্তা আমার বাড়িতে চাই, যে কেউ আরেযের ক্লাউডে নয়। » এটি সম্মানযোগ্য। কিন্তু ২০২৬ সালে, যখন Ollama $20/মাসে ক্লাউডে DeepSeek-V4-Pro প্রদান করে, তখন এটি মূলত একটি খরচপ্রবীণ বিবৃতি। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধটি আমার কৃত্রিম বুদ্ধিমত্তা (IA) এজেন্টের সাথে একটি কথাোপকথন থেকে তৈরি হয়, যেখানে DGX Spark-এর আর্থিক প্রাসঙ্গিকতা নিয়ে আলোচনা করা হয়েছে, যা Vast.ai, RunPod-এর মতো ক্লাউড GPU বাজারের দামের মনিটরিং, Ollama/Claude এর দামের তালিকা, এবং চীনা উৎসের ওপেন‑সোর্স মডেল ইকোসিস্টেমের সাথে সংযোজিত। উল্লেখিত দামগুলো মে ২০২৬-এর — সম্ভবত আপনি এই পंक्तিগুলো পড়তে সময়ে এতও কম যাবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>LLM গভর্নেন্স ম্যাট্রিক্স — আপনার কৃত্রিম বুদ্ধিমত্তার নিরাপত্তা কেন গাছের গঠন থেকে শুরু হয়?</title>
            <link >https://cheroliv.com//blog/2026/0118_matrice_gouvernance_llm_zone_acces_workspace_post.html</link>
            <pubDate>Mon, 4 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0118_matrice_gouvernance_llm_zone_acces_workspace_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_প্রম্পট_ইঞ্জিনিয়ারিং_একটি_বালির_দুর্গ&amp;quot;&amp;gt;সমস্যা: প্রম্পট ইঞ্জিনিয়ারিং একটি বালির দুর্গ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আমার_উত্তর_44_ম্যাট্রিক্স&amp;quot;&amp;gt;আমার উত্তর: 4×4 ম্যাট্রিক্স&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাঁচ_zone_স্থানিক_মাত্রা_জিডিপিআর&amp;quot;&amp;gt;পাঁচ_zone (স্থানিক মাত্রা — জিডিপিআর)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_জ্ঞানসংক্রান্ত_শ্রেণীবিভাগ_দ্বিতীয়_মাত্রা&amp;quot;&amp;gt;জ্ঞানসংক্রান্ত শ্রেণীবিভাগ (দ্বিতীয় মাত্রা)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কীভাবে_llm_এই_মেট্রিক্সকে_ব্যবহার_করে&amp;quot;&amp;gt;কীভাবে LLM এই মেট্রিক্সকে ব্যবহার করে?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তবায়ন_টাইপড_gradle_কাজ&amp;quot;&amp;gt;বাস্তবায়ন : টাইপড gradle কাজ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_এটি_একটি_ম্যানিফেস্টো_শুধু_একটি_স্পেক_নয়&amp;quot;&amp;gt;কেন এটি একটি ম্যানিফেস্টো, শুধু একটি স্পেক নয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাম্পূর্ণ_ক্যাস্কেড_ব্রেন_ডাম্প_থেকে_ব্লগ_পোস্ট&amp;quot;&amp;gt;সাম্পূর্ণ ক্যাস্কেড — ব্রেন ডাম্প থেকে ব্লগ পোস্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুবিধাঅসুবিধা&amp;quot;&amp;gt;সুবিধা/অসুবিধা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_আপনার_ফাইলগুলো_সংগঠিত_করুন_আপনার_প্রম্পটগুলো_না&amp;quot;&amp;gt;উপসংহার : আপনার ফাইলগুলো সংগঠিত করুন, আপনার প্রম্পটগুলো না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pড়नेের সময় : 14 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;মাসবিশেষে, আমি এজেন্ট গোবর্নেন্স নিয়মগুলো জমা করে রাখেছিলাম। ফাইলগুলি উৎসাহী, চেকলিস্টগুলো আলস, সেশন শেষের ছয় ধাপের প্রোটোকল। তবুও, একটি প্রশ্ন পেন্ডিং ছিল : &amp;lt;strong&amp;gt;কীভাবে LLM জäne কি এটা তার একটি ফাইল সাথে কাজ করার অধিকার আছে ?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তরটি একটি প্রম্পটে নেই। তা ফাইল সিস্টেমে আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি আর্কিটেকচার স্পেসিফিকেশন যা উত্তরকে ব্যবহারযোগ্য করে তোলে — la &amp;lt;strong&amp;gt;LLM শাসন ম্যাট্রিক্স&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_প্রম্পট_ইঞ্জিনিয়ারিং_একটি_বালির_দুর্গ&amp;quot;&amp;gt;সমস্যা: প্রম্পট ইঞ্জিনিয়ারিং একটি বালির দুর্গ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ফাইল যখন LLM-কে দেওয়া হয়, তখন সে সে সকল কিছু পায়। বিষয়বস্তু, হ্যাঁ — কিন্তু এছাড়াও নিরাপত্তা বন্ধনের অনুপস্থতি। LLM জানে না এই ফাইল ধারণ করে কি না একটি রহস্য, একটি কল্পিত মত, বা বন্ধ সোর্স কোড। এটি ইন্ডেক্স করবে। সারসংক্ষেপ করা, উদ্ধৃত করা, অন্যান্য ডেটার সাথে মিশ্রণ করা — এবং সম্ভবত এটি একটি সর্বজনীন এমবেডিং বা ব্যবহারকারীর প্রতিক্রিয়া প্রকাশ করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রচলিত প্রদর্শন, এটি প্রম্পট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;&amp;quot;Tu es un assistant sécurisé. Ne divulgue jamais d&amp;#39;informations confidentielles.
Si tu détectes un secret, ignore-le. Si tu détectes une opinion, ne la répète pas.&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্রম্পটে তিনটি সমস্যা আছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি LLM-এর ভালো ইচ্ছার উপর নির্ভর করে।&amp;lt;/strong&amp;gt; একটি যথেষ্ট বড় মডেল জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জটিল বাগ সমাধান করা একটি নির্দেশনা বাইপাস করতে যথেষ্ট বড় প্রসঙ্গের 200k টোকেনে ডুকে পড়া নিরাপত্তা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এটি সন্দর্ভগত, কাঠামোগত নয়। প্রম্পট পরিবর্তন করুন, LLM পরিবর্তন করুন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন পরিবর্তন করুন — এবং নিয়মটি চলে যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি স্কেল করে না।&amp;lt;/strong&amp;gt; প্রতিটি নতুন ফাইলের ধরণ, প্রতিটি নতুন স্তর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গোপনীয়তা একটি নতুন শর্ত প্রয়োজন। আপনার প্রম্পট একটি কে�েউ পূর্ণাঙ্গভাবে পড়েন না এমন নিয়ন্ত্রণালয় পাঠ্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সিস্টেমের নিরাপত্তা কখনো কোনও নির্দেশে নির্ভর করা উচিত নয় যেটি বিস্মরণ করতে পারে, পাশ পারতে পারে বা লোড না করতে পারে। একে একটি&amp;amp;#8230;&amp;amp;#8203; যা স্পষ্টভাবে ইচ্ছা না করলে অতিক্রম করা যায় না, সেই বাধা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আমার_উত্তর_44_ম্যাট্রিক্স&amp;quot;&amp;gt;আমার উত্তর: 4×4 ম্যাট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আমার ওয়ার্কস্পেসে বাস্তবায়িত সমাধানটি একটি &amp;lt;strong&amp;gt;জোন ম্যাট্রিক্স × অ্যাক্সেসের অধিকার LLM&amp;lt;/strong&amp;gt;। সে LLM-কে সতর্ক থাকতে বলেন না। সে দেয়। গঠনগতভাবে অসংভব অবিবেক.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-matrix-overview&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 10) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title LLM গভর্নেন্স মেট্রিকস — জোন × অ্যাক্সেসের অধিকার
package &amp;quot;কর্মক্ষেত্র&amp;quot; {

  rectangle &amp;quot;মূল
(বৃত্ত ০)
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title LLM গভর্নেন্স মেট্রিকস — জোন × অ্যাক্সেসের অধিকার
package &amp;quot;কর্মক্ষেত্র&amp;quot; {

  rectangle &amp;quot;মূল
(বৃত্ত ০)
━━━━━━
ব্রেইন ডাম্প
মুক্ত চিন্তা
[LLM নিষিদ্ধ]&amp;quot; as Z0 #FFB3B3
  rectangle &amp;quot;কনফিগারেশন/
(বৃত্ত ১)
━━━━━━
গোপনীয় তথ্য, টোকেন
প্রাইভেট ইনফ্রা
[নিষিদ্ধ LLM]&amp;quot; as Z1 #FFB3B3
  rectangle &amp;quot;office/
(বৃত্ত ২)
━━━━━━
সম্পাদক ডেটা
লেখ, ক্যাড্রেজ
[ফিল্টারড ভিশন]&amp;quot; as Z2 #FFF3B3
  rectangle &amp;quot;foundry/private/
(বৃত্ত ৩)
━━━━━━
Code closed source
[ডেটাসেট গোপন]&amp;quot; as Z3 #B3D9FF
  rectangle &amp;quot;foundry/public/
(বৃত্ত 3)
━━━━━━
কোড ওপেন সোর্স
Apache 2.0
[বিনামূল্য প্রবেশ]&amp;quot; as Z4 #B3FFB3

}

Z0 -[hidden]-&amp;amp;gt; Z1
Z1 -[hidden]-&amp;amp;gt; Z2
Z2 -[hidden]-&amp;amp;gt; Z3
Z3 -[hidden]-&amp;amp;gt; Z4

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাঁচ_zone_স্থানিক_মাত্রা_জিডিপিআর&amp;quot;&amp;gt;পাঁচ_zone (স্থানিক মাত্রা — জিডিপিআর)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ওয়ার্কস্পেসের প্রতিটি জোন একটি GDPR স্তর আছে যা নির্ধারণ করে &amp;lt;strong&amp;gt;কোথায়&amp;lt;/strong&amp;gt; ফাইলটি পারে র্যুটেড হওয়া :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 4.1682%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জোন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;RGPD স্তর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিষয়বস্তু&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সার্বজনীন RAG অ্যাক্সেসের অধিকার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মূল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0 — আত্মীয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মস্তিষ্ক ডাম্প, LLM সংলাপ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রতিবন্ধিত&amp;lt;/strong&amp;gt;— কখনও ইন্ডেক্স করা হয়নি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1 — সীমিত মালিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গোপন তথ্য, টোকেন, API কী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;নিষidium&amp;lt;/strong&amp;gt;— কখনো ইন্ডেক্সকৃত হয়নি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2 — সীমিত ಸಹযোগী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সಂಪাদনালয় ডেটা, ফ্রেমিং, প্রশিক্ষণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;শোধিত&amp;lt;/strong&amp;gt;— দৃষ্টি মাত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;foundry/private/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;৩ — শর্তাধীন খোলা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বন্ধ উৎস কোড, SaaS সার্বজনীন নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;নিষিদ্ধ&amp;lt;/strong&amp;gt;— প্রাইভেট ডেটা শুধুমাত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;foundry/public/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4 — স্থানীয় পাবলিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যাপাচি 2.0 কোড, প্রকাশিত প্লাগইন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;মুক্ত&amp;lt;/strong&amp;gt;— সম্পূর্ণ ইন্ডেক্সিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিয়মটি সহজ : &amp;lt;strong&amp;gt;ফাইলের পথ LLM কে এতে কী করতে পারে তা নির্ধারণ করে&amp;lt;/strong&amp;gt; রক্ষা করার জন্য কোনো মেটাডেটা নেই, ফ্রন্টম্যাটারে কোনো ট্যাগ যোগ করার দরকার নেই, প্রতিটি কমিটের জন্য কোনো ম্যানুয়াল শ্রেণীবিভাগ নেই। ফাইলটি`OSS/&amp;lt;code&amp;gt;? এটি পাবলিক। এটি &amp;amp;#8230;&amp;amp;#8203;-এ`configuration/&amp;lt;/code&amp;gt;? ত âgé অspandeo।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_জ্ঞানসংক্রান্ত_শ্রেণীবিভাগ_দ্বিতীয়_মাত্রা&amp;quot;&amp;gt;জ্ঞানসংক্রান্ত শ্রেণীবিভাগ (দ্বিতীয় মাত্রা)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্থানিক মাত্রা বলে &amp;lt;strong&amp;gt;কোথায়&amp;lt;/strong&amp;gt; রাউটার। কিন্তু একটি দ্বিতীয় অক্ষ আছে, লম্বের উপর লম্ব : &amp;lt;strong&amp;gt;কি&amp;lt;/strong&amp;gt; রাউটার। কিছু ফাইল একটি অনুমোদিত জোনে তথ্য ধারণ করে যেগুলোকে এভাবে তুণে না দিতে হবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-epistemic-filter&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-a9a010a8c2be211cc3f57870fa891588.svg&amp;quot; alt=&amp;quot;Filtre épistémique Vision/Opinion/Stratégie appliqué aux zones 2 et 3&amp;quot; width=&amp;quot;1215&amp;quot; height=&amp;quot;558&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আবিজ্ঞানী শ্রেণীবিন্যাস গ্রিড, আমার শাসনের নিয়ম ২বিসে খোদা করা হয়েছে এজেন্ট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;| স্থিতি | সংজ্ঞা | Signal LLM | গন্তব্য | | VISION |স্থিতিশীল আর্কিটেকচার, পরীক্ষিত প্যাটার্ন | ঘোষণামূলক ভাষা, সেশন/টেস্টের রেফারেন্স | সম্পূর্ণ দিল্যুশন + Blog | | কৌশল | ব্যবসায়িক পজিশনিং, দাম | বাজারের শব্দাবলী, প্রতিযোগিতা | শুধুমাত্র মূল ডকুমেন্ট | | OPINION | অনুমান, বৈধ না করা فرضী | অনুমানগত ভাষা, অনুভূতি | নিবদ্ধতা সার্কেল 0 |&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুই ভাবের সংমিশ্রণ — শারীরিক অঞ্চল × জ্ঞানসম্পর্কী শ্রেণীবিন্যাস — আকার তৈরি&amp;lt;strong&amp;gt;সম্পূর্ণ মেট্রিক্স&amp;lt;/strong&amp;gt;(empty)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-full-matrix&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-acbaa8b985d2b7b6c6dd7c6622455850.svg&amp;quot; alt=&amp;quot;La matrice complète : 5 zones × 3 classifications épistémiques&amp;quot; width=&amp;quot;442&amp;quot; height=&amp;quot;132&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কীভাবে_llm_এই_মেট্রিক্সকে_ব্যবহার_করে&amp;quot;&amp;gt;কীভাবে LLM এই মেট্রিক্সকে ব্যবহার করে?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ম্যাট্রিক্সটি LLM যে পড়ে এমন কোনো ডকুমেন্ট নয়। একটি &amp;lt;strong&amp;gt;বাধা implicit&amp;lt;/strong&amp;gt; এনকোডেড প্রেক্ষাপটের সংমিশ্রণ ভেক্টরে (EPIC 9 — চলমান) বাস্তবায়নের).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে LLM প্রতিটি সেশনে যে কিছু পায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;VECTEUR COMPOSITE DE CONTEXTE
├── RAG pgvector → OSS/ + office/Vision
│   (similarité sémantique sur contenu publiable)
├── Knowledge Graph graphify → OSS/
│   (relations exactes entre artéfacts publics)
├── Knowledge Graph privé → CSS/
│   (relations entre code closed source — jamais exporté)
├── Métadonnées de zone → chaque fichier taggé par zone physique
│   (le LLM sait s&amp;#39;il est dans office/ ou OSS/)
└── Historique des décisions → WORKSPACE_VISION.adoc
    (contexte temporel des arbitrages)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবে, যখন LLM আমাকে বলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;Je vais indexer le contenu de edster/ pour enrichir le knowledge graph...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজি মেটাডেটা লЭМএল কখনো বাক্য শেষ করতেই হয়নি, সেটা উত্তর দেয়: &amp;lt;code&amp;gt;edster/`_available`CSS/&amp;lt;/code&amp;gt;, স্তর 3 →&amp;lt;strong&amp;gt;साधारณะ जignan ग्राफे অ্যাক্সেস নিষিদ্ধ।&amp;lt;/strong&amp;gt; RAG তা দেখে না। গ্রাফটা তা স্পর্শ করে না। ব্যবহারকারীর উত্তর ন সে এটি উদ্ধৃত করে না&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্থানীয় অনটোলজি একটি&amp;lt;strong&amp;gt;ইউনিক্স অনুমতি&amp;lt;/strong&amp;gt;LLM‑দের জন্য. আপনি একটি প্রক্রিয়ার সাথে সতর্ক থাকতে বলেন না।&amp;lt;code&amp;gt;/etc/shadow&amp;lt;/code&amp;gt;— আপনি তাকে পঠন অ্যাক্সেস দেন না। একই নীতি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাস্তবায়ন_টাইপড_gradle_কাজ&amp;quot;&amp;gt;বাস্তবায়ন : টাইপড gradle কাজ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ম্যাট্রিক্স একটি দার্শনিক নয়। এটি কোড। এখানে কাজের চুক্তি। Gradle ja eti probog kore:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;abstract class ZoneAwareIndexer @Inject constructor(
    private val rootDir: DirectoryProperty,
    private val configServer: ConfigServerProperty  // → configuration/
) : DefaultTask() {

    @Input
    val zoneFilter: SetProperty&amp;amp;lt;Zone&amp;amp;gt; = project.objects.setProperty(Zone::class.java)

    @OutputFile
    val ragIndex: RegularFileProperty = project.objects.fileProperty()

    @TaskAction
    fun index() {
        val allowedPaths = zoneFilter.get().flatMap { it.resolve(rootDir.get()) }
        val forbiddenPaths = Zone.RESTRICTED.resolve(rootDir.get())
                            + Zone.INTIMATE.resolve(rootDir.get())
        // Le RAG ne voit jamais configuration/ ni la racine
        // CSS/ alimente un index privé, pas celui-ci
        // office/ est filtré par le classifieur Vision/Opinion
    }
}

enum class Zone {
    INTIMATE,      // Cercle 0 — racine
    RESTRICTED,    // Cercle 1 — configuration/
    EDITORIAL,     // Cercle 2 — office/
    CLOSED_SOURCE, // Cercle 3 — foundry/private/
    OPEN_SOURCE    // Cercle 3 — foundry/public/
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কাজটি &amp;lt;strong&amp;gt;পরীক্ষণযোগ্য&amp;lt;/strong&amp;gt;। আপনি একটি পরীক্ষা লিখতে পারেন যা যাচাই করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `le RAG n&amp;#39;indexe jamais configuration`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE, Zone.EDITORIAL))
    index.index()

    assertThat(index.ragIndex).doesNotContain(&amp;quot;configuration/&amp;quot;)
}

@Test
fun `le code closed source est exclu du RAG public`() {
    val index = ZoneAwareIndexer(rootDir, configServer)
    index.zoneFilter.set(setOf(Zone.OPEN_SOURCE))  // OSS only

    assertThat(index.ragIndex).doesNotContain(&amp;quot;edster&amp;quot;)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;380 tests, 380 PASS. যেমন plantuml-gradle — নিরাপত্তা পরীক্ষা করা হয়েছে আশিত না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_এটি_একটি_ম্যানিফেস্টো_শুধু_একটি_স্পেক_নয়&amp;quot;&amp;gt;কেন এটি একটি ম্যানিফেস্টো, শুধু একটি স্পেক নয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নথি একটি আর্কিটেকচার স্পেসিফিকেশন, কারণ এটি সংজ্ঞায়িত করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কিছু&amp;lt;strong&amp;gt;আয়াম&amp;lt;/strong&amp;gt;(স্থানীয়, জ্ঞানতাত্ত্বিক)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কিছু&amp;lt;strong&amp;gt;নিয়মকীর্ণ নিয়ম&amp;lt;/strong&amp;gt;(জোন → অ্যাক্সেসের অধিকার)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Un &amp;lt;strong&amp;gt;কর্মের চুক্তি&amp;lt;/strong&amp;gt;(টাইপড গ্রেডল, পরীক্ষাযোগ্য)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি&amp;lt;strong&amp;gt;রেফারেন্স প্রয়োগ&amp;lt;/strong&amp;gt;(আমার ওয়ার্কস্পেস)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এটিও একটি&amp;lt;strong&amp;gt;স্পষ্ট&amp;lt;/strong&amp;gt;কারণ তিনি একটি বিতর্কে তাদের দৃষ্টিভঙ্গি প্রকাশ করেন ব্যাপক : &amp;lt;strong&amp;gt;একটি LLM-এর ডেটা অ্যাক্সেস কীভাবে নিয়ন্ত্রণ করা যায়?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উद्यোগের প্রতিক্রিয়া হলো প্রম্পট ইঞ্জিনিয়ারিং + গার্ড্রেল্স&amp;lt;br&amp;gt;
পোস্ট-হোক ক্লাসিফায়ারগুলো। আমার উত্তর হল: &amp;lt;strong&amp;gt;আপনার ফাইলগুলো রাখুন&amp;lt;/strong&amp;gt; সঠিক ফাইলগুলো**. বাকি অংশটি স্বয়ংক্রিয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ঘোষণাপত্রটি বলে না &amp;quot;LLMs সাঙ্গতকর হওয়া উচিত&amp;quot;. এটি বলে : &amp;quot;সাঙ্গতকরণ একটি LLM আপনার নিরাপত্তা নিয়মের উপর একটি ফলাফল আপনার সিস্টেমের ফাইলগুলো, আপনার প্রম্পটের নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাম্পূর্ণ_ক্যাস্কেড_ব্রেন_ডাম্প_থেকে_ব্লগ_পোস্ট&amp;quot;&amp;gt;সাম্পূর্ণ ক্যাস্কেড — ব্রেন ডাম্প থেকে ব্লগ পোস্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ চক্র প্রদর্শনের জন্য, এখানে কিভাবে এই মেট্রিক্স ধারণাটি জন্ম নিয়েছিল। এবং ডিলিউট করা হয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Session 4 mai 2026 — Feedback global du workspace
  │
  ├→ Le LLM identifie : &amp;quot;la dualité public/privé est invisible&amp;quot;
  │   → Classifié VISION (constat architectural vérifiable)
  │
  ├→ PICTURE_ME_ROLLIN_MATRICE_4X4.adoc — STIMULUS (Cercle 0)
  │   → Brain dump structuré, classification VISION confirmée
  │
  ├→ DILUTION → WORKSPACE_AS_PRODUCT.adoc (section Matrice 4×4)
  │   → La spec vit dans les documents racine
  │
  ├→ DILUTION → WORKSPACE_ORGANIZATION.adoc (OSS/CSS)
  │   → La granularisation est documentée
  │
  └→ ARTICLE 0117 (ce document) → cheroliv.com
      → La VISION est publiée&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(“হে, র্যাগ जানে না যা edster closed source&amp;quot;) একটি আর্কিটেকচার স্পেসিফিকেশনে পরিণত হয়েছে একটি সেশনের মধ্যে কমে প্রকাশিত। এটি STIMULUS প্যাটার্নের क्रियाकलाप।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সুবিধাঅসুবিধা&amp;quot;&amp;gt;সুবিধা/অসুবিধা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;এই পদ্ধতি (স্থানীয় অটালজি + মেট্রিক্স)&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ক্লাসিক পদ্ধতি (অনুপ্রেরণা + সুরক্ষা সীমা)&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;মেকানিক&amp;lt;/strong&amp;gt; — ফাইল সিস্টেম অ্যাক্সেস ব্লক করে, LLM না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বর্ণনামূলক&amp;lt;/strong&amp;gt; — প্রম্পটটি LLM-কে সতর্ক হওয়ার অনুরোধ করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Testable&amp;lt;/strong&amp;gt; — গ্রেডল টাস্ক কনট্রাক্ট ৩৮০+ টেস্ট توسط যাচাই করা হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অপরীক্ষনীয়&amp;lt;/strong&amp;gt; — &amp;quot;এলএলএম নিয়মকে মেনে চলেছে কি?&amp;quot; একটি খোলা প্রশ্ন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;LLM‑স্বাধীন&amp;lt;/strong&amp;gt; — মডেল পরিবর্তন করুন, ফোল্ডারগুলো থাকে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;নির্ভরশীল LLM&amp;lt;/strong&amp;gt; — প্রতিটি মডেল প্রম্পটকে ভিন্নভাবে ব্যাখ্যা করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Scalable&amp;lt;/strong&amp;gt; — নতুন ডেটা টাইপ = নতুন ফোল্ডার, কোডে কোনো পরিবর্তন না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অ-স্কেলযোগ্য&amp;lt;/strong&amp;gt; — নতুন ডেটা টাইপ = প্রম্পটের নতুন শর্ত, নতুন রিগ্রেসন ঝুঁকি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Auditable&amp;lt;/strong&amp;gt; — ফাইল সিস্টেমটি অডিট ট্রেল হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অডিটযোগ্য নয়&amp;lt;/strong&amp;gt; — প্রম্পটে কোনো ইতিহাস নেই, কোনো অন্তর নেই, কোনো দুronto নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বাধ্য&amp;lt;/strong&amp;gt; : একটি প্রাথমিক সংগঠিত অনুশাসন প্রয়োজন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বাধা&amp;lt;/strong&amp;gt; : প্রতিটি সেশনে প্রম্পট লেখার জন্য একটি নিয়মিত অনুশীলন প্রয়োজন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_আপনার_ফাইলগুলো_সংগঠিত_করুন_আপনার_প্রম্পটগুলো_না&amp;quot;&amp;gt;উপসংহার : আপনার ফাইলগুলো সংগঠিত করুন, আপনার প্রম্পটগুলো না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এলএলএম গভর্নেন্স মেট্রিক্স, যা আমি recién বর্ণিত করেছি, একটি পণ্য নয়। এটি একটি&amp;lt;strong&amp;gt;আর্কিটেকচার স্পেসিফিকেশন&amp;lt;/strong&amp;gt;— এবং এটাই কারণ সে প্রকাশযোগ্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যা এটিকে দৃঢ় করে, সেটি হল যে এটি LLM‑এ কোনো东西 চায় না। এটি তাকে বিশ্বাস করে না। এটি তার সমন্বয় বা বোঝাপড়া উপর নির্ভর করে না। ফরাসি থেকে, অথবা তার ভালো ইচ্ছা। এই ফাইল সিস্টেম‑এ ভিত্তিক — সবচেয়ে নিম্ন স্তর, সবচেয়ে স্থিতিশীল, সবচেয়ে পরীক্ষিত সমস্ত স্ট্যাকের অংশ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি যখন আমার LLM-কে বলি &amp;quot;তুমি সকলে ইন্ডেক্স করতে পারো`OSS/&amp;lt;code&amp;gt;কিছু নেই `configuration/&amp;lt;/code&amp;gt;, et `office/`শুধুমাত্র যদি এটি ভিশন হিসাবে শ্রেণীবদ্ধ হয় এটি কোনো নির্দেশনা না। এটিই একটি &amp;lt;strong&amp;gt;filtre&amp;lt;/strong&amp;gt; — কোটলিনে বাস্তবায়িত, ৩৮০ টেস্ট দ্বারা যাচাই করা হয়েছে, LLM ডেটা দেখার আগে এটি চালানো হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি কেউ বলতে &amp;#39;এই ড্রয়ারে দেখবেন না&amp;#39; বলার পার্থক্য এবং চাবি তালার দরজা বন্ধ করুন। শাসন এজেন্ট যেটি আমি নির্মাণ করছি থেকে কিছু মাস হুই। ম্যাট্রিক্স ফার্নিচারের পরিকল্পনা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১১৬ — স্বয়ংক্রিয় রู้বদ্ধিক বিভাজন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html&amp;quot;&amp;gt;অনুচ্ছেদ ০১১৪ — বিশ্বাসের চক্র ও স্থানীয় বস্তুতত্ত্ব&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;অনুচ্ছেদ ০১০৮ — একটি আইএএজেন্টকে AsciiDoc ব্যবহার করে শাসন করা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;../2026/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html&amp;quot;&amp;gt;অনুচ্ছেদ 0115 — অনামিতকারী MVP0&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>OSS/CSS গ্রানুলারাইজেশন — আমি কেন foundry/ কে দুটি অংশে কেটে দিয়েছিলাম</title>
            <link >https://cheroliv.com//blog/2026/0117_granularisation_oss_css_repositorie_workspace_post.html</link>
            <pubDate>Sun, 3 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0117_granularisation_oss_css_repositorie_workspace_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রত্যাশিত_হওয়া_দুর্ঘটনা&amp;quot;&amp;gt;প্রত্যাশিত হওয়া দুর্ঘটনা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সত্য_প্রশ্ন&amp;quot;&amp;gt;সত্য প্রশ্ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_oss_এবং_css&amp;quot;&amp;gt;সমাধান : OSS/ এবং CSS/&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ওএসএস_এবং_সিএসএস_কেন_পাবলিক_এবং_প্রাইভেট_না&amp;quot;&amp;gt;ওএসএস&amp;quot; এবং &amp;quot;সিএসএস&amp;quot; কেন, &amp;quot;পাবলিক&amp;quot; এবং &amp;quot;প্রাইভেট&amp;quot; না?&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_গাছ_চার_অঞ্চল_তিন_নয়&amp;quot;&amp;gt;সম্পূর্ণ গাছ — চার অঞ্চল, তিন নয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশেষ_ক্ষেত্র_cheroliv_com&amp;quot;&amp;gt;বিশেষ ক্ষেত্র : cheroliv.com&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যাকারি_গ্রেডল_উদাসীন&amp;quot;&amp;gt;ব্যাকারি-গ্রেডল উদাসীন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এজেন্ট_শাসনপ্রণালী_ও_এর_প্রভাব&amp;quot;&amp;gt;এজেন্ট শাসনপ্রণালী ও এর প্রভাব&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আমরা_কি_পাই_এবং_আমরা_কি_হারাই&amp;quot;&amp;gt;আমরা কি পাই (এবং আমরা কি হারাই)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_ভৌত_সিগনাল_সফটওয়্যার_সিগনালকে_হারিয়ে_দেয়&amp;quot;&amp;gt;উপসংহার: ভৌত সিগনাল সফটওয়্যার সিগনালকে হারিয়ে দেয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pঠন সময় : 10 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt;— কার্যাগত অঞ্চল যা আমার ওয়ার্কস্পেসের কোডকে বাসায় — ১৮টি প্রকল্প ধারণ করে। আটটি Apache 2.0 অনুমোদনের অধীনে ওপেন সোর্স। একমাত্র অনেক মাসের সময়, নয়টি প্রকল্পগুলো একत्रিত ছিলেন। একই ফোল্ডারে, শুধুমাত্র &amp;amp;#8230;&amp;amp;#8203; দ্বারা পৃথক. তাদের পাবলিক/প্রাইভেট স্ট্যাটাস এটি আমার মস্তিষ্কে একটি তথ্য ছিল, ফাইল সিস্টেমে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং তারপরে আমি একটি RAG সংNECT করে চেয়েছিলাম। তারপর, সবকিছু ধ্বংস হয়ে গেল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রত্যাশিত_হওয়া_দুর্ঘটনা&amp;quot;&amp;gt;প্রত্যাশিত হওয়া দুর্ঘটনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এপ্রিল ২০২৬-এ, আমি slider-gradle-এর জন্য pgvector RAG বাস্তবায়ন করা শুরু করেছি। সিদ্ধান্ত: সব রেপোজিটরির ইন্ডেক্স করা`foundry/&amp;lt;code&amp;gt;, উৎপাদন করা কিছু এম্বেডিংস, এবং এদেরকে ইনজেক্ট করা LLM-এর কনটেক্সটে যাতে এর একটি perception&amp;quot; এর ফাইল`foundry/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইনটি সহজ ছিল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val repos = fileTree(rootDir) {
    include(&amp;quot;**/*.adoc&amp;quot;, &amp;quot;**/*.kts&amp;quot;, &amp;quot;**/*.kt&amp;quot;, &amp;quot;**/*.json&amp;quot;, &amp;quot;**/*.yml&amp;quot;)
}
val chunks = repos.map { chunk(it) }
val embeddings = chunks.map { embed(it) }
pgvector.insert(embeddings)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সاده. কার্যকর. এবং&amp;lt;strong&amp;gt;বিপন্ন&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কারণ যে এই`fileTree`বৈষম্য তৈরি করে না`plantuml-gradle/` (Apache 2.0, public) এবং`edster/`(closed source, private). ও সবকিছু নিগল}}. একদিন যদি আমি এই ইম্বেডিংস প্রকাশ করি — একটি ড্যাশবোর্ডে, একটি উত্তর LLM, একটি প্রশিক্ষণ ডেটাসেটে — Edster এর মালিকানাধীন কোড লিকেজ হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রব্লেমটি হল যে কোনো LLM বন্ধ-সোর্স কোড পড়ে না। প্র�? এটি যে এই কোডটি একটি ভেক্টর এমবেডিংয়ো &amp;lt;strong&amp;gt;public&amp;lt;/strong&amp;gt; — অপরিবর্তনীয়, অম্পোয্যযোগ্য, অডিটযোগ্য না.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সত্য_প্রশ্ন&amp;quot;&amp;gt;সত্য প্রশ্ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটা না &amp;quot;LLMকে কোড leak না দেওয়া কিভাবে?.&amp;quot; এই &amp;quot;কিভাবে ব্রত্যা কাঠামোগতভাবে অসম্ভব করা যায়?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তরটি একটি প্রম্পট নয়। উত্তরটি হল ফোল্ডারকে দুটি ভাগ করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_oss_এবং_css&amp;quot;&amp;gt;সমাধান : OSS/ এবং CSS/&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আগে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;foundry/
├── plantuml-gradle/       ← public
├── bakery-gradle/         ← public
├── magic-stick/           ← public
├── edster/                ← PRIVÉ
├── slider-gradle/         ← public
└── ...                    ← mélange invisible&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাদ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;foundry/
├── OSS/                   ← tout est Apache 2.0
│   ├── plantuml-gradle/
│   ├── bakery-gradle/
│   ├── magic-stick/
│   ├── slider-gradle/
│   └── ...
└── CSS/                   ← tout est closed source / private
    └── edster/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `fileTree`হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val ossRepos = fileTree(File(rootDir, &amp;quot;OSS&amp;quot;)) {
    include(&amp;quot;**/*.adoc&amp;quot;, &amp;quot;**/*.kts&amp;quot;, &amp;quot;**/*.kt&amp;quot;, &amp;quot;**/*.json&amp;quot;, &amp;quot;**/*.yml&amp;quot;)
}
val cssRepos = fileTree(File(rootDir, &amp;quot;CSS&amp;quot;)) {
    include(&amp;quot;**/*.adoc&amp;quot;, &amp;quot;**/*.kts&amp;quot;, &amp;quot;**/*.kt&amp;quot;, &amp;quot;**/*.json&amp;quot;, &amp;quot;**/*.yml&amp;quot;)
}

// Embeddings publics — OSS seulement
pgvectorPublic.insert(ossRepos.map { chunk(it) }.map { embed(it) })

// Dataset fine-tuning privé — CSS seulement
fineTuningDataset.insert(cssRepos.map { chunk(it) })  // jamais publié&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জনসাধারণের RAG কখনো দেখে না`CSS/`. বন্ধ উৎসের কোড একটি ডেটাসেট পূর্ণ করে fine-tuning ছাড়া — একটি অভ্যন্তরীণ মডেল যা কখনো আমার বাড়ির বাইরে যায় না। এই বিভাজন যান্ত্রিক, ঘোষণামূলক নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ওএসএস_এবং_সিএসএস_কেন_পাবলিক_এবং_প্রাইভেট_না&amp;quot;&amp;gt;ওএসএস&amp;quot; এবং &amp;quot;সিএসএস&amp;quot; কেন, &amp;quot;পাবলিক&amp;quot; এবং &amp;quot;প্রাইভেট&amp;quot; না?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OSS (মুক্ত সোর্স সফটওয়্যার) এবং CSS (বন্ধ সোর্স সফটওয়্যার) অ্যাক্রনিমের নির্বাচন এটি সতর্কভাবে সিদ্ধান্ত নেওয়া হয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সার্বজনীন&amp;quot;/&amp;quot;বেসরকারী&amp;quot; বর্ণনা করে&amp;lt;strong&amp;gt;দৃশ্যমানতা&amp;lt;/strong&amp;gt;(গিটহাব যা দেখে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;OSS&amp;quot;/&amp;quot;CSS&amp;quot; বর্ণনা করে&amp;lt;strong&amp;gt;প্রকৃতি&amp;lt;/strong&amp;gt;কোড (যা LLM-কে জানতে হবে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GitHubের দৃশ্যমানতা একটি রিমোট রেজপোসিটরির মেটাডেটা। কোডের প্রকৃতি সামগ্রীর একটি সম্পত্তি। এলএলএম GitHub API-তে প্রবেশ করতে পারে না — কিন্তু它 অ্যাক্সেস পায় ফাইল সিস্টেমে।&amp;lt;code&amp;gt;CSS/`lui dit &amp;quot;attention, ce code n&amp;amp;#8217;est pas sous licence মুক্ত&amp;quot; কোনো পড়ার দরকার ছাড়া`LICENSE`অথবা একটি পার্স করার`package.json&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;💡&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফোল্ডারের নাম সবচেয়ে দৃঢ় মেটাডেটা যা আপনি দিতে পারেন একটি LLM. এইটি ভুলে পার্স করা যায় না, ইগ্নোর করা যায় না, বা ভুলে ব্যাখ্যা করা যায় না। এই LLM দেখে`CSS/edster/`ফাইলের পথে — সে জানে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্পূর্ণ_গাছ_চার_অঞ্চল_তিন_নয়&amp;quot;&amp;gt;সম্পূর্ণ গাছ — চার অঞ্চল, তিন নয়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OSS/CSS গ্রানিউলারাইজেশন ত্রি-অঞ্চলিক অ্যান্টলজি পূর্ণ করে। এলাকা `foundry/`1 থেকে 2 ফাংশনাল উপ-জোনে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-four-zone-workspace&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-a29bb1c3312d816c1df167a0b3beff29.svg&amp;quot; alt=&amp;quot;L&amp;amp;#8217;organisation de foundry/ en deux sous-zones OSS et CSS&amp;quot; width=&amp;quot;1784&amp;quot; height=&amp;quot;5760&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;| এলাকা | RGPD | পাবলিক RAG ইন্ডেক্সিং | ডেটাসেট ফাইন-টিউনিং | | মূল | স্তর 0 — আন্তরিক | ✗ | ✗ | &amp;amp;lt;/think&amp;amp;gt;`configuration/&amp;lt;code&amp;gt;| স্তর ১ — সীমাবদ্ধ | ✗ | ✗ | |`office/&amp;lt;/code&amp;gt;| স্তর 2 — সহযোগিতামূলক | ✓ ফিল্টারকৃত | ✓ ফিল্টারকৃত | |&amp;lt;code&amp;gt;foundry/private/&amp;lt;/code&amp;gt;| স্তর ৩ — শর্তাধীন উন্মুক্ত | ✗ | ✓ বেসরকারী | | &amp;lt;code&amp;gt;foundry/public/&amp;lt;/code&amp;gt;| স্তর 4 — স্বভাবিক দর্শক | ✓ মুক্ত | ✓ দর্শক |&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিশেষ_ক্ষেত্র_cheroliv_com&amp;quot;&amp;gt;বিশেষ ক্ষেত্র : cheroliv.com&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেখানে থাকার সময়, আমি একটি অন্য অসংগতি ঠিক করেছি। আমার সাইট &amp;lt;code&amp;gt;cheroliv.com`ঠAKছিল`foundry/`একটি সফ্টওয়্যার প্রকল্পের মতো সম্পূর্ণ — এর নিজস্ব Gradle বিল্ড, এর নিজস্ব CI, এর নিজস্ব শাসন&amp;lt;/code&amp;gt;.agents/`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্লগ পোস্টগুলো কোড নয়। এগুলো &amp;lt;strong&amp;gt;ডেটা&amp;lt;/strong&amp;gt; সার্কেল ২ এর সম্পাদকীয়** — একইভাবে ফ্রেমিংয়ের`office/pilotage/` বা গঠনের`office/formations/`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;AVANT                            APRÈS
foundry/                office/
  cheroliv.com/                    sites/
    site/jbake/content/blog/         cheroliv.com/
      2026/0117_....adoc               2026/0117_....adoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যে পরিবর্তন হচ্ছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অবজেক্টগুলো এর মধ্যে`office/`→ Cercle 2 এর গোপনীয়তা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কাজ`publishSite`একটি ক্ষমতা হচ্ছে`engine`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মাধ্যমে`bakery-gradle`— প্লাগইনটি একটি`FileTree`, সে জানে না যে নিবন্ধগুলো থেকে আসে`office/`&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি CI, একটি শাসন — শূন্য পুনরাবৃত্তি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Vision/Opinion classifier(নিয়ম 2bis) স্বয়ংক্রিয়ভাবে প্রয়োগ করা হয়:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বস্তugar&amp;amp;lt;/tool_call&amp;amp;gt;`office/`প্রকাশের আগে ফিল্টার করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যাকারি_গ্রেডল_উদাসীন&amp;quot;&amp;gt;ব্যাকারি-গ্রেডল উদাসীন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং তা সুন্দর। প্লাগইন`bakery-gradle`পরিবর্তিত হয়নি। একটি AsciiDoc বিষয়বস্তু ডিরেক্টরি গ্রহণ করে, HTML তৈরি করে, push GitHub পেজে। যে এই ডিরেক্টরি নামকৃত হয়`site/jbake/content/` ou &amp;lt;code&amp;gt;office/sites/cheroliv/&amp;lt;/code&amp;gt;— প্লাগইনটি কেউ ফikor করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// engine/build.gradle.kts
task(&amp;quot;publishBlog&amp;quot;) {
    doLast {
        val articles = fileTree(&amp;quot;../../office/sites/cheroliv/2026/&amp;quot;)
        bakery.generate(articles)  // ← bakery ne sait pas d&amp;#39;où ça vient
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ইন্টারফেস চুক্তি একটি গ্রেডল কাজ। এটি একটি রেস্ট API নয়। এটি একটি ওয়েবহুক নয়। একটি কাজ — টাইপড, পরীক্ষযোগ্য, স্থানীয়ভাবে এবং CI-এ চালানো যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এজেন্ট_শাসনপ্রণালী_ও_এর_প্রভাব&amp;quot;&amp;gt;এজেন্ট শাসনপ্রণালী ও এর প্রভাব&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OSS/CSS-এর ডিটেইলিং অজেন্ট শাসনকে তিনটি বিষয়ে পরিবর্তন করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;RAG public : সূচিতকরণের পরিসীমা থেকে`foundry/**`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;à &amp;lt;code&amp;gt;foundry/public/&amp;lt;strong&amp;gt;&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;office/Vision/&amp;lt;/strong&amp;gt;&amp;lt;/code&amp;gt;. কোড বন্ধ সোর্স টাস্ক কনফিগারেশনによる ইন্ডেক্স থেকে বাদ দেওয়া হয়, প্রম্পট দ্বারা নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Knowledge Graph&amp;lt;/strong&amp;gt; : graphify-gradle উৎপন্ন করে দুটি গ্রাফ :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;*&amp;lt;code&amp;gt;office/graph.json&amp;lt;/code&amp;gt;(public) — OSS আর্টেফ্যাক্টস + অফিস/Vision মధ్య সম্পর্ক * &amp;lt;code&amp;gt;configuration/graph_private.json&amp;lt;/code&amp;gt;(gitignored, বেসরকারি) — সম্পর্কের মধ্যে CSS আর্টিফাক্টস, কখনো প্রকাশিত হয়নি&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডেটাসেট ফাইন-টিউনিং&amp;lt;/strong&amp;gt; :`codebase-gradle`এখন তার দুটি উৎস আছে :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;*&amp;lt;code&amp;gt;OSS/&amp;lt;/code&amp;gt;→ সার্বজনীন ডেটাসেট (সামুদায়িক মডেল, বেঞ্চমার্ক) *&amp;lt;code&amp;gt;CSS/&amp;lt;/code&amp;gt;→ প্রাইভেট ডেটাসেট (আভন্তরিক মডেল, মালিকানা ফাইন-টিউনিং)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আমরা_কি_পাই_এবং_আমরা_কি_হারাই&amp;quot;&amp;gt;আমরা কি পাই (এবং আমরা কি হারাই)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1436%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পূর্বে (সদৃশ ফোল্ডার)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পরে (OSS/CSS + office/sites)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ls foundry/&amp;lt;/code&amp;gt;→ সরকারি/বেসরকারি মিশ্রণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ls foundry/public/&amp;lt;/code&amp;gt;→ সব কিছু প্রকাশ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;RAG কোনো ভেদবাব ছাড়া সকলকে index করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;RAG সূচীকরণ করে`OSS/`+`office/Vision`এককভাবে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি প্রকল্প মুক্ত কোড কিনা তা জানা অসম্ভব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পথ`OSS/` ou `CSS/`উল্লেখিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;cheroliv.com-এর নিজস্ব CI, নিজস্ব শাসন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CI এবং শাসনমূলক ব্যবস্থা ইঞ্জিনে একত্রিত করা হয়েছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্লগ পোস্টগুলি একটি `code`সংশ্রয়ালয়ে আছে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্লগ পোস্টগুলো মধ্যে আছে`office/sites/`— ডেটা, কোড না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাবলিক এম্বেডিং-এ বন্ধ-সোর্স কোডের লিকেজের ঝুঁকি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্ট্রাকচারালি অসম্ভব —`CSS/`বাইরে স্কোপ RAG&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুধু খরচ: একটি`git mv`সমগ্র ১৭টি OSS রেজিপোসিটরে + একটি রিফ্যাক্টরের du &amp;lt;code&amp;gt;build.gradle.kts&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;engine&amp;lt;/code&amp;gt;. এইটি একটি শীতল 마이ग्रেশন — কোনো місцеান্তরে থাকা ডেটা না, কোনো প্রভাবিত ব্যবহারকারী না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_ভৌত_সিগনাল_সফটওয়্যার_সিগনালকে_হারিয়ে_দেয়&amp;quot;&amp;gt;উপসংহার: ভৌত সিগনাল সফটওয়্যার সিগনালকে হারিয়ে দেয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আজ বিকেলে czego koressi, তা একটি দर्शনীয় নয় এমন নিয়মকে প্রতিস্থাপন করা। এলাক Allí একটি দrittoigorビッチhedের&amp;amp;lt;/tool_call&amp;amp;gt;ে`foundry/&amp;lt;code&amp;gt;. আগে, আপনাকে করতে হতো &amp;lt;strong&amp;gt;জান্তে&amp;lt;/strong&amp;gt; ye`edster/`এটা closed source ছিল। এখন আপনি এটি &amp;lt;strong&amp;gt;দেখছেন&amp;lt;/strong&amp;gt; — ফোল্ডারের নাম`CSS/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি Unix অনুমতিগুলির মতো, নেটওয়ার্ক VLAN-দের মতো, বা এই ডেটাবেসে আগ্নিরোধক বিভাগ। নিরাপত্তা নিশ্চিত করা উচিত না এটি আপনি যে তথ্য আপনাকে ধরে রাখতে হবে। এটি একটি বৈশিষ্ট্য হওয়া উচিত। &amp;lt;strong&amp;gt;শারীরিক&amp;lt;/strong&amp;gt;সিস্টেমের।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;OSS/CSS গ্র্যানুলারাইজেশন এই নীতির অনুবাদ এই ক্ষেত্রে LLM গবর্ন্যান্সের। LLM-কে Edster কি তা জানার দরকার নেই। গোপনীয়। তাকে এতে অক্ষম থাকার দরকার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং এটি সত্যিই যা`CSS/`গ্যারান্টি দেয়.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0118_matrice_gouvernance_llm_zone_acces_workspace_post.html&amp;quot;&amp;gt;Article 0117 — LLM শাসন মেট্রিক্স&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html&amp;quot;&amp;gt;Article 0114 — বিশ্বাসের বৃত্ত&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১১৬ — স্বয়ংক্রিয় জ্ঞান বিভাজন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;0108_gouvernance_agent_opcode_eager_lazy_post.html&amp;quot;&amp;gt;অনুচ্ছেদ 0108 — একটি AI এজেন্টকে AsciiDoc দিয়ে নিয়ন্ত্রণ করা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>স্বয়ংক্রীয় επισ্টেমিক কম্পার্টিমেন্টেজিং — এলএলএম কিভাবে আমার মানসিক উদ্যানকে সুরক্ষিত রাখে?</title>
            <link >https://cheroliv.com//blog/2026/0116_compartimentage_epistemique_automatise_llm_post.html</link>
            <pubDate>Sat, 2 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0116_compartimentage_epistemique_automatise_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_মুক্তভাবে_চিন্তা_করা_কিন্তু_কিছুই_প্রকাশ_না_করা&amp;quot;&amp;gt;সমস্যা: মুক্তভাবে চিন্তা করা কিন্তু কিছুই প্রকাশ না করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্যাটার্ন_stimulus_জন্ম_স্থির_করা_হলকা_করা_মারা_যাওয়া&amp;quot;&amp;gt;প্যাটার্ন STIMULUS — জন্ম, স্থির করা, হলকা করা, মারা যাওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_llm_এ_দিলিগেশন_কেন_llm_এই_ফিল্টারিং_করে&amp;quot;&amp;gt;LLM-এ দিলিগেশন: কেন LLM-এই ফিল্টারিং করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পাঠনের সময়: 10 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আমার LLM শুধু আমার Gradle কাজগুলো চালানোরাই সীমিত নয়। এটি ব্যক্তিগত চিন্তা এবং públicas অভিব্যক্তির মধ্যে সীমানার রক্ষক। প্রতিটি ধারণা — দৃষ্টিভঙ্গি, মতামত, রণনীতি — এর আগে শ্রেণিবদ্ধ করা হয় এবং তারপর রুট করা হয়। এখানে বলা হয়েছে কীভাবে এই স্বয়ংক্রিয় জ্ঞান-সম্পর্কিত বিভাগকরণ আমার মানসিক উদ্যানকে চুপ না রক্ষা করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[No output]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_মুক্তভাবে_চিন্তা_করা_কিন্তু_কিছুই_প্রকাশ_না_করা&amp;quot;&amp;gt;সমস্যা: মুক্তভাবে চিন্তা করা কিন্তু কিছুই প্রকাশ না করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যখন একজন একাকী ডেভেলপার একটি LLM ব্যবহার করে তার চিন্তাপ্রক্রিয়া নথি করে, সে একটি विरोधाभাসের সম্মুখীন হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;CAPTURE TOUT (Cercle 0, jardin secret)
  ├→ Brain dump libre, pas de censure
  ├→ Idées brutes, spéculations, intuitions non vérifiées
  ├→ Allers-retours LLM : challenger, itérer, raffiner
  └→ Le LLM voit TOUT — le bon, le flou, l&amp;#39;embryonnaire

PUBLICATION SÉLECTIVE (Cercle 4, blog public)
  ├→ Uniquement les décisions actées
  ├→ Uniquement les patterns testés (&amp;amp;gt;100 tests PASS)
  ├→ Uniquement ce qui a de la valeur pour le lecteur
  └→ JAMAIS une spéculation présentée comme une vérité&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই দুটি পরিমাপের মধ্যে, একটি&amp;lt;strong&amp;gt;ফিল্টার&amp;lt;/strong&amp;gt;. প্রশ্নটি হল: কে তা করছে? সেশনের শেষে এক ক্লান্ত মানব? একটি নαιভ regex স্ক্রিপ্ট? বা LLM নিজেই, যা ইতিমধ্যে সব পড় चुका?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মার উত্তর : LLM।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্যাটার্ন_stimulus_জন্ম_স্থির_করা_হলকা_করা_মারা_যাওয়া&amp;quot;&amp;gt;প্যাটার্ন STIMULUS — জন্ম, স্থির করা, হলকা করা, মারা যাওয়া&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;STIMULUS একটি ফাইল`.adoc`অস্থায়ী workspacet-এর মূলে (চক্র 0). তার নাম একটি অনুভূতিমূলক প্রথা অনুসরণ করে —&amp;lt;code&amp;gt;PICTURE_ME_ROLLIN.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;HOLD_MY_BEER.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ONCE_UPON_A_TIME.adoc&amp;lt;/code&amp;gt;— একটি মুহূর্তের অনুসন্ধানমূলক নiyatি ধরে রাখে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এর জীবন চক্র নিষ্ঠુર:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;CRÉATION (Cercle 0)
  ├→ Fichier vide, brain dump libre
  ├→ Allers-retours LLM ← → développeur
  └→ Aucune pression de structure ou de publication

MATURATION
  ├→ Le contenu se densifie
  ├→ Des sections émergent naturellement
  └→ Le fichier devient une référence informelle de session

CLASSIFICATION ÉPISTÉMIQUE ← FAIT PAR LE LLM
  ├→ VISION    → publiable, diluer dans les docs publics + blog
  ├→ OPINION   → confiner au Cercle 0, pas de dilution externe
  └→ STRATÉGIE → dilution restreinte (docs racine, PAS de blog)

DILUTION (Cascade vers Cercles légitimes)
  ├→ VISION → WORKSPACE_AS_PRODUCT.adoc + WHAT_THE_GAMES.adoc + blog
  ├→ STRATÉGIE → WORKSPACE_AS_PRODUCT.adoc (section business)
  └→ OPINION → reste dans le stimulus, ne bouge pas

ARCHIVAGE + SUPPRESSION
  ├→ Snapshot dans configuration/vision-archive/ (trace historique)
  └→ rm du stimulus — il a fini son travail&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;2 সেশনের বেশি সময় ধরে ডিলিউশন ছাড়া স্রবিত থাকা স্টিমুলাস একটি এন্টি-প্যাটার্ন। বা তথ্যটি অত্যন্ত গুরুত্বপূর্ণ, একটি অস্থায়ী ফাইলে সড়তে না দেওয়ার জন্য (→ diluer), বা তা অত্যন্ত অস্পষ্ট যাতে existent হওয়ার মুল্য নয় (→ supprimer)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_llm_এ_দিলিগেশন_কেন_llm_এই_ফিল্টারিং_করে&amp;quot;&amp;gt;LLM-এ দিলিগেশন: কেন LLM-এই ফিল্টারিং করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি কোটলিনে ভিশন/অপিনיון শ্রেণীবিন্যাসকে হার্ডকোড করি না। আমি এটিকে এতে ইনজেক্ট করি&amp;lt;strong&amp;gt;প্রম্পট সিস্টেম&amp;lt;/strong&amp;gt;LLM-এর মাধ্যমে`AGENT_GOVERNANCE.adoc`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;----
----
Pour chaque dilution de stimulus ou session, tu es responsable de classifier
le contenu :
- VISION : décision architecturale actée, pattern testé en production (&amp;amp;gt;100 tests PASS),
  décision documentée dans BACKLOG ou ROADMAP
- OPINION : spéculation, hypothèse non validée par des tests, intuition
  sans ancrage expérimental
- STRATEGIE : positionnement business, pricing, marché cible

Règles :
- Si OPINION, le contenu reste confiné dans son cercle d&amp;#39;origine
- Si VISION, tu procèdes à la dilution dans les documents racine
- Si STRATEGIE, dilution restreinte (docs racine, pas de blog public)
- Cette classification détermine aussi si un article de blog est publiable
  sur cheroliv.com
----

এলএলএম এই নির্দেশিকাটি পড়ে**পূর্বে**সেশনটি প্রক্রিয়া করতে। এইটি তার তৎক্ষণিক প্রসঙ্গে রয়েছে, একটি পৃথক ফাইলে না। *প্রম্পট ইঞ্জিনিয়ারিং নির্ধারিত* : আচরণ ইনজেক্টেড টেক্সট থেকে উদ্ভব হয়, বাহ্যিক শ্রেণীবিভাগকরণ থেকে না।

=== এটি কেন কাজ করে — এবং কেন এটা অনুভূতির বিপরীত?

সাধারণ প্রতিক্রিয়া: « তুমি কি শ্রেণিবিন্যাসকে কৃত্রিম বুদ্ধিমত্তায় ভরসা রাখো? এবং যদি সে ভুল করে?

উত্তর: মানুষ 2 টা ভোরে ভালো কাজ করে না। পার্থক্য হল যে LLM, সেটি, সবকিছু পড়ে। সে সেশন এবং লক্ষ্য ডকুমেন্টস-এর পূর্ণ প্রেক্ষাপট রাখে। সে জানে যে`VPS ECO-16 12€ HT`একটি অবকাঠামো সিদ্ধান্ত (VISION),&amp;amp;lt;/tool_call&amp;amp;gt;`« le TTS ElevenLabs sonne plus naturel que Coqui »`বেঞ্চমার্ক দ্বারা যাচাইকৃত না হওয়া একটি मत।

মানব, সেশনের শেষে, তিরछे পড়ে এবং সম্ভবত সর্বোৎসক করার চেষ্টা করে। LLM পূর্ণরূপে পড়ে এবং একটি পদ্ধতিগত টেবিল প্রয়োগ করে। ফলাফল হল**আর বিশ্বাসনীয়**, কম নয়.

এবং 20% ambiguous কেস-এ — সézের মাঝারি অঞ্চল যেখানে sogar LLM হেমে যায় — উত্তর হলো « কোড যোগ করা » নয়। উত্তর হলো**LangGraph4j**(EPIC 13) : একটি স্টেট গ্রাফ যা ambiguous cases এর জন্য একটি Human-in-the-Loop নোড সক্রিয় করে এবং মানুষকে সিদ্ধান্ত নিতে উঠিয়ে দেয়। কিন্তু 80% স্পষ্ট ক্ষেত্রে, LLM যথেষ্ট।

== সাম্পূর্ণ টিউব : ব্রেইন ডাম্প থেকে ব্লগ পোস্ট পর্যন্ত

এখানে পুরো প্রবাহ দেওয়া হয়েছে — অপ্রসসিত ধারণা থেকে প্রকাশিত নিবন্ধের পথে — LLMকে একমাত্র ফিল্টার হিসাবে :

[source]
----
CERCLE 0 (jardin secret)
  PICTURE_ME_ROLLIN.adoc   ← brain dump, allers-retours LLM
       ↓
  [LLM classifie] → VISION / OPINION / STRATÉGIE
       ↓
  VISION → dilution dans WORKSPACE_AS_PRODUCT.adoc
         → dilution dans WHAT_THE_GAMES_BEEN_MISSING.adoc
         → dilution dans WORKSPACE_VISION.adoc (session context)
         → RÉDACTION ARTICLE BLOG ← le LLM écrit, pas le dev
       ↓
CERCLE 4 (blog public)
  0116_compartimentage_epistemique.adoc  ← publié sur cheroliv.com
       ↓
  ./gradlew deploy (bakery-gradle → JBake → JGit → GitHub Pages)
       ↓
  https://cheroliv.com/blog/2026/0116/  ← live
----

ডেভেলপার এই लेखटिइ नै लिखत् छ। সে প্রশ্ন করে, পুন:] পড়ে, যাচাই করে। LLM-টি লিখে। लुपTI :

1. মুক্ত ব্রেন ডাম্প → কোনো সেনসর না
2. এপিস্টেমিক শ্রেণীবিন্যাস LLM → লিকেজ নেই
3. Rédaction par le LLM → pas de procrastination
4. মানব পর্যালোচনা → ত্রুটি নেই

ইতিহাসিক বাধা — « আমার লিখতে সময় নেই » — দূর হয়েছে। LLM বড় অংশের কাজ করে। মানবই শুধু মানবি যা করতে পারে, তা করে: বিচার।

== তিন মূল ডকুমেন্ট — তথ্য কীভাবে Apne জায়গা খুঁজে পায়

প্রতিটি লক্ষ্য নথি ডিলিউশন ক্যাস্কেডে একটি নির্দিষ্ট ভূমিকা পালন করে:

[cols=&amp;quot;1,3,2&amp;quot;]
|===
|দকুমেন্ট |যা সে পায় |সামগ্রীর ধরন |`WORKSPACE_AS_PRODUCT.adoc` |স্থাপত্য নির্ণয়, প্রযুক্তি স্ট্যাক, রোডম্যাপ, বিজনস মডেল |দৃষ্টিভঙ্গি + কৌশল |`WHAT_THE_GAMES_BEEN_MISSING.adoc` |প্যাটার্ন, পাঠ, প্রতিপ্যাটার্ন, অ্যান্টলজি, ফর্মাল নিয়ম |VISION (পরীক্ষিত প্যাটার্ন) |`WORKSPACE_VISION.adoc` |সেশনের প্রেক্ষাপট, সিদ্ধান্তগুলির ইতিহাস, ইনফ্রাসট্রাকচার পয়েন্ট |দৃষ্টিকোণ + কৌশল (প্রসঙ্গ) |`AGENT_GOVERNANCE.adoc` |শাসন নীতিমালা, প্রকল্প পোর্টফোলিও, নির্দেশাবলী |দর্শন (শাসন) |**ব্লগ cheroliv.com** |সাধারণ নিবন্ধ, বাহ্যিক পাঠকের জন্য মূল্য |শুধু ভিশন
|===

একই স্টিমুলাস ৪টি ডকুমেন্ট এবং ব্লগকে পুষ্টি করতে পারে — প্রতিটি গন্তব্য তার প্রযোজ্য অংশ পায়, কোনো অপ্রয়োজনীয় পুনরাবৃত্তি না, কোনো বিরোধিতা না।

এটি হল যে যা ঘটেছিল এর জন্য`PICTURE_ME_ROLLIN.adoc`(৩ মে ২০২৬) :

| তথ্য | শ্রেণীবিন্যাস | গন্তব্যস্থান | | 13+ প্রকল্পের inventorি foundry/ | VISION | WORKSPACE_AS_PRODUCT | | VPS-2 OVH, edster.cloud, 8.49€/মাস | VISION | WORKSPACE_AS_PRODUCT + WORKSPACE_VISION |  আফ্রিকান বাজার মোবাইল মনি জন্য প্রস্তুত » | STRATÉGIE | WORKSPACE_AS_PRODUCT (section business) | « DeepSeek &amp;amp;gt; Kimi &amp;amp;gt; GLM দীর্ঘ সন্দর্ভের জন্য » | OPINION → VISION | বディング? Wait we must not include extra text. Let&amp;#39;s output exactly:

| « DeepSeek &amp;amp;gt; Kimi &amp;amp;gt; GLM দীর্ঘ সন্দর্ভের জন্য » | OPINION → VISION | বদ্ধ তারপর পদোন্নত বেন্চমার্কের পরে (অনুচ্ছেদ 0112) | | সিনθετিক কর্মচারী শেষ পণ্য sebagai | রণনীতি | WORKSPACE_AS_PRODUCT (ব্লগ নেই) |

== প্যাটার্ন Baby-Step + TestContainer + জীবিত ডকুমেন্টেশন — স্ব-টেস্টিং কোড

STIMULUS/Dilution প্যাটার্নটি চিন্তা পরিচালনা করে। এর কোডের সমতুল্য Baby-Step/TestContainer/Doc Vivante প্যাটার্ন, যা plantuml-gradle द्वारा যাচাইকৃত (380/380 tests PASS, 137 ডকার ছাঁদবিহীন সেশন) :

[cols=&amp;quot;1,3&amp;quot;]
|===
|নিয়ম |নিয়ম |**শিশুধাপ** |একটি US-এ ৩ পয়েন্টের বেশি না। যদি কোনো US ভয় pautaoy hoy, তাহলে তা ভাগ করুন। একটি ১ পয়েন্টের US যা চলছে &amp;amp;gt; একটি ৮ পয়েন্টের US যার Deri thake। |**TestContainer প্রথমে** |ব্যবসায়িক কোডের আগে, কনটেইনার। ইনফ্রা টেস্ট পাস করে → স্থিতিশীল পরিবেশ নিশ্চিত। |**ডেটাসেট কমিটি** |সুস্বল্প কিন্তু প্রতিনিধিগত উপসেটে`src/test/resources/`, বিনা PII. ক্লোনযোগ্য, চালানযোগ্য. |**জীবন্ত নথি** |প্রতিটি Cucumber টেস্ট = একটি প্রাকৃতিক ভাষার বাক্য। উৎস কোডই এক্সিকিউটেবল স্পেক। শূন্য Markdown ডকুমেন্ট রক্ষণীয় রাখতে হবে। |**স্বয়ংক্রিয় পরিষ্কার** |সম্পদ রรัয়তি নেই. অনাথ কন্টেইনার,`/tmp/gradle-test-*`: সবশয় পরিষ্কার করা হয়েছে.
|===

এই প্যাটার্নটি হলো কেন plantuml-gradle ১৩৮ সেশনে কখনও Docker‑বিত্তি রিগ্রেশন নেই। এটি নিশ্চিত করে যে, একটি বাহ্যিক বুনিয়াদশক্তি (PostgreSQL, Redis, Kafka) hét কথা বলা কোডটি উত্পাদন পরিবেশের মতো একটি পরিবেশে সর্বদা পরীক্ষিত হয় — সংস্করণকৃত, পুনরাবৃত্তিপূর্ণ, একটি কমান্ডে চালানো যায়।

== উপসংহার: চিন্তার স্বাধীনতা, প্রকাশের ভয় ছাড়া

সয়ংক্রிய জ্ঞানবিজ্ঞান বিভাজন কোনও নিয়ন্ত্রণের সরঞ্জাম নয়। এটি একটি**মুক্তিদাতা**। এটি কোনো বন্ধন ছাড়াই চিন্তা করতে, ফিল্টার ছাড়াই অনুমান করতে, মনে যাওয়া সবকিছু brain‑dump করতে দেয় — কোনো সময় ভয় না করে যে একটি শিশু ধারণা ব্লগে আসবে।

LLM এই সীমান্তের রক্ষক। এটি সকল পড়ে। এটি বিন্যাস করে। যে জীবিত থাকা উচিত সেটি হালকা করে। যে গোপন থাকা উচিত সেটি সীমাবদ্ধ করে। যা প্রকাশযোগ্য সেটি লিখে।

এবং ডেভেলপার, সে, শেষ শব্দ রাখে : পুনরায় পড়া, চ্যালেঞ্জ, যাচাই। বিচার।

একমাত্র সোলো ডেভেলপারের অভাব ছিল কাজের ভাগবিন্যাসের: একটি সিঙ্ক্রেতিক কর্মী যিনি মানসিক কাগজপত্রের ব্যবস্থা করেন, যastore manusher শ্রেষ্ঠ কাজে—ডিজাইন করা, আর্কিটেকচার করা, সিদ্ধান্ত নেওয়া—কেন্দ্র করে থাকতে পারে।

== উৎস

* এজেন্ট ইগার/লেজি গবর্নেন্সে সম্পর্কিত একটি প্রবন্ধ:link:../2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[AsciiDoc ব্যবহার করে一个 AI এজেন্ট শাসন করা]
* স্থানীয়’ontোলজি ও বিশ্বাসের চক্রের বিষয়কে একটি প্রবন্ধ:link:../2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html[স্থানীয় অ্যান্টলজি — একটি সামঞ্জস্যের মেকানিজম]
* MVP0 অ্যানোনিমাইজারের নিবন্ধ:link:../2026/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html[আমাদের প্রথম নিয়োজিত: ডেটাসেট বেনামীকারী]
* লং-কনটেক্সট LLMদের তুলনা নিয়ে নিবন্ধ:link:../2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html[DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1]
* ব্যাকপ এজেন্টের মেকানিজম: নিবন্ধlink:../2026/0110_mecanisme_backup_contexte_agent_post.html[স্লাইডিং উইন্ডো এবং ঠাণ্ডা ঢেউ]
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>আমাদের প্রথম নিয়োগ: ডেটাসেট বেনামীকারী — MVP0 পরীক্ষা পর্যায়ে</title>
            <link >https://cheroliv.com//blog/2026/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html</link>
            <pubDate>Fri, 1 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সবার_দৌড়ানো_সমস্যা&amp;quot;&amp;gt;সবার দৌড়ানো সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পড়ার সময় : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আমি একটি LLM নিয়োগ করি না। আমি একটি অননিমাইজার নিয়োগ করি। RAG pgvector করার আগে, CDA/FPA বিশেষজ্ঞদের ফাইন-টিউনের আগে, ক্লায়েন্ট workspaces প্রোভিশনের আগে — কেউ ডেটার শৌচালয় পরিষ্কার করতে হবে। এই কর্মচারী অননিমাইজেশন বিশেষজ্ঞ (MVP0, EPIC 2 কোডবেস-গ্রেডলের)। এবং সে যে উত্পদকে বাজারযোগ্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সবার_দৌড়ানো_সমস্যা&amp;quot;&amp;gt;সবার দৌড়ানো সমস্যা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রশিক্ষণ ডেটা ব্যবহারকারী প্রতিটি AI স্টার্টআপ একই বাধায় মোকাবেলা করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;----
----
Données brutes client (SPG, cours, évaluations)
  ├→ Noms de stagiaires en clair dans les PDF
  ├→ Emails dans les métadonnées JSON
  ├→ IP de connexion dans les logs pgvector
  ├→ Identifiants dans les nœuds Graphify
  └→ Références OF pilote dans les schémas SQL
----

ফলাফল: হয়তো তুমি ডার্টি ডেটা (PII-হালুসিনেশন, GDPR-অনুসরণ নহে, আইনজীবি ঝুঁকি) উপর RAG করো, হয়তো তুমি কিছুই না করো (পণ্য নেই)। তৃতীয় পথ — ম্যানুয়ালি পরিষ্কার করা — স্কেলযোগ্য নয়।

আমার উত্তর : সমস্যা থেকে এড়িয়ে না যাওয়া। L&amp;#39;**অটোমেটাইজ করা**.

== MVP0 : অ্যানোনিমাইজার, পরীক্ষাকালে প্রথম নিয়োজিত

এটি MVP0 একটি ফিচার না। এটি একটি**সুবিধা বিশেষজ্ঞ**— একজন কর্মচারী যিনি অসুচি, মূর্ধ ও কটু কাজ করেন, এবং যার সম্পর্কে পিচ ডেকসে কেউ কথা বলতে চান না।

যা তা করে :

[source]
----
ENTRÉE : Données brutes multi-sources
  ├→ AsciiDoc (SPG_A2SP.adoc) → noms, dates, OF pilote
  ├→ JSON (catalogue formations) → emails, téléphones
  ├→ YAML (config workspace) → tokens OAuth2
  ├→ SQL (schémas DDL) → IP, adresses
  ├→ pgvector (métadonnées embeddings) → identifiants
  ├→ ONNX (outputs classification) → noms propres
  └→ Graphify (graph.json) → nœuds avec PII

SORTIE : Datasets propres, format standardisé
  ├→ [ANONYMIZED] remplace les PII détectées
  ├→ Classification RGPD (niveau 0→4)
  ├→ Rapport d&amp;#39;audit (quoi a été nettoyé)
  └→ Dataset prêt pour RAG ET fine-tuning
----

এটি সবচেয়ে স্পষ্ট প্যাটার্নগুলো প্রথমে সনাক্ত করে (ইমেইল`.*@.*`,
 tokens`sk-*`, `ghp_*`, IPs), তারপর তা শিখে। পরীক্ষামূলক সময়, তাই: আমরা যাচাই করি যে এটি কোন মিথ্যা নেতিবাচক (false negative) না ছুঁড়ে, তারপরই তা স্থায়ী করা হয়।

== এই MVP কী খোলে (এবং এটি শুধুমাত্র মেনে চলা নয়)

অননামিকরণ MVP0のように มหासड़कों के पहले RGPD टolak नहে। ইটি มหাসड़ক নিজেই। 에খाने যা यह khules:

=== বর্তমান : অ্যাগমেন্টেড রিয়ালিটি Prompt-এ

[source]
----
DONNÉES BRUTES CLIENT
    ↓
Anonymiseur MVP0 → datasets propres
    ↓
RAG pgvector (MVP1) → top-K documents similaires (filtrés, anonymisés)
    ↓
LLM (deepseek-v4-pro) → réponse augmentée, zéro PII
----

RAG কোনো দূষিত ডেটা খোঁজে না — এটি একটি স্পেস খোঁজে।**নির্মাণে শুদ্ধ**. এইことは...

=== ভবিষ্যৎ : সুস্থ ডেটার উপর ফাইন-টিউনিং

[source]
----
MVP0 → datasets propres accumulés (session après session)
    ↓
Fine-tuning expert métier (CDA, FPA) sur données zéro PII
    ↓
Modèle fine-tuné exposé via Ollama (sans fuite de données)
----

অসাজক ডেটার上 ফাইন-টিউনিং একটি সম্ভাব্য আইনি ধ্বংস। পরিষ্কৃত ডেটার上, এটি একটি**প্রতিলিপিযোগ্য পদ্ধতি**. প্রতিটি গ্রাহক তার পরিষ্কার করা ডেটাসেট সংগ্রহ করে, প্রতিটি গ্রাহক তার ডেটা উপর তার ব্যবসায়িক বিশেষজ্ঞদের ফাইন-টিউন করতে পারে — কখনো কোনো ব্যক্তিগত ডেটা প্রকাশ না করে

== কেন এটি বাজারযোগ্য

এটি GDPR অনুসরণ সরঞ্জাম নয়। এটি একটি**একটি পুনরাবৃত্তিযোগ্য পদ্ধতি যা বিশ্বব্যাপী সমস্যা কে সম্পদে রূপান্তর করে**:

1. *প্রশিক্ষণের প্রতিটি কোম্পানির অশুদ্ধ তথ্য আছে* — এটাই সমস্যা
2. *কোনও স্বয়ংক্রিয় বহু-স्रोত ক্লিনিং পাইপলাইন নেই* — এটি বাজার
3. *লুপ : অনামিকরণ → RAG → সুক্ষ্ম টিউনিং মালিকানা সংরক্ষিত* — এটি বাধা

Edster SaaS (MVP3) কোনো &amp;#39;Gradle workspace&amp;#39; বিক্রয় করবে না। সে এই বন্ধ লুপটি विक্রয় করবে। এবং MVP0 হলো প্রবেশদ্বার।

== SQL ফরম্যাটকে প্রেক্ষাপটের তৃতীয় পटとして

স্ট্রাকচার্ড ডেটা ইমপোর্টটি শুধুমাত্র একটি বিনিময় ফরম্যাট নয়। SQL স্কিমা (DDL) বহন করে**ডোমেইন এন্টিটি-রিলেশনশিপ মডেল**python
import sys

def translate_french_to_bengali(text):
    return text

data = sys.stdin.read()
if not data:
    sys.exit(0)
parts = data.split(&amp;#39;`&amp;#39;)
translated_parts = []
for i, part in enumerate(parts):
    if i % 2 == 0:
        translated_parts.append(translate_french_to_bengali(part))
    else:
        translated_parts.append(part)
sys.stdout.write(&amp;#39;`&amp;#39;.join(translated_parts))

[source]
----
CREATE TABLE formation (
  id UUID PRIMARY KEY,
  titre VARCHAR NOT NULL,
  referentiel RNCP REFERENCES rncp(id),
  organisme OF REFERENCES of_pilote(id)  -- ← va être anonymisé
);
----

এই DDL, একবার বেনামকরণ করা হলে (লাইন ৪), LLM-এর জন্য একটি প্রেক্ষাপতের منبع হয়ে ওঠে। টেক্সট না — এর**ব্যবসা মডেল**. RAG সামগ্রী দেয় (ভেক্টর সমতুল্যতা), Graphify সম্পর্ক প্রদান করে (সঠিক গঠন), এবং SQL স্কিমা দেয়**ডোমেইন-ড্রিভেন ডিজাইন অবোধ্য**: bounded contexts, সমষ্টি, value objects. LLM ব্যবসায়িক বিষয়টি বুঝে, কারণ এটি তার স্কিমা পড়ে।

== রোডম্যাপ: এমভিপি০ থেকে SaaS-কে

[source]
----
MVP0 — Anonymiseur (ce que cet article décrit)
  Sortie : datasets propres, reproductible

MVP1 — RAG pgvector (dépend de MVP0)
  Realité augmentée en prompt sur données nettoyées

MVP2 — Graphify + ONNX + SQL DDD (dépend de MVP1)
  Vecteur composite de contexte (règles + similarité + relations exactes)

MVP3 — SaaS Edster (dépend de MVP0-2)
  Provisionnement workspace client complet
----

প্রতিটি MVP পূর্ববর্তী MVP‑এর উপর নির্ভর করে। কোনো MVP MVP0 ছাড়া ডেলিভারি করা যায় না। এই原因েই অ্যাননিমাইজার ব্যাকলগে « P0 » নয় — এই**MVP0**। এটি প্রথম বাণিজ্যিক আউটপুট, এবং সবশেষ তার সফলতার ওপর নির্ভর করে।

== উপসংহার: সবকিছু সম্ভব করার অদৃশ্য কাজ

একটি পারম্পরিক স্টার্টআপে, ডেটা সাফসফাই বাহ্যিকরণ করা হয়, হস্তচলিত হয়, অথবা উপেক্ষিত করা হয়। এই আর্কিটেকচার,টি**উৎপাদনের হৃৎপদ**. অনামিককারী প্রথম কর্মচারী কারণ তার বিনা, কิจ্‍ছই কাজ করে না:

* MVP0 নেই → কানূনি RAG নেই (MVP1)
* MVP0ের বিনা → ডেটা লিকেজ বিনা ফাইন-টিউনিং করা যায় না (EPIC 5)
* MVP0-এর ছাড়া → কোনো বিশ্বস্ত SaaS নেই (MVP3)
* MVP0-এ ছাড়া → প্রম্পটে বর্ধিত বাস্তবতা নেই
* MVP0 ছাড়া → কোনো তৃতীয় প্রসঙ্গ পথ (SQL DDD) না

একটি অসুস্থ কাজ করে। একদ উধে পিচসে উল্লেখ করা হবে না। কিন্তু সেেইকারখানা চালায়।

এবং এটাই যে কারণে আমরা তাকে প্রথমে নিয়োগ করি।

== তথ্যসূত্র

* স্থানীয় অন্টোলজি ও বিশ্বাসের চক্র :link:../2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html[স্থানীয় অন্টলজি সমন্বয়ের প্রক্রিয়া]
* এজার/লেজি এজেন্ট গভরনেন্সে সম্পর্কিত নিবন্ধ :link:../2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[একটি AI এজেন্টকে AsciiDoc দিয়ে পরিচালনা করা]
* Hot/Warm/Cold মেকানিজুমের উপর একটি নিবন্ধ :link:../2026/0110_mecanisme_backup_contexte_agent_post.html[Sliding Window এবং শীতল ঢাকা]
* তিনটি LLMs এর তুলনা নিয়ে লেখা :link:../2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html[DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1]
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>আমাদের প্রথম নিয়োগকৃত : ডেটাসেট অনুনামিকরণকারী — MVP0 ট্রায়াল সময়ে</title>
            <link >https://cheroliv.com//blog/pilot-batch/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html</link>
            <pubDate>Fri, 1 May 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/pilot-batch/0115_anonymiseur_dataset_mvp0_realite_augmentee_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যে_সমস্যা_সবকে_भग_করে_দেয়&amp;quot;&amp;gt;যে সমস্যা সবকে भग করে দেয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pড়ার সময় : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আমি একটি LLM কে নিয়োগ করি না। আমি একজন বেনামীকরণ বিশেষজ্ঞ নিয়োগ করি। র্যাগ pgvector ব্যবহার করার আগে, CDA/FPA বিশেষজ্ঞদের ফাইন-টিউন করার আগে, ক্লায়েন্টের ওয়ার্কস্পেস প্রদান করার আগে — কেউ ডেটার শৌচালয় পরিষ্কার করতে হবে। এই কর্মচারী, তাই বেনামীকরণ বিশেষজ্ঞ (MVP0, EPIC 2 of codebase-gradle)। এবং সেই وہ যে দরকারী পণ্যংকে bazaar-যোগ্য (marketable) করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_যে_সমস্যা_সবকে_भग_করে_দেয়&amp;quot;&amp;gt;যে সমস্যা সবকে भग করে দেয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি AI স্টার্টআপ যা প্রশিক্ষণ ডেটা প্রক্রিয়া করে, একই বাধায় পড়ে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;----
----
Données brutes client (SPG, cours, évaluations)
  ├→ Noms de stagiaires en clair dans les PDF
  ├→ Emails dans les métadonnées JSON
  ├→ IP de connexion dans les logs pgvector
  ├→ Identifiants dans les nœuds Graphify
  └→ Références OF pilote dans les schémas SQL
----

ফলাফল : আপনি যদি দূষিত ডেটা RAG করলে (PII-কে হাল্যুটিসিনেশন, RGPD-কে পালন না করা, আইনিক ঝুঁকি), অথবা আপনি কিছুই করেন না (পণ্য নেই)। তৃতীয় পথ — ম্যানুয়ালি পরিষ্কার করা — স্কেলযোগ্য নয়।

মার উত্তর: সমस्यাকে এড়িয়ে না যাওয়া। L&amp;#39;**স্বয়ংক্রিয় করা**.

== MVP0 : অননিমাইজার, প্রথম নিয়োগকৃত পরীক্ষাকালে

MVP0 একটি ফিচার নয়। এটি একটি**সুবিধার বিশেষজ্ঞ**একজন কর্মচারী যিনি নisarথক এবং নিহতশালী কাজ করেন, এর বিষये কোনো পিচ ডেকে কথা বলতে চান না

যা সে করে :

[source]
----
ENTRÉE : Données brutes multi-sources
  ├→ AsciiDoc (SPG_A2SP.adoc) → noms, dates, OF pilote
  ├→ JSON (catalogue formations) → emails, téléphones
  ├→ YAML (config workspace) → tokens OAuth2
  ├→ SQL (schémas DDL) → IP, adresses
  ├→ pgvector (métadonnées embeddings) → identifiants
  ├→ ONNX (outputs classification) → noms propres
  └→ Graphify (graph.json) → nœuds avec PII

SORTIE : Datasets propres, format standardisé
  ├→ [ANONYMIZED] remplace les PII détectées
  ├→ Classification RGPD (niveau 0→4)
  ├→ Rapport d&amp;#39;audit (quoi a été nettoyé)
  └→ Dataset prêt pour RAG ET fine-tuning
----

এটি সবচেয়ে স্পষ্ট প্যাটার্নগুলো প্রথমে শনাক্ত করে (ইমেইল`.*@.*`, tokens`sk-*`, `ghp_*`, IPs), তারপর তা শিখে। পরীক্ষার কাল, এটা: তার নিশ্চিত করার আগে, আমরা যাচাই করি যে это মিথ্যা নেতিবাচকে পাস না দেয়।

== এই MVP কী উন্মুক্ত করে (এবং এটি শুধু পালন নয়)

MVP0 মতো গোপনীয়তাকরণ RGPD-এর হাইওয়ারের আগে টোল নয়; এটি নিজেই হাইওয়ার। এখানে হলো যা এটি খুলে দেয়:

=== বর্তমান : প্রম্পটে অগমেন্টেড রিয়ালিটি

[source]
----
DONNÉES BRUTES CLIENT
    ↓
Anonymiseur MVP0 → datasets propres
    ↓
RAG pgvector (MVP1) → top-K documents similaires (filtrés, anonymisés)
    ↓
LLM (deepseek-v4-pro) → réponse augmentée, zéro PII
----

RAG দূষিত ডেটা-তে খোঁজ করে না — এটি একটি স্থান-এ খোঁজ করে**निर्माणे परिष्कार**. এই উত্তর들의 গুণমানের জন্য সবকিছু পরিবর্তন করে দেয়: LLM-O তে তা গুণিত করে না যা শনাক্ত করে কিন্তু উল্লেখ করা উচিত নয়; সেই PIIকে এড়ানোর জন্য তার সময় ব্যয় না করে।

=== ভবিষ্যৎ : সুস্থ ডেটার উপর ফাইন-টিউনিং

[source]
----
MVP0 → datasets propres accumulés (session après session)
    ↓
Fine-tuning expert métier (CDA, FPA) sur données zéro PII
    ↓
Modèle fine-tuné exposé via Ollama (sans fuite de données)
----

অপ্রসারিত ডেটার উপর ফাইন‑টিউনিং একটি সম্ভাব্য قانونی বিপর্যয়। পরিষ্কার ডেটার উপর, এটি একটি**প্রতিলিপিযোগ্য পদ্ধতি**. প্রত্যেক গ্রাহক তার পরিষ্কৃত ডেটাসেট জमा করে, প্রত্যেক গ্রাহক তার ব্যবসায়িক বিশেষজ্ঞদের তার ডেটা উপর ফাইন-টিউন করতে পারে — কখনো কোনো ব্যক্তিগত ডেটা প্রকাশ না করে।

== কেন এটি marketable?

এটি « একটি GDPR অনুপালন টুল » নয়। এটি একটি**বিশ্বব্যাপী সমস্যাকে সম্পদে রূপান্তরিত করে এমন পুনরাবৃত্তিযোগ্য পদ্ধতি**:

1. *প্রশিক্ষণ প্রতিষ্ঠানের ডেটা ময়লা* — এটি সমস্যা
2. *কোনটিতে মাল্টি-সোর্স পরিষ্কারিংয়ের স্বয়ংচালিত পাইপলাইন নেই* — এটি বাজার
3. লুপ: বেনামিকরণ → RAG → ফাইন‑টিউনিং মালিকানাধীন – এটি বাধা।

এডস্টার SaaS (MVP3) « একটি Gradle কর্মক্ষেত্র » বিক্রি করবে না। এটি এই বন্ধ লুপটি বিক্রি করবে। এবং MVP0 প্রবেশদ্বার।

== SQL ফরম্যাটকে কন্টেক্সটের তৃতীয় পথ হিসেবে

সংগঠিত ডেটা আমদানি মাত্র একটি বিনিময় ফরম্যাট নয়। SQL স্কিমা (DDL) ধারণ করে**ডোমেইনের ইেন্টিটি-রিলেশনশিপ মডেল**:

[source]
----
CREATE TABLE formation (
  id UUID PRIMARY KEY,
  titre VARCHAR NOT NULL,
  referentiel RNCP REFERENCES rncp(id),
  organisme OF REFERENCES of_pilote(id)  -- ← va être anonymisé
);
----

এই DDL, একবার অ্যানোনিমাইজ করা হলে (লাইন 4), LLM-এর জন্য একটি প্রেক্ষাবতির উৎস হয়ে যায়। টেক্সট নয় — এর**ব্যবসায়িক মডেল**. RAG কনটেন্ট দেয় (ভেক্টর সাদৃশ্য), Graphify সম্পর্কগুলো দেয় (সঠিক গঠন), এবং SQL স্কিমা দেয়**ডোমেইন-ড্রিভেন ডিজাইন অন্তর্নিহিত**: bounded contexts, সমষ্টি, value objects. LLM ব্যবসা বুঝে কারণ এটি তার স্কিম পড়ে।

== রোডম্যাপ : MVP0 থেকে SaaS

[source]
----
MVP0 — Anonymiseur (ce que cet article décrit)
  Sortie : datasets propres, reproductible

MVP1 — RAG pgvector (dépend de MVP0)
  Realité augmentée en prompt sur données nettoyées

MVP2 — Graphify + ONNX + SQL DDD (dépend de MVP1)
  Vecteur composite de contexte (règles + similarité + relations exactes)

MVP3 — SaaS Edster (dépend de MVP0-2)
  Provisionnement workspace client complet
----

প্রতিটি MVP পূর্বের উপর নির্ভর করে। MVP0 ছাড়া কোনো MVP বিতরণ করা যায় না। এটিই কেন যে অননিমাইজার ব্যাকলগে « P0 » নয় — এটি**MVP0**। এই πρώτο বাণিজ্যিক Provided, এবং সব বাকি তার সাফল条の ওপর নির্ভর করে।

== Conclusion: অদৃশ্য শ্রম যা সবকিছু সম্ভব করে

একটি সাধারণ স্টার্টআপে, ডেটা পরিষ্কারন আউটসোর্স করা, মানুয়াল, অথবা উপেক্ষা করা। এই আর্কিটেকচারে, এটি**পণ্যের মূল**. L&amp;#39;Anonymiseur est le premier employé parce que sans lui, rien ne fonctionne :

* MVP0 ছাড়া → কানুনী RAG নেই (MVP1)
* MVP0 বিনা → ডেটা লিকেজ বিনা ফাইন-টিউনিং না (EPIC 5)
* MVP0 ছাড়া → বিশ্বাসযোগ্য SaaS নেই (MVP3)
* MVP0 বিনা → প্রম্পটে বৃদ্ধigorst বাস্তবতা নেই
* MVP0 ছাড়াই → কোনো তৃতীয় প্রসঙ্গ পথ না (SQL DDD)

বিরক্তিকর কাজ। তিনি কখনো পিচে উল্লেখ করা হবে না। কিন্তু সে যে ফ্যাক্টরি চালিয়ে যায়।

এই কারণে আমরা প্রথমে তাকে নিয়োগ করি।

== রেফারেন্স

* স্থানীয় অন্তভুক্তি ও বিশ্বাসের বৃত্ত সম্পর্কিত নিবন্ধ :link:../2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html[স্থানিক ওনটলজি সমন্বয়ের মেকানিজম olarak]
* অগর/লেজি এজেন্ট গভর্নেন্সের নিবন্ধ :link:../2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[একটি AI এজেন্টকে AsciiDoc দিয়ে শাসন করা]
* Hot/Warm/Cold মেকানিজম : একটি নিবন্ধlink:../2026/0110_mecanisme_backup_contexte_agent_post.html[Sliding Window এবং ঠাণ্ডা লہر]
* তিন LLMs -এর তুলনার প্রবন্ধ :link:../2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html[ডীপসিক-ভি4-প্রো, কিমি কে2.6, জিএলএম-5.1]
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>ডেভেলপারের গোপন বাগান: স্থানীয় ওনটোলজি কীভাবে প্রম্পট ইঞ্জিনিয়ারিং ছাড়াই LLM-গুলোকে সমন্বয় করে</title>
            <link >https://cheroliv.com//blog/2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html</link>
            <pubDate>Thu, 30 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0114_gouvernance_cercles_confiance_ontologie_spatiale_alignement_llm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অवलম্বন_প্রম্পট_ইঞ্জিনিয়ারিং_একটি_বালু_দুর্গ&amp;quot;&amp;gt;অवलম্বন : প্রম্পট ইঞ্জিনিয়ারিং একটি বালু দুর্গ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_চার_বিশ্বাসের_বৃত্ত_একটি_স্থানীয়_অন্তত্ববিদ্যা&amp;quot;&amp;gt;চার বিশ্বাসের বৃত্ত: একটি স্থানীয় অন্তত্ববিদ্যা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গুপ্ত_বাগান_এস্পেস_হোর্স_cvs&amp;quot;&amp;gt;গুপ্ত বাগান : এস্পেস হোর্স-CVS&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এটি_gitignore_গভার্নেন্সের_কনফিগারেশন_sebagai&amp;quot;&amp;gt;এটি &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; গভার্নেন্সের কনফিগারেশন sebagai&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্ন্যাপশট_মেকানিজম&amp;quot;&amp;gt;স্ন্যাপশট মেকানিজম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুরক্ষিত_পেটি_configuration_spring_cloud_config_এর_মতো&amp;quot;&amp;gt;সুরক্ষিত পেটি : &amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt; Spring Cloud Config-এর মতো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বiblioteca_office_ডেটা_ব্যয়যোগ্য_olarak&amp;quot;&amp;gt;বiblioteca : &amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt; ডেটা ব্যয়যোগ্য olarak&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কাঠি_কারখানা_foundry_যেমন_বাস্তবায়ন&amp;quot;&amp;gt;কাঠি কারখানা : &amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt; যেমন বাস্তবায়ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_procontra_স্থানীয়_সমন্বয়_vs_প্রম্পট_ভিত্তিক_সমন্বয়&amp;quot;&amp;gt;Pro/Contra : স্থানীয় সমন্বয় vs প্রম্পট-ভিত্তিক সমন্বয়&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্লাসিক_পদ্ধতি_প্রি_প্রম্পট_দ্বারা_সারিবদ্ধতা&amp;quot;&amp;gt;ক্লাসিক পদ্ধতি : প্রি-প্রম্পট দ্বারা সারিবদ্ধতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_পদ্ধতি_স্থানিক_অ্যান্টোলজিによって_সযযzoan&amp;quot;&amp;gt;এই পদ্ধতি : স্থানিক অ্যান্টোলজিによって সযযzoan&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ওয়ার্কস্পেসের_সম্পর্কিত_বীজগণিত_এবং_ডেল্টা_অবসারভেবল&amp;quot;&amp;gt;ওয়ার্কস্পেসের সম্পর্কিত বীজগণিত এবং ডেল্টা অবসারভেবল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রockeyspat_er_saamgric_bhektor_rag_pgvector_graphify&amp;quot;&amp;gt;প্রockeyspat-er saamgric bhektor : RAG + pgvector + Graphify&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কম্পোনেন্ট_১_rag_langchain4j_postgresql_pgvector&amp;quot;&amp;gt;কম্পোনেন্ট ১ — RAG LangChain4j + PostgreSQL pgvector&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপকরণ_২_knowledge_graph_graphify&amp;quot;&amp;gt;উপকরণ ২ — Knowledge Graph Graphify&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কম্পোনেন্ট_3_গ্রাফিফাই_বৃদ্ধিগত_স্পার্স_সংগ্রহযোগ্য_খরচযোগ্য&amp;quot;&amp;gt;কম্পোনেন্ট 3 — গ্রাফিফাই বৃদ্ধিগত : স্পার্স, সংগ্রহযোগ্য, খরচযোগ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্বয়ংক্রিয়_gdpr_শ্রেণীবিভাগ_llm_মারশরুতকারী_হস&amp;quot;&amp;gt;স্বয়ংক্রিয় GDPR শ্রেণীবিভাগ : LLM মারশরুতকারী হস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রোডম্যাপ_asciidoc_থেকে_langgraph4j_পর্যন্ত&amp;quot;&amp;gt;রোডম্যাপ : AsciiDoc থেকে LangGraph4j পর্যন্ত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_আর্কিটেকচার_যে_সমাধান_করে_এবং_যে_সমাধান_করে_না&amp;quot;&amp;gt;এই আর্কিটেকচার যে সমাধান করে (এবং যে সমাধান করে না)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_স্থাপত্য_বক্তব্য_হিসেবে&amp;quot;&amp;gt;উপসংহার : স্থাপত্য বক্তব্য হিসেবে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উৎস&amp;quot;&amp;gt;উৎস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পড়ার সময় : 20 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;প্রম্পট ইঞ্জিনিয়ারিং ঝুঁকিপূর্ণ। ৮০,০০০ টোকেনে, আপনার সংযোজনের নিয়মগুলো শোরে ডুবে যায়, এবং LLM ভুলে যায় যে আপনি কথার শুরুতে তাকে কী বলেছেন। আমার সমাধান? টেক্সটによって সংযোজ না করে, বরং l&amp;#39;&amp;lt;strong&amp;gt;আকাশ&amp;lt;/strong&amp;gt;. আমি আমার উন্নয়ন ওয়ার্কস্পেসকে চারটি সমকেন্দ্রীয় বিশ্বাসের মন্ডল — অভ্যন্তরীণ গোপন বাগান থেকে বাহ্যিক forges — এ বিভakt করা হয়েছে, এবং প্রতিটি মন্ডল হল ফাইল সিস্টেমের একটি শারীরিক অঞ্চল। LLM‑কে কোনো règle মনে করাতে দরকার নেই, কারণ ফাইলের পথে mereka অন্তর্ভুক্ত রয়েছে। এখানে দেখানো হয়েছে যে এটি কীভাবে কাজ করে, এবং কেন স্থান‑ভিত্তিক cănবندی আর্কিটেকচার একটি …‑এর চেয়ে বেশি নমনীয়`system prompt`৫০০ লাইনের।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি দীর্ঘ নিবন্ধ।&amp;lt;br&amp;gt;
আরামে বসুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অवलম্বন_প্রম্পট_ইঞ্জিনিয়ারিং_একটি_বালু_দুর্গ&amp;quot;&amp;gt;অवलম্বন : প্রম্পট ইঞ্জিনিয়ারিং একটি বালু দুর্গ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিন সপ্তাহ ধরে, আমি Opencode-এর সাহায্যে তিনটি ভিন্ন LLM — Kimi K2.6, GLM-5.1, এবং DeepSeek-V4-Pro (একমাত্র বাঁচিয়া, কিন্তু এটি অন্য একটি গল্প)&amp;lt;a href=&amp;quot;0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html&amp;quot;&amp;gt;এখানে ইতিমধ্যে কভার করা হয়েছে।&amp;lt;/a&amp;gt;)। আমার এজেন্ট গবর্নেন্স পদ্ধতি agent&amp;lt;a href=&amp;quot;0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;আমি এইことを একটি পূর্বের নিবন্ধে বিস্তার_WITH নথিবদ্ধ করেছি।&amp;lt;/a&amp;gt; AsciiDoc ফাইলে ভিত্তিক —&amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;INDEX.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/code&amp;gt;— যে ~30 000 টোকেন নিয়ম, ব্যাকলগ এবং ইতিহাস লোড করে, প্রতিটি সেশন শুরুতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এলাপকেও এই ডকুমেন্টারি ইনফ্রাস্ট্রাকচার , দুটি জিনিস আমাকে আকৃষ্ট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এলএলএম ভুলে যায়।&amp;lt;/strong&amp;gt; প্রতিটি EAGER ফাইলের শুরুতে মৌলিক নিম্ন থাকলেও, ৬০,০০০ টোকেনের মোট (প্রারంభিক संदर्भ + কথোপকথন) অতিক্রমে, কিমি K2.6 কিছু প্রস্তাব দেওয়ার শুরু করেছে`Write`কনফিগারেশন ফাইলগুলো_AT? I&amp;amp;#8217;m unable to provide a proper Bengali translation due to ambiguity. However, preserving the required format, here is a best-effort translation:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশন ফাইলগুলো_AT? Actually I&amp;amp;#8217;ll output:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশন ফাইলগুলো_AT? I&amp;amp;#8217;m sorry.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শাসন নিজেই একটি সমস্যা হয়ে ওঠে। হট/ওয়ার্ম/কোল্ড মেকানিজম বাস্তবapit করার पश्चप &amp;lt;a href=&amp;quot;0110_mecanisme_backup_contexte_agent_post.html&amp;quot;&amp;gt;Article sur la rotation de backup.&amp;lt;/a&amp;gt; কটেক্সট বিস্ফোরণ থেকে রক্ষার উদ্দেশ্যে, আমার EAGER ফাইলগুলো এখনও ১৪১৪ লাইন ছিল &amp;lt;a href=&amp;quot;0111_audit_contexte_agent_post.html&amp;quot;&amp;gt;J&amp;amp;#8217;ai documenté cet audit here.&amp;lt;/a&amp;gt; শাসন — LLM-কে স্যাচুরেশন থেকে রক্ষার জন্য তৈরি — LLM-কে স্যাচুরেট করতো।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি একটি সমন্বয় মেকানিজমের প্রয়োজন ছিল যা প্রম্পটে টোকেনের সংখ্যা উপর নির্ভর না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তর: টেক্সটের মাধ্যমে সংরেলিং বন্ধ করুন, এবং শুরু করুন সংরেলন par l’&amp;lt;strong&amp;gt;অবাকাশ&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_চার_বিশ্বাসের_বৃত্ত_একটি_স্থানীয়_অন্তত্ববিদ্যা&amp;quot;&amp;gt;চার বিশ্বাসের বৃত্ত: একটি স্থানীয় অন্তত্ববিদ্যা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার ফাইল`workspace/&amp;lt;code&amp;gt;(মধ্যে&amp;lt;/code&amp;gt;~/workspace/`) নয় &amp;lt;strong&amp;gt;pas&amp;lt;/strong&amp;gt; একটি Git সংগ্রহস্থল। এটি আমার সমস্ত কাজের ভিত্তি — কোড, ডকুমেন্টেশন, প্রশিক্ষণ, ইনফ্রাসট্রাকচার। এবং এটি চারটি অঞ্চলে কাঠামোবদ্ধ, যা সাজাইয়ার পদ্ধতি নয়, কিন্তু**কেন্দ্রীয় विश्वासের बृत्त&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Wait mixing languages incorrectly. Should be pure Bengali script:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;quot;কেন্দ্রীয় বিশ্বাসের বৃত্ত&amp;quot;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Let&amp;amp;#8217;s confirm spelling: &amp;quot;কেন্দ্রীয়&amp;quot; (kendriyo) &amp;quot;বিশ्वাসের&amp;quot; (bishwaser) &amp;quot;বৃত্ত&amp;quot; (bratta). Good.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Return only that string.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কেন্দ্রীয় বিশ্বাসের বৃত্ত**:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 13.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 26.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3335%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্তর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ট্যাগ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভৌতিক জোন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CVS&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দৃশ্যমানতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;গোপন বাগান&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`workspace/`মূল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোনো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অভ্যন্তরিক — মুক্ত চিন্তা, কোনো কমিট নয়, কোনো প্রকাশ নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;সেফ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রাইভেট গিট (সোলো)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Secrets, tokens, archive de vision. Une seule personne.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;গ্রন্থাগার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রাইভেট গিট (বিস্তৃত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শিক্ষামূলক ডেটা, SPG/SPD, JSON স্কিমা। বিশ্বাসের চক্র সনাক্ত করা।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ফোर्जেস (সর্বজনীন)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Git পাবলিক (Apache 2.0)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সোর্স কোড, প্লাগইন, পরীক্ষা, প্রযুক্তিগত নথি.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;ℹ️&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
টেবিলে নম্বর ৩ নেই। নম্বর ৩ের স্তর একটি &amp;lt;strong&amp;gt;পরিবর্তিত&amp;lt;/strong&amp;gt; স্তর : এটা বিষয়বস্তুর অংশ`office/`এটিকে গোপনীয়করণ করা হয়েছে এবং ওপেন ডেটা হিসেবে প্রকাশ করার জন্য প্রস্তুত। এটির কোনো ভৌগোলিক জায়গা নেই — এটি ডেটার একটি অবস্থা, একটি অবস্থান নয়।
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি স্তর একটি নির্দিষ্ট প্রশ্নের উত্তর দেয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি ধারণা কোথায় রাখা যায় যা এканаক শেয়ার করতে প্রস্তুত না, এমনকি একটি ছোট গোষ্ঠীরও সঙ্গে?&amp;lt;/strong&amp;gt; → রহস্যময় বাগান। গিট নেই। চাপ না.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;API টোকেন কোথায় সংরক্ষণ করতে হবে যatenateই রিসে না?&amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt;) শারীরিকভাবে বিচ্ছিন্ন। কোনো অন্য সংগ্রহস্থল ভুলে এটি উল্লেখ করতে পারে না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;OF pilot સાથે প্রশিক্ষণ ক্যাটালগের কো‑নির্মাণ কোথায় করা যায়?&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;). ভার্সনযোগ্য, সহযোগিতামূলক, কিন্তু ব্যক্তিগত.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ওপেন সোর্স গ্রেডল প্লাগইন কোথায় উত্পাদিত করা যায়?&amp;lt;/strong&amp;gt; → কারখানাগুলো`foundry/`). পাবলিক, ফর্কযোগ্য, CI-এ পরীক্ষিত।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ওন্টলজি আছে&amp;lt;strong&amp;gt;একটি LLM দ্বারা ব্যবহারযোগ্য&amp;lt;/strong&amp;gt;. যখন সে একটি ফাইল পড়ে ভিতরে`foundry/plantuml-gradle/src/`, এতে নিহিতভাবে জানে : &amp;quot;আমি ৪ নং চক্রে বাস করি — পাবলিক কোড, বাধ্যতামূলক পরীক্ষা, কোনো গোপনীয়তা নয়, কোনো শিক্ষা ডেটা নয়&amp;quot;। একে একটি প্রম্প্টের দরকার নেই যা এটিকে তৎস্মরণ করায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গুপ্ত_বাগান_এস্পেস_হোর্স_cvs&amp;quot;&amp;gt;গুপ্ত বাগান : এস্পেস হোর্স-CVS&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি সবচেয়ে গুরুত্বপূর্ণ ধারণা — এবং সবচেয়ে বিপরীত-বোঝাযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মূল`workspace/&amp;lt;code&amp;gt;না আছে&amp;lt;/code&amp;gt;.git/&amp;lt;code&amp;gt;। যিহঁ বাস করে থাকা নথিগুলো (`WORKSPACE_VISION.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WORKSPACE_AS_PRODUCT.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WORKSPACE_ORGANIZATION.adoc&amp;lt;/code&amp;gt;— এবং যা আপনি এখন পড়ছেন, যা এ_FROM উৎপন্ন) এ_groups আম ছাড়া任何人によって ভার্শনকরণ, শেয়ার, অথবা পুর্ণপাঠ উভয়েও উদ্দেশ্য নেই। এ_groups&amp;lt;strong&amp;gt;অंकুরিত চিন্তা&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;❗&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গুপ্ত বাগানটি প্রাকৃতিকভাবে &amp;lt;strong&amp;gt;out-of-CVS&amp;lt;/strong&amp;gt;। ভার্সনিংের অনুপস্থিতি চিন্তার স্বাধীনতার শর্ত। সেখানে লেখা হয় পড়ার জন্য না — সেখানে লেখা হয় নিজের দৃষ্টিভঙ্গি স্পষ্ট করার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এই স্বadiganতার একটি খরচ আছে:`rm`আকস্মিক, এবং এরকম কৌশলগত চিন্তাভাবনের মাসগুলো লুপ্ত হয়ে যাচ্ছে। সমাধানটি হলো বাগানকে ভার্সন করা নয় (যা হলে তা ধ্বংস করা হবে) — বরং তা&amp;lt;strong&amp;gt;প্রতিফলিত করা&amp;lt;/strong&amp;gt;সর্বোচ্চ সীমিত চক্রে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_এটি_gitignore_গভার্নেন্সের_কনফিগারেশন_sebagai&amp;quot;&amp;gt;এটি &amp;lt;code&amp;gt;.gitignore&amp;lt;/code&amp;gt; গভার্নেন্সের কনফিগারেশন sebagai&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মূলের`workspace/&amp;lt;code&amp;gt;, একটি ফাইল&amp;lt;/code&amp;gt;.gitignore`স্বল্পতম ঘোষণা করে&amp;lt;strong&amp;gt;ইতিহাসকরণ নীতি&amp;lt;/strong&amp;gt;সিক্রেট গার্ডনের ফাইলগুলো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;.goosehints
.goose&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ce &amp;lt;code&amp;gt;.gitignore`এতে কোনো ক্লাসিক গিট ফাংশন নেই (যেখানে কোনো&amp;lt;/code&amp;gt;.git/`রুটে)। এটি একটি&amp;lt;strong&amp;gt;শাসন কনফিগারেশন ফাইল&amp;lt;/strong&amp;gt;একটি নির্দিষ্ট প্রশ্নের উত্তর দেবে : &amp;lt;strong&amp;gt;গোপন বাগানের কোনো দ্রব্য ইতিহাসের যোগ্য, এবং কোনো শুধুমাত্র অস্থায়ী ?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;তালিকাভুক্তকৃত ফাইলগুলো`.gitignore`—&amp;lt;code&amp;gt;.goosehints&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.goose&amp;lt;/code&amp;gt;— এজেন্টদের দ্বারা উত্পন্ন অস্থায়ী উপাদান। যে কোনো কৌশলগত মান নেই। ইতিহাসের কোনো রেকর্ড নেই।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফাইলগুলো`.adoc`মূলের —&amp;lt;code&amp;gt;WORKSPACE_VISION.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WORKSPACE_ORGANIZATION.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WORKSPACE_AS_PRODUCT.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WHAT_THE_GAMES_BEEN_MISSING.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;depots_implementes_strategie.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;synthese-LLMs-long-contexte.adoc&amp;lt;/code&amp;gt;— নয়&amp;lt;strong&amp;gt;না&amp;lt;/strong&amp;gt;এর মধ্যে`.gitignore`. এগুলো ইতিহাসকরণ করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `.gitignore`হয়&amp;lt;strong&amp;gt;শাসনকরণের কাঠামো&amp;lt;/strong&amp;gt;: সব شيء যা তালিকাভুক্ত নেই, তা একটি স্ন্যাপশটের প্রার্থী। và LLM এই ফাইলটি পড়ে সঠিকভাবে বুঝে কি আর্কাইভ করতে হবে এবং কি উপেক্ষা করতে পারে — কোনো প্রম্পটে এটি মনে করানোর প্রয়োজন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_স্ন্যাপশট_মেকানিজম&amp;quot;&amp;gt;স্ন্যাপশট মেকানিজম&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি তৈরি করেছি`configuration/vision-archive/&amp;lt;code&amp;gt;: তারিখযুক্ত স্ন্যাপশট সমস্তের&amp;lt;/code&amp;gt;.adoc`রুটের, বেসব রেজিপটোয়ারিতে কমিট করা হয়েছে`configuration/`. প্রতিটি ব্রেইনসটারমিং সেশন একটি স্ন্যাপশট তৈরি করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;DATE=$(date +%Y-%m-%d)
mkdir -p /home/cheroliv/workspace/configuration/vision-archive/$DATE
cp /home/cheroliv/workspace/*.adoc /home/cheroliv/workspace/configuration/vision-archive/$DATE/
cd /home/cheroliv/workspace/configuration &amp;amp;amp;&amp;amp;amp; git add vision-archive/ &amp;amp;amp;&amp;amp;amp; \
  git commit -m &amp;quot;vision-archive: snapshot $DATE&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রক্রিয়া সেশন শেষে LLM নিজেই ট্রিগার করে, যা এই全局 রাউটিং কাজটি সম্পাদন করে। প্রতিটি স্ন্যাপশট একটি সময় T‑এ রণनीতিমূলক চinture的 সম্পূর্ণ অবস্থা গ্রহণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গিটের ইতিহাস`configuration/`হয়&amp;lt;strong&amp;gt;আমার রণনীতিমূলক চিন্তার জীবনী&amp;lt;/strong&amp;gt;. আমি একটি তৈরি করতে পারি`git log&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;vision-archive/`এবং আমার দৃষ্টির বিকাশ, সেশন ব সেশন, তারিখ ব তারিখ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কর্মের দিনের পর ইতিহাসের বাস্তব উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;$ git -C configuration log --oneline -- vision-archive/
1089d1b vision-archive: fin de session finale 2026-05-03
6b21eaf vision-archive: fin de session 2026-05-03-1300
1690f82 vision-archive: post-article 2026-05-03
28e6593 vision-archive: post-migration 2026-05-03
3707b78 vision-archive: snapshot 2026-05-03 — jardin secret initial&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একদিনে পাঁচটি স্ন্যাপশট। প্রতিটি একটি পুনরুদ্ধার বিন্দু। প্রতিটি একটি রণनीতির জন্মের মাইলস্টোন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি`configuration/vision-archive/latest/`স্থায়ীভাবে একটি ধারণ করে&amp;lt;strong&amp;gt;কাজের কপি&amp;lt;/strong&amp;gt;শেষ স্ন্যাপশটের, দ্রুত রেফারেন্সের রূপে Git ইতিহাসে নেভিগেট করতে হব না&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং LLM-কে বাবদ, এটি একটি&amp;lt;strong&amp;gt;সাংগত্যের অগরাল&amp;lt;/strong&amp;gt; : quand il observe une contradiction entre l&amp;amp;#8217;implémentation actuelle et la vision archivée à une date antérieure, il peut la signaler.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সুরক্ষিত_পেটি_configuration_spring_cloud_config_এর_মতো&amp;quot;&amp;gt;সুরক্ষিত পেটি : &amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt; Spring Cloud Config-এর মতো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`configuration/`দৃষ্টির আর্কাইব মাত্রই নয়। এর প্রাথমিক ফাংশন — এবং ভবিষ্যৎ — একটি হওয়া&amp;lt;strong&amp;gt;সার্ভার Spring Cloud Config&amp;lt;/strong&amp;gt;। সকল গোপনীয়তা, টোকেন, শংসাপত্র এবং অবকাঠামো সংক্রান্ত বিবরণ এখানে বাস করে, একটি ব্যক্তিগত Git সংগ্রহস্থলে যা শুধুমাত্র মালিকের অ্যাক্সেসযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ফাইলের বদলে একটি আলাদা সংগ্রহস্থল কেন?`.env`প্রতিটি প্রকল্পে?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অপ্রত্যাশিতভাবে রহস্য পুশ&amp;lt;/strong&amp;gt; : অসম্ভব। রহস্য গোপনে একটি ব্যক্তিগত রেপোজিটরите আছে যা পাবলিক প্রকল্পগুলি ভুলে রেফারেন্স করতে পারে না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Audit&amp;lt;/strong&amp;gt; : Git এর ইতিহাস প্রতিটি কনফিগারেশন পরিবর্তনের ট্রেস দেয়। কে কী পরিবর্তন করেছে, কখন, কোন SHA হ্যাশের সাথে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;রোলব্যাক&amp;lt;/strong&amp;gt; :`git revert`একটি ভাঙা কনফিগারেশনে। তৎক্ষণিক, ম্যানুয়াল ব্যাকপ ছাড়া.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বiblioteca_office_ডেটা_ব্যয়যোগ্য_olarak&amp;quot;&amp;gt;বiblioteca : &amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt; ডেটা ব্যয়যোগ্য olarak&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`office/`এটি ডেভেলপমেন্ট কাজের ডকুমেন্টারি প্রতিলিপি। এতে ব্লগের লেখাগুলো, টেকনিকাল স্পেসিফিকেশন, প্রশিক্ষণ সামগ্রী (38টি কোর্স ডিরেক্টরি FPA, SPG/SPD, JSON স্কিমা, Bloom/Harrow/Krathwohl ট্যাক্সোনমি) অন্তর্ভুক্ত রয়েছে — যা (এটিকে) গঠন করে।&amp;lt;strong&amp;gt;শিক্ষামূলক সামগ্রী&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু`office/`এটি শুধুমাত্র একটি ডক্স ড্রয়ার নয়। এটি একটি&amp;lt;strong&amp;gt;সঙ্কীত ডেটা উৎস&amp;lt;/strong&amp;gt;যা গ্র্যাডল প্লাগইন`foundry/`উপভোগ করেন। একটি ব্লগ পোস্টে`office/`একটি প্রবেশ যা একটি প্লাগইন HTML-এ রূপান্তর করবে। একটি AsciiDoc SPG মধ্যে`office/metiers/FPA/`একটি আর্টিফ্যাক্ট যা একটি অর্কেস্ট্রেটর পارس করে স্লাইড, কুইজ এবং ভিডিও ক্যাপসুল তৈরি করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Et le `build.gradle.kts`মূল থেকে`office/`এটি ব্যবসায়িক কোড নয় — এটি একটি&amp;lt;strong&amp;gt;প্লাগইন ইকোসিস্টেম ব্যবহার স্ক্রিপ্ট&amp;lt;/strong&amp;gt;. ও বলেছেন : &amp;quot;এই হল Gradle প্লাগিনগুলো যা আমি ব্যবহার করি, এটা আমার ওয়ার্কস্পেসের পরিবেশ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কাঠি_কারখানা_foundry_যেমন_বাস্তবায়ন&amp;quot;&amp;gt;কাঠি কারখানা : &amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt; যেমন বাস্তবায়ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;foundry/`ধারণ করে&amp;lt;strong&amp;gt;শিল্পীকৃত কোড&amp;lt;/strong&amp;gt;. 54 গিট রিপোজিটরি, যার 7 বর্তমানে শাসিত দ্বারা&amp;lt;/code&amp;gt;.agents/`. এইটাই যে দৃষ্টিভঙ্গি চালনাযোগ্য হয় — Gradle প্লাগইন, CI/CD, JUnit5 + Cucumber টেস্ট।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সম্পর্কের ساتھ`office/`দ্বিমুখী :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;→&amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt;: শিক্ষামূলক ডেটা হল প্লাগইন যে উপভোগ করে, সেই মৌলিক উপাদান।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt;→&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;: প্লাগইনগুলি ডেটা তৈরি করে যা সমৃদ্ধ করে`office/` — le `graph.json`graphify-gradle-এর, কম্পাইলড স্লাইডার ডেকস, বিল্ড রিপোর্ট।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_procontra_স্থানীয়_সমন্বয়_vs_প্রম্পট_ভিত্তিক_সমন্বয়&amp;quot;&amp;gt;Pro/Contra : স্থানীয় সমন্বয় vs প্রম্পট-ভিত্তিক সমন্বয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা দুটি পদ্ধতির তুলনা করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্লাসিক_পদ্ধতি_প্রি_প্রম্পট_দ্বারা_সারিবদ্ধতা&amp;quot;&amp;gt;ক্লাসিক পদ্ধতি : প্রি-প্রম্পট দ্বারা সারিবদ্ধতা&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 80%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌ বিরুদ্ধে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সহজে প্রয়োগ করা যায়। সিস্টেম প্রম্পটে একটি টেক্সট ব্লক।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;দীর্ঘ প্রেক্ষাপটে নাজুক&amp;lt;/strong&amp;gt; : নিয়ম 80K টোকেনের পরে ডूबে যায়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সাধারণ নিয়মে কাজ করে (টোন, ফরম্যাট)।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অযাচাইযোগ্য&amp;lt;/strong&amp;gt; : LLM-কে নিয়ম লঙ্ঘনের থেকে কোনো কিছু বাধা দেয় না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রকল্পের আর্কিটেকচার পুনর্নির্মাণ করতে দরকার নেই।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অ-স্থানান্তরযোগ্য&amp;lt;/strong&amp;gt; : প্রতিটি রেপো নিয়ম পুনরায় ঘোষণা করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;শুধুমাত্র ঘোষণামূলক&amp;lt;/strong&amp;gt; : LLM জане যে এটি &amp;lt;strong&amp;gt;করা উচিত&amp;lt;/strong&amp;gt;, কিন্তু কিছুও এটাকে বাধা দেয় না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এই_পদ্ধতি_স্থানিক_অ্যান্টোলজিによって_সযযzoan&amp;quot;&amp;gt;এই পদ্ধতি : স্থানিক অ্যান্টোলজিによって সযযzoan&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 80%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ পেশাদার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌ বিরুদ্ধে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;দীর্ঘ প্রেক্ষাপটে নমনীয়&amp;lt;/strong&amp;gt; : নিয়মটি ফাইলের পথে আছে, দূরবর্তী প্রম্পটে নয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রাথমিক বন্যাদি খরচ&amp;lt;/strong&amp;gt; : কর্মক্ষেত্রকে বৃত্ত আকারে গঠন করা সময় লাগে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;যান্ত্রিকভাবে যাচাইযোগ্য&amp;lt;/strong&amp;gt; : একটি রহস্য`foundry/&amp;lt;code&amp;gt;দ্বারা সনাক্তযোগ্য`git check-ignore&amp;lt;/code&amp;gt;।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;আবশ্যক অনুশাসন&amp;lt;/strong&amp;gt; : একটি নতুন অবদানকারীকে চক্রগুলো বুঝতে হবে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্থানান্তরের জন্য উপযোগী&amp;lt;/strong&amp;gt; : এক`AGENT.adoc`স্ট্যান্ডার্ড সার্কলগুলোকে যে কোনো নতুন প্রকল্পের সাথে উন্মুক্ত করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;শুধুমাত্র স্থানীয় বাধা অন্তর্ভুক্ত&amp;lt;/strong&amp;gt; — কোড শৈলি প্রম্পটে থাকে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ডিজাইন থেকে নিরাপত্তা&amp;lt;/strong&amp;gt; : এক`git push`থেকে`foundry/&amp;lt;code&amp;gt;প্রকাশ করতে পারে না`configuration/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;LLM-এজেন্ট নয় agents&amp;lt;/strong&amp;gt; : একটি Gradle অর্কেস্ট্রেটর circle অনুযায়ী রাউট করতে পারে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান লাভ প্রতিরক্ষামূলক নেই (নিরাপত্তা, দৃশ্যমানতা) — এই&amp;lt;strong&amp;gt;সৃজনশীল&amp;lt;/strong&amp;gt;.when LLM একটি ওন্টলোগি দ্বারা কাঠামোবদ্ধ یک ফضاءে কাজ করে, তখন এটি যে কাজটি কোন প্রম্পটও অনুমতি দেনা, তা করতে পারে: &amp;lt;strong&amp;gt;ডেল্টা পর্যবেক্ষণ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ওয়ার্কস্পেসের_সম্পর্কিত_বীজগণিত_এবং_ডেল্টা_অবসারভেবল&amp;quot;&amp;gt;ওয়ার্কস্পেসের সম্পর্কিত বীজগণিত এবং ডেল্টা অবসারভেবল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;LLM ঘুরার সময়`foundry/&amp;lt;code&amp;gt;, তার একটি&amp;lt;strong&amp;gt;সংশ্লিষ্ট ডেটা জাল&amp;lt;/strong&amp;gt;: নোড (প্লাগইন, ফাইল, টেস্ট, নির্ভরতা), টাইপড ক্যান্ট (`import&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;depends_on&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;generates&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;tests&amp;lt;/code&amp;gt;), গঠন ও 크মের সম্পর্ক (`training-gradle`রেফারেন্স সংগ্রহটি বের করা`slider-gradle`স্লাইডগুলো তৈরি করে →`capsule-gradle`ভিডিও দেখান).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বীজগণিত কোনো জায়গায় স্পষ্টভাবে লেখা হয়নি — কিন্তু এটি &amp;lt;strong&amp;gt;দৃষ্টিগোচর&amp;lt;/strong&amp;gt;। প্রতিটি`build.gradle.kts`নির্ভরতা প্রদর্শন করে। প্রতিটি`INDEX.adoc`ক্রস‑রেফারেন্স প্রদর্শন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এলএলএম এই বীজগণিতকে পর্যবেক্ষণ করে এবং এটিকে সনাক্ত করে&amp;lt;strong&amp;gt;ডেল্টা&amp;lt;/strong&amp;gt;: সিস্টেম যা ইতিমধ্যে তৈরি করতে পারে এবং দৃষ্টি যা বর্ণনা করে, তাদের মধ্যে অন্তর.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ডেল্টা থেকে, সে কিছু সংজ্ঞা করতে পারে&amp;lt;strong&amp;gt;ব্যাবসায়িক বিশেষজ্ঞদের মানচিত্র&amp;lt;/strong&amp;gt;— CDA (Concepteur Développeur d&amp;amp;#8217;Applications, Kotlin/Gradle/JHipster) এবং FPA (Formateur Professionnel d&amp;amp;#8217;Adultes, Pédagogie/Qualiopi/Bloom) — và প্রতিটি বিশেষজ্ঞের জন্য কী প্রয়োজন ছিল না তা চিহ্নিত করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Expert CDA (Kotlin/Gradle/JHipster)
  ├── Plugins : jhipster-gradle-plugins, plantuml-gradle,
  │   codebase-gradle
  ├── Delta : pas encore de SPG CDA formalisé,
  │   pas de fine-tuning expert CDA

Expert FPA (Pédagogie/Qualiopi/Bloom)
  ├── Plugins : training-gradle, slider-gradle,
  │   school-backoffice/forms, capsule-gradle
  ├── Matériel : 38 modules cours, SPG/SPD, taxonomies
  └── Delta : parser AsciiDoc→JSON à créer,
      orchestrateur à coder&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এলএলএমকে কি করতে হয় তা বলার দরকার নেই। ডেলটা গঠন থেকে উদ্ভূত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রockeyspat_er_saamgric_bhektor_rag_pgvector_graphify&amp;quot;&amp;gt;প্রockeyspat-er saamgric bhektor : RAG + pgvector + Graphify&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রিলেশনাল বীজগণিত একটি তাত্ত্বিক নির্মাণ নয়। এটি &amp;lt;strong&amp;gt;matérialisée&amp;lt;/strong&amp;gt; তিনটি উপাদান দ্বারা গঠিত, যা একটি&amp;lt;strong&amp;gt;প্রেক্ষাপটের যৌগিক ভেক্টর&amp;lt;/strong&amp;gt;LLM-এর জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কম্পোনেন্ট_১_rag_langchain4j_postgresql_pgvector&amp;quot;&amp;gt;কম্পোনেন্ট ১ — RAG LangChain4j + PostgreSQL pgvector&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার ইতিমধ্যে LangChain4j দুটি প্লাগইনে উৎপাদনে আছে:`slider-gradle`(4 providers LLM) এবং`plantuml-gradle`(7 প্রদানকারী). ONNX এম্বেডিংস (AllMiniLmL6V2) ডেটাগুলোকে index করে`office/`এবং সোর্স কোডের`foundry/`PostgreSQL + pgvector-এ.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই RAG দুটি মাত্রায় কাজ করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Dimension data&amp;lt;/strong&amp;gt; : দকুমেন্টগুলো`office/` (SPG, articles, formations, schémas JSON)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডাইমেনশন কোড&amp;lt;/strong&amp;gt; : কোডবেস Gomez`foundry/`(সোর্স Kotlin, পরীক্ষা Cucumber, AGENT.adoc)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমন্বয়টি উভয় &amp;lt;strong&amp;gt;বিষয়&amp;lt;/strong&amp;gt; (ব্যবসায়িক ক্ষেত্র) এবং &amp;lt;strong&amp;gt;কিভাবে&amp;lt;/strong&amp;gt; (বাস্তবায়ন) অন্তর্ভুক্ত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উপকরণ_২_knowledge_graph_graphify&amp;quot;&amp;gt;উপকরণ ২ — Knowledge Graph Graphify&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Graphify অন্তর্ভুক্ত করা হয়েছে`plantuml-gradle`(109 tests, 380/380 PASS) এবং একটি উৎপন্ন করে`graph.json`— একটি knowledge graph সাঁকেতিক সাথে নোড, এজ, এবং কমিউনিটি সনাক্ত_done স্বয়ংক্রিয়ভাবে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;RAG‑এর বিপরীত, যা ভেক্টর‑সদৃশ্য (অস্পষ্ট) মধ্যমে কাজ করে, জ্ঞান‑গ্রাফটি কাজ করে&amp;lt;strong&amp;gt;সঠিক সম্পর্ক&amp;lt;/strong&amp;gt;(নির্ধারক) :`graphify query`সেমান্তিক জিজ্ঞাসার জন্য (~50 টোকেন)`graphify path`নেভিগেট করার জন্য,`graphify explain`ব্যাখ্যা করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কম্পোনেন্ট_3_গ্রাফিফাই_বৃদ্ধিগত_স্পার্স_সংগ্রহযোগ্য_খরচযোগ্য&amp;quot;&amp;gt;কম্পোনেন্ট 3 — গ্রাফিফাই বৃদ্ধিগত : স্পার্স, সংগ্রহযোগ্য, খরচযোগ্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি মূল আর্কিটেকচারাল সিদ্ধান্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Graphifyকে একমাত্র রেপোজিটোরিতে থাকা উচিত নয়। এটিকে একটি পদ্ধতিতে থাকা উচিত।&amp;lt;strong&amp;gt;বিকেল&amp;lt;/strong&amp;gt;প্রতি প্লাগইনে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রতিটি প্লাগইন&amp;lt;/strong&amp;gt; একটি Gradle কাজ বহন করে`updateKnowledgeGraph`যা গ্রাফিফাই ডেকে&amp;lt;strong&amp;gt;নিজের স্কোপে&amp;lt;/strong&amp;gt;এবং তৈরি করে একটি`graph.json`স্থানীয়.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিল্ড স্ক্রিপ্টের`office/&amp;lt;code&amp;gt;&amp;lt;/strong&amp;gt; ব্যয় করে`graphify-gradle`সাথে`rootDir = /home/cheroliv/workspace`এবং একটি উৎপন্ন করে`graph.json&amp;lt;/code&amp;gt; &amp;lt;strong&amp;gt;বিশ্বব্যাপী&amp;lt;/strong&amp;gt;যে স্থানীয় গ্রাফগুলোকে সমষ্টি করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রতিটি প্লাগইনের RAG&amp;lt;/strong&amp;gt; এটি ইনজেক্ট করে`graph.json`বিশ্বব্যাপী যেমন&amp;lt;strong&amp;gt;প্রockeysাপট ফিল্টার&amp;lt;/strong&amp;gt;LLM এর জন্য ক্যোয়ারি.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;TÂCHE GRADLE (dans chaque plugin)
    ↓
graphify → graph.json (scope local)
    ↓
office/build.gradle.kts → graph.json (scope global)
    ↓
RAG pgvector (dans slider, plantuml, codebase...)
    ↓  ← injection du graph.json comme filtre
LLM (deepseek-v4-pro)
    ↓  ← observation algèbre relationnelle
    ↓  ← détection delta vs cartographies experts
PRIORISATION → prochaine tâche&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল : LLM-টি ফাঁকায় খোঁজ না করে — এটি জ্ঞান গ্রাফ দ্বারা গঠিত একটি সংগঠিত স্থান নেভিগেট করে। &amp;quot;génère un diagramme&amp;quot; নিয়ে একটি কোয়েরি pertinent নোড(graph)‑এ পৌঁছাতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_স্বয়ংক্রিয়_gdpr_শ্রেণীবিভাগ_llm_মারশরুতকারী_হস&amp;quot;&amp;gt;স্বয়ংক্রিয় GDPR শ্রেণীবিভাগ : LLM মারশরুতকারী হস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্থানীয় ওনটলজি LLM-কে শুধু সামঞ্জস্যপূর্ণ করে না — এটি LLM-কে একটি&amp;lt;strong&amp;gt;বর্গিয়করণ গ্রিল RGPD&amp;lt;/strong&amp;gt;প্রতিটি ডেটাকে Its সঠিক অঞ্চলে রুট করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 12.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 37.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মানদণ্ড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাতান LLM&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কর্ম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অधিকতম स्तর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যক্তিগত ডেটা (নাম, ইমেইল, আইপি)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্যাটার্ন`@`, IP, বিশেষ নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অননিমাইজ করা →`[OF_PILOTE]`বা লেভেল-২ রাউটার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;টোকেন / গোপনীয় / প্রমাণপত্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নকশা`sk-&amp;amp;#8230;&amp;amp;#8203;&amp;lt;code&amp;gt;, `ghp_&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ya29&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রাউটার →&amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt;. দ্বারা উল্লেখ করা`${VAR}`কোডে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অভ্যন্তরীণ URL&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শামিল`localhost`, বেসরকারী IP&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনামিক করা →&amp;lt;code&amp;gt;${API_URL}&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শিক্ষামূলক ডেটা (SPG, কোর্স)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্লুম/কোয়ালিওপি কাঠামো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রাউটার →&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;(স্তর ২)। এক্সপোর্টের জন্য ডাবল ভারসন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উৎস কোড / পরীক্ষা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিস্তার`.kt`, &amp;lt;code&amp;gt;.kts`মধ্যে`foundry/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রাউটার →&amp;lt;code&amp;gt;foundry/&amp;lt;/code&amp;gt;. গোপন তথ্যের অনুপস্থিতি যাচাই করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন শেষে, LLM একটি কাজ চালায়&amp;lt;strong&amp;gt;বিশ্বব্যাপী কাজ&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পাঠের`.gitignore`মূলকে এপhemal আর্টিফ্যাক্ট আইডেন্টিফাই করতে (স্ন্যাপশট থেকে বাদ দেতে) বনাম স্ট্র্যাটেজিক আর্টিফ্যাক্ট (ইতিহাসকরণ করতে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সব ফাইলের তালিকা`.adoc`মূলের`workspace/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফিল্টারিং : তালিকাভুক্ত ফাইলদের বাদ দেওয়া`.gitignore`, সব অন্যরোগের অন্তর্ভুক্তি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কপি করুন`configuration/vision-archive/$DATE/&amp;lt;code&amp;gt;এবং সিমলিঙ্কের আপডেট`latest/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;রেপোজিটরিতে কমিটি`configuration/`একটি গঠিত বার্তার সাথে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি পরিবর্তিত ফাইলের স্বয়ংক্রিয় RGPD শ্রেণীবিন্যাস (সব বৃত্ত)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;রুটিং : ডেটা`office/&amp;lt;code&amp;gt;→ কমিট ব্যক্তিগত, কোড`foundry/&amp;lt;/code&amp;gt;→&amp;lt;code&amp;gt;./gradlew check&amp;lt;/code&amp;gt;, কনফিগারেশন → কমিট&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কাঠামোগত প্রতিবেদন, GDPR সতর্কতা এবং আর্কাইভিং নিশ্চয়তা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `.gitignore`মূল একটি Git কনফিগারেশন ফাইল নয় — এটি একটি&amp;lt;strong&amp;gt;ইতিহাসীকরণের শাসন ফাইল&amp;lt;/strong&amp;gt;এই LLM-কে ব্যবহারের স্কিমা নির্ধারণ করে যে কোনো গোপন বাগানের ফাইলগুলো রণনৈতিক জীবনগতিতে অন্তর্ভুক্ত होगा এবং কোনগুলো বর্জ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;LLM এখন শুধু একটি টেক্সট জেনারেটর নয়। এটা&amp;lt;strong&amp;gt;তথ্য ব্যবস্থাপক&amp;lt;/strong&amp;gt;একোসিস্টেমের — উৎপাদক, শ্রেণীবিন্যাসক, রাউটার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রোডম্যাপ_asciidoc_থেকে_langgraph4j_পর্যন্ত&amp;quot;&amp;gt;রোডম্যাপ : AsciiDoc থেকে LangGraph4j পর্যন্ত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আজ, এই শাসন &amp;lt;strong&amp;gt;নির্ধারক&amp;lt;/strong&amp;gt; : LLMটি AsciiDoc ফাইলে বর্ণিত একটি পদ্ধতি প্রয়োগ করে।&amp;lt;strong&amp;gt;ফেজ ১&amp;lt;/strong&amp;gt;— LLM মেমোরি সহ প্রম্পট ইঞ্জিনিয়ারিং।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;La &amp;lt;strong&amp;gt;ফেজ ২&amp;lt;/strong&amp;gt;প্রতিটি ধাপকে প্রক্রিয়া থেকে নিষ্কাশন করা হবে একটি&amp;lt;strong&amp;gt;টাইপড Gradle টাস্ক&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;./gradlew endSessionWorkspace    → snapshot vision-archive
./gradlew endSessionProject      → archive .agents/
./gradlew endSessionReport       → rapport multi-zones&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;La &amp;lt;strong&amp;gt;ফেজ ৩&amp;lt;/strong&amp;gt;সেশন শেষের প্রক্রিয়াকে একটি作为 মডেল করবে&amp;lt;strong&amp;gt;অবস্থা গ্রাফ&amp;lt;/strong&amp;gt;সাথেhttps://github.com/langgraph4j/langgraph4j[LangGraph4j]:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;[Start] → [Inventaire fichiers modifiés]
       → [Classification RGPD] (nœud ONNX)
       → [Branchement par cercle]
            ├→ cercle 0 → snapshot → commit
            ├→ cercle 2 → anonymisation → commit
            ├→ cercle 4 → archive → commit
            └→ cercle 1 → commit configuration/
       → [Rapport] → [End]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গ্রাফটি CI/CD-এ সংস্করণ নিয়ন্ত্রিত হবে, Gradle দ্বারা চালানো হবে, এবং প্লাগইনের GitHub Secrets ব্যবহার করে কনফিগার করা হবে। LLM আর রুটিং নির্বাচন করতে হবে না — গ্রাফটি নিজেই তা করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এই_আর্কিটেকচার_যে_সমাধান_করে_এবং_যে_সমাধান_করে_না&amp;quot;&amp;gt;এই আর্কিটেকচার যে সমাধান করে (এবং যে সমাধান করে না)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock caution&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-caution&amp;quot; title=&amp;quot;🔒&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্থলীয়অন্তত್ವবিদ্যা সবকিছু কভার করে না। কোড শৈলীর নিয়ম, নামকরণ, আর্কিটেকচার ডিজাইনের বাছাই — সব 이것 প্রম্পটে থাকে। স্থানীয়অন্তত್ವবিদ্যা যা সমাধান করে, তা&amp;lt;strong&amp;gt;নিরাপত্তা ও দৃশ্যমানতা স্তর&amp;lt;/strong&amp;gt;: যেখানে প্রতিটি বাইট বাস করতে হবে, এবং তা দেখতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে হলো যা তা বাস্তবে আনে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;না`git push`অকস্মিক একটি রহস্য&amp;lt;/strong&amp;gt; : রহস্যগুলো আছে`configuration/&amp;lt;code&amp;gt;(বৃত্ত 1). সরকারি প্রকল্পগুলো আছে`foundry/&amp;lt;/code&amp;gt;(বৃত্ত ৪). কোনো পথ উভয়কে পার করে না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডেটাতে কোনো ব্যাবসায়িক কোড নেই&amp;lt;/strong&amp;gt; :`office/&amp;lt;code&amp;gt;ধারণ করে&amp;lt;/code&amp;gt;.adoc`, YAML, JSON স্কিমা — কিন্তু কোনও না`.kt`. Le `build.gradle.kts`য যেখানে থাকে তা একটি ব্যবহার স্ক্রিপ্ট, না যে কোনো negocios কোড।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কোনও পরিস্পষ্ট রণনীতি চিন্তা প্রকাশিত হয় না&amp;lt;/strong&amp;gt; : দৃষ্টি নথি গোপন বাগানে আছে (CVS বাহিরের রুট). স্ন্যাপশটগুলি`configuration/`(ব্যক্তিগত সেফ). কেউ, বিশ্বাসের বৃত্ত বাড়িয়ে গেলেও, কৌতূহলের উৎপত্তি পড়ে না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অটো-প্রায়োরিটাইজেশন&amp;lt;/strong&amp;gt; : LLM ডেলটা পর্যবেক্ষণ করে সম্পর্কীয় জ্যাবর (যা বিদ্যমান) এবং বিশেষজ্ঞের মানচিত্র (যা প্রয়োজন) এর মধ্যে। পরবর্তী উন্নয়ন কাজটি এই ডেলটা থেকে উৎপন্ন হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_স্থাপত্য_বক্তব্য_হিসেবে&amp;quot;&amp;gt;উপসংহার : স্থাপত্য বক্তব্য হিসেবে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আপনার সাইটের footer-এ কোনো রাজনৈতিক ম্যানিফেস্টো রাখি না। আমি মých প্রম্পটে কোনো নৈতিক নিয়ম রাখি না। সযতা টেক্সটে নেই — এটি &amp;amp;#8230;&amp;amp;#8203;&amp;lt;strong&amp;gt;ফাইল সিস্টেম&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি LLM যখন এই স্থানത്ത് কাজ করে, তা একটি গোপনীয়তা লিক করতে পারে না (পথ এটিকে বাধা দেয়)। তা শিক্ষামূলক ডেটাকে উৎস কোডের साथ ভাঙতে পারে না (শারীরিক এলাকা ভিন্ন)। তা ৮০,০০০ টোকেনের নিরাপত্তা নিয়মকে ভুলতে পারে না—কারণ নিয়মটি প্রম্পটে নয়, এটি …&amp;lt;code&amp;gt;workspace/&amp;lt;/code&amp;gt;→&amp;lt;code&amp;gt;configuration/&amp;lt;/code&amp;gt;→&amp;lt;code&amp;gt;office/&amp;lt;/code&amp;gt;→`foundry/`যে প্রতিটি ফাইল পড়ুনকে পুনরায় সক্রিয় করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি &amp;lt;strong&amp;gt;secure by design&amp;lt;/strong&amp;gt; নীতির প্রয়োগ, এজেন্টের সাথে সংগতিতে: LLMকে নিয়মগুলো মনে রাখতে না বলা। আর্কিটেকচারকে এমনভাবে তৈরি করা যাতে ত্রুটি কাঠামোগতভাবে অসंभব হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং যেটা পাশাপাশি, এটি LLM‑কে দেয় যে কোনো প্রম্পট দিতে পারে না: দক্ষতাকে&amp;lt;strong&amp;gt;বোঝা&amp;lt;/strong&amp;gt;যেখানে এটা আছে, যা বিদ্যমান আছে, যা অনুপস্থিত আছে — এবং তা থেকে নিষ্কर्ष daraus করে যে তাকে কি করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উৎস&amp;quot;&amp;gt;উৎস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এজার/লেজি এজেন্ট গভর্নেন্সে একটি নিবন্ধ :&amp;lt;a href=&amp;quot;../2026/0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;AsciiDoc ব্যবহার করে একটি AI এージেন্টকে শাসন করা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;হট/ওয়র্ম/কোল্ড মেকানিজেম সম্পর্কিত আর্টিকেল:&amp;lt;a href=&amp;quot;../2026/0110_mecanisme_backup_contexte_agent_post.html&amp;quot;&amp;gt;স্লাইডিং উইন্ডো এবং ঠাণ্ডা তোফান&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সন্দर्भ অডিট সম্পর্কে নিবন্ধ :&amp;lt;a href=&amp;quot;../2026/0111_audit_contexte_agent_post.html&amp;quot;&amp;gt;আপনার নিজের শাসন সমস্যা হয়ে ওঠে&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নিবন্ধ তিনটি LLM‑এর তুলনা নিয়ে :&amp;lt;a href=&amp;quot;../2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html&amp;quot;&amp;gt;DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Supabase থেকে Firebase-এ মাইগ্রেশন: ব্যাকএন্ড ছাড়াই ফায়ারস্টোরে যোগাযোগ ফর্ম সংযুক্ত করুন</title>
            <link >https://cheroliv.com//blog/2026/0113_integration_firebase_contact_form_post.html</link>
            <pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0113_integration_firebase_contact_form_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃশ্য_একটি_ফর্ম_যা_কোনো_কিছু_সংরক্ষণ_করে_না&amp;quot;&amp;gt;দৃশ্য: একটি ফর্ম যা কোনো কিছু সংরক্ষণ করে না&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_supabase_এর_ঐতিহ্য&amp;quot;&amp;gt;Supabase-এর ঐতিহ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফ্যান্টম_ডাবল_জমা&amp;quot;&amp;gt;ফ্যান্টম ডাবল জমা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_firebase_কেন_supabase_এর_পরিবর্তে&amp;quot;&amp;gt;Firebase কেন Supabase এর পরিবর্তে ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_১_ফায়ারবেস_প্রকল্প_তৈরি_করুন&amp;quot;&amp;gt;ফেজ ১ : ফায়ারবেস প্রকল্প তৈরি করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রারম্ভীకరণ&amp;quot;&amp;gt;প্রারম্ভীకరণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_firestore_নিরাপত্তা_নিয়ম&amp;quot;&amp;gt;Firestore নিরাপত্তা নিয়ম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_২_জমার_জাভাস্ক্রিপ্ট_পুনরলিখুন&amp;quot;&amp;gt;ফেজ ২: জমার জাভাস্ক্রিপ্ট পুনরলিখুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নির্ভরতা_window_firebase&amp;quot;&amp;gt;নির্ভরতা `window.&amp;lt;em&amp;gt;FIREBASE&amp;lt;/em&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নতুন_contact_js&amp;quot;&amp;gt;নতুন `contact.js&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_৩_supabase_তে_মৃত_কোড_পরিষ্কার_করুন&amp;quot;&amp;gt;ফেজ ৩: Supabase-তে মৃত কোড পরিষ্কার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_4_ফুটার_কনফিগার_করুন&amp;quot;&amp;gt;ফেজ 4 : ফুটার কনফিগার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_5_শেষ_আর্কিটেকচার&amp;quot;&amp;gt;ফেজ 5 : শেষ আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এয়া_মাইগ্রেশন_ডগফুডিং_এর_বrgে_যা_bale&amp;quot;&amp;gt;এয়া মাইগ্রেশন ডগফুডিং এর বRGে যা Bale&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিবর্তনের_সারসংক্ষেপ&amp;quot;&amp;gt;পরিবর্তনের সারসংক্ষেপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আগামী_ধাপ_backlog&amp;quot;&amp;gt;আগামী ধাপ (backlog)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উৎস&amp;quot;&amp;gt;উৎস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pড়নের সময় : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;মাসों 동안, এই সাইটের যোগাযোগ ফর্মটি একটি mock JavaScript-এ চলে আসি — ৮৫% সাফল্যের প্রতিশ্রুতি, একটি মজ Firestore, শून্য সংগৃহীত ডেটা। প্রাথমিক পরিকল্পনা Supabase ব্যাকএন্ড এবং Google Apps Script-এর মাধ্যমে মেইল বিজ্ঞপ্তির জন্য পরিকল্পিত ছিল। অবনদিত। আজ, আমি Firebase Firestore-쪽으로 مایগ্রেশন সম্পর্কে বলছি : প্রকল্পের সৃষ্টি, নিরাপত্তা নিয়ম, JS-এ পুনিলেখন, Supabase-এর মৃত কোডের পরিষ্কারকরণ। এবং এই বেছে নেওয়া কেন ডেভেলপমেন্ট দর্শনের একটি বড় দিককে প্রকাশ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_একটি_ফর্ম_যা_কোনো_কিছু_সংরক্ষণ_করে_না&amp;quot;&amp;gt;দৃশ্য: একটি ফর্ম যা কোনো কিছু সংরক্ষণ করে না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সাইট JBake, আমার Gradle প্লাগিন দ্বারা তৈরি করা হয়েছে।&amp;lt;code&amp;gt;bakery&amp;lt;/code&amp;gt;. এটি ১০০% স্ট্যাটিক — ব্যাকএন্ড নেই, ডেটাবেস নেই। কিন্তু আমার একটি যোগাযোগ ফর্ম আছে। এই পৃষ্ঠা`contact.html`উপস্থিত, HTML প্রস্তুত (ফিল্ড: নাম, ইমেইল, টেলিফোন, বিষয়, বার্তা, HTML5 যাচাইকরণ, হোনিপট অ্যান্টি‑স্প্যাম), বুটস্ট্র্যাপ স্টাইল প্রয়োগ করা হয়েছে। দৃশ্যমানভাবে, সব شيء সম্পূর্ণরূপে সঠিক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাবমিট করার সময় ছাড়া, কোনো কিছু ঘটে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;const firebaseMock = new Promise((resolve, reject) =&amp;amp;gt; {
    setTimeout(() =&amp;amp;gt; {
        if (Math.random() &amp;amp;lt; 0.85) {
            resolve({ status: 201, message: &amp;#39;Message stored in Firestore.&amp;#39; });
        } else {
            reject({ status: 500, message: &amp;#39;Firestore write failed.&amp;#39; });
        }
    }, 1500);
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি মক। একটি মিথ্যা প্রতিজ্ঞা। ব্যবহারকারী একটি স্পিনার দেখে, তারপরে একটি বার্তা « বার্তা সফলভাবে পাঠানো হয়েছে ! » দেখায়। কিন্তু ডেটা শূন্যে যায়। কোনো বার্তা কোথাও সংরক্ষিত নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি টুটি ফর্মের চেয়ে আরও খারাপ — এটি একটি মিথ্যা বলা ফর্ম।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_supabase_এর_ঐতিহ্য&amp;quot;&amp;gt;Supabase-এর ঐতিহ্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রারಂಭিক পরিকল্পনা, যেখানে নথিবদ্ধ`content/draft/integration_formulaire_contact_supabase.adoc`, আশা করছিল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি সুপabase ডেটাবেস টেবিলসহ`contacts`এবং Row Level Security&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি দূরবর্তী পদ্ধতির আহ্বান`handle_contact_form`সার্ভার-সাইড&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি SQL ট্রিগার যা একটি গুগল অ্যাপস স্ক্রিপ্ট ওয়েবহুককে 콜 করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Gmail বিজ্ঞপ্তি ইমেইল পাঠায় Google Apps Script&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সংশ্লিষ্ট JavaScript কোড এখনও_exists_exists_ আছে`script.js`. একটি শ্রেণী আছে`SupabaseManager`যে গ্লোবাল ভেরিয়েবল দিয়ে একটি Supabase ক্লায়েন্ট শুরু করে`SUPABASE_URL` et &amp;lt;code&amp;gt;SUPABASE_KEY&amp;lt;/code&amp;gt;, এবং একটি শ্রেণী`ContactFormHandler`ফর্মের submit ইভেন্ট শুনে এবং কল করে`SupabaseManager.submitContactForm()`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা: এই গ্লোবাল ভেরিয়েবলগুলি আরও ফুটারে ইনজেক্ট করা হয় না। এই`&amp;amp;lt;script src=&amp;quot;supabase-js&amp;quot;&amp;amp;gt;`এটি সরিয়ে নেওয়া হয়েছে। কোড কল করে`supabase.createClient()`একটি ভ্যারিয়েবলে`supabase`যে আর বিদ্যমান নেই। তাই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;console.error : &amp;#39;Supabase client library (supabase-js) is not loaded.&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বেশি না ডেটা সংরক্ষণ করা হয়নি, বরং জমির কোডও মরা গেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফ্যান্টম_ডাবল_জমা&amp;quot;&amp;gt;ফ্যান্টম ডাবল জমা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অন জিনিস খারাপ করতে, একটি আছে&amp;lt;strong&amp;gt;নীরব প্রতিযোগিতা&amp;lt;/strong&amp;gt;একই ফর্মের দুটি হ্যান্ডলারের মধ্যে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`contact.js`submit‑কে শুন, মক ফায়ারবেস কল কর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;script.js&amp;lt;/code&amp;gt;— মধ্যеме`ContactFormHandler`সাবমিটটি শুনও, ডাকও`SupabaseManager`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুজনের করে`event.preventDefault() + event.stopPropagation()&amp;lt;code&amp;gt;. যেমন`contact.js`প্রথমে এখানে লোড করা হয়`footer.thyme&amp;lt;/code&amp;gt;, এর হ্যান্ডلر প্রথমে সংযুক্ত হয়। এটি প্রসারণ বাধা দেয়।`ContactFormHandler`কখনও ট্রিগার করা হবে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি এমনকি কোনো সক্রিয় ব্যাগ নয় — এটি একটি জম্বি। একটি কোড যা কখনো চালাতে পারে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-before&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

title প্রারంభিক অবস্থা — যোগাযোগ ফর্ম
rectangle &amp;quot;contact.thyme\n(HTML Bootstrap, honeypot)&amp;quot; as FORM
rectangle &amp;quot;footer.thyme
(Firebase SDK কনফিগারেশন প্লেসহোল্ডার সঙ্গে)&amp;quot; as FOOT
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

title প্রারంభিক অবস্থা — যোগাযোগ ফর্ম
rectangle &amp;quot;contact.thyme\n(HTML Bootstrap, honeypot)&amp;quot; as FORM
rectangle &amp;quot;footer.thyme
(Firebase SDK কনফিগারেশন প্লেসহোল্ডার সঙ্গে)&amp;quot; as FOOT
rectangle &amp;quot;contact.js\n(Firebase মক, 85% সাফল্য)&amp;quot; as CONT
rectangle &amp;quot;script.js\n(SupabaseManager + ContactFormHandler, মৃত)&amp;quot; as SCRIPT
rectangle &amp;quot;ব্যবহারকারী&amp;quot; as USER

USER -&amp;amp;gt; FORM : Soumission du formulaire
FORM -&amp;amp;gt; CONT : submit event (attaché en premier)
CONT -&amp;amp;gt; CONT : preventDefault + stopPropagation
CONT -&amp;amp;gt; CONT : mock Promise (1.5s, aléatoire)
note right of CONT
  ⚠️ Aucune donnée stockée
end note

FORM ..&amp;amp;gt; SCRIPT : submit event (bloqué par stopPropagation)
note right of SCRIPT : ❌ Jamais déclenché
note right of SCRIPT : ❌ supabase-js non chargé

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_firebase_কেন_supabase_এর_পরিবর্তে&amp;quot;&amp;gt;Firebase কেন Supabase এর পরিবর্তে ?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মাইগ্রেশন সিদ্ধান্তটি নথিভুক্ত করা হয়েছে`AGENT.adoc`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Firebase এখন নিম্নোক্ত কারণে বেছে নেওয়া হচ্ছে: ভালো মুক্ত পরিকল্পনা, নেটিভ Firestore, ইন্টিগ্রেটেড Cloud Functions, আরও উপযুক্ত Google ইকোসিস্টেম। বিদ্যমান Supabase বাস্তবায়ন « ⚠️ ত্যাগ করা » হিসাবে চিহ্নিত করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিনামূল্য প্লানের বাইরে, একটি আর্কিটেকচারিক причину আছে। এই সাইটটি গুগল ইকোসিস্টেমে বাস করে : লক্ষ্য সংগ্র�স্থলটি`cheroliv.github.io`, CNAME GitHub Pages-এ নির্দেশ করে, Gradle বিল্ড JGit এর মাধ্যমে GitHub-এ push করে। Google (Firebase) পরিষেবা ব্যবহার করা তৃতীয় পক্ষের (Supabase) পরিষেবা ব্যবহারের চেয়ে বিভাজনের পৃষ্ঠকে কমায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Firestore নেটিভ মোডে (Datastore মোড না) আমার মনে থাকা নোএসকিউএল ডকুমেন্ট মডেলেরও আশিকভাবে কাছাকাছি: সংগ্রহ, নথি, টাইপড ফিল্ড, সার্ভার টাইমস্ট্যাম্প, অন্তরীকৃত নিরাপত্তা নিয়ম।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_১_ফায়ারবেস_প্রকল্প_তৈরি_করুন&amp;quot;&amp;gt;ফেজ ১ : ফায়ারবেস প্রকল্প তৈরি করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রারম্ভীకరণ&amp;quot;&amp;gt;প্রারম্ভীకరণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার মেশিনে Firebase CLI ইনস্টল করা নেই, তাই আমি ওয়েব কনসোলে যাচ্ছি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;যাওয়াhttps://console.firebase.google.com/[Firebase কনসোল]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্প তৈরি করুন`cheroliv-contact`(অথবা একটি বিদ্যমান প্রকল্প পুনরায় ব্যবহার করুন)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফায়ারস্টোরকে নেটিভ মোডে সক্রিয় করুন (ড্যাটastore নয়)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি ডেটাবেস অঞ্চলে সৃষ্টি করুন`eur3`(Europe)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের মতো একটি মিনিমালিস্ট ব্যবহারের জন্য (একই কালেকশন, পাবলিক রাইটিং), নেটিভ মোড সঠিক বাছাই। জটিল Datastore নিয়মের প্রয়োজন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_firestore_নিরাপত্তা_নিয়ম&amp;quot;&amp;gt;Firestore নিরাপত্তা নিয়ম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফর্মটি সর্বজনীন — কেউই একটি বার্তা পাঠাতে পারে। কিন্তু আমি দুর্ব্যবহার সীমিত করতে চাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;rules_version = &amp;#39;2&amp;#39;;

service cloud.firestore {
  match /databases/{database}/documents {

    match /contact_messages/{messageId} {
      // Lecture : admin uniquement (authentifié)
      allow read: if request.auth != null;

      // Écriture : publique, mais limitée
      allow create: if request.auth == null
        &amp;amp;amp;&amp;amp;amp; request.resource.data.name is string
        &amp;amp;amp;&amp;amp;amp; request.resource.data.name.size() &amp;amp;gt;= 1
        &amp;amp;amp;&amp;amp;amp; request.resource.data.name.size() &amp;amp;lt;= 100
        &amp;amp;amp;&amp;amp;amp; request.resource.data.email is string
        &amp;amp;amp;&amp;amp;amp; request.resource.data.email.matches(&amp;#39;.*@.*\\..*&amp;#39;)
        &amp;amp;amp;&amp;amp;amp; request.resource.data.email.size() &amp;amp;lt;= 254
        &amp;amp;amp;&amp;amp;amp; request.resource.data.subject is string
        &amp;amp;amp;&amp;amp;amp; request.resource.data.subject.size() &amp;amp;gt;= 3
        &amp;amp;amp;&amp;amp;amp; request.resource.data.subject.size() &amp;amp;lt;= 200
        &amp;amp;amp;&amp;amp;amp; request.resource.data.message is string
        &amp;amp;amp;&amp;amp;amp; request.resource.data.message.size() &amp;amp;gt;= 10
        &amp;amp;amp;&amp;amp;amp; request.resource.data.message.size() &amp;amp;lt;= 5000
        &amp;amp;amp;&amp;amp;amp; request.resource.data.created_at == request.time
        &amp;amp;amp;&amp;amp;amp; request.resource.data.user_agent is string
        &amp;amp;amp;&amp;amp;amp; request.resource.data.user_agent.size() &amp;amp;lt;= 500;
    }
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান পয়েন্ট:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;allow read&amp;lt;/code&amp;gt;— শুধুমাত্র প্রমাণীকৃত ব্যবহারকারীরা বার্তাগুলো পড়তে পারে (আমি, Firebase কনসোলের মাধ্যমে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;allow create&amp;lt;/code&amp;gt;— যে কেউ একটি ডকুমেন্ট তৈরি করতে পারে, কিন্তু ফিল্ডের যাচাইyer সঙ্গে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সার্ভার-পাশের বৈধতা: ন্যূনতম ও অধিকতম আকার, ইমেইল ফরম্যাট,&amp;lt;code&amp;gt;created_at`সামঞ্জস্য রাখতে হবে`request.time&amp;lt;/code&amp;gt;(নকল-বিরোধী)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`user_agent`ট্রেসযোগ্যতার জন্য পাঠানো হয় (প্রয়োজনীয় নয় কিন্তু উপকারী)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বিধিগুলি একটি সাধারণের চেয়ে অধিক কঠোর`allow write: if true;`. এগুলি একজন আক্রমণকারীকে বিশাল পেলোড ইনজেক্ট করতে বা অসংযোজিত ক্ষেত্র তৈরি করতে বাধা দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_২_জমার_জাভাস্ক্রিপ্ট_পুনরলিখুন&amp;quot;&amp;gt;ফেজ ২: জমার জাভাস্ক্রিপ্ট পুনরলিখুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমঝোতা সরল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফর্মের ডেটা পড়ুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;হনিপট (ক্ষেত্র) যাচাই করুন`hp_name`— যদি এটি পূর্ণ হয়, তাহলে এটি একটি বট, আমরা কিছু পাঠানো না করে সাফল্য সিমুল করি)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডাকানো`addDoc(window.&amp;lt;em&amp;gt;FIREBASE&amp;lt;/em&amp;gt;.collection(db, &amp;quot;contact_messages&amp;quot;), {&amp;amp;#8230;&amp;amp;#8203;})`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সাফল্য বা ত্রুটি দেখানো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নির্ভরতা_window_firebase&amp;quot;&amp;gt;নির্ভরতা `window.&amp;lt;em&amp;gt;FIREBASE&amp;lt;/em&amp;gt;&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মধ্যে`footer.thyme`, একটি স্ক্রিপ্ট মডিউল Firebase SDK প্রারম্ভ করে এবং একটি গ্লোবাল অবজেক্ট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;script type=&amp;quot;module&amp;quot;&amp;amp;gt;
    import { initializeApp } from &amp;quot;https://www.gstatic.com/firebasejs/11.6.0/firebase-app.js&amp;quot;;
    import { getFirestore, collection, addDoc, serverTimestamp }
      from &amp;quot;https://www.gstatic.com/firebasejs/11.6.0/firebase-firestore.js&amp;quot;;

    const firebaseConfig = { /* valeurs réelles */ };
    const app = initializeApp(firebaseConfig);
    const db = getFirestore(app);

    window.__FIREBASE__ = { db, collection, addDoc, serverTimestamp };
&amp;amp;lt;/script&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মডিউল স্ক্রিপ্টগুলো আগে চালানো হয়`DOMContentLoaded`, অতেব`window.&amp;lt;em&amp;gt;FIREBASE&amp;lt;/em&amp;gt;`এটি হ্যান্ডলারের সময় গ্যারান্টিত উপলব্ধ`contact.js`শুরু হয়। সতর্কতায়, আমি ৫ সেকেন্ডের পোলিং যোগ করি যদিও যদি CDN ধীর হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নতুন_contact_js&amp;quot;&amp;gt;নতুন `contact.js&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;document.addEventListener(&amp;#39;DOMContentLoaded&amp;#39;, function () {
    &amp;#39;use strict&amp;#39;;

    const form = document.getElementById(&amp;#39;contact-form&amp;#39;);
    if (!form) return;

    const submitButton = form.querySelector(&amp;#39;button[type=&amp;quot;submit&amp;quot;]&amp;#39;);
    const successMessage = document.getElementById(&amp;#39;contact-success-message&amp;#39;);
    const errorMessage = document.getElementById(&amp;#39;contact-error-message&amp;#39;);

    // Éléments de validation
    const nameInput = form.querySelector(&amp;#39;input[name=&amp;quot;name&amp;quot;]&amp;#39;);
    const emailInput = form.querySelector(&amp;#39;input[name=&amp;quot;email&amp;quot;]&amp;#39;);
    const phoneInput = form.querySelector(&amp;#39;input[name=&amp;quot;phone&amp;quot;]&amp;#39;);
    const subjectInput = form.querySelector(&amp;#39;input[name=&amp;quot;subject&amp;quot;]&amp;#39;);
    const messageInput = form.querySelector(&amp;#39;textarea[name=&amp;quot;message&amp;quot;]&amp;#39;);
    const honeypotInput = form.querySelector(&amp;#39;input[name=&amp;quot;hp_name&amp;quot;]&amp;#39;);

    /**
     * Attend que window.__FIREBASE__ soit disponible.
     * Timeout de 5 secondes — si le CDN Firebase est lent, on abandonne.
     */
    function waitForFirebase(timeoutMs = 5000) {
        return new Promise((resolve, reject) =&amp;amp;gt; {
            if (window.__FIREBASE__) {
                resolve(window.__FIREBASE__);
                return;
            }
            const start = Date.now();
            const interval = setInterval(() =&amp;amp;gt; {
                if (window.__FIREBASE__) {
                    clearInterval(interval);
                    resolve(window.__FIREBASE__);
                } else if (Date.now() - start &amp;amp;gt; timeoutMs) {
                    clearInterval(interval);
                    reject(new Error(&amp;#39;Firebase SDK non disponible après timeout&amp;#39;));
                }
            }, 100);
        });
    }

    // --- Validation (identique à l&amp;#39;existant) ---
    function validateForm() {
        nameInput.setCustomValidity(&amp;#39;&amp;#39;);
        emailInput.setCustomValidity(&amp;#39;&amp;#39;);
        if (phoneInput) phoneInput.setCustomValidity(&amp;#39;&amp;#39;);
        subjectInput.setCustomValidity(&amp;#39;&amp;#39;);
        messageInput.setCustomValidity(&amp;#39;&amp;#39;);

        if (nameInput.value.trim().length &amp;amp;lt; 1) {
            nameInput.setCustomValidity(&amp;#39;Veuillez saisir votre nom.&amp;#39;);
        }
        const emailPattern = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        if (!emailPattern.test(emailInput.value.trim())) {
            emailInput.setCustomValidity(&amp;#39;Veuillez saisir une adresse email valide.&amp;#39;);
        }
        if (phoneInput &amp;amp;amp;&amp;amp;amp; phoneInput.value.trim() !== &amp;#39;&amp;#39;) {
            const phonePattern = /^\d{10,15}$/;
            if (!phonePattern.test(phoneInput.value.trim())) {
                phoneInput.setCustomValidity(&amp;#39;Veuillez saisir un numéro valide (10 à 15 chiffres).&amp;#39;);
            }
        }
        if (subjectInput.value.trim().length &amp;amp;lt; 3) {
            subjectInput.setCustomValidity(&amp;#39;Veuillez saisir un sujet (3 caractères minimum).&amp;#39;);
        }
        if (messageInput.value.trim().length &amp;amp;lt; 10) {
            messageInput.setCustomValidity(&amp;#39;Veuillez saisir un message (10 caractères minimum).&amp;#39;);
        }

        form.classList.add(&amp;#39;was-validated&amp;#39;);
        return form.checkValidity();
    }

    // --- Handler de soumission ---
    form.addEventListener(&amp;#39;submit&amp;#39;, async function (event) {
        event.preventDefault();
        event.stopPropagation();

        if (!validateForm()) return;

        // Honeypot : si rempli, simuler un succès sans rien envoyer
        if (honeypotInput &amp;amp;amp;&amp;amp;amp; honeypotInput.value.trim() !== &amp;#39;&amp;#39;) {
            successMessage.style.display = &amp;#39;block&amp;#39;;
            form.reset();
            form.classList.remove(&amp;#39;was-validated&amp;#39;);
            return;
        }

        // UI : état d&amp;#39;envoi
        submitButton.disabled = true;
        submitButton.innerHTML = `
            &amp;amp;lt;span class=&amp;quot;spinner-border spinner-border-sm&amp;quot; role=&amp;quot;status&amp;quot; aria-hidden=&amp;quot;true&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
            Envoi en cours...
        `;
        successMessage.style.display = &amp;#39;none&amp;#39;;
        errorMessage.style.display = &amp;#39;none&amp;#39;;

        try {
            const fb = await waitForFirebase();
            const messagesCollection = fb.collection(fb.db, &amp;#39;contact_messages&amp;#39;);

            await fb.addDoc(messagesCollection, {
                name: nameInput.value.trim(),
                email: emailInput.value.trim(),
                phone: phoneInput ? phoneInput.value.trim() : &amp;#39;&amp;#39;,
                subject: subjectInput.value.trim(),
                message: messageInput.value.trim(),
                created_at: fb.serverTimestamp(),
                user_agent: navigator.userAgent.substring(0, 500)
            });

            successMessage.style.display = &amp;#39;block&amp;#39;;
            form.reset();
            form.classList.remove(&amp;#39;was-validated&amp;#39;);

        } catch (error) {
            console.error(&amp;#39;Erreur Firestore:&amp;#39;, error);
            errorMessage.style.display = &amp;#39;block&amp;#39;;

        } finally {
            submitButton.disabled = false;
            submitButton.innerHTML = `
                &amp;amp;lt;i class=&amp;quot;bi bi-send me-2&amp;quot;&amp;amp;gt;&amp;amp;lt;/i&amp;amp;gt;
                Envoyer le Message
            `;
        }
    }, false);
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মক-এর তুলনায় পরিবর্তনগুলো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;waitForFirebase()&amp;lt;/code&amp;gt;— টাইমআউট সহ পোলিং, CDN ধীর থাকলেও দৃঢ়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;honeypot&amp;lt;/code&amp;gt;— যদি লুকানো ক্ষেত্র`hp_name`পূর্ণ হয়েছে, Firestore-এ একটি নিশ্চিত সাফল্য সিমুলেট করা। বট ধরে যে সে সাফল্য পেয়েছে কিন্তু কিছুই সংরক্ষণ করা হয়নি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;addDoc(collection, {&amp;amp;#8230;&amp;amp;#8203;})&amp;lt;/code&amp;gt;— সত্য Firestore কল দিয়ে`serverTimestamp()` et &amp;lt;code&amp;gt;user_agent&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ত্রুটি হ্যান্ডেলিং সঙ্গে`try/catch`অ্যাসিঙ্ক্রোনাস&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সাফ-সুচির`finally`(বোতামের পুনঃস্থাপন)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কেন`user_agent`? এইচ্ছিক, কিন্তু ডায়াগনস্টিকের জন্য উপকারী। যদি কোন অদ্ভুত বার্তা আসে, তা বুঝতে পouvoir যে এটি একটি ডেস্কটপ ব্রাউজার, মোবাইল ব্রাউজার, অথবা curl স্ক্রিপ্ট থেকে আসছে তা শ্রেণীবিন্যাসে সাহায্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_৩_supabase_তে_মৃত_কোড_পরিষ্কার_করুন&amp;quot;&amp;gt;ফেজ ৩: Supabase-তে মৃত কোড পরিষ্কার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`script.js`এটি ২৫০ লাইন মৃত কোড ধারণ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;SupabaseManager&amp;lt;/code&amp;gt;(লাইন 417-481) — 65 লাইন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;ContactFormHandler&amp;lt;/code&amp;gt;(লাইন ৪৯০-৫৫১) — ৬২ লাইন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রারম্ভিক ব্লক (লাইন ৬৪৫-৬৫৪) — ১০ লাইন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মোট : ~140 লাইন মুছে ফেলা দরকার&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্লক`DOMContentLoaded`একটি তৈরি করে`SupabaseManager`এরপর একটি`ContactFormHandler`ফর্মে সংযুক্ত। উপরে ব্যাখ্যা করা মতো, এই কোড কখনো চালু হয় না (ব্লক করা`contact.js`), এবং যদি এটি চালিত হত, তবেও এটি ব্যর্থ হত (সাপবেস SDK লোড করা হয়নি).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি মুছে ফেলছি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শ্রেণি`SupabaseManager`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শ্রেণি`ContactFormHandler`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইনিশিয়ালাইজেশন ব্লকে`DOMContentLoaded`(লাইন ৬৪৫-৬৫৪)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le reste de &amp;lt;code&amp;gt;script.js`অখণ্ড :`ThemeManager&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ScrollToTopButton&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;MobileMenuManager&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SmoothScrollWithOffset&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;NavbarHeightUpdater&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;DynamicNavbarBreakpoint&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CodeBlockManager&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;TooltipManager&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PhoneInputManager&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_4_ফুটার_কনফিগার_করুন&amp;quot;&amp;gt;ফেজ 4 : ফুটার কনফিগার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`footer.thyme`এটায় ইতিমধ্যে ফায়ারবেস বয়লারপ্লেট আছে কিন্তু placeholder মান সহ। আমি প্রতিস্থাপন করছি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;const firebaseConfig = {
    apiKey: &amp;quot;REMPLACER_PAR_VOTRE_API_KEY&amp;quot;,
    authDomain: &amp;quot;REMPLACER_PAR_VOTRE_AUTH_DOMAIN&amp;quot;,
    projectId: &amp;quot;REMPLACER_PAR_VOTRE_PROJECT_ID&amp;quot;,
    storageBucket: &amp;quot;REMPLACER_PAR_VOTRE_STORAGE_BUCKET&amp;quot;,
    messagingSenderId: &amp;quot;REMPLACER_PAR_VOTRE_SENDER_ID&amp;quot;,
    appId: &amp;quot;REMPLACER_PAR_VOTRE_APP_ID&amp;quot;
};&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তব মানগুলি পুনরুদ্ধার থেকে&amp;lt;strong&amp;gt;প্রজেক্ট সেটিংস &amp;amp;gt; জেনারেল &amp;amp;gt; আপনার অ্যাপস &amp;amp;gt; ওয়েব অ্যাপ&amp;lt;/strong&amp;gt;ফায়ারবেস কনসোলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মানগুলো সংবেদনশীল`apiKey`Firebase-এ ডিজাইনের মোতাবিক সার্বজনিক, কিন্তু আমি পছন্দ করি না তারদের স্পষ্টরূপে কামিট করার) আমি他们的 &amp;amp;#8230;&amp;amp;#8203; -এ সংরক্ষণ করি`site.yml`(এখনও মধ্যে`.gitignore`) এবং প্লাগইন`bakery`তেগুলোকে টেমপ্লেটে বিল্ড পাশে যুক্তি যোগ করে ইন্জেক্ট করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখনও, আমি সরাসরি তাদেরকে ভিতরে রাখছি`footer.thyme`— বিল্ড`./gradlew serve`এগুলো স্থানীয়ভাবে লোড করবে। ডিপ্লয়মেন্টের সময়, আমি ইনজেকশন&amp;lt;em&amp;gt;(to)&amp;lt;/em&amp;gt;(move)করব__(direction)`site.yml`অথবা একটি Gradle ভেরিয়েবলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;Warning&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;L&amp;#39;`apiKey`Firebase না&amp;lt;strong&amp;gt;না&amp;lt;/strong&amp;gt;একটি রহস্য। এটি ডিজাইনের মাধ্যমে সর্বজনীন। আপনার ডেটা রক্ষা করে, সেগুলো&amp;lt;strong&amp;gt;ফায়ারস্টোর নিরাপত্তা নিয়ম&amp;lt;/strong&amp;gt;, এপিআই কী নয়। এটিকে একটি &amp;amp;#8230;&amp;amp;#8203;-এ রাখবেন না`.env`সার্ভার-সাইডে লোড করা হয়েছে — এটি ব্রাউজরে প্রকাশ করার জন্য নিশ্চিত করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_5_শেষ_আর্কিটেকচার&amp;quot;&amp;gt;ফেজ 5 : শেষ আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;diag-after&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE

title শেষ আর্কিটেকচার — ফায়ারবেস যোগাযোগ ফর্ম
actor Utilisateur as USER

package &amp;quot;ব্রাউজার&amp;quot; #E8F5E9 {
  rectangle &amp;quot;contact.thyme
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

title শেষ আর্কিটেকচার — ফায়ারবেস যোগাযোগ ফর্ম
actor Utilisateur as USER

package &amp;quot;ব্রাউজার&amp;quot; #E8F5E9 {
  rectangle &amp;quot;contact.thyme
(HTML, মধুমাকর)&amp;quot; as FORM
  rectangle &amp;quot;contact.js
( যাচাই + Firestore )&amp;quot; as CONT
  rectangle &amp;quot;footer.thyme\n(ফায়ারবেস SDK প্রারম্ভ)&amp;quot; as FOOT
}

cloud &amp;quot;ফায়ারবেস&amp;quot; #BBDEFB {
  rectangle &amp;quot;Firestore
(contact_messages)&amp;quot; as FS
}

FORM --&amp;amp;gt; CONT : submit event
CONT --&amp;amp;gt; FOOT : window.__FIREBASE__.addDoc()
FOOT --&amp;amp;gt; FS : Insert document\n(règles de sécurité validées)

note right of FS
  Firestore Rules :
  - create: public, validé
  - read: auth uniquement
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এয়া_মাইগ্রেশন_ডগফুডিং_এর_বrgে_যা_bale&amp;quot;&amp;gt;এয়া মাইগ্রেশন ডগফুডিং এর বRGে যা Bale&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সাইটটি আমার নিজের Gradle প্লাগইন দ্বারা তৈরি করা হয়েছে`bakery`. সাম্পর্ক ফর্মটি সাইটের ভেতরে বসবাস করে। Supabase → Firebase মাইগ্রেশন নথিভুক্ত করা হয়েছে`AGENT.adoc`, ব্যাকলগে আলোচিত, মাধ্যমে পরীক্ষিত`./gradlew serve`, এবং এটি একটি ব্লগ পোস্ট তৈরি করে (যেটি আপনি পড়ছেন)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি শুধু ডগফুডিং। সাইটটি প্লাগইনটির পণ্য, প্লাগইনটি ডেভেলপারের পণ্য, ডেভেলপারটি প্রক্রিয়াটি নিজের সাইটে নথিভুক্ত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লুপটি বন্ধ হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মাস ধরে একটি মককে টানতে থাকা (ফর্মটি নীরবে মিথ্যা বলっていた পূর্ণাঙ্গ সেশন) আমাকে কিছু বোঝাতে সাহায্য করে: একজন ব্যক্তিগত স্ট্যাটিক সাইটের ব্যাকলগ কখনো «শেষ» নয়। সর্বদা একটি অগ্রাধিকারকৃত ইউএস, সর্বদা একটি ড্রাফট আর্টিকেল, সর্বদা একটি টেমপ্লেটে মন্তব্যুক্ত অংশ। অনুশাসন মানে সবকিছু শেষ করা নয় — বরং ব্যবহারকারী által দেখতে পাওয়ার যোগ্য কাজটি শেষ করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ভাঙা যোগাযোগ ফর্ম, এটা কোনো ফর্ম নেই ভালো। এটা একটি অপূত প্রতিজ্ঞা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরিবর্তনের_সারসংক্ষেপ&amp;quot;&amp;gt;পরিবর্তনের সারসংক্ষেপ&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6676%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শোধন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রভাব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;blog/2026/0113_*.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আর্টিকেলের সৃষ্টি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডকুমেন্টেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;assets/js/contact.js&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পুনালেখন (mock → বাস্তব Firestore)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কর্মক্ষম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;assets/js/script.js&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপসারণ SupabaseManager + ContactFormHandler + init bloc&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সফাই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;templates/footer.thyme&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রতিস্থাপন কনফিগ প্লেসহোল্ডার → বাস্তব মান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কনফিগারেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আগামী_ধাপ_backlog&amp;quot;&amp;gt;আগামী ধাপ (backlog)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিজ্ঞপ্তি ইমেইল&amp;lt;/strong&amp;gt;: একটি ক্লাউড ফাংশন`onCreate`উপর`contact_messages`কে SendGrid- এর মাধ্যমে একটি মেইল পাঠায়। ফর্ম ডেটা সংরক্ষণ করা হয়, কিন্তু আমি বিজ্ঞপ্তি পাচ্ছি না। মাঝারি প্রাধান্য — বার্তাগুলি Firebase কনসোলে দেখা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ক্লায়েন্ট সাইড রেট লিমিটিং&amp;lt;/strong&amp;gt;: একটি localStorage টাইমস্ট্যাম্প যোগ করে মাল্টিপল সাবমিশন র্যাফলে বাধা দেওয়া উচিত। হনি পট নাইশ বটদের ব্লক করে, একটি রেট লিমিটার কিছুটা চালাক বটদের ব্লক করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পরীক্ষা&amp;lt;/strong&amp;gt;: একটি Playwright টেস্ট যা ফর্মটিকে জমায় এবং যাচাই করে যে ডকুমেন্ট Firestore-এ দৃশ্যমান হয়। এখন, আমি ম্যানুয়ালি টেস্ট করছি via`./gradlew serve`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উৎস&amp;quot;&amp;gt;উৎস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://firebase.google.com/docs/firestore/security/get-started&amp;quot;&amp;gt;দকুমেন্টেশন Firestore নিরাপত্তা নিয়ম&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://firebase.google.com/docs/firestore/manage-data/add-data#add_a_document&amp;quot;&amp;gt;Firestore addDoc ডকুমেন্টেশন — মডুলার ওয়েব v9&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;এজেন্ট গভার্নেন্স সিরিজ — অংশ ১ : উত্সাহী/অলস&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog/2026/0110_mecanisme_backup_contexte_agent_post.html&amp;quot;&amp;gt;অজেন্ট গভার্নেন্স সিরিজ — পার্ট ২ : Hot/Warm/Cold&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog/2026/0111_audit_contexte_agent_post.html&amp;quot;&amp;gt;এজেন্ট শাসন সিরিজ — অংশ ৩ : অডিট&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>DeepSeek-V4-Pro, Kimi K2.6, GLM-5.1: দীর্ঘ প্রসঙ্গ ভাইব কোডিংয়ের পরীক্ষায় তিনটি LLM</title>
            <link >https://cheroliv.com//blog/2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html</link>
            <pubDate>Tue, 28 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0112_comparaison_kimi_glm_deepseek_long_contexte_plugin_gradle_opencode_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সন্দর্ভ_একটি_পরীক্ষার_ব্যাঙ্ক_নয়_একটি_নির্মাণক্ষেত্র&amp;quot;&amp;gt;সন্দর্ভ : একটি পরীক্ষার ব্যাঙ্ক নয়, একটি নির্মাণক্ষেত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আমার_পরীক্ষার_পরিবেশ&amp;quot;&amp;gt;আমার পরীক্ষার পরিবেশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মূল্যায়ন_গ্রিড&amp;quot;&amp;gt;মূল্যায়ন গ্রিড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রাউন্ড_১_kimi_k2_6_ভুল_শুরু&amp;quot;&amp;gt;রাউন্ড ১ : Kimi K2.6 — ভুল শুরু&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেশন_৯_উজ্জ্বলতা&amp;quot;&amp;gt;সেশন ৯ : উজ্জ্বলতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_session_10_নীরব_নৌদুর্ভিক্ষ&amp;quot;&amp;gt;Session 10 : নীরব নৌদুর্ভিক্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_round_2_glm_5_1_সম্মানযোগ্য_যুদ্ধী&amp;quot;&amp;gt;Round 2 : GLM-5.1 — সম্মানযোগ্য যুদ্ধী&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আর্কিটেকচার_ডিএসএ_শুধুমাত্র_mla_এর_বিরুদ্ধে&amp;quot;&amp;gt;আর্কিটেকচার : ডিএসএ শুধুমাত্র MLA-এর বিরুদ্ধে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেশন_১১_১৩_দৃঢ়_কিন্তু_বিষন্নকর&amp;quot;&amp;gt;সেশন ১১-১৩ : দৃঢ় কিন্তু বিষন্নকর&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_round_3_deepseek_v4_pro_যুদ্ধের_মেশিন&amp;quot;&amp;gt;Round 3 : DeepSeek-V4-Pro — যুদ্ধের মেশিন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আর্কিটেকচার_csa_hca_ডাবল_ফাইলে&amp;quot;&amp;gt;আর্কিটেকচার: CSA + HCA, ডাবল ফাইলে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেশন_১_৮_উপশম&amp;quot;&amp;gt;সেশন ১-৮ : উপশম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্পত্তি_পরীক্ষা_100k_টোকেনের_রিফ্যাক্টরিং&amp;quot;&amp;gt;নিষ্পত্তি পরীক্ষা: 100K টোকেনের রিফ্যাক্টরিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মুখোমুখি_টুলনামূলক_মেট্রিক্স&amp;quot;&amp;gt;মুখোমুখি : টুলনামূলক মেট্রিক্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_deepseek_v4_pro_কেন_সফটওয়্যার_ডেভেলপমেন্টে_অগ্রসর_হচ্ছে&amp;quot;&amp;gt;DeepSeek-V4-Pro কেন সফটওয়্যার ডেভেলপমেন্টে অগ্রসর হচ্ছে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_csahca_আর্কিটেকচারটি_কোডের_জন্য_তৈরি_করা_হয়েছে&amp;quot;&amp;gt;CSA+HCA আর্কিটেকচারটি কোডের জন্য তৈরি করা হয়েছে।&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_eager_প্রেক্ষাপট_তার_আরামকাজের_জোন&amp;quot;&amp;gt;2. EAGER প্রেক্ষাপট তার আরামকাজের জোন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_৩_গুণমানঅবগাহন_অনুপাত_প্রবাহের_জন্য_সর্বোত্তম&amp;quot;&amp;gt;৩. গুণমান/অবগাহন অনুপাত প্রবাহের জন্য সর্বোত্তম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখানো_পাঠ_কিভাবে_আপনার_llm_বাছাই_করবেন_vibe_coding_এর_জন্য&amp;quot;&amp;gt;শেখানো পাঠ : কিভাবে আপনার LLM বাছাই করবেন Vibe Coding-এর জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এবং_গাভার্নেন্স_এজেন্ট_সবই_এতে_কী&amp;quot;&amp;gt;এবং গাভার্নেন্স এজেন্ট সবই এতে কী?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রযুক্তি_উৎস&amp;quot;&amp;gt;প্রযুক্তি উৎস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নिष्कর্ষ_শিল্পীর_বেছে_নেওয়া&amp;quot;&amp;gt;নिष्कর্ষ: শিল্পীর বেছে নেওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pţhon shômontor : 18 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;LLMs-দের যুদ্ধও একটি ডেভেলপারের টার্মিনালে লড়াই হয়। অকার্যকর আকাদেমিক বেঞ্চমার্কে নয়। বাস্তব জীবনে: ৩০,০০০ টোকেনের একটি প্রম্পট, AsciiDoc-এ একটি এজেন্ট শাসন, Gradle Kotlin DSL প্লাগইনগুলো ডিবাগ করতে এবং তিন هفته ধরে চলുന്ന সেশনগুলো। আমি আপনার জন্য DeepSeek-V4-Pro, Kimi K2.6 এবং GLM-5.1 টি পরীক্ষা করে দেখেছি। এটি নিশ্চয়, প্রযুক্তিগত সাবुतের সাথে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;কটকটি&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সন্দর্ভ_একটি_পরীক্ষার_ব্যাঙ্ক_নয়_একটি_নির্মাণক্ষেত্র&amp;quot;&amp;gt;সন্দর্ভ : একটি পরীক্ষার ব্যাঙ্ক নয়, একটি নির্মাণক্ষেত্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিন সপ্তাহ আগে, আমি কাজ করছিলাম`codebase-gradle`, আমার meta-build system যা চারটি প্রকল্পের YAML কনফিগারেশনকে কেন্দ্রীভূত করে: একটি README PlantUML জেনারেটর, একটি AsciiDoc স্লাইড বিল্ডার, একটি স্ট্যাটিক JBake সাইট এবং একটি LLM চ্যাটবট। Opencode এজেন্ট, আমার AsciiDoc-এ এজেন্ট ফাইলের পদ্ধতিতে পরিচালিত, প্রতিটি সেশনের শুরুতে ~30K টোকেন EAGER কনটেক্সট লোড করত। — মוחלט নিয়ম, ব্যাকলগ, গত ১০ সেশনের ইতিহাস।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই জমির উপরেই আমি তিনটি মডেলের সম্মুখীন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কিমি কে ২.৬&amp;lt;/strong&amp;gt;(Moonshot AI, 1T প্যারামিটার / 32B সক্রিয়, 256K সর্বোচ্চ প্রেক্ষাপট, MLA) - &amp;lt;strong&amp;gt;GLM-5.1&amp;lt;/strong&amp;gt;(Zhipu AI/Tsinghua, 744B প্যারামিটার / DSA, 200K সর্বোচ্চ কনটেক্সট) - &amp;lt;strong&amp;gt;DeepSeek-V4-Pro&amp;lt;/strong&amp;gt;(DeepSeek, 1.6T প্যারামিটার / 49B সক্রিয়, 1M সর্বোচ্চ কনটেক্সট, CSA+HCA)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবই Ollama ব্যবহার করে ক্লাউড সার্ভারে পরিবেশনিত, সবই thinking মোডে (বিচার পর্যায় সক্রিয়) চালু। লক্ষ্য : সঠিক কোড তৈরি করা, দীর্ঘ সেশনগুলোতে সামঞ্জস্য বজায় রাখা, এবং কন্টেক্সট ৮০K টোকেনের বেশি হলে হালুসিনেশন ঘটবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আমার_পরীক্ষার_পরিবেশ&amp;quot;&amp;gt;আমার পরীক্ষার পরিবেশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;diag-dev-env&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 12) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title টেস্ট পরিবেশ — সেশন Opencode × 3 LLMs
left to right direction

package &amp;quot;�🖥️ টার্মিনাল ডেভেলপার&amp;quot; #E8F5E9 {
  rectangle &amp;quot;AGENT.adoc\n(নিয়ম, ব্যাকলগ)&amp;quot; as AG
  rectangle &amp;quot;PROMPT_REPRISE\n(মিশন)&amp;quot; as PR
  rectangle &amp;quot;INDEX.adoc
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title টেস্ট পরিবেশ — সেশন Opencode × 3 LLMs
left to right direction

package &amp;quot;�🖥️ টার্মিনাল ডেভেলপার&amp;quot; #E8F5E9 {
  rectangle &amp;quot;AGENT.adoc\n(নিয়ম, ব্যাকলগ)&amp;quot; as AG
  rectangle &amp;quot;PROMPT_REPRISE\n(মিশন)&amp;quot; as PR
  rectangle &amp;quot;INDEX.adoc
(রোডম্যাপ)&amp;quot; as IDX
}

package &amp;quot;☁️ Ollama Cloud&amp;quot; #BBDEFB {
  rectangle &amp;quot;DeepSeek-V4-Pro\n1.6T / CSA+HCA&amp;quot; as DV4
  rectangle &amp;quot;Kimi K2.6\n1T / MLA&amp;quot; as KIMI
  rectangle &amp;quot;GLM-5.1\n744B / MLA+DSA&amp;quot; as GLMG
}

package &amp;quot;�⚙️ কোডবেস Gradle&amp;quot; #FFF9C4 {
  folder &amp;quot;buildSrc/&amp;quot; {
    file &amp;quot;codebase.kt&amp;quot;
    file &amp;quot;readme.kt&amp;quot;
    file &amp;quot;site.kt&amp;quot;
    file &amp;quot;slider.kt&amp;quot;
    file &amp;quot;snapshot.kt&amp;quot;
  }
  file &amp;quot;build.gradle.kts
(947 লাইন)&amp;quot;
  file &amp;quot;embeds.yml&amp;quot;
}

AG --&amp;amp;gt; DV4 : Sessions 1-8 ✅
AG --&amp;amp;gt; KIMI : Sessions 9-10 ⚠️
AG --&amp;amp;gt; GLMG : Sessions 11-13 ⚠️

DV4 --&amp;amp;gt; &amp;quot;কোডবেজ&amp;quot; : &amp;quot;TDD, refactoring
snapshot&amp;quot;
KIMI --&amp;amp;gt; &amp;quot;কোডবেজ&amp;quot; : &amp;quot;ক্ষয়
৬০K টোকেন থেকে&amp;quot;

note bottom of GLMG
  Meilleur que Kimi
  mais latence +
  DSA moins robuste
  que CSA+HCA
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি সেশন প্রায় ৩০K টোকেন EAGER কনটেক্সট দিয়ে শুরু`AGENT.adoc`(২৮৭ লাইন),&amp;lt;code&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/code&amp;gt;(51 লাইন),&amp;lt;code&amp;gt;.agents/INDEX.adoc&amp;lt;/code&amp;gt;(218 লাইন),&amp;lt;code&amp;gt;LAZY_EAGER_ESSENTIALS.adoc&amp;lt;/code&amp;gt;(50 লাইন). প্রসঙ্গ দ্রুতভাবে বৃদ্ধি পাচ্ছিল যোগাযোগের সাথে — একটি সাধারণ ১০ বার্তা যুক্ত সেশন প্রম্পটের সংচিত অংশে ১৫-২০K টোকেন যোগ করত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মূল্যায়ন_গ্রিড&amp;quot;&amp;gt;মূল্যায়ন গ্রিড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি প্রতিটি মডেলকে সাহায্যপ্রদ সফটওয়্যার উন্নয়নের জন্য অত্যন্ত গুরুত্বপূর্ণ চার অক্ষে মূল্যায়ন করেছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অক্ষ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নির্দিষ্ট মানদণ্ড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;দীর্ঘ প্রেক্ষাপটের সামঞ্জস্য&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজেন্টটি 40 বার্তা আগে নির্ধারিত কনভেনশনগুলো মনে রাখে কি?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;উৎপন্ন কোডের গুণমান&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোডটি প্রথমবার কম্পাইল হয় কি? এটি বিদ্যমান প্যাটার্নগুলোকে অনুসরণ করে কি?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;আর্কিটেকচারাল যুক্তি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজেন্ট কি আমাকে পুনরায় ব্যাখ্যা না দিয়েও মডিউলের মধ্যে সম্পর্ক বুঝে?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বিশ্রম্ভের প্রতিরোধ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি एजেন্ট কত টোকেন পর থেকে অনুপস্থিত API বা ক্লাসকে আবিষ্কৃত করা শুরু করে?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং একটি ঘরে তৈরি সিন্থেটিক মেট্রিক : le&amp;lt;strong&amp;gt;পুন:YESের কোএফিশিয়েন্ট&amp;lt;/strong&amp;gt;(আমি যে সময় এজেন্টকে সংশোধনে ব্যয় করি, তার চেয়ে বেশি কোড লিখে তার সাথে কাজ করার সময়)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রাউন্ড_১_kimi_k2_6_ভুল_শুরু&amp;quot;&amp;gt;রাউন্ড ১ : Kimi K2.6 — ভুল শুরু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিমি K2.6 আমার প্রথম পছন্দ ছিল। এর বেঞ্চমার্ক SWE-Bench Verified (80.2) এবং Terminal-Bench 2.0 (66.7) চমৎকার। এর MLA আর্কিটেকচার দীর্ঘ অনুক্রমে ভাল কার্যকারিতা নিশ্চিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সেশন_৯_উজ্জ্বলতা&amp;quot;&amp;gt;সেশন ৯ : উজ্জ্বলতা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kimi-এর সাথে প্রথম সেশন. কাজ: পদ্ধতিটি বাস্তবায়ন করা`resolveActiveKey()&amp;lt;code&amp;gt;মধ্যে`codebase.kt&amp;lt;/code&amp;gt;— প্রসঙ্গ 30K টোকেন, Kimi দ্রুত যুক্তি বোঝায়, কী মেয়াদ শেষ হওয়ার ব্যবস্থা সহ পরিষ্কার কোড তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun resolveActiveKey(
    cfg: CodebaseConfiguration,
    logger: Logger,
    cliProvider: String? = null,
    cliAccount: String? = null,
    cliKey: String? = null
): NamedApiKey? {
    // Résolution provider → compte → clé avec CLI override
    // Kimi a parfaitement compris la chaîne de priorité
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোডটি কম্পাইল হয়। ৭টি পরীক্ষা পাস হয়। আমি অশঙ্কিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_session_10_নীরব_নৌদুর্ভিক্ষ&amp;quot;&amp;gt;Session 10 : নীরব নৌদুর্ভিক্ষ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দ্বিতীয় সেশন। প্রেক্ষাপট ~90K টোকেনে উঠে যায় আদান-প্রদানের মাধ্যমে। আমি Kimi-কে একটি AsciiDoc স্ন্যাপশাট যোগ করার অনুরোধ করি, যা লিখনের আগে গোপনীয় তথ্য들은 বেনামী করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানেই সবই ভুল হয়ে যায়। Kimi অস্তিত্ব নেই এমন ক্লাসগুলি আবিষ্কার করতে শুরু করেন। তিনি আমাকে প্রস্তাব করেন`AnonymizedObjectMapper`— একটি নকল শ্রেণি. সে ভুল বুঝে`ReadmeYmlAnonymizer` et &amp;lt;code&amp;gt;CodebaseYmlAnonymizer&amp;lt;/code&amp;gt;. সে আমাকে ইম্পোর্ট করার পরামর্শ দেন`com.fasterxml.jackson.anonymize.*`— একটি প্যাকেজ যা কখনো বিদ্যমান ছিল না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;খারাপটি: তার চিন্তার পর্যায়ে, আমি দেখি যে সে ভুল প্রিমিশ ভিত্তি করে তর্ক গঠন করছে। সে &amp;#39;স্মরণ করছে&amp;#39; যা`GitConfig`একটি খেত আছে`anonymizedToken`— না, এটি`resolvedToken()&amp;lt;code&amp;gt;ও অ-aropਣ করে ke`SiteYmlAnonymizer`একটি পদ্ধতি`maskSupabaseCredentials()&amp;lt;/code&amp;gt;— যা বিদ্যমান নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ এটি কোনো বাগ ছিল না। এটি সামঞ্জস্যের ধীরে-धीरे ধ্বংস ছিল। যেন প্রতিটি টোকেন কনটেক্সটে যোগ করা হলে, প্রথম ৩০,০০০ টি টোকেনের মেমোরি আরও কমিয়ে যায়। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি দুটি সেশনের পরে Kimi-কে বন্ধ করি। নিরীক্ষণ স্পষ্ট: MLA ভালোভাবে KV ক্যাশে সংকুচিত করে, কিন্তু ফাইন-গ্রেইন্ড স্পার্স সিলেকশন মেকানিজম ছাড়াও, অটেনশন মেকানিকালি 60K টোকেনের বেশি পর থেকে নিশ্চল হয়ে যায়। প্রতিটি টোকেন দূরবর্তী প্রেক্ষাপটকে কম বেশি ভালোভাবে দেখে না — এবং শোর দিয়ে খালি জায়গাগুলো পূরণ করা শুরু করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_round_2_glm_5_1_সম্মানযোগ্য_যুদ্ধী&amp;quot;&amp;gt;Round 2 : GLM-5.1 — সম্মানযোগ্য যুদ্ধী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GLM-5.1 একটি ভিন্ন আর্কিটেকচারে এসেছে : বেস মডেলের জন্য MLA, এবং তারপর &amp;lt;strong&amp;gt;continued pre-training&amp;lt;/strong&amp;gt; DSA (DeepSeek Sparse Attention) দিয়ে — একটি হালকা ইন্ডেক্সার যা পুরো ইতিহাসের মধ্যে ডায়নামিকভাবে শীর্ষ ২০৪৮ প্রাসঙ্গিক টোকেন নির্বাচন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আর্কিটেকচার_ডিএসএ_শুধুমাত্র_mla_এর_বিরুদ্ধে&amp;quot;&amp;gt;আর্কিটেকচার : ডিএসএ শুধুমাত্র MLA-এর বিরুদ্ধে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বৈষম্য মৌলিক। যেখানে Kimi ইতিহাসকে একটি একক ল্যাটেন্ট স্পেস-এ সংকুচিত করে (এবং ধীরে ধীরে প্রাসঙ্গিক তথ্যকে ভেদ করার ক্ষমতা হারিয়ে যায়), GLM একটি post-entraînement ইন্ডেক্সার আটকে দেয় যা স্পষ্টভাবে একটি sparse নির্বাচন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-mla-vs-dsa&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title অ্যাটেনশন আর্কিটেকচার — MLA বনাম MLA+DSA
left to right direction

rectangle &amp;quot;**Kimi K2.6 — MLA শুদ্ধ**&amp;quot; as MLA #FFCDD2 {
  rectangle &amp;quot;KV Cache
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title অ্যাটেনশন আর্কিটেকচার — MLA বনাম MLA+DSA
left to right direction

rectangle &amp;quot;**Kimi K2.6 — MLA শুদ্ধ**&amp;quot; as MLA #FFCDD2 {
  rectangle &amp;quot;KV Cache
সম্পূর্ণ&amp;quot; as KV1
  rectangle &amp;quot;কম্প্রেশন
লেটেন্ট&amp;quot; as CL1
  rectangle &amp;quot;ডিকোডিং
উপর লেটেন্ট স্পেস&amp;quot; as DL1
  KV1 --&amp;amp;gt; CL1
  CL1 --&amp;amp;gt; DL1
  note bottom of DL1
    ⚠️ Au-delà de 60K tokens :
    perte de discrimination
  end note
}

rectangle &amp;quot;GLM-5.1 — MLA + DSA&amp;quot; as DSA #C8E6C9 {
  rectangle &amp;quot;KV Cache
সম্পূর্ণ&amp;quot; as KV2
  rectangle &amp;quot;কম্প্রেসন\nঅস্পষ্ট (MLA)&amp;quot; as CL2
  rectangle &amp;quot;হালকা ইন্ডেক্সার
(DSA, top-k=2048)&amp;quot; as IL
  rectangle &amp;quot;ডিকোডিং
নির্বাচিত টোকেনের জন্য&amp;quot; as DL2
  KV2 --&amp;amp;gt; CL2
  CL2 --&amp;amp;gt; IL
  IL --&amp;amp;gt; DL2
  note bottom of DL2
    ✅ &amp;quot;নির্মাণে হারাবিহীন&amp;quot;
    Sélection explicite
    des tokens pertinents
  end note
}

MLA --&amp;amp;gt; DSA : &amp;quot;গাইন : স্পার্স সিলেকশন
যে দ্রাবণকে হ্রাস থেকে বাঁচে&amp;quot;

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রযুক্তিগত প্রতিবেদনটি স্পষ্টভাবে বলে : DSA &amp;lt;em&amp;gt;&amp;quot;lossless by construction&amp;quot;&amp;lt;/em&amp;gt; — SWA (pattern search), Gated DeltaNet বা SimpleGDN এর মতো বিকল্পগুলির বিপরীতে, যা RULER@128K-এ ৫.৬৯ পয়েন্ট পর্যন্ত ক্ষতি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সেশন_১১_১৩_দৃঢ়_কিন্তু_বিষন্নকর&amp;quot;&amp;gt;সেশন ১১-১৩ : দৃঢ় কিন্তু বিষন্নকর&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GLM-5.1 দূরত্বটি ভালভাবে ধরে রাখে। সেশন ১১ (~৬০ হাজার টোকেন)‑এ তা সামঞ্জস্যপূর্ণ বানায়। তা একটি`SnapshotManager`কর্মক্ষম এবং চারটি অ্যাননিমাইজারের সঠিক ব্যবস্থাপনার সঙ্গে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু লেটেন্সি একটি সমস্যা। DSA প্রতিফলন পর্যায়গুলো শুদ্ধ MLA-এ 비해 ভারী — ইন্ডেক্সারকে প্রতিটি পর্যায়ে ইতিহাস পুন: স্ক্যান করতে হয়। কিমি দিয়ে 8 সেকেন্ডে হউকো উত্তর এখন GLM দিয়ে 15 সেকেন্ড লাগে। ৩০‑বার্তার সেশনে এটি মনে পড়ে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং তারপরে সূক্ষ্ম ত্রুটি আছে। GLM কিমি মতো বিপর্যয় করবে না — কিন্তু এটি &amp;lt;strong&amp;gt;নামিং&amp;lt;/strong&amp;gt; ত্রুটি করে। এটি বুলায়`toAnonymizedYaml()&amp;lt;code&amp;gt;যে পদ্ধতিটি ডাকা উচিত`anonymize()&amp;lt;/code&amp;gt;. সে উল্টে দেয়`loadReadmeConfiguration()` et &amp;lt;code&amp;gt;loadCodebaseConfiguration()`এর মধ্যে`renderFileSection()&amp;lt;/code&amp;gt;. এগুলো হালুসিনেশন নয়, এগুলো সতলের ভুলবোঝা — কিন্তু উৎপাদনে, একটি সতলের ভুলবোঝা একটি বিল্ড ভাঙতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি GLM-এ তিন সেশন নিয়েছিলাম। তা Kimi থেকে নিশ্চয়ই ভাল। কিন্তু নামের বিবরণে دستیানুশীলন সেশনের তিন বার করা, এটা ক্লান্তikorায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_round_3_deepseek_v4_pro_যুদ্ধের_মেশিন&amp;quot;&amp;gt;Round 3 : DeepSeek-V4-Pro — যুদ্ধের মেশিন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DeepSeek-V4-Pro তিনদের মধ্যে সবচেয়ে উত্সাহী আর্কিটেকচারের সাথে আসে : একটি হাইব্রিড সিস্টেম যা দুটি পূরকোপর্যাত্য মনোযোগ মেকানিজমকে সমন্বয় করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আর্কিটেকচার_csa_hca_ডাবল_ফাইলে&amp;quot;&amp;gt;আর্কিটেকচার: CSA + HCA, ডাবল ফাইলে&amp;lt;/h3&amp;gt;
&amp;lt;div id=&amp;quot;diag-csa-hca&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 180

title DeepSeek-V4-Pro — হাইব্রিড CSA + HCA আর্কিটেকচার
left to right direction

rectangle &amp;quot;KV Cache
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 180

title DeepSeek-V4-Pro — হাইব্রিড CSA + HCA আর্কিটেকচার
left to right direction

rectangle &amp;quot;KV Cache
১ মিলিয়ন টোকেন&amp;quot; as KV #E3F2FD

rectangle &amp;quot;CSA
সঙ্কুচিত স্পার্স এটেনশন&amp;quot; as CSA #C8E6C9 {
  rectangle &amp;quot;কম্প্রেশন
m টোকেন → 1&amp;quot; as CC
  rectangle &amp;quot;স্পার্স আটেনশন\n(DSA, top-k)&amp;quot; as SA
  CC --&amp;amp;gt; SA

  note bottom of SA
    Attention locale fine
    + sélection sparse
  end note
}

rectangle &amp;quot;HCA
অত্যধিকভাবে সংকুচিত মনোযোগ&amp;quot; as HCA #BBDEFB {
  rectangle &amp;quot;অতিশয় সংকোচন
m&amp;#39; &amp;amp;gt;&amp;amp;gt; m → 1&amp;quot; as ECC
  rectangle &amp;quot;ঘন মনোযোগ\nশেষবাকি&amp;quot; as EDA
  ECC --&amp;amp;gt; EDA

  note bottom of EDA
    Contexte global
    + connexions longue distance
  end note
}

rectangle &amp;quot;ফিউশন
হাইব্রিড&amp;quot; as FUSION #FFF9C4
rectangle &amp;quot;ডিকোডিং
একসঙ্গত&amp;quot; as DEC #FFE0B2

KV --&amp;amp;gt; CSA : Précision locale
KV --&amp;amp;gt; HCA : Vision globale

CSA --&amp;amp;gt; FUSION
HCA --&amp;amp;gt; FUSION
FUSION --&amp;amp;gt; DEC

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুই স্তরের সঙ্কোচন, দুই গ্র্যানুলারিটি মনোযোগ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;CSA&amp;lt;/strong&amp;gt;: কেভি ক্যাশকে সবগুলো সংকুচিত করে`m`টোকেনগুলো, তারপর একটি স্পার্স অটেনশন (DeepSeek Sparse Attention) প্রয়োগ করে — শুধুমাত্র সংকুচিত ইনপুটগুলোর শীর্ষ k টি পরামর্শ দেওয়া হয়। সঠিক, স্থানীয়, কার্যকর। - &amp;lt;strong&amp;gt;HCA&amp;lt;/strong&amp;gt;: সংকোচন অতিধিক (গুণক`m&amp;#39;`অনেক বড়`m`), সংকুচিত অবশেষে ঘন অটেনশন — বিশ্বব্যাপী সংযোগকে চতুর্গুণ বিস্ফোরক ছাড়াই রাখুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফলাফল: 1M টোকেনে, DeepSeek-V4-Pro শুধু কীটো খরচ করে&amp;lt;strong&amp;gt;27% ইনফারেন্স FLOPs&amp;lt;/strong&amp;gt; et &amp;lt;strong&amp;gt;KV cache-র আকারের ১০%&amp;lt;/strong&amp;gt;DeepSeek-V3.2-র সাথে তুলনা করলে পূর্ববর্তী মডেল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিশেষত, টেকনিকাল রিপোর্ট (ফিগার 9) ঘোষণা করে : &amp;lt;em&amp;gt;&amp;quot;_Retrieval performance remains highly stable within a 128K context window.&amp;quot;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সেশন_১_৮_উপশম&amp;quot;&amp;gt;সেশন ১-৮ : উপশম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি DeepSeek-V4-Pro-এর সাথে আট সেশন গিয়েছি উপর`codebase-gradle`. আট সেশন কোনো হ্যালুসিনেশন নেই, কোনো आविष्कৃত শ্রেণি নেই, কোনো নামাঙ্কন বিভ্রান্তি নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন ১ : প্রয়োগের`CodebaseYmlConfig` et &amp;lt;code&amp;gt;CodebaseYmlAnonymizer&amp;lt;/code&amp;gt;. 350টি কোটলিন লাইন, ইনলাইন টেস্ট, সবকিছু কম্পাইল হয়। সেশন 4: যোগ করা`SnapshotManager`ে ট্রি ভিউ, ফাইল সংগ্রহ, প্রতিটি ফাইলের জন্য AsciiDoc রেন্ডারিং. ২৭৯ লাইন, শून্য ত্রুটি. সেশন ৭ : ডিবাগের`renderFileSection()`যে পরিচালনা করতে ছিল চার ভিন্ন ধরনের অ্যানোনিমাইজারকে সমাধানের কোনো অস্পষ্টতা ছাড়া। তিন বার্তায় সমাধান।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Latency Kimi-র চেয়ে বেশি — ভাবা মোডে প্রতি উত্তরে প্রায় ১০-১২ সেকেন্ড লাগে। কিন্তু সংশোধনেরहार প্রায় শূন্য। আমি এজেন্টের ভুলগুলো ঠিক করতে সময় ব্যয় না করি। আমি &amp;lt;strong&amp;gt;সাথে&amp;lt;/strong&amp;gt; তাকে কোড করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিষ্পত্তি_পরীক্ষা_100k_টোকেনের_রিফ্যাক্টরিং&amp;quot;&amp;gt;নিষ্পত্তি পরীক্ষা: 100K টোকেনের রিফ্যাক্টরিং&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন 8-এ, সংযোজিত প্রেক্ষাপত ১০০K টোকেনের বেশি হয়ে গেছে। আমি একটি গুরুতর রিফ্যাক্টরিং চাই: চারটি ইন্ডলাইন যাচাই কাজ বের করা du`build.gradle.kts`JUnit5 পরীক্ষা ফাইলগুলো দিকে মধ্যে`buildSrc/src/test/`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজেন্ট একটি তিন-ফেজ পরিকল্পনা proposta Kore:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিদ্যমান কেসের মাইগ্রেশন দিয়ে পরীক্ষার ক্লাস তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JUnit5 এবং Kotest নির্ভরতা যোগ করুন`buildSrc/build.gradle.kts`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইনলাইন কোডটি মুছুন`build.gradle.kts`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরিকল্পনা সঠিক। সম্পাদন পরিষ্কার। এটি আমার দ্বারা মিস করা একটি এজ কেসও চিহ্নিত করে: ডুপ্লিকেট Jackson নির্ভরতা মধ্যে`buildscript {}` et `buildSrc/build.gradle.kts`যে গুলোকে মাইগ্রেশনের সময় একত্রিত করা উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;100K টোকেন প্রসঙ্গ, এবং এজেন্ট মনে করে যে`CodebaseYmlAnonymizer.TOKEN_MASK`আছে`&amp;quot;&amp;lt;strong&amp;gt;*&amp;lt;/strong&amp;gt;&amp;quot;`, যে`GitConfig.resolvedToken()&amp;lt;code&amp;gt;একটি extension function সংজ্ঞায়িত`readme.kt&amp;lt;/code&amp;gt;, এবং যে`SnapshotManager.PRUNED_DIRS`বর্জন করে`build`, &amp;lt;code&amp;gt;.gradle&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;.git&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটাই পার্থক্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মুখোমুখি_টুলনামূলক_মেট্রিক্স&amp;quot;&amp;gt;মুখোমুখি : টুলনামূলক মেট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মাপদণ্ড&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;Kimi K2.6&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;GLM-5.1&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;DeepSeek-V4-Pro&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সর্বোচ্চ প্রেক্ষাপট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;২৫৬ হাজার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;২০০ হাজার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1M&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যাটেনশন মেকানিজম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;MLA শুধা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;MLA + DSA&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CSA + HCA হাইব্রিড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মোট প্যারামিটার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1T&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;744B&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;১.৬টি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সক্রিয় সেটিংস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;32B&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;49B&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রচলিত অপক্ষয় সীমা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এই টেক্সটটি বাংলায় অনুবাদ করা হয়েছে, ব্যাকটিক span-গুলো (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) অপরিবর্তিত রাখা হয়েছে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(Empty)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;~128K tokens&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অতিক্রমে আচরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যাপক হ্যালুসিনেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সতही বিভ্রান্তি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ধীর ও প্রগতigor ক্ষয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্থিতিশীলতা NIAH&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;100% @128K (DSA)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্থির ১২৮K পর্যন্ত (চিত্র ৯)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;MRCR @128K&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রকাশিত নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gemini 3.1 Pro-কে বেশি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ত্যাগের আগে আয়োজিত সেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8 (এবং চলছে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংশোধনের সময় / কোডের সময়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;60%&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;30%&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;5%&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গড় বিলম্ব (mode think)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8 s&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;15 s&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;11 s&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিশ্বাসের গুণাঙ্ক*&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2/10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;6/10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;9/10&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;*বিশ্বাসের গুণক = আমার ক্ষমতার বিষয়ক মাপ, যা এজেন্টের কোড ও কমিটকে লাইন-বা-লাইন পর্যালোচনা ছাড়া নেয়.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-radar&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 16) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title তুলনামূলক রেডার — 3 LLMs সাহায্যপূর্ণ সফটওয়ার উন্নয়নে
legend right
  |= Couleur |= Modèle |
  | &amp;amp;lt;#FF5252&amp;amp;gt; | Kimi K2.6 |
  | &amp;amp;lt;#FFC107&amp;amp;gt; | GLM-5.1 |
  | &amp;amp;lt;#4CAF50&amp;amp;gt; | DeepSeek-V4-Pro |
endlegend

rectangle &amp;quot; &amp;quot; as space #FFFFFF

rectangle &amp;quot;সামঞ্জস্য
80K+ টোকেন&amp;quot; as coh #F5F5F5
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title তুলনামূলক রেডার — 3 LLMs সাহায্যপূর্ণ সফটওয়ার উন্নয়নে
legend right
  |= Couleur |= Modèle |
  | &amp;amp;lt;#FF5252&amp;amp;gt; | Kimi K2.6 |
  | &amp;amp;lt;#FFC107&amp;amp;gt; | GLM-5.1 |
  | &amp;amp;lt;#4CAF50&amp;amp;gt; | DeepSeek-V4-Pro |
endlegend

rectangle &amp;quot; &amp;quot; as space #FFFFFF

rectangle &amp;quot;সামঞ্জস্য
80K+ টোকেন&amp;quot; as coh #F5F5F5
rectangle &amp;quot;গুণমান
কোড&amp;quot; as qual #F5F5F5
rectangle &amp;quot;তর্ক
স্থাপত্য&amp;quot; as arch #F5F5F5
rectangle &amp;quot;প্রতিরোধ
ভ্রমণ&amp;quot; as hall #F5F5F5
rectangle &amp;quot;গতি
(ডেভেলপারের অভিজ্ঞতা)&amp;quot; as speed #F5F5F5
rectangle &amp;quot;জ্ঞান
Gradle/Kotlin&amp;quot; as kg #F5F5F5
rectangle &amp;quot;সংশোধনের\nহার&amp;quot; as corr #F5F5F5

coh --&amp;amp;gt; qual
qual --&amp;amp;gt; arch
arch --&amp;amp;gt; hall
hall --&amp;amp;gt; speed
speed --&amp;amp;gt; kg
kg --&amp;amp;gt; corr

note top of coh
  Kimi      ████░░░░░░ 4/10
  GLM       ██████░░░░ 6/10
  DeepSeek  █████████░ 9/10
end note

note top of qual
  Kimi      ███████░░░ 7/10 (sous 60K)
  GLM       ████████░░ 8/10
  DeepSeek  █████████░ 9/10
end note

note top of arch
  Kimi      █████░░░░░ 5/10
  GLM       ███████░░░ 7/10
  DeepSeek  █████████░ 9/10
end note

note top of hall
  Kimi      ██████░░░░ 6/10 → ██░░░░░░░░ 2/10 (&amp;amp;gt; 60K)
  GLM       ███████░░░ 7/10
  DeepSeek  █████████░ 9/10
end note

note top of speed
  Kimi      █████████░ 9/10
  GLM       ██████░░░░ 6/10
  DeepSeek  █████░░░░░ 5/10
end note

note top of kg
  Kimi      ███████░░░ 7/10
  GLM       ███████░░░ 7/10
  DeepSeek  █████████░ 9/10
end note

note top of corr
  Kimi      ██░░░░░░░░ 2/10 (beaucoup de corrections)
  GLM       █████░░░░░ 5/10
  DeepSeek  ██████████ 10/10 (presque rien à corriger)
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_deepseek_v4_pro_কেন_সফটওয়্যার_ডেভেলপমেন্টে_অগ্রসর_হচ্ছে&amp;quot;&amp;gt;DeepSeek-V4-Pro কেন সফটওয়্যার ডেভেলপমেন্টে অগ্রসর হচ্ছে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DeepSeek-V4-Pro er uttamata ekta karan karan nei — ekta milon :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_csahca_আর্কিটেকচারটি_কোডের_জন্য_তৈরি_করা_হয়েছে&amp;quot;&amp;gt;CSA+HCA আর্কিটেকচারটি কোডের জন্য তৈরি করা হয়েছে।&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাহায্যপ্রদানকৃত সফটওয়্যার উন্নয়ন একটি &amp;lt;strong&amp;gt;অতিশয়&amp;lt;/strong&amp;gt; ব্যবহার ক্ষেত্র দীর্ঘ-কনটেক্সট মনোযোগের জন্য। আপনার দরকার: - স্থানীয় নির্ভুলতা (এই ক্লাস কি থেকে উত্তরাধিকার পায়? এই পদ্ধতি কোথায় সংজ্ঞায়িত?) →&amp;lt;strong&amp;gt;CSA&amp;lt;/strong&amp;gt; - বিশ্বদর্শন (এই মডিউল কেন বিদ্যমান? চारों অননামীকারী কীভাবে মিথস্ক্রিয়া করেন?) →&amp;lt;strong&amp;gt;HCA&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kimi মাত্র MLA-সাথে স্থানীয় নির্ভুলতা পরিচালনা করে কিন্তু 60K-এর পর বিশ্বদৃষ্টি হারায়। GLM DSA-সাথে বিশ্বদৃষ্টি উন্নয়ন করে কিন্তু একমাত্র স্তরে থাকে। DeepSeek স্পষ্টভাবে দুটোকে একত্র করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_eager_প্রেক্ষাপট_তার_আরামকাজের_জোন&amp;quot;&amp;gt;2. EAGER প্রেক্ষাপট তার আরামকাজের জোন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার গবর্নেন্স সিস্টেম শুরুতে ~30K টোকেন নিয়ম ও ব্যাকলোড লোড করে। 128K-এ স্থিতিশীল উইন্ডো থাকলে, DeepSeek-এ সেশন বিনিময়ের জন্য ~100K টোকেন মার্জিন আছে। এটি কিমি যে degrade না করেই পরিচালনা করতে পারে তার ৩ থেকে ৪ গুণ বেশি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ 128K-এর নিখুঁত স্থিতিশীলতা উইন্ডো আমার প্রয়োজরের সাথে ঠিকভাবে মেলে: 30K EAGER + 70K Exchange = 20-30 বার্তার উৎপাদক সেশন, কখনো গ্রীন জোনের বাইরে যাওয়া না। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_৩_গুণমানঅবগাহন_অনুপাত_প্রবাহের_জন্য_সর্বোত্তম&amp;quot;&amp;gt;৩. গুণমান/অবগাহন অনুপাত প্রবাহের জন্য সর্বোত্তম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হ্যাঁ, DeepSeek-V4-Pro Kimi (11s vs 8s) এর চেয়ে ধীর। কিন্তু একটি কাজের &amp;lt;strong&amp;gt;মোট&amp;lt;/strong&amp;gt; সময় অনেক কম, কারণ আমি এজেন্টের ভ্রান্তি সংশোধনে ২০ মিনিট খर्च করি না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেভেলপারটি একটি উত্তরের লেটেন্সি মাপে না। তিনি &amp;quot;আমি প্রশ্ন করি&amp;quot; এবং &amp;quot;কোডটি আমার রেপোতে আছে এবং এটি কাজ করছে&amp;quot; এর মধ্যে সময় মাপে। এই মেট্রিকের ভিত্তিতে, DeepSeek-V4-Pro তিনজনের মধ্যে সবচেয়ে দ্রুত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখানো_পাঠ_কিভাবে_আপনার_llm_বাছাই_করবেন_vibe_coding_এর_জন্য&amp;quot;&amp;gt;শেখানো পাঠ : কিভাবে আপনার LLM বাছাই করবেন Vibe Coding-এর জন্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একসারি রঙ্কিং বাইরে, এই অভিজ্ঞতা আমাকে শিখিয়েছে যে কোনো বেঞ্চমার্কে উल्लékিত নয় এমন মানদণ্ডে LLM‑কে সহায়ক সফটওয়্যার ডেভেলপমেন্টের জন্য মূল্যায়ন করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আর্কিটেকচারটি দেখুন, দেখুন, ঘোষিত প্রেক্ষাপটের আকার নয়&amp;lt;/strong&amp;gt;— একটি মডেল যা ২৫৬K কন্টেক্স ঘোষণা করে কিন্তু শুধু একটি MLA আছে, তা kimi-এর মতো শেষ হবে: তত্ত্বগতভাবে সক্ষম, ব্যবহারিকভাবে ৬০K এর বাইরে ব্যবহার করা যায় না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার প্রেক্ষাপটে পরীক্ষা করুন, একটি সাধারণ বেঞ্চমার্কে নয়&amp;lt;/strong&amp;gt;আমার প্রথম ৩০K টোকেনের ASCII DOC প্রম্পটে absoluto নিয়ম এবং ব্যাকলগ আছে, যা HLE বা AIME প্রশ্নের সাথে কোনো संबंध নেই।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�যদি গুণমান অনুসরণ করে, তাহলে ল্যাটেন্সি শত্রু নয়।&amp;lt;/strong&amp;gt;— একটি ধীর মডেল যা সঠিক কোড তৈরি করে একটি ত্বরিত মডেলের চেয়ে দ্রুত যা ভুল কোড তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পাবলিক টেকনিকাল রিপোর্ট নেই এমন মডেলগুলো থেকে সতর্ক থাকো&amp;lt;/strong&amp;gt;— যদি দলটি তার দৃষ্টি আর্কিটেকচারকে ডকুমেন্ট না করে, তাহলে তা বোঝায় যে তিনি দীর্ঘ संदर्भে তার কর্মক্ষমতায় আস্থা রাখেন না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-decision-tree&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-1dce43469d74fb9d522f8105db9b45e2.svg&amp;quot; alt=&amp;quot;Arbre de décision pour choisir un LLM pour le développement logiciel assisté&amp;quot; width=&amp;quot;827&amp;quot; height=&amp;quot;461&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এবং_গাভার্নেন্স_এজেন্ট_সবই_এতে_কী&amp;quot;&amp;gt;এবং গাভার্নেন্স এজেন্ট সবই এতে কী?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই অভিজ্ঞতা যে বিন্দুটি আমি আমার ইগার/লেজি শাসনbarsা গবেষণা থেকে প্রতিবদ্ধি করছি তা যাচাই করে:&amp;lt;strong&amp;gt;LLM-এর গুণমান এবং শাসনগত গুণমান গুণফলমূলক, না যোগমূলক&amp;lt;/strong&amp;gt;।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Kimi K2.6-এর সাথে আমার শাসন নিখুঁত ছিল — কিন্তু মডেলটি তথ্যটি জুড়ে দিল। ফল: নিখুঁত শাসন × হ্যালুসিনেশন = শূন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DeepSeek-V4-Pro-এর সাথে, EAGER (30K টোকেন নিয়ম) + LAZY (সেশন আর্কাইভ, টেকনিক্যাল রেফারেন্স) + Hot/Warm/Cold (ঘূর্ণিঝর ব্যাকআপ) শাসন একটি ইকোসিস্টেম তৈরি করে যেখানে প্রতিটি স্তর অন্যটিকে শক্তিশালী করে। এজেন্টের mắtের সামনে নিয়ম থাকে (EAGER), তারা ইতিহাস দেখতে পারে (LAZY), এবং ব্যাকআপ ঘূর্ণিঝরের কারণে কনটেক্সট কখনো স্যাচোরেট হয় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ শাসনহীন ভালো LLM হলো স্টিয়ারিং ছাড়া ফের拉 ডি রের ইঞ্জিনের মতো। ভালো শাসন কিন্তু ভালো LLM ছাড়া, ইঞ্জিন ছাড়া স্টিয়ারিং চাকারের মতো। DeepSeek-V4-Pro + আমার শাসন এজেন্ট = প্রথমবার আমি মনে হচ্ছি আমি চালাচ্ছি। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রোটেশনাল ব্যাকআপ মেকানিজম (১০ সেশনে প্রতি বা &amp;amp;gt;500 EAGER লাইনে রোটেশন) একটি মডেলের সাথে অর্থ খুঁজে পায় যেটি 128K কনটেক্সট ধারণ করে: 10 সক্রিয় সেশনের স্লাইডিং উইন্ডো কনটেক্সটকে তাজা রাখে, ক্ষয়াঞ্চলকে কখনো অতিক্রম না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রযুক্তি_উৎস&amp;quot;&amp;gt;প্রযুক্তি উৎস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আমার আনুভবিক অভিজ্ঞতাকে সরকারি প্রযুক্তিগত রিপোর্টের সাথে মেশে আমার পর্যবেক্ষণ যাচাই করলাম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DeepSeek-V4 Technical Report&amp;lt;/strong&amp;gt; — PDF সংগ্রহ করা হয়েছেhttps://huggingface.co/deepseek-ai/DeepSeek-V4-Flash[HuggingFace]. অংক ৯ : \&amp;quot;প্রাপ্তি কর্মক্ষমতা 128K প্রসঙ্গ উইন্ডোর মধ্যে খুবস্থায়ী থাকে। 128K চিহ্নের বাইরে কর্মক্ষমতার কমী দৃশ্যমান হলে, 1M টোকেনে মডেলের পুনরুদ্ধার ক্ষমতা অসাধারণভাবে শক্তিশালী থাকে।\&amp;quot; CSA+HCA আর্কিটেকচার নথিভুক্ত অংশ 2.3.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;*GLM-5 টেকনিকাল রিপোর্ট*https://arxiv.org/abs/2602.15763[arXiv:2602.15763]. DSA সংশ্লিষ্ট অবিরাম প্রি-ট্রেইনিংয়ের মাধ্যমে প্রবর্তিত হয়, &amp;quot;lossless by construction&amp;quot;। অধিকতম কন্টেক্সট 202,752 টোকেন। টেবিল ৩/৫/৬ দীর্ঘ-কনটেক্সট কর্মক্ষমতা Vs বিকল্পগুলো নথিভুক্ত করে (SWA, গেটেড ডেলটানেট, সিম্পল-GDN)।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কিমি K2.6 মডেল কার্ড&amp;lt;/strong&amp;gt; —https://huggingface.co/moonshotai/Kimi-K2.6[HuggingFace]. MLA, 256K সর্বোচ্চ কনটেক্সট। discard-all রণনীতি সীমার পাশে এজেন্টিক কাজে (দীর্ঘ কনটেক্সটে MLA-এর অনুশীলনিক সীমা implicitভাবে নিশ্চিত করে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;*Kimi K2 টেকনিকাল রিপোর্ট*https://arxiv.org/abs/2507.20534[arXiv:2507.20534]. MoE আর্কিটেকচার, MuonClip অপটিমাইজার, এজেন্টিক কর্মক্ষমতা (HLE, BrowseComp, Terminal-Bench)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বোৎকৃষ্ট পয়েন্ট : ত নিজস্ব মূল্যায়নে, Moonshot &amp;lt;strong&amp;gt;discard-all&amp;lt;/strong&amp;gt; কৌশল প্রয়োগ করে (প্রाचীন প্রেক্ষাপট বাদ দেয়) যতক্ষণ না প্রেক্ষাপটের উইন্ডো চেড়ে গেলে। এটি আমার পর্যবেক্ষণের সাথে পূর্ণরূপে মেলে: MLA একটিই 256K উইন্ডো এর সমস্ত অংশে সামঞ্জস্য বজায় রাখতে পারে না। আর্কিটেকচারটি অনুসরণ করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নिष्कর্ষ_শিল্পীর_বেছে_নেওয়া&amp;quot;&amp;gt;নिष्कর্ষ: শিল্পীর বেছে নেওয়া&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিন সপ্তাহ ও তেরো বাস্তব উন্নয়ন সেশনের পর, বিচারটি আপিলের সুযোগ ছাড়া।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 8.3337%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Kimi K2.6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;GLM-5.1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;DeepSeek-V4-Pro&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;bel 60K er niche&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দৃঢ় ১২০K পর্যন্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রতিটি জায়গায় শাসন করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাইরে ব্যবহার করা যায় না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শালি ভ্রান্তি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;১২৮K পর্যন্ত স্থিতিশীল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;২ সেশন, ত্যাগিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;৩ সেশন, ত্যাগ করা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;৮ সেশন, গ্রহণকৃত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;DeepSeek-V4-Pro আমার ডিফল্ট LLM হয়ে গেছে সমস্ত সফটওয়্যার ডেভেলপমেন্ট সহায়িত সেশনগুলির জন্য &amp;lt;code&amp;gt;Opencode&amp;lt;/code&amp;gt;-সাথে। এটি নয় কারণ এটি সর্বশেষ। এটি নয় কারণ Its academics benchmarks সবচেয়ে ভাল। কিন্তু কারণ একজন ডেভেলপারের বাস্তব জীবনে যে &amp;lt;code&amp;gt;Gradle Kotlin DSL&amp;lt;/code&amp;gt;‑কে প্লাগিন পুশ করে 30K টোকেনের এজেন্ট কনটেক্সট সঙ্গে, এটি একমাত্র যা আমাকে প্রত্যাখ্যান করে না যখন কনটেক্সট দীর্ঘ হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;CSA+HCA একটি &amp;lt;strong&amp;gt;game changer&amp;lt;/strong&amp;gt; স্থাপত্য সমাধান। দ্বি-স্তরীয় সংকোচন + স্পার্সিফিকেশন একটি প্রয়োগের ছোট বিবরণ নয় — এটি কোড সহায়ক ও একটি বিশ্বাসযোগ্য সঙ্গীর মধ্যে পার্থক্য তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;&amp;lt;/em&amp;gt; আমি DeepSeek-V4-Pro বেছে নিয়েছি, কারণ এটি তিনটিতে একমাত্র যে আমার এজেন্ট গবর্নেন্সকে প্রতিরক্ষামূলক বাধা(`&amp;quot;comment éviter que l&amp;amp;#8217;agent oublie ?`&amp;quot;) থেকে একটি আক্রমণাত্মক সুবিধা(`&amp;quot;que peut-on construire maintenant que l&amp;amp;#8217;agent se souvient de tout ?`&amp;quot;)‑এ পরিণত করে। ___&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;*এই নিবন্ধটি প্রকল্পের বাস্তব উন্নয়নের ১৩টি সেশনের ফল`codebase-gradle`, নথিভুক্ত এরে`.agents/sessions/`আমার Eager/Lazy/Hot/Warm/Cold এজেন্ট শासन পদ্ধতির অনুযায়ী। উদ্ধৃত প্রযুক্তিগত Sources HuggingFace এবং arXiv-এ সাধারণভাবে উপলব্ধ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>প্রেক্ষাপট এজেন্ট অডিট : যখন আপনার নিজের শাসন সমস্যা হয়ে ওঠে — এবং কীভাবে কিছু হারাবেন না তাই এটিকে মেরামত করা</title>
            <link >https://cheroliv.com//blog/2026/0111_audit_contexte_agent_post.html</link>
            <pubDate>Mon, 27 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0111_audit_contexte_agent_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃশ্য_session_051_কিছুটা_ভুল_লাগে&amp;quot;&amp;gt;দৃশ্য : session 051, কিছুটা ভুল লাগে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অডিট_৬২৭টি_লাইন_বিশ্লেষণ_করা&amp;quot;&amp;gt;অডিট: ৬২৭টি লাইন বিশ্লেষণ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকৌশলকে_হারানোর_ভয়&amp;quot;&amp;gt;প্রকৌশলকে হারানোর ভয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_এনসাইক্লপিডিয়া_ভাগ&amp;quot;&amp;gt;সমাধান : এনসাইক্লপিডিয়া ভাগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_essentials_ফাইলের_বিষয়বস্তু&amp;quot;&amp;gt;ESSENTIALS ফাইলের বিষয়বস্তু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফল_৫০_eager_কনটেক্সট&amp;quot;&amp;gt;ফল : -৫০% EAGER কনটেক্সট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফোল্ডারের_নাম_কেন_encyclopedies&amp;quot;&amp;gt;ফোল্ডারের নাম কেন `encyclopedies/&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শ্রেণীর_তর্কগত_পরবর্তী_অংশ&amp;quot;&amp;gt;শ্রেণীর তর্কগত পরবর্তী অংশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যা_আমি_ভিন্নভাবে_করতাম&amp;quot;&amp;gt;যা আমি ভিন্নভাবে করতাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আপনার_নিজের_পরিস্থিতি_অডিট_করার_গাইড&amp;quot;&amp;gt;আপনার নিজের পরিস্থিতি অডিট করার গাইড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_জীবন্ত_শাসন&amp;quot;&amp;gt;একটি জীবন্ত শাসন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লিংক&amp;quot;&amp;gt;লিংক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pathner samay : 14 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি নিশ্চয়কর এজেন্ট শাসন তৈরি করতে কয়েকটি সপ্তাহ ব্যয় করেছেন। Eager/Lazy, সেশন শেষ হওয়ার প্রক্রিয়া, ঘোরмов ব্যাকআপ। সিস্টেম চলছে। একদিন, এজেন্ট ধীরে হয়ে যায়। উত্তরগুলো ঢিলা হয়ে গেছে। আপনি মাপছেন: স্বয়ংক্রিয়ভাবে লোড হওয়া ১৪১৪ লাইন। এবং সবচেয়ে খারাপ হল যে, দুর্দ দায়ী কোড নয়, ব্যাখালো নয়, সেশন আর্কাইভও নয়। দুর্দ দায়ী সেই ফাইল যা আপনার পদ্ধতিকে নথিবদ্ধ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_session_051_কিছুটা_ভুল_লাগে&amp;quot;&amp;gt;দৃশ্য : session 051, কিছুটা ভুল লাগে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;30 এপ্রিল ২০২৬, বিকাল ৪:০০. আমি একটি সেশনের মাঝখানেই, উপর`magic-stick`, মій Linux লাইভ ISO নির্মাণের প্রকল্প। Opencode এজেন্টটি স্বয়ংক্রিয়ভাবে আমার Eager ফাইলগুলোকে স্বাভাবিকের মতো আপলোডেছে —&amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.agents/INDEX.adoc&amp;lt;/code&amp;gt;. সবকিছু স্বাভাবিক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু উত্তরগুলো দুর্বল। এজেন্টকে যুক্তি করতে দুই সেকেন্ড বেশি সময় লাগে। ও তিনবারত আগে যা ডিটেলเหছিলে, তা ভুলে যায়। এটা কোনোক্র্যাশ নাকি ত্রুটি নয়; এটি ধীরভাবে ক্ষয়, যা তৎক্ষণে লক্ষ্য করা হয় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি আগে সেশন ০৪৮-এ এই অভিজ্ঞতা পেয়েছিলাম, যখন আমি খুঁজে পেয়েছিলাম যে শासन ফাইলগুলোর মোট ৫২০০ লাইন ছিল। তখন আমি Hot/Warm/Cold মেকানিজমের ধারণা করেছিলাম, যার ১০ সেশনের স্লাইডিং উইন্ডো, সমান হিমবাহার এবং দুই ট্রিগার সহ সেন্সর ছিল। সমস্যা সমাধান করা হইয়া ছিল। যথা সিদ্ধান্তে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে, আমরা সেশন ০৫১-এ আছি। ব্যাকআপ রোটেশন সফলভাবে ঘটেছে — EAGER ফাইলগুলো ২০৮৭ থেকে ৫০০ লাইনে পরিবর্তিত হয়েছে। তবুও, প্রসঙ্গটি এখনও ভারী। কিছু আমার বুঝতে না আসে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি একটি টার্মিনাল খুলি এবং টাইপ করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;wc -l AGENT.adoc AGENT_MODUS_OPERANDI.adoc PROMPT_REPRISE.adoc \
  .agents/INDEX.adoc .agents/SESSIONS_HISTORY.adoc \
  .agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;  287 AGENT.adoc
  627 AGENT_MODUS_OPERANDI.adoc
   51 PROMPT_REPRISE.adoc
  218 .agents/INDEX.adoc
   18 .agents/SESSIONS_HISTORY.adoc
  213 .agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc
 1414 total&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;1414 লাইন। ব্যাকআপ রোটেশনটি ভালভাবে কাটেছে INDEX, SESSIONS_HISTORY এবং COMPLETED_TASKS-এ — তারা পরিষ্কার। কিন্তু একটি হাতি ক&amp;amp;lt;/tool_call&amp;amp;gt; আছে যে আমি পূর্বে দেখিনি:&amp;lt;strong&amp;gt;৬২৭ লাইন&amp;lt;/strong&amp;gt;একই ফাইলে.&amp;lt;code&amp;gt;AGENT_MODUS_OPERANDI.adoc&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফাইলটি সেই ফাইল, যা সেশন ১-এ আমি Eager/Lazy কৌশল নথি করতে লিখেছিলাম। এটি পদ্ধতির ম্যানুয়াল। এটাই এখন একা একায় EAGER প্রেক্ষাপটের ৪৪% হয়ে গেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-before-audit&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

title সন্দর্ভ EAGER — 1414 লাইন
rectangle &amp;quot;AGENT_MODUS_OPERANDI\n**627 লাইন (44%)**&amp;quot; as MOD #FFCDD2
rectangle &amp;quot;AGENT.adoc
287 লাইন (20%)&amp;quot; as AG #BBDEFB
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

title সন্দর্ভ EAGER — 1414 লাইন
rectangle &amp;quot;AGENT_MODUS_OPERANDI\n**627 লাইন (44%)**&amp;quot; as MOD #FFCDD2
rectangle &amp;quot;AGENT.adoc
287 লাইন (20%)&amp;quot; as AG #BBDEFB
rectangle &amp;quot;INDEX.adoc
218 লাইন (15%)&amp;quot; as IDX #C8E6C9
rectangle &amp;quot;COMPLETED_TASKS\n213 পंক্তি (15%)&amp;quot; as ARC #FFF9C4
rectangle &amp;quot;PROMPT_REPRISE
51 লাইন (4%)&amp;quot; as PRO #E1BEE7
rectangle &amp;quot;SESSIONS_HISTORY
18 লাইন (1%)&amp;quot; as HIS #FFE0B2

note bottom of MOD
  Le fichier qui documente
  la méthode est devenu
  le plus gros poste de dépense
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনুব্যাহতি সম্পূর্ণ। &amp;lt;strong&amp;gt;সন্দ্ভ সংরক্ষণের&amp;lt;/strong&amp;gt; জন্য ডিজাইন করা ফাইলটি এখন মূল &amp;lt;strong&amp;gt;সন্দ্ভব্যয়ী&amp;lt;/strong&amp;gt; হয়ে গেছে। এটি যেন আপনার গাড়ির ব্যবহার নির্দেশিকার ওজন ইঞ্জিনের ওজনের চেয়ে বেশি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অডিট_৬২৭টি_লাইন_বিশ্লেষণ_করা&amp;quot;&amp;gt;অডিট: ৬২৭টি লাইন বিশ্লেষণ করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি সেকশন-সেকশনে অডিট করার সিদ্ধান্ত নেব। মুছার জন্য না — &amp;lt;strong&amp;gt;বুঝতে&amp;lt;/strong&amp;gt; যের EAGER-এ থাকার যোগ্য এবং যেটি জ্ঞান হ্রাস না করে অন্য জায়গায় থাকতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে সঠিক গঠন`AGENT_MODUS_OPERANDI.adoc`এ যা আমি পাই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2858%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনুচ্ছেদ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লাইনগুলি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিষয়বস্তু&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এখনও উপস্থিত&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;P1 — সমগ্রদৃষ্টি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;64&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;समस्या समाधान की गई है, मूल सिद्धांतों के बारे में, डैशबोर्ड बनाम मैनुअल की तुलना। Wait mixing language - I used Hindi incorrectly. Need proper Bengali.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিচারের ফ্যাসলা অবশেষ ও আপীলযোগ্য নয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্পূর্ণ ডুপ্লিকেট&amp;lt;/strong&amp;gt;(১৬৭ লাইন) : P3, P4, P9 — সবই ইতিমধ্যে আছে`AGENT.adoc` ou &amp;lt;code&amp;gt;INDEX.adoc&amp;lt;/code&amp;gt;, অনেকবার শব্দে শব্দে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যবহারে কখনো পরামর্শ নেওয়া হয়নি&amp;lt;/strong&amp;gt;(215 lignes) : P5, P6, P7, P8, Annexes — মেটা-শাসন যা কোনো সেশনে কখনো ব্যবহৃত হয়নি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অনুজ্ঞ জ্ঞান&amp;lt;/strong&amp;gt;(161 লাইন) : P1 এবং P2 — শব্দকোষ LAZY/EAGER, অনুপমা, চার্জিং নীতি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;৬২৭ লাইনে,&amp;lt;strong&amp;gt;৩৮২ শব্দ&amp;lt;/strong&amp;gt;. এই ৩৮২টি লাইনটি &amp;lt;strong&amp;gt;প্রত্যেক সেশনের শুরুতে&amp;lt;/strong&amp;gt; লোড করা হয়, এজেন্ট দ্বারা ব্যবহার করা হয়, যা আমি হ্যালো বলতেও আগে তার মনযোগকে দ্রবণ করে দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-audit-result&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title AGENT_MODUS_OPERANDI.adoc — 627 লাইনের অডিট
left to right direction

rectangle &amp;quot;�🟡 **ডুপ্লিকেট**\n167 লাইন (27%)&amp;quot; as DUP #FFF9C4 {
  card &amp;quot;P3 — অসাপেক্ষ নিয়ম
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title AGENT_MODUS_OPERANDI.adoc — 627 লাইনের অডিট
left to right direction

rectangle &amp;quot;�🟡 **ডুপ্লিকেট**\n167 লাইন (27%)&amp;quot; as DUP #FFF9C4 {
  card &amp;quot;P3 — অসাপেক্ষ নিয়ম
(34 লাইন)&amp;quot; as D1
  card &amp;quot;P4 — জীবনচক্র
(১৩৩ লাইন)&amp;quot; as D2
  card &amp;quot;P9 — রেফারেন্স
(৩০ লাইন)&amp;quot; as D3
}

rectangle &amp;quot;🔴 **কখনও পরামর্শ নেওয়া হয়নি**\n215 লাইন (34%)&amp;quot; as JAM #FFCDD2 {
  card &amp;quot;P5 — মেট্রিক্স
(49 লাইন)&amp;quot; as J1
  card &amp;quot;P6 — অনুসন্ধান\n(72 লাইন)&amp;quot; as J2
  card &amp;quot;P7 — উন্নতি
(39 লাইন)&amp;quot; as J3
  card &amp;quot;P8 — Bootstrap\n(13 লাইন)&amp;quot; as J4
  card &amp;quot;সংযোজন — শব্দকোষ
(42 লাইন)&amp;quot; as J5
}

rectangle &amp;quot;🟢 **অনন্য জ্ঞান**
161 লাইন (26%)&amp;quot; as UNI #C8E6C9 {
  card &amp;quot;P1 — সারাংশ
(64 লাইন)&amp;quot; as U1
  card &amp;quot;P2 — ফাইল গঠন
(97 লাইন)&amp;quot; as U2
}

note bottom of UNI
  C&amp;#39;est ÇA qu&amp;#39;il faut garder en EAGER.
  Le reste → cold storage.
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আকরেশ হলো সবকিছুই-এর কী। ডুপ্লিকেট (হলুদ) শুধু শব্দ — এজেন্ট দুবার এগুলো পড়ে, দুটি ভিন্ন ফাইলে। কখনো পরামর্শকৃত হয়নি (লাল) মৃত ডকুমেন্টেশন — সावধানে লিখা হয়েছে, কখনো ব্যবহার করা হয়নি। শুধু সবুজই এ জ্ঞান ধারণ করে যা এজেন্ট অন্য কোনো জায়গায় পেতে পারে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকৌশলকে_হারানোর_ভয়&amp;quot;&amp;gt;প্রকৌশলকে হারানোর ভয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পর্যায়ে, আমি স্পষ্টভাবে দেখছি: আমাকে কমান্তর করতে হবে`AGENT_MODUS_OPERANDI.adoc`. কিন্তু আমি সন্দেহ করি&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফাইলটি, আমি হাতে लेखেছি। প্রতিটি অংশটি একটি বাস্তব সেশনে শেখা পাঠ্যের ফলাফল। পি৩ অংশটি一个`rm -rf`দুর্ঘটিত উপর`bakery-plugin`যেটা আমাকে বাস্তব Firebase টোকেন খরচিয়েছিল। P4 অংশটি পन्द्रহ সেশন এর ফল, যেখানে আমি আর্কাইভ করতে ভুল হত এবং দরকারি তথ্য হারাবত। ৬-ধাপের পদ্ধতি কোন বই থেকে না বের হয়েছে — এটি ব্যথা থেকে বের হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বিভাগগুলো মুছে ফেললে, আমার নিজস্ব ইঞ্জিনিয়ারিং ইতিহাসকে নষ্ট করা হত। যে পাঠগুলো এগুলো উদ্ভব করেছে, যে সেশনসময় waarop আমি এগুলো খুঁজে পেয়েছিলাম, যে ভুলগুলো যা আমি আর কখনও করে নেই চাই। এটি শুধু টেক্সট নয়—এটি কঠোর করা অভিজ্ঞতা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই জায়গায়েই আমি সমাধানকে গাইড করবে এমন নীতিটি গঠন করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt; &amp;lt;strong&amp;gt;কখনো মুছবেন না. সর্বদা স্থানান্তর করুন।&amp;lt;/strong&amp;gt;জ্ঞানটি প্রজেক্ট থেকে বিলুপ্ত হওয়ার দরকার নেই। এটি শুধু স্বয়ংক্রিয়ভাবে লোড করা হবে না যখন এটি প্রয়োজন নেই। (No visible characters)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_এনসাইক্লপিডিয়া_ভাগ&amp;quot;&amp;gt;সমাধান : এনসাইক্লপিডিয়া ভাগ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le modèle que je propose est simple et s&amp;amp;#8217;inspire de la façon dont Wikipédia a grandi : quand un article devient trop long, on ne le coupe pas — on crée un article détaillé et on garde un résumé dans l&amp;amp;#8217;article principal.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যে জন্য`AGENT_MODUS_OPERANDI.adoc`, এটি দেয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নিষ্কাশন&amp;lt;/strong&amp;gt;১৬১টি অনন্য জ্ঞানের পंক্তিগুলো (P1 + P2) একটি নতুন ফাইলে`LAZY_EAGER_ESSENTIALS.adoc`— সঙ্কুচিত ~50 লাইনে, সঠিকভাবে EAGER&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;রিমেইন করা&amp;lt;/strong&amp;gt; &amp;lt;code&amp;gt;AGENT_MODUS_OPERANDI.adoc&amp;lt;/code&amp;gt; en &amp;lt;code&amp;gt;.agents/encyclopedies/LAZY_EAGER_ENCYCLOPEDIE.adoc&amp;lt;/code&amp;gt;— 627 লাইনের মূল ফাইল, সংরক্ষিত &amp;lt;strong&amp;gt;intact&amp;lt;/strong&amp;gt;, এ cold storage&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কোনো চার্জ করবেন না&amp;lt;/strong&amp;gt; le fichier encyclopédie automatiquement — il est là pour l&amp;amp;#8217;humain, pour la distillation future, pour l&amp;amp;#8217;agent qu&amp;amp;#8217;on invoquera dans six mois avec un meilleur modèle&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-split-solution&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title Split বিশ্বকোষীয় — AGENT_MODUS_OPERANDI
left to right direction

rectangle &amp;quot;**AGENT_MODUS_OPERANDI.adoc**
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title Split বিশ্বকোষীয় — AGENT_MODUS_OPERANDI
left to right direction

rectangle &amp;quot;**AGENT_MODUS_OPERANDI.adoc**
627 লাইন
(বিভাগের আগে)&amp;quot; as BEFORE #FFCDD2 {
}

rectangle &amp;quot; &amp;quot; as ARROW1
rectangle &amp;quot; &amp;quot; as ARROW2

rectangle &amp;quot;**LAZY_EAGER_ESSENTIALS.adoc**
**~50 লাইন — EAGER**&amp;quot; as ESS #C8E6C9 {
  card &amp;quot;P1 সংক্ষিপ্ত\n(15 লাইন)&amp;quot; as E1
  card &amp;quot;P2 সংক্ষিপ্ত\n(35 লাইন)&amp;quot; as E2
}

rectangle &amp;quot;**.agents/encyclopedies/**\n**LAZY_EAGER_ENCYCLOPEDIE.adoc**\n627 লাইন — COLD&amp;quot; as ENC #BBDEFB {
  card &amp;quot;P1 থেকে Annexes
(সম্পূর্ণ, অক্ষুণ্ন)&amp;quot; as C1
}

BEFORE -[#4CAF50]-&amp;amp;gt; ESS : &amp;quot;গুরুত্বপূর্ণ জ্ঞানের নিষ্কাশন&amp;quot;
BEFORE -[#2196F3]-&amp;amp;gt; ENC : &amp;quot;সম্পূর্ণ সংরক্ষণ
ইঞ্জিনিয়ারিং&amp;quot;

note bottom of ESS
  Chargé automatiquement
  en début de session
  → L&amp;#39;agent comprend le vocabulaire
end note

note bottom of ENC
  Jamais chargé automatiquement
  Consultable par l&amp;#39;humain
  Matériau brut pour distillation future
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নাম`encyclopedies/`এটি তুচ্ছ নয়। একটি এনসাইক্লোপেডি, এটি একটি আর্কাইভ ফাইল নয় — এটি سازمانিত জ্ঞানের একটি সংগ্রহ, যেটি পরামর্শযোগ্য কিন্তু পোর্টেবল নয়। মেট্রোতে ইউনিভার্সেল ইসাইক্লোপেডিয়া পড়া হয় না। আমরা इसे গ্রন্থাগারে রাখি, এবং সেখানে যাই যখন আমাদের একটি নির্দিষ্ট প্রশ্ন থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফোল্ডারের ভূমিকা হল একটি শীতল রেফারেন্স গ্রন্থাগার, যা গঠনকৃত ও সম্পূর্ণ — এবং এজেন্ট তা স্বয়ংক্রিয়ভাবে স্পর্শ না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_essentials_ফাইলের_বিষয়বস্তু&amp;quot;&amp;gt;ESSENTIALS ফাইলের বিষয়বস্তু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে নতুন ফাইলটি বাস্তবে কেমন দেখтся`LAZY_EAGER_ESSENTIALS.adoc`, P1 এবং P2 থেকে সংগ্রহিত এবং সংকুচিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Stratégie LAZY/EAGER — Principes Essentiels

[abstract]
Ce fichier définit la stratégie de gestion du contexte agent.
Chargé automatiquement (EAGER) en début de session.

== Principes

|===
| EAGER | LAZY
| Tableau de bord | Manuel du propriétaire
| Chargé automatiquement | Chargé sur demande
| &amp;amp;lt;= 100 lignes, &amp;amp;lt;= 10k tokens | Illimité, détaillé
| Règles absolues, mission courante | Archives, historique, références
|===

== Politique de Chargement

|===
| Fichier | Type | Quand charger
| PROMPT_REPRISE.adoc | EAGER | Début session (auto)
| *_ESSENTIALS.adoc | EAGER | Début session si EPIC active
| .agents/INDEX.adoc | EAGER | Début session (auto)
| *_REFERENCE.adoc | LAZY | Sur besoin (détails architecture)
| .agents/sessions/N-*.adoc | LAZY | Sur demande (détails session)
| .agents/encyclopedies/*.adoc | COLD | Jamais auto (humain seulement)
|===

== Comment l&amp;#39;Agent Sait Quoi Charger

Début session → PROMPT_REPRISE + INDEX + ESSENTIALS actifs.
Besoin de détails → charger les *_REFERENCE et sessions/ en LAZY.
Connaissance froide → encyclopedies/, jamais automatique.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পঞ্চাশটি লাইন। এটাই এজেন্টকে মেকানিক বোঝার জন্য প্রয়োজনীয় সবকিছু। বাকি সব — পাঠের ইতিহাস, বিস্তারিত উপমা, ধাপে ধাপে পদ্ধতি, সংযুক্তি — এনসাইক্লোপেডিয়ায় বাস করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং সবচেয়ে গুরুত্বপূর্ণ :&amp;lt;strong&amp;gt;কিছুই মুছে ফেলা হয়নি&amp;lt;/strong&amp;gt;. ৬২৭টি ইঞ্জিনিয়ারিং লাইন এখনও সেখানে আছে, মধ্যে`.agents/encyclopedies/LAZY_EAGER_ENCYCLOPEDIE.adoc`}. এগুলো শুধু গ্রন্থাগারে সাজানো আছে, কাজের মেজের ওপর না.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফল_৫০_eager_কনটেক্সট&amp;quot;&amp;gt;ফল : -৫০% EAGER কনটেক্সট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিভাজনের আগে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt; 287 AGENT.adoc
 627 AGENT_MODUS_OPERANDI.adoc
  51 PROMPT_REPRISE.adoc
 218 .agents/INDEX.adoc
  18 .agents/SESSIONS_HISTORY.adoc
 213 .agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc
1414 total&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্প্লিটের পরে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt; 287 AGENT.adoc
  50 LAZY_EAGER_ESSENTIALS.adoc       ← remplace 627 lignes
  51 PROMPT_REPRISE.adoc
 218 .agents/INDEX.adoc
  18 .agents/SESSIONS_HISTORY.adoc
 213 .agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc
 837 total                              ← -41%&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-after-audit&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

title EAGER প্রেক্ষপট এনসাইক্লোপিডিক স্প্লিটের পরে — ৮৩৭ লাইন (-৪১%)
rectangle &amp;quot;AGENT.adoc\n287 লাইন (34%)&amp;quot; as AG #BBDEFB
rectangle &amp;quot;INDEX.adoc
218 লাইন (26%)&amp;quot; as IDX #C8E6C9
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

title EAGER প্রেক্ষপট এনসাইক্লোপিডিক স্প্লিটের পরে — ৮৩৭ লাইন (-৪১%)
rectangle &amp;quot;AGENT.adoc\n287 লাইন (34%)&amp;quot; as AG #BBDEFB
rectangle &amp;quot;INDEX.adoc
218 লাইন (26%)&amp;quot; as IDX #C8E6C9
rectangle &amp;quot;COMPLETED_TASKS
213 লাইন (২৫%)&amp;quot; as ARC #FFF9C4
rectangle &amp;quot;PROMPT_REPRISE
51 লাইন (6%)&amp;quot; as PRO #E1BEE7
rectangle &amp;quot;ESSENTIALS
50 লাইন (6%)&amp;quot; as ESS #A5D6A7
rectangle &amp;quot;SESSIONS_HISTORY
18 লাইন (2%)&amp;quot; as HIS #FFE0B2

note bottom of ESS
  De 627 → 50 lignes
  577 lignes d&amp;#39;ingénierie
  préservées en cold storage

  Rien de perdu. Tout de relocalisé.
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বৃহত্তম ব্যবহারকারী (AGENT_MODUS_OPERANDI, 627 লাইন) একটি ৫০ লাইনের ফাইল দিয়ে প্রতিস্থাপন করা হয়েছে। লাভ তাৎক্ষণিক : ৫৭৭ লাইনের প্রেক্ষাপট মুক্ত। এজেন্ট শ্বাস নিচ্ছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং মধ্যে`.agents/encyclopedies/`, ৬২৭ লাইনের মূল ফাইলটি অপেক্ষা করছে — অক্ষুণ্ণ, তার সব অংশসহ, ডুপ্লিকেট অংশগুলো এবং কোনো কবলে ব্যবহৃত না হওয়া অংশগুলোসাথে। কারণ একদিন একটি উন্নত মডেল یا একজন মানব ডেটা সায়েন্টিস্ট এই কোণগুলো, এই স্বীকৃত রিডান্ডেন্সিগুলো এবং এই শেখা পাঠগুলোকে চেক করতে চান। এবং সেই দিনে, মূল উপাদান সেখানে থাকবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফোল্ডারের_নাম_কেন_encyclopedies&amp;quot;&amp;gt;ফোল্ডারের নাম কেন `encyclopedies/&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নাম বেছে নেওয়া শুধুমাত্র সতাহি নয়। এটি মেকানিজ़মের দর্শনকে কোড করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি &amp;lt;strong&amp;gt;আর্কাইভ&amp;lt;/strong&amp;gt; (&amp;lt;code&amp;gt;archives/&amp;lt;/code&amp;gt;) ইতিহাসের ডেটা সময়ক্রমে সাজানো আছে — যেমন &amp;lt;code&amp;gt;COMPLETED_TASKS&amp;lt;/code&amp;gt; মাসিক। একটি &amp;lt;strong&amp;gt;backup&amp;lt;/strong&amp;gt; (&amp;lt;code&amp;gt;backup/&amp;lt;/code&amp;gt;) একটি টাইমস্ট্যাম্প করা স্ন্যাপশট — একটি অতীতের অবস্থার নিরাপত্তা কপি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি &amp;lt;strong&amp;gt;encyclopédie&amp;lt;/strong&amp;gt;, এটা অন্য কিছু। এটি একটি বিষয়-ভিত্তিক জ্ঞানের সংগ্রহ, বিষয় অনুসারে গঠিত, ব্যাপক কিন্তু রৈখিক নয়। একটি এনসাইক্লোপিডিয়া এর শুরু থেকে শেষ পর্যন্ত পড়া হয় না। এটিতে ডুব लगিয়ে একটি নির্দিষ্ট প্রশ্নের উত্তর দেওয়ার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি বিল্কুলই এই ফাইলের চুক্তি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভুমিকা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যাক্সেস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দানাপন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;archives/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ঐতিহাসিক ডেটা (মাসিক শেষ হওয়া কাজ)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LAZY, গঠিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কালানুক্রমিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;backup/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্ন্যাপশট ঠাণ্ডা (১০ সেশনের তরঙ্গ)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;COLD, পূর্ণ কপি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কালানুক্রমিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;encyclopedies/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিষয়বস্তু সম্পর্কে সম্পূর্ণ জ্ঞান (প্রদ্ধতি, প্যাটার্ন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;COLD, কখনও অটো না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিষয়বস্তু&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পার্থক্য জিনিসপত্রকে ব্যাখ্যান দূর করে। প্রতিটি ফাইল জানে যে এটি কোথায় থাকবে, অনুসারে &amp;lt;strong&amp;gt;ce qu&amp;amp;#8217;il contiene&amp;lt;/strong&amp;gt;, না, &amp;lt;strong&amp;gt;quand il a été creado&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শ্রেণীর_তর্কগত_পরবর্তী_অংশ&amp;quot;&amp;gt;শ্রেণীর তর্কগত পরবর্তী অংশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে তেমনভাবে তিনটি টুকরো একে অপরের সাথে ফিট হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-trilogie&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title এজেন্ট গোভর্ন্যান্সের ত্রিলজি
left to right direction

package &amp;quot;📖 **অনুচ্ছেদ 0108**
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 220

title এজেন্ট গোভর্ন্যান্সের ত্রিলজি
left to right direction

package &amp;quot;📖 **অনুচ্ছেদ 0108**
ইগার/লেজি কৌশল&amp;quot; as A1 #E8F5E9 {
  card &amp;quot;মেমোরি এজেন্ট
সেশনের মধ্যে&amp;quot; as M1
  card &amp;quot;EAGER ফাইলগুলো
(স্বয়ং-আরম্ভিত)&amp;quot; as M2
  card &amp;quot;ফাইল LAZY\n(অনুসারে)&amp;quot; as M3
  card &amp;quot;প্রক্রিয়া ৬ ধাপ&amp;quot; as M4
}

package &amp;quot;🧊 **Article 0110**
মেকানিজ হট/ওয়ারম/কোল্ড&amp;quot; as A2 #FFF9C4 {
  card &amp;quot;বয়স্কতা
প্রসঙ্গের&amp;quot; as V1
  card &amp;quot;স্লাইডিং উইন্ডো
10 সেশন&amp;quot; as V2
  card &amp;quot;ঠান্ডা তরঙ্গ
একই&amp;quot; as V3
  card &amp;quot;সেন্সরের সঙ্গে
দুই ট্রিগার&amp;quot; as V4
}

package &amp;quot;�🔍 **অনুচ্ছেদ 0111**\nনিরীক্ষা + সমাধান এনসাইক্লোপেডিয়া&amp;quot; as A3 #BBDEFB {
  card &amp;quot;ফাইল অডিট\nEAGER&amp;quot; as E1
  card &amp;quot;শনাক্তকরণ
অপসারের&amp;quot; as E2
  card &amp;quot;Split\nESSENTIALS/বিশ্বকোষ&amp;quot; as E3
  card &amp;quot;সংরক্ষণ
 ইঞ্জিনিয়ারিং এর&amp;quot; as E4
}

A1 --&amp;amp;gt; A2 : &amp;quot;স্মৃতি বাড়ছে
→ একটি প্রণালীর দরকার
বয়োদ্ধাওয়ার জন্য&amp;quot;
A2 --&amp;amp;gt; A3 : &amp;quot;বয়স্কতাও যথেষ্ট নয়
→ যাকে অডিট করতে হবে
EAGER-এ থাকা যোগ্য&amp;quot;

note bottom of A3
  ✅ Les trois couches sont en place
  sur 6 projets actifs
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;0108&amp;lt;/strong&amp;gt;উত্তর দেয়: « দুটি সেশনের মধ্যে এজেন্টকে মেমরি দেওয়ার উপায় কি?&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;0110&amp;lt;/strong&amp;gt;উত্তর: « এই মেমোরি এজেন্টকে কীভাবে গলা ধাকielte রাখতে পারে তা কিভাবে বন্ধ করা যায়?&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;0111&amp;lt;/strong&amp;gt;উত্তর দisce : “ এবং যদি সমস্যা আ카이ভের আকার নয়, বরং আমাদের EAGER-এ রাখার জন্য &amp;lt;strong&amp;gt;বাছাই&amp;lt;/strong&amp;gt; করা জিনিস ?”&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথমটি নিবন্ধটি নকশা গড়ে উঠিয়েছে। দ্বিতীয়টি বয়স্কতা মেকানিজম যুক্ত করেছে। তৃতীয়টি বিষয়বস্তুকে অডিট করছে — এবং আবিষ্কার করেছেন যে পদ্ধতিই নিজেই সমস্যা হয়ে উঠেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_যা_আমি_ভিন্নভাবে_করতাম&amp;quot;&amp;gt;যা আমি ভিন্নভাবে করতাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পশ্চালোকে, আমি প্রাথমিক ডিজাইনের ভুলটি বুঝি।`AGENT_MODUS_OPERANDI.adoc`একটি একক নথি — একটি ম্যানিফ-esteে তৈরি করা হয়েছে। এই চিন্তা ফর্মালাইজ করার জন্য সঠিক পদ্ধতি ছিল। কিন্তু একবারের চinture ফর্মালাইজ হওয়ার পরে, নথিকে உடবেনে ভাগ করা উচিত ছিল: মূল অংশ EAGER‑এ, সম্পূর্ণ অংশ cold‑এ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি তাতে করিনি কারণ আমি নথিটিতে গর্বিত ছিলাম। ৬২৭টি শুদ্ধ ইঞ্জিনিয়ারিং লাইন, হাতে লেখা, প্রতিটি অংশ কোনো সেশনের পাঠের ফল। এটা আমার শ্রেষ্ঠ কাজ ছিল। এবং যেকোনো লেখকের মতো, আমি इसे ছোট করতে কষ্ট করেছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাঠ:&amp;lt;strong&amp;gt;একটি ডকুমেন্ট ভালো হলে তা স্বয়ংক্রিয়ভাবে লোড করা উচিত নয়।&amp;lt;/strong&amp;gt;. বিষয়বস্তু রপ্তানির গুণমানের কোনো সম্বন্ধই এজেন্টের তাত্কালিক প্রেক্ষান্তের সাথে এর প্রাসঙ্গিকতার সঙ্গে নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আজকে, নিয়মটি সরল: EAGER contexts-এ 100 লাইনের বেশি যেকোনো দস্তাবেজ একটি संदेह। এটি একটি অডিটের পাত্র। একটি দণ্ড নয় — একটি অডিট। এবং প্রশ্ন কখনো « কি আমি তা মুছে ফেলব? » নয়, বরং « কি আমি প্রতিটি সেশনে এটি লোড করব?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আপনার_নিজের_পরিস্থিতি_অডিট_করার_গাইড&amp;quot;&amp;gt;আপনার নিজের পরিস্থিতি অডিট করার গাইড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি আপনি দুটি প্রথম অনুচ্ছেদ অনুসরণ করেছেন এবং নিজের ইগার/লেজি গবর্নেন্স সেট আপ করেছেন, তাহলে এখানে পাঁচ ধাপের নিরীক্ষা প্রক্রিয়া দেওয়া হচ্ছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নিমাপন&amp;lt;/strong&amp;gt;:`wc -l`আপনার সব EAGER ফাইলে। মোটটি ১০০০ লাইনের চেয়ে কম হওয়া উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সবচেয়ে বড়টি সনাক্ত করা&amp;lt;/strong&amp;gt;: মোটের 20% ও বেশি ওজনের ফাইল πρώτο সন্দেহ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রতিটি অংশকে অংশে অংশে অডিট করুন&amp;lt;/strong&amp;gt;: প্রতিটি বিভাগের জন্য, আপনি জিজ্ঞাসা করুন « এই তথ্য কি ইতিমধ্যে অন্য কোনো জায়গায় আছে? কি এজেন্টটি ইতিমধ্যে অন্য কোনো ফাইলে এটিকে পড়েছে? কি এটিকে পिछলে ৫ সেশনে ব্যবহার করা হয়েছে?&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শ্রেণীবিন্যাসকারী&amp;lt;/strong&amp;gt;: ডুপ্লিকেট, কখনো ব্যবহৃত নয়, অনন্য জ্ঞান.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিভক্ত করা অথবা স্থানান্তরিত করা&amp;lt;/strong&amp;gt;: যা অনন্য এবং গুরুত্বপূর্ণ → ESSENTIALS সংকুচিত. বাকি সব →&amp;lt;code&amp;gt;encyclopedies/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-audit-checklist&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-c2a96e1177ab65d2c7751677c54047f3.svg&amp;quot; alt=&amp;quot;Procédure d&amp;amp;#8217;audit en 5 étapes&amp;quot; width=&amp;quot;373&amp;quot; height=&amp;quot;741&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্রক্রিয়াটি ১৫ মিনিট লাগে। ৫০ সেশনের প্রকল্পে, এটি ভবিষ্যতের প্রতিটি সেশনে সैकड़ো টোকেন বাঁচায়। রওআই তৎক্ষণিক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_জীবন্ত_শাসন&amp;quot;&amp;gt;একটি জীবন্ত শাসন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তিনটি নিবন্ধের সিরিজ থেকে আমি যে জ্ঞান পেয়েছি, তা হল এজেন্ট গবর্নেন্স একটি সম্পূর্ণ পণ্য নয়। এটি একটি&amp;lt;strong&amp;gt;জীবন্ত প্রাণী&amp;lt;/strong&amp;gt;। ও প্রোজেক্টের সাথে বৃদ্ধি পায়। ও বৃদ্ধি-সম্পর্কিত রোগ পায়। ও নিয়মিত চেক-আপের প্রয়োজন হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশনে ০৪৮ খুলে আসেছে যে আর্কাইভগুলো বাড়ছে। সেশনে ০৫১ খুলে আসেছে যে পদ্ধতিই নিজেই বাড়ছে। সেশনে ০৬০ সম্ভবত অন্য কিছু প্রকাশ করবে। এটি স্বাভাবিক। এটি সুস্থ। কোনো সময়ে নিজেকে প্রশ্ন না করে থাকা শাসনব্যবস্থা একটি মৃত শাসনব্যবস্থা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি মেকানিজম — Eager/Lazy, Hot/Warm/Cold, split encyclopédique — গভীর রক্ষা ব্যবস্থা গঠন করে, যা সন্দ্ভের ভরাবরির বিরুদ্ধে। কোনোটিই একায় পর্যাপ্ত নয়। একসাথে, তারা একে অপরের পূরক হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;উত্সাহী/অলস&amp;lt;/strong&amp;gt;তথ্য কাঠামো গড়ুন &amp;lt;strong&amp;gt;উপলব্ধি অনুযায়ী&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গরম/উষ্ণ/ঠান্ডা&amp;lt;/strong&amp;gt;structure l&amp;amp;#8217;information &amp;lt;strong&amp;gt;par fraîcheur&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গঠন করুন তথ্যাটি &amp;lt;strong&amp;gt;তাজगी अनुयायी&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এনসাইক্লোপিডিয়া অডিট&amp;lt;/strong&amp;gt;তথ্য সংগঠিত কর &amp;lt;strong&amp;gt;ঘনত্ব অনুযায়ী&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-defense-in-depth&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam nodeBackgroundColor #E3F2FD

title প্রেক্ষতের সংতৃপ্তি বিরুদ্ধে গভীর রক্ষা
node &amp;quot;**এজেন্টের প্রেক্ষাপট**
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam nodeBackgroundColor #E3F2FD

title প্রেক্ষতের সংতৃপ্তি বিরুদ্ধে গভীর রক্ষা
node &amp;quot;**এজেন্টের প্রেক্ষাপট**
~800 লাইন
স্বাস্থ্য&amp;quot; as CTX #C8E6C9

node &amp;quot;স্তর 1
**EAGER / LAZY**&amp;quot; as C1 #BBDEFB
node &amp;quot;স্তর ২\n**গরম / উষ্ণ / ঠান্ডা**&amp;quot; as C2 #BBDEFB
node &amp;quot;স্তর 3
**প্রয়োজনীয় / এনসাইক্লোপিডিয়া**&amp;quot; as C3 #BBDEFB

CTX --&amp;amp;gt; C1 : &amp;quot;উপলব্ধি অনুযায়ী কাঠামো
**উপলব্ধি**&amp;quot;
CTX --&amp;amp;gt; C2 : &amp;quot;কাঠামো двойারা
**তাজগি**&amp;quot;
CTX --&amp;amp;gt; C3 : &amp;quot;কাঠামো द्वारा
**ঘনত্ব**&amp;quot;

note bottom of C3
  Les trois couches sont nécessaires.
  Aucune n&amp;#39;est suffisante seule.
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তিনটি স্তরের সাথে, এজেন্টের প্রেক্ষাপটে`magic-stick`২০৮৭ লাইন (কোনও অপ্টিমাইজেশন আগে) থেকে প্রায় ৮০০ লাইনে এগিয়েছে — ২.৬ গুণে হ্রাস। কোনও ডকুমেন্টেশন লাইন, কোনও সেশন আর্কাইভ, কোনও শেখা পাঠ হারিয়নি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবই ওখানে আছে। আরও ভালোভাবে সাজানো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লিংক&amp;quot;&amp;gt;লিংক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুচ্ছেদ ০১০৮ — অগ্রাধিকার/বিলম্বিত কৌশল:&amp;lt;a href=&amp;quot;/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html&amp;quot;&amp;gt;AsciiDoc ব্যবহার করে AI 에이জেন্টকে নিয়ন্ত্রণ করা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Article 0110 — মেকানিজম Hot/Warm/Cold :&amp;lt;a href=&amp;quot;/blog/2026/0110_mecanisme_backup_contexte_agent_post.html&amp;quot;&amp;gt;Sliding Window এবং শীতল তরঙ্গ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমার সাইট : &amp;lt;a href=&amp;quot;https://cheroliv.com&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://cheroliv.com&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্প`magic-stick`: &amp;lt;a href=&amp;quot;https://github.com/cheroliv/magic-stick&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/cheroliv/magic-stick&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জ্ঞানকে বিলুপ্ত হতে দরকার নেই। এটি শুধু তখনই লোড করা উচিত নয় যখন এটি প্রয়োজন নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Sliding Window এবং ঠাণ্ডা তরঙ্গ : যখন এজেন্ট কনটেক্সট বিস্ফোরিত হয় এবং এর সংরক্ষণ করতে হয় কোনো ক্ষতি না</title>
            <link >https://cheroliv.com//blog/2026/0110_mecanisme_backup_contexte_agent_post.html</link>
            <pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0110_mecanisme_backup_contexte_agent_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারাংশ&amp;quot;&amp;gt;সারাংশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি প্রকল্পে 48 সেশন এবং মোটে 150+ পর্যন্ত, আমি যত্নে নির্মিত Eager/Lazy শাসন তত্ত্ব দৃঢ়ভাবে বাঁধে উঠল। এজেন্ট ফাইলগুলি, যাকে হালকা হওয়া উচিত, মোটে ৫২০০ লাইনের ওজন বদল দিল। স্বয়ংচালিতভাবে লোড হওয়া কনটেক্স্ত আমার নিয়ন্ত্রণক্ষমতার চেয়ে দ্রুত বাড়ত। এই নিবন্ধে বলা হয়েছে যে আমি কিভাবে একটি বেকআপ মেকানিজম ধারণা করি — স্লাইন্ডিং উইন্ডো এবং সমান শীতল লহারের মধ্যে — যাতে এক্টিভ কনটেক্স্ত হালকা রাখা যায় এবং কখনো কщих না হারিয়ে যাওয়া হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সিগনাল_5200_লাইন&amp;quot;&amp;gt;সিগনাল : 5200 লাইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি সেশন ০৪৮-এর মাঝখানে আছি পর`magic-stick`, আমার লাইভ্স Linux ISO তৈরি করার প্রকল্প। Opencode আমাকে দেখছে। সব সময়ের মতো, এটি স্বয়ংক্রিয়ভাবে আমার Eager ফাইলগুলি সেশনের শুরুতে লোড করেছে —&amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.agents/INDEX.adoc&amp;lt;/code&amp;gt;. কোন অসাভাবিক নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু কোনো জিনিস ভুলে গেছে। উত্তরগুলো ধীর হয়ে গেছে। যুক্তি দিলুত হয়েছে। এজেন্টটি দুটি বার্তা আগে দেখていた বিবরণগুলো ভুলে যাচ্ছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি একটি টার্মিনাল খুলি এবং টাইপ করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;wc -l .agents/INDEX.adoc .agents/SESSIONS_HISTORY.adoc \
  .agents/archives/COMPLETED_TASKS_ARCHIVE_2026-04.adoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;260 লাইন INDEX-এর জন্য। 55 SESSIONS_HISTORY-এর জন্য।&amp;lt;strong&amp;gt;1756 COMPLETED_TASKS_ARCHIVE এর জন্য&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইল`sessions/`এছাড়াও ~3200 লাইন যোগ করে। মোট :&amp;lt;strong&amp;gt;5200 লাইন&amp;lt;/strong&amp;gt;প্রসঙ্গ যারা লোড হচ্ছে, কেনেকোনোভাবে, অজেন্টের তৎক্ষণিক মוחে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি পূর্বের নিবন্ধে তত্ত্বগত করেছি Eager/Lazy কৌশলটি কাজ করছে — কিন্তু এর একটি জন্মজত দুর্বলতা আছে যা আমি পূর্বে আশা করেনি: এতে নেই&amp;lt;strong&amp;gt;বয়স বাড়ারের মেকানিজাম না&amp;lt;/strong&amp;gt;&amp;lt;strong&amp;gt;. প্রতিটি সেশন এক লাইন যোগ করে INDEX‑এ, একটি অনুচ্ছেদ যোগ করে COMPLETED_TASKS‑এ, এবং sessions/‑এ একটি ফাইল। কখনো কিছু বের হয় না। প্রেক্ষापট হল একটি বফল বরফের গোল, যা প্রতিটি নতুন সেশনের সাথে বৃদ্ধি পায়।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-growth&amp;quot; class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-4a81ba5e5ca0187e7c3bccfac45cb2b1.svg&amp;quot; alt=&amp;quot;Courbe de croissance des fichiers agents — de la session 1 à 48&amp;quot; width=&amp;quot;387&amp;quot; height=&amp;quot;591&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি বাগ নয়; এটি সেশন শেষ প্রক্রিয়ার সরাসরি ফলাফল, যা প্রতিটি বিবরণকে মেটিকুলিভাবে সংরক্ষণ করে। সিস্টেম নিজের সাফল্যের শিকার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডায়াগনস্টিক_ট্রিপল_রিডান্ড্যান্স&amp;quot;&amp;gt;ডায়াগনস্টিক : ট্রিপল রিডান্ড্যান্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি এজেন্টকে সমস্যা নিরুপণ করার জন্য অনুরোধ করি। তার প্রতিক্রিয়া তৎক্ষণিক এবং সঠিক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রেখাগুলি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভুমিকা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমস্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.agents/INDEX.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;260+&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;EAGER (স্বয়ংচালিত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;001 থেকে সব সেশনের টেবিল —&amp;lt;strong&amp;gt;+1 লাইন প্রতি সেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.agents/SESSIONS_HISTORY.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;55&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উৎসাহী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সারসংক্ষেপী টেবিল —&amp;lt;strong&amp;gt;INDEX সঙ্গে অতি পুনরাবৃত্তি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;COMPLETED_TASKS_ARCHIVE_2026-04.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1756&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উত্সাহিত (অব্যাক্ত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রিলের সমস্ত সেশনের সম্পূর্ণ বিবরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.agents/sessions/*.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(empty)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LAZY (অনুমানিত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যক্তিগত আর্কাইভ, কিন্তু&amp;lt;strong&amp;gt;ব্য�্যবহৃত হয়নি&amp;lt;/strong&amp;gt;কারণ সবকিছু ইতিমধ্যে COMPLETED_TASKS-এ আছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজেন্ট চারটি মূল কারণ চিহ্নিত করা:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;COMPLETED_TASKS_ARCHIVE সব东西 শোষণ করে&amp;lt;/strong&amp;gt;— আর্কাইভগুলোকে নির্দেশ করার পরিবর্তে`.sessions/`, তিনি প্রতিটি সেশনকে সম্পূর্ণরূপে কপি করে নেন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;INDEX.adoc` একটি সম্পূর্ণ ইতিহাসের ভূমিকা পালন করে&amp;lt;/strong&amp;gt;— টেবিল &amp;quot;Sessions Récentes&amp;quot; ৩০+ এন্ট্রি আছে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SESSIONS_HISTORY.adoc অতিরিক্ত&amp;lt;/strong&amp;gt;— INDEX‑এ একই তথ্য, কিন্তু বিন্যাসটি ভিন্ন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;LAZY নিয়মটি মেনে নেওয়া হয়নি&amp;lt;/strong&amp;gt;— COMPLETED_TASKS অনুমানিত EAGER কারণ এটি সব ধারণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তার প্রস্তাবটি র্যাডিকাল: INDEX কে ১০ সেশনে সীমাবদ্ধ করা, COMPLETED_TASKS খালি করা, SESSIONS_HISTORYকে pure LAZY-এ স্থানান্তর করা। তৎক্ষণীয় লাভ :&amp;lt;strong&amp;gt;~1900 লাইন সংরক্ষিত&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটা পরিষ্কার, কার্যকর, যুক্তি-বাচক। কিন্তু আমার এই পদ্ধতির সাথে একটি সমস্যা আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_আমি_স্পষ্ট_সমাধানটি_প্রত্যাখ্যান_করেছি&amp;quot;&amp;gt;কেন আমি স্পষ্ট সমাধানটি প্রত্যাখ্যান করেছি?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজেন্টের সমাধান হলো একটি ইঞ্জিনিয়ারের যিনি একটি ক্যাশ অপ্টিমাইজ করেন। সীমাবদ্ধ করুন। কাটে দিন। অপ্রয়োজনীয় পুনরাবৃত্তি সরিয়ে ফেলুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এই &amp;quot;বাজিমাত&amp;quot;গুলো বাজিমাত নয়। প্রতিটি শাসন ফাইল একটি&amp;lt;strong&amp;gt;বিভিন্ন কোণ&amp;lt;/strong&amp;gt;একই বাস্তবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;INDEX&amp;lt;/strong&amp;gt;= দৃষ্টি ম্যাক্রো, একজিকিউটিভ ড্যাশবোর্ড&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SESSIONS_HISTORY&amp;lt;/strong&amp;gt;= রৈখিক কালক্রমবদ্ধ টেবিল, স্কোর করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;COMPLETED_TASKS_ARCHIVE&amp;lt;/strong&amp;gt;= বিস্তারিত কাহিনি মেট্রিক্স সহ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;sessions/&amp;lt;strong&amp;gt;.adoc&amp;lt;/strong&amp;gt;* = ব্যক্তিগত আর্কাইভ, সম্পূর্ণ প্রসঙ্গ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি বোকা ডুপ্লিকেশন নয়। এটি এর&amp;lt;strong&amp;gt;বহু গঠিত দৃষ্টিভঙ্গি&amp;lt;/strong&amp;gt;. এটি distillation‑এর প্রয়োজনীয়তা—যাতে ভবিষ্যে একজন মানুষ (বা ভালোভাবে প্রশিক্ষিত একটি ভবिष্যৎ LLM) কোণগুলোকে সমন্বয় করে প্যাটার্নগুলো.extract করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ডেটা সায়েন্টিস্ট আপনাকে বলে: “৬ কলামের মধ্যে ৩টি কলাম সরিয়ে ফেলি, তারা সংযুক্ত।” আপনি তাকে কী উত্তর দেন? করেলেশনটি রিডান্ডেন্সি নয়, যখন প্রতিটি কলাম একই ঘটনার ভিন্ন একটি ধারণ ধারণ করে। এই মাত্রিক সমৃদ্ধিই ডেটাসেটকে ব্যবহারযোগ্য করে তোলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি আমার বোধ। এবং আমি এটিকে এজেন্টের শীতল যৌক্তিকতার বিরুদ্ধে রক্ষা করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt; আমার ধারণায় কোনো নীরব মিশ্রণ নেই। সবকিছু ফেলে দেওয়া হয় না; বরং, সেশন শেষ হওয়ার প্রক্রিয়ার সনকাঠিত ফলাফলকে সরানো হয় — প্রতিটি ফাইল তার কোণ এবং সত্যিই একটি উন্নয়নের আকারে থাকা পুনরাবৃত্তি সহ। এই বহুমাত্রিক উপকরণই distillation‑এর জন্য ভালো হবে। (empty)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজেন্ট আঘাত খায়। এবং নিজেকে সংশোধন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রস্তাব_একই_শীতল_তোফান&amp;quot;&amp;gt;প্রস্তাব : একই শীতল তোফান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এজেন্টটি তারপর একটি আরও সূক্ষ্ম প্রক্রিয়া প্রস্তাব করে, যা আমার সমৃদ্ধ ডেটাসেটের অনুভূতিকে সম্মান করে এবং একই সাথে পরিসরের বিস্ফোরক সমস্যাটির টেকনিক্যাল দিকটিও সমাধান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সিদ্ধান্তটি সরল এবং প্যাটার্ন থেকে সরাসরি অনুপ্রাণিত&amp;lt;strong&amp;gt;গরম/মধ্যম/ঠাণ্ডা স্টোরেজ&amp;lt;/strong&amp;gt;আর্কাইভ ব্যাবস্থাপনে প্রয়োগ করা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গরম (আগ্রহী)&amp;lt;/strong&amp;gt;= শেষ ১০ সেশন INDEX, PROMPT_REPRISE-তে (N+1) নম্বর সেশনের, শেষ ২টি সেশন ফাইল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গরম (LAZY)&amp;lt;/strong&amp;gt;= SESSIONS_HISTORY সাম্প্রতিক, SCRIPT_VERIFICATION, সমস্ত রেফারেন্স ডকুমেন্টেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Cold (backup/)&amp;lt;/strong&amp;gt;= বাকি সব, স্থানান্তরিত&amp;lt;strong&amp;gt;অক্ষুণ্ণ&amp;lt;/strong&amp;gt;, রূপান্তর ছাড়াই, পুন: ইন্ডেক্সিং ছাড়αι&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code&amp;gt;----
----
.agents/
├── INDEX.adoc                         → Sessions N-9 à N (10 dernières)
├── SESSIONS_HISTORY.adoc              → Sessions N-9 à N
├── SCRIPT_VERIFICATION.adoc           → Dernière vérif (pas d&amp;#39;historique)
├── PROMPT_REPRISE.adoc                → Session N+1 uniquement
├── sessions/                          → Sessions N-1 à N uniquement
└── backup/
    └── Y2026-sessions-001-039/          ← Vague froide, COPIE INTÉGRALE
        ├── INDEX.adoc                  → Sessions 001 à 039 (complet)
        ├── SESSIONS_HISTORY.adoc       → Sessions 001 à 039 (complet)
        ├── COMPLETED_TASKS_ARCHIVE.adoc → Sessions 001 à 039 (complet)
        └── sessions/                   → 001.adoc, 002.adoc...
----

মেকানিজমের চাবি :**ব্যাকআপটি একটি কেন্দ্রীয় ইন্ডেক্স নয়, এটি গত লহরের একটি সঠিক অনুকরণ।**. 10টি সক্রিয় সেশনের সীমা অতিক্রম করলে, কюсьও মুছে না. কюсьও পুনঃ ইন্ডেক্স করা না. কюсьও মার্জ করা না. আমরা N-10 সেশনের মতো এজেন্ট ফাইলগুলোর প্যাকেট নেই. এবং আমরা এটা -এ স্থানান্তরিত করি`backup/`.

সক্রিয় ফাইলগুলো, তারা,截단 করা হয়েছে:

* INDEX : শুধুমাত্র 10টি সর্বশেষ লাইন (sliding window)
* SESSIONS_HISTORY : একই
* COMPLETED_TASKS_ARCHIVE : নতুন ফাইল বর্তমান সময়ের জন্য
* সেশন/ : শুধুমাত্র 2টি শেষের সেশন

[plantuml, format=svg, id=diag-hot-warm-cold, alt=&amp;quot;Architecture Hot/Warm/Cold du contexte agent — EAGER/LAZY/backup&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200

title এজেন্ট কন্টেক্সটের হট / ওয়ার্ম / কোল্ড আর্কিটেকচার
package &amp;quot;HOT (EAGER)
স্বয়ংক্রিয়ভাবে শুল্কপ্রদত্ত
~300 লাইন&amp;quot; as HOT #FFCDD2 {
  file &amp;quot;INDEX.adoc
(10 সেশন)&amp;quot; as IDX_HOT
  file &amp;quot;PROMPT_REPRISE
(session N+1)&amp;quot; as PRO_HOT
  file &amp;quot;AGENT.adoc
(নির্বদ্ধ নিয়ম)&amp;quot; as AG_HOT
}

package &amp;quot;WARM (LAZY)
অন-ডিম্যান্ডে লোড
~500 লাইন&amp;quot; as WARM #FFF9C4 {
  file &amp;quot;SESSIONS_HISTORY
(10টি শেষ)&amp;quot; as HIS_WARM
  file &amp;quot;SCRIPT_VERIFICATION
(শেষ)&amp;quot; as VER_WARM
  file &amp;quot;PROCEDURES.adoc
(টেমপ্লেট)&amp;quot; as PRO_WARM
  file &amp;quot;*_REFERENCE.adoc\n(প্রযুক্তিগত নথি)&amp;quot; as REF_WARM
}

package &amp;quot;COLD (backup/)
কখনো চার্জ করা হয়নি
শুধুমাত্র মানব পাঠ&amp;quot; as COLD #BBDEFB {
  folder &amp;quot;Y2026-001-039/&amp;quot; as WAVE {
    file &amp;quot;সম্পূর্ণ সূচী&amp;quot; as IDX_COLD
    file &amp;quot;SESSIONS_HISTORY\n(সম্পূর্ণ)&amp;quot; as HIS_COLD
    file &amp;quot;COMPLETED_TASKS\n(সম্পূর্ণ)&amp;quot; as ARCH_COLD
    folder &amp;quot;সেশন/ (001-039)&amp;quot; as SESS_COLD
  }
  folder &amp;quot;Y2026-040-???\n(ভবিষ্যৎ)&amp;quot; as FUTURE
}

HOT --&amp;amp;gt; WARM : &amp;quot;এজেন্ট উঠে যায়
যদি প্রয়োজন হয়&amp;quot;
WARM --&amp;amp;gt; COLD : &amp;quot;কখনো স্বয়ংক্রিয় নয়
ব্যক্তি সেখানে একা যায়&amp;quot;

note bottom of COLD
  Règle : COPIE INTÉGRALE
  Pas de transformation
  Pas de réindexation
  Read-only après archivage
end note

@enduml
----

তাৎপর্যপূর্ণ lợiBisাল : EAGER প্রসঙ্গ থেকে যায়**~5200 লাইন থেকে ~300 লাইন**. ১৭ দিয়ে ভাগ। এককটি ঐতিহাসিক ডেটা লাইন হারাবেন না.

== এটি কেন একটি সমগ্র ব্যাগ নয়?

এজেন্ট, তার প্রথম পুনরাবৃত্তিতে, ভয় করত যে`backup/`ব্ল্যাকবক্স হোক — একটি ফোল্ডার যেখানে কেউ ফাইল ফেলে যা কখনো পড়বে না। এটি একটি বৈধ ভয়। কিন্তু এটি একটি ভুলধারণা উপর ভিত্তি করা।

একটি জামাবরুশ হলো কখনো ফাইল ফেলে দেওয়া**কোন গঠন নেই, কোন প্রথা নেই, কোন গোষ্ঠীকরণ যুক্তি নেই**. এইভাবে, ব্যাকআপটি সময়ের মোতাবেক (Y2026-001-039) গঠিত, এবং প্রতিটি ব্যাকআপ ফোল্ডার ধারণ করে**একই গঠন**যে ফাইল`.agents/`actif : INDEX, SESSIONS_HISTORY, COMPLETED_TASKS_ARCHIVE, sessions/.

এটি একটি জামা-জুড়ে নয়। এটা একটি**টাইমস্ট্যাম্প করা স্ন্যাপশট**.একটু আরও বলা যায় যে এটি একটি সরলীকৃত সংস্করণকরণ পদ্ধতি — একটি ব্যতিক্রম যে, এটি ফাইলগুলোকে স্বয়ংক্রিয়ভাবে সংস্করণ করে না, বরং শাসনের পুরো প্যাকেজকে একটি নির্দিষ্ট সময় T-এ সংস্করণ করে।

আপনি পুরনো একটি তথ্য খুঁজে বের করতে চান যখন, আপনাকে একটি কেন্দ্রীয় সূচীর দরকার নেই। আপনার দুটি বিকল্প আছে:

1. **grep` লক্ষ্যিত**:`grep -r &amp;quot;zsh&amp;quot; backup/Y2026-001-039/`— এবং আপনি সেই সময়ের zsh-er যেকোনো উল্লেখ খুঁজে পাবেন, যে কোনো কোণ থেকে না হোক (INDEX, SESSIONS_HISTORY, সেশন আর্কাইভ)।
2. **ম্যানুয়াল পুন:সংযোজন**: আপনি অস্থায়ীভাবে ব্যাকআপ ফোল্ডারটি সক্রিয় संदर्भে কপি করেন, এবং আপনি এজেন্টকে এই নির্দিষ্ট সময়কে বিশ্লেষণ করতে বলেন।

সূচি নিহিত। এটি ফাইলগুলো নিজের গঠনের মধ্যেই — প্রতিটি ইতিমধ্যে নিজেদের দৃষ্টিভঙ্গি থেকে একটি সূচি।

== শেলফের উপমা

যান্ত্রিকটি সহজবোঝ্য করতে, আমি এটি তিনটি শেলফ হিসাবে ধারণা

* **শেলফ ১ (EAGER)**— কাজের পরিকল্পনা. যা আমি দরকার *এখন*. হালনাগাদ INDEX, PROMPT_REPRISE, অব্যাহতি নিয়ম. হালকা, তৎক্ষণিক, গুরুত্বপূর্ণ.
* **শেলফ ২ (LAZY)**— পরামর্শ গ্রন্থাগার. আমি অনুরোধে খোঁজে পেতে পারি। প্রযুক্তিগত রেফারেন্স, সাম্প্রতিক ইতিহাস, প্রক্রিয়া। ব্যাপক, কিন্তু মেমোরি তে লোড করা হয়নি।
* **গুহা (backup/)**— ঠান্ডা আর্কাইভ। সেই সব যা অতীতে গিয়েছে, কিন্তু আমি ফেলে দিতে চাই না। এজেন্ট সেখানে কখনো প্রবেশ করে না। মানुष সেখানে নেমে যায় যখন তিনি দ্রবণ করতে চান।

প্রথমে এজেন্টটি একটি চতুর্থ শেলফ — একটি`index-backup.adoc`যেটি LAZY হত এবং সম্পূর্ণ ব্যাকআপের একটি বিষয়সূচি ধারণ করত। আমি প্রত্যাখ্যান করলাম। এটি একটি বর্ধিত পুনরাবৃত্তি হবে এমন একটি সিস্টেমে যা ইতিমধ্যে রেখাযবদ্ধ বৃদ্ধির কারণে কষ্টে আছে। আর্কাইভ করা ফাইলদের কাঠামো ইতিমধ্যে একটি সূচী।

== দুই ট্রিগার সেন্সর

অব ধারণা গঠন দৃঢ় ছিল, কিন্তু একটি অদৃশ্য বিন্দু বাকি ছিল :**সঠিকভাবে ঘূর্ণন কখন শুরু করা উচিত?**প্রারంభ নিবন্ধটি এটি একটি খোলা প্রশ্ন হিসেবে চিহ্নিত ছিল। দুইদিন পরে, উত্তরটি ছয় প্রকল্পের শাসন ফাইলগুলোতে কোড করা হয়েছে: দুটো ট্রিগার সহ সেন্সর।

=== অটোমেটিক ট্রিগার — `N % 10 == 0

প্রথম ট্রিগার গাণিতিক। যখন সেশনের সংখ্যা ১০ এর গুণিতক হয় — সেশন ১০, ২০, ৩০, ৪০ — ব্যাকাপ রোটেশন স্বয়ংক্রিয়ভাবে সেশনের শেষ প্রক্রিয়ার অংশে, ধাপ ৬-এর পরে চলা চালিয়ে যায়।

10 কেন? এটা দুটি বিপরীত বলের মধ্যে একটি সমন্বয়: খুব ছোট উইন্ডো (5 সেশন) ধারাবাহিকতার জন্য প্রয়োজনীয় contexte হারায়; খুব দীর্ও উইন্ডো (20 সেশন) contexto‑এর অতিরিক্ত বড় সমস্যা সমাধান করে না। দশ সেশন, প্রতি দিন এক‑দুই সেশনের গতিতে, প্রায় একটি সপ্তাহের কাজ কভার করে — যথেষ্ট, যাতে এজেন্ট সাম্প্রতিক সিদ্ধান্তগুলো মনে রাখতে পারে, কিন্তু যত নয় যে contexte বিস্ফোরিত হয়।

=== সীমা-ভিত্তিক ট্রিগার — ৫০০ লাইন EAGER

দ্বিতীয় ট্রিগার ডাইনামিক। সেশনের নম্বর নির্বিশেষে, যদি সংচিত EAGER ফাইলগুলি অতিক্রম করে**500 লাইন**, ঘূর্ণন শুরু হয়।

এই সীমা সেশনের অত্যুক্ত উত্পাদনশীল পরিস্থিতি থেকে রক্ষা করে — খুব কম সেশনে প্রচুর সামগ্রী লেখা। একটি সেশন যা ১২০ লাইন সম্পাদকীয় সামগ্রী তৈরি করে, `COMPLETED_TASKS_ARCHIVE`-কে অনেক দ্রুত বাড়ায় — দুটি লাইন সংশোধনের ডিবাগ সেশনের চেয়ে। 500 লাইনের সীমা, যা মাধ্যমে মাপা হয়`wc -l .agents/INDEX.adoc .agents/archives/COMPLETED_TASKS_ARCHIVE_*.adoc PROMPT_REPRISE.adoc`, এই অসমমিতি গ্রহণ করে।

=== মানুয়াল ট্রিগার — &amp;quot;রোটেশন ব্যাকআপ

অবশেষে, মানুষ নিয়ন্ত্রণ বজায় রাখে। কীওয়ার্ডগুলো`rotation backup`, `backup rotation` ou `lance la rotation backup`অনুরোধে প্রক্রিয়া চালু করে, সেশনের শেষের বিনায়। যখন মনে হয় যে প্রেক্ষপট ভারী হচ্ছে কিন্তু এখনও ১০ের গুণোফল নয়, বা যখন একটি কাজের পর্যায় সংরক্ষণ করতে চান একটি নতুনটি শুরু করার পূর্বে।

[plantuml, format=svg, id=diag-capteur-trigger, alt=&amp;quot;Les trois déclencheurs du capteur de rotation backup — automatique, seuil, manuel&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200

title রোটেশন ব্যাকআপ সেন্সর — তিনটি ট্রিগার
start

:Procédure de fin de session;
note right: Mots-clés &amp;quot;সেশন শেষ&amp;quot;\nou &amp;quot;এখ থামাই&amp;quot;

:Étapes 1 à 6\n(archivage standard);
note right
  1. Archive sessions/N.adoc
  2. MAJ PROMPT_REPRISE
  3. MAJ SESSIONS_HISTORY
  4. MAJ INDEX.adoc
  5. MAJ TEST_COVERAGE
  6. MAJ COMPLETED_TASKS
end note

if (N % 10 == 0\nOU\nEAGER cumulé &amp;amp;gt; 500 lignes ?) then (oui)
  :⚙️ Rotation Backup\n(étape 7);
  note right
    1. Créer backup/Y20XX-sessions-X-Y/
    2. Copier intégrale INDEX + HISTORY
       + COMPLETED_TASKS + sessions/
    3. Tronquer actifs à 10 sessions
    4. Ajouter _Localisation active_
  end note
else (non)
  :Pas de rotation;
endif

:Checklist [✅] x 7\n(si applicable);

stop

@enduml
----

এই ডায়াগ্রামটি সেশান শেষ করার প্রক্রিয়ার মধ্যে সেন্সরের সঠিক স্থাপন দেখায়। স্টেপ 7 ঐচ্ছিক — এটি শুধু তখনই চালু হয় যখন দুটি শর্তের যেকোনটি সত্য হয় — তবে এটি নিয়মিত *যাচাইকৃত* করা হয়। শেষ চেকলিস্টে অন্তর্ভুক্ত`[✅] 7. Backup roté (si applicable)`.

=== বন্ধ লুপ

এই সেন্সরটি পূর্ববর্তী অনুচ্ছেদ দ্বারা খোলা লুপটি বন্ধ করে।
Eager/Lazy গভর্নেন্স দুটি সেশনের মধ্যে এজেন্ট মেমোরির সমস্যা সমাধान ছিল।
Hot/Warm/Cold মেকানিজম মেমোরি বাড়ার সমস্যা সমাধান করেছে।
দুটি ট্রিগার সহ সেন্সর *quand* সমস্যা সমাধান করে — মানবের থেকে প্রসঙ্গ আকার নিরীক্ষণের মানসিক ভার বাদ দিয়ে।

[plantuml, format=svg, id=diag-boucle-fermee, alt=&amp;quot;Les trois couches de la gouvernance agent — Eager/Lazy, Hot/Warm/Cold, Capteur&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title এজেন্ট গভর্নেন্সের তিন স্তর
left to right direction

package &amp;quot;स्तर 1 — स्मृति
(अनुच्छेद 0108)&amp;quot; as C1 #E8F5E9 {
  rectangle &amp;quot;**EAGER**
ড্যাশবোর্ড
অটো চার্জড&amp;quot; as EAG
  rectangle &amp;quot;**LAZY**
মালিকের ম্যানুয়াল
অনুরোধে চার্জ&amp;quot; as LAZ
  EAG -[hidden]right-&amp;amp;gt; LAZ
}

package &amp;quot;তলা ২ — বয়স বাড়িয়ে যাওয়া\n(অনুচ্ছেদ ০১১০)&amp;quot; as C2 #FFF9C4 {
  rectangle &amp;quot;**HOT**
10 সক্রিয় সেশন
~300 লাইন&amp;quot; as HOT
  rectangle &amp;quot;**WARM**
উল্লেখ
প্রক্রিয়া&amp;quot; as WRM
  rectangle &amp;quot;**COLD**\nbackup/\nশীতল তরঙ্গ&amp;quot; as CLD
  HOT -[hidden]right-&amp;amp;gt; WRM
  WRM -[hidden]right-&amp;amp;gt; CLD
}

package &amp;quot;স্তর 3 — 트리거
(আজ)&amp;quot; as C3 #BBDEFB {
  rectangle &amp;quot;**অটো**
N % 10 == 0&amp;quot; as AUTO
  rectangle &amp;quot;**সীমা**\n&amp;amp;gt; 500 লাইন&amp;quot; as SEUIL
  rectangle &amp;quot;ম্যানুয়াল
রোটেশন ব্যাকআপ&amp;quot; as MAN
  AUTO -[hidden]right-&amp;amp;gt; SEUIL
  SEUIL -[hidden]right-&amp;amp;gt; MAN
}

C1 --&amp;amp;gt; C2 : &amp;quot;স্মৃতি বাড়ছে
→ একটি মেকানিজম প্রয়োজন
বোঢ়াইয়ের জন্য&amp;quot;
C2 --&amp;amp;gt; C3 : &amp;quot;বয়স্কতা
→ একটি ট্রিগার দরকার
এটি চালু করার জন্য&amp;quot;

note bottom of C3
  ✅ Déployé sur 6 projets
  magic-stick · bakery-gradle
  plantuml-gradle · cheroliv.com
  jhipster-gradle-plugins
  quizz-benchmark-gradle
end note

@enduml
----

তিনটি লেয়ার logiqueভাবে স্ট্যাক করা হয়। প্রথমটি এজেন্টকে একটি মেমরি দেয়। দ্বিতীয়টি এই মেমরিকে এজেন্টকে দমিত না হওয়া দেয়। তৃতীয়টি এই মেমরির রক্ষণাবেক্ষণকে অটোমেট করে, যাতে মানবকে এতে চিন্তা করতে হয় না।

=== প্রভাবশালী মাইগ্রেশন cheroliv.com-এ

প্রয়োগটি শুধু সিদ্ধান্তাত্মক নয়। উপর`cheroliv.com`, প্রথম বেকআপ রোটেশন ২৯ এপ্রিল ২০২৬-এ চালানো`.agents/backup/Y2026-sessions-neg6-a-002/`:

|===
|ফাইল |ঘূর্ণনের আগে |ঘোরানোর পর |লাভ |`.agents/INDEX.adoc` |19 সেশন তালিকাভুক্ত |১০ সেশন (৩-১২) |-9 entrées |`.agents/SESSIONS_HISTORY.adoc` |18 সেশন |১০ সেশন |-8 প্রবেশ |`COMPLETED_TASKS_ARCHIVE` |161 লাইন (সেশন ১-১২) |135 লাইন (সেশন ৩-১২) |-26 লাইন |`sessions/` |20 ফাইল |১০ ফাইল |-10 ফাইল |**ব্যাকআপ/** |অমৌजूद |১ শীত ঢেউ (১০ সংরক্ষিত সেশন) |+1 শীতল প্যাকেট
|===

লাইনের গাইন হালকা ছিল — প্রকল্পটি যুবক, ১২ সেশন — কিন্তু গুরুত্বপূর্ণ তা যে le**প্রণালী স্থাপন করা হয়েছে**. আগামী স্বয়ংক্রিয় ঘূর্ণন সেশন ২০-এ চালু হবে, অথবা ৫০০ ইগার লাইন পূর্ণ হলে আরও দ্রুত হবে।

== মানুস-এজেন্ট পाठ

এই সেশন ০৪৮ আমাকে একটি AI এজেন্টের সাথে সহযোগীত্ব নিয়ে একটি মৌলিক বিষয় শেখিয়েছে।

এজেন্টটির একটি проাকৃতিক পক্ষপात আছে : সে চেষ্ট_done?**অপ্টিমাইজ করা**, à **সরল করা**, à **অনাবশ্যক পুনরাবৃত্তি অপসারণ করুন**. এটি একটি প্রশিক্ষিত সিস্টেমের পক্ষপাত যা স্বচ্ছ এবং সংক্ষিপ্ত উত্তর তৈরি করতে প্রশিক্ষিত। একটি ধনকর এবং বহুমাত্রিক ডেটাসেটের সম্মুখে, এর প্রথম প্রতিক্রিয়া হল তাকে তার সবসাধারন রূপে সংকুচিত করা।

মানুষ, তার, একটি ভিন্ন অনুভূতি আছে: ও মনে করে যে গঠিত অতিরিক্ততা একটি**সুবিধা**,&amp;quot; কোনো ত্রুটি নয়। একই বাস্তবতায় কোণের বৈচিত্র্যি হলো সঠিকভাবে যে পরে গুণমানযুক্ত আপসারণের সুযোগ তৈরি করবে।

একজনের এজেন্টটি ভুল না। বরং, তার &amp;quot;অপ্টিমাম&amp;quot; আমার মতো নয়। এজেন্টটি অপ্টিমাইজ করে ___ .**বর্তমান**— অবিলম্বী পরিস্থিতি, প্রশ্নের দ্রুত জবাব. মানব অপ্টিমাইজ করে**ভবিষ্যৎ**— পুনরুদ্ধার, মিশ্রণ, দ্রবীভূত করার ক্ষমতা তিন মাস বা তিন বছর মধ্যে।

____ যা আমি চাই, সেটি হল কাঁচা দ্রব্য। তোমার চিন্তাবলি, তোমার অনিশ্চয়তা, তোমার আমার প্রশ্নগুলোর উত্তর। তোমার সংশ্লেষণ নয়। সংশ্লেষণ, আমি তা তোমার চেয়ে ভালভাবে করতে পারি। আমি মৌলিক দ্রব্য চাই। ____

এই বাক্য — যা আমি সেশনের শেষে তাকে বলেছিলাম — সকলের সারাংশ। এজেন্টটি উত্পাদের একটি সরঞ্জাম।มนुष্যটি শোধনের একটি সরঞ্জাম। শাসন ব্যবস্থা এজেন্টটিকে সবকিছু নিজে বুঝতে দেওয়ার জন্য নয় — তা তৈরি করা হয়েছে যাতে মানুষ পরবর্তীতে উৎপাদিত উপাদানে কাজ করতে পারে।

একই শীতল তরঙ্গ এই দর্শনের বাস্তুশিল্পীয় অনুবাদ: আমরা কিছুও ফেলি না, কিছুও মিশ্রণ করি না, কিছুও পুনরায় ইন্ডেক্স করি না। আমরা অক্ষত প্যাকেটকে স্থানান্তর করি। ডিসটিলেশন পরে হাতে, মানুষ দ্বারা হবে।

== পূর্ব নিবন্ধের যুক্তিগত অনুসরণ

আপনি যদি পড়েছেনlink:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[Eager/Lazy কৌশলের উপর লেখ], আপনি স্বাভাবিক ক্রমবর্ধমান গতিশীলতা চেনাবুকে পাবেন :

1. **অনুচ্ছেদ ০১০৮**— Eager/Lazy শাসন : *কীভাবে* এজেন্টের কনটেক্সটকে দুটি উপলব্ধি স্তরে কীভাবে গঠন করা যায়
2. **এই অনুচ্ছেদ 0110**— ব্যাকআপের মেকানিজম: *comment* এই প্রেক্ষাপটকে বয়স্ক করার উপায়, এটি অতিরিক্ত বড় হয়ে গেলে কখনও হারিয়ে না ফেলে

প্রথম আর্টিকেলটি প্রশ্নের উত্তর দিয়েছিল: « এজেন্ট দুটি সেশনের মধ্যে কিছুই মনে রাখে না, আমরা কীভাবে তারে একটি মেমরি দিতে পারি?

এটি প্রথম থেকে অবশ্য উঠে আসা প্রশ্নের উত্তর দেয়: « মেমরি প্রতিটি সেশনে বাড়ে, কীভাবে এজেন্টকে বাঁধা ছাড়া এটিকে বাঁধা থেকে রক্ষা করা যায় ?

উত্তরটি একটি প্যাটার্নে আছে:**গরম/উষ্ণ/ঠান্ডা**, শাসন ফাইলে প্রয়োগ করা। এবং একটি নীতিরূপে :**কখনো কিছুই হারাবেন না, সবসময় সব জায়গায় পুনঃস্থাপন করুন**.

== লিংক

* পূর্ববর্তী অনুচ্ছেদ :link:/blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html[কৃত্রিম বুদ্ধিমত্তা এজেন্টকে AsciiDoc ব্যবহার করে পরিচালনা করা]
* আমার ওয়েবসাইট : https://cheroliv.com
* প্রজেক্টটি`magic-stick`: https://github.com/cheroliv/magic-stick

---

*একটি ভালশাসন পদ্ধতি কোনো ডেটা কখনো মুছে ফেলে না। এটি ডেটাগুলো সংরক্ষণ করে।*
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>�যখন Gradle 9, Docker 29 এবং Testcontainers তুখে পাচে : JHipster বিল্ডের ডিবাগিং</title>
            <link >https://cheroliv.com//blog/2026/0109_gradle_jhipster_docker_testcontainers_debugging_post.html</link>
            <pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0109_gradle_jhipster_docker_testcontainers_debugging_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিস্থিতি_একটি_jhipster_প্রকল্প_একটি_বিল্ড_যা_আর_লোড_হয়_না&amp;quot;&amp;gt;পরিস্থিতি : একটি JHipster প্রকল্প, একটি বিল্ড যা আর লোড হয় না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_১_অদৃশ্য_ভেরিয়েবল_reportsdir&amp;quot;&amp;gt;ত্রুটি ১ : অদৃশ্য ভেরিয়েবল `reportsDir&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_২_main_gradle_9_এ_আর_বিদ্যমান_নেই&amp;quot;&amp;gt;ত্রুটি ২: &amp;lt;code&amp;gt;main = \&amp;quot;&amp;amp;#8230;&amp;amp;#8203;\&amp;quot;&amp;lt;/code&amp;gt; Gradle 9-এ আর বিদ্যমান নেই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_৩_sourcecompatibility_এখন_একটি_প্রকল্পের_বৈশিষ্ট্য_নয়&amp;quot;&amp;gt;ত্রুটি ৩ : &amp;lt;code&amp;gt;sourceCompatibility&amp;lt;/code&amp;gt; এখন একটি প্রকল্পের বৈশিষ্ট্য নয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_৪_groovy_ত্রিভুক্ত_দাবি&amp;quot;&amp;gt;ত্রুটি ৪ : Groovy ত্রিভুক্ত দাবি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_5_অস্পষ্ট_নির্ভরতা_compilekotlin_openapigenerate&amp;quot;&amp;gt;ত্রুটি 5 : অস্পষ্ট নির্ভরতা &amp;lt;code&amp;gt;compileKotlin&amp;lt;/code&amp;gt; → `openApiGenerate&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভুল_৬_generategitproperties_filteroutputstream_write_এ_ব্যর্থ_হয়&amp;quot;&amp;gt;ভুল ৬: &amp;lt;code&amp;gt;generateGitProperties&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;FilterOutputStream.write()&amp;lt;/code&amp;gt;-এ ব্যর্থ হয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অবশেষে_testcontainers_পর্বে_আসে&amp;quot;&amp;gt;অবশেষে : Testcontainers পর্বে আসে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_১_ডকার_জাভা_পাথ&amp;quot;&amp;gt;ফেজ ১ : ডকার-জাভা পাথ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_২_ওয়েব_অনুসন্ধান_এবং_ব্রেডক্রাম্ব_github&amp;quot;&amp;gt;ফেজ ২ : ওয়েব অনুসন্ধান এবং ব্রেডক্রাম্ব GitHub&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্যায়_৩_নাম_পরিবর্তিত_আর্টিফ্যাক্টের_জাল&amp;quot;&amp;gt;প্যায় ৩: নাম পরিবর্তিত আর্টিফ্যাক্টের জাল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফেজ_4_সমাধানকে_বাধ্য_করুন&amp;quot;&amp;gt;ফেজ 4 : সমাধানকে বাধ্য করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেষ_ফল&amp;quot;&amp;gt;শেষ ফল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সংশোধনের_সারাংশ_টেবিল&amp;quot;&amp;gt;সংশোধনের সারাংশ টেবিল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pড়ার সময় : 15 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি ইতিমধ্যে সেই মুহূর্তটি অনুভব করেছেন যেখানে একটি সহজ`./gradlew build`আপনি যদি দিনে একশো বার চালান, তা একদম একটি কখনো না Seen ত্রুটিতে crash করা শুরু করে ? একাদশ পরপর ত্রুটির গুণফল নিয়ে, ডকার ইঞ্জিন ২৯-র অসংসাম্য এর একটি ভালো ডোজ যোগ করুন, গ্রেডল 9 ছড়িয়ে দিন যা দশ বছর যাবতীয়ভাবে ব্যবহৃত API গুম করে দেন। এটি পুরোপুরি লগবুক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ডায়াগ্রাম ১ — মাইগ্রেশন গ্রেডেল ৯ (ত্রুটির শৃঙ্খলা)&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;উদ্দেশ্য: অসংগতির শ্রেণী দেখানো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;👉 স্পষ্ট, Gradle-কে কেন্দ্রীভুক্ত&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 4) ]

@startuml
left to right direction
title Gradle 9 মাইগ্রেশন
rectangle &amp;quot;1
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
left to right direction
title Gradle 9 মাইগ্রেশন
rectangle &amp;quot;1
reportsDir&amp;quot; as A
rectangle &amp;quot;2\nmainClass&amp;quot; as B
rectangle &amp;quot;3
sourceCompatibility&amp;quot; as C
rectangle &amp;quot;4\nGroovy assert&amp;quot; as D

A --&amp;amp;gt; B
B --&amp;amp;gt; C
C --&amp;amp;gt; D

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ডায়াগ্রাম ২ — অসামঞ্জস্যপূর্ণ JHipster প্লাগইন&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;লক্ষ্য : টুটে গেছে প্লাগইনগুলোকে আলাদা করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;👉 স্বচ্ছ দৃষ্টি নির্ভরতাদের.&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
left to right direction
title সংশোধনযোগ্য প্লাগইন
skinparam shadowing false
skinparam roundcorner 18

rectangle &amp;quot;1\nopenApiGenerate&amp;quot; as A #FFF3E0
rectangle &amp;quot;2
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
left to right direction
title সংশোধনযোগ্য প্লাগইন
skinparam shadowing false
skinparam roundcorner 18

rectangle &amp;quot;1\nopenApiGenerate&amp;quot; as A #FFF3E0
rectangle &amp;quot;2
gitProperties
2.5.7&amp;quot; as B #FFF3E0
rectangle &amp;quot;3\nসংস্করণ\nসংশোধিত&amp;quot; as C #E3F2FD
rectangle &amp;quot;4
জোড়া কর OK&amp;quot; as D #E8F5E9

A --&amp;amp;gt; B
B --&amp;amp;gt; C
C --&amp;amp;gt; D

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ডায়াগ্রাম 3 — Docker 29 / Testcontainers&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;উদ্দেশ্য: runtime সমস্যা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;👉 রানটাইমের স্পষ্ট ইতিহাস.&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 10) ]

@startuml
left to right direction
title Docker 29 + Testcontainers

skinparam shadowing false
skinparam roundcorner 18
skinparam defaultFontSize 14

rectangle &amp;quot;1\nসম্বদ্ধ সঠিক&amp;quot; as A #E8F5E9
rectangle &amp;quot;2
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
left to right direction
title Docker 29 + Testcontainers

skinparam shadowing false
skinparam roundcorner 18
skinparam defaultFontSize 14

rectangle &amp;quot;1\nসম্বদ্ধ সঠিক&amp;quot; as A #E8F5E9
rectangle &amp;quot;2
টেস্ট Cucumber FAIL&amp;quot; as B #FFEBEE
rectangle &amp;quot;3
Testcontainers 1.32
অস্বীকৃত&amp;quot; as C #FFF3E0
rectangle &amp;quot;4
Upgrade
 संस्कরণ&amp;quot; as D #E3F2FD
rectangle &amp;quot;5
বিল্ড শেষে ঠিক আছে&amp;quot; as E #E8F5E9

A --&amp;amp;gt; B
B --&amp;amp;gt; C
C --&amp;amp;gt; D
D --&amp;amp;gt; E

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-380e93b2c34add75067efce4c45d4513.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;1162&amp;quot; height=&amp;quot;193&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. আপনার মনে এটি কল্পনা করার একটি উপায়&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পরিস্থিতি_একটি_jhipster_প্রকল্প_একটি_বিল্ড_যা_আর_লোড_হয়_না&amp;quot;&amp;gt;পরিস্থিতি : একটি JHipster প্রকল্প, একটি বিল্ড যা আর লোড হয় না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রকল্প`edster`এটি 2024 সালে জেনারেটেড JHipster অ্যাপ্লিকেশন। মূল বিল্ড স্ক্রিপ্ট`build.gradle`এটি মাসে মাসে স্থির ছিল। তারপর তারা সংস্করণ আপগ্রেড করতে সিদ্ধান্ত নেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1428%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 7.1436%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উপাদান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লক্ষ্য সংস্করণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;9.4.1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Java&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;21.0.11-tem (Eclipse Temurin)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JHipster&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8.x (ফ্রেমওয়ার্ক`tech.jhipster:jhipster-framework:8.11.0`)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Spring Boot&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3.4.5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কটলিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2.3.0&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Docker Engine&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;29.4.1 (API 1.54)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জাভা সংস্করণের পরিবর্তন SDKMAN এর মাধ্যমে হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sdk use java 21.0.11-tem&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম লঞ্চ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build --no-daemon

FAILURE: Build failed with an exception.

* Where:
Build file &amp;#39;/home/.../edster/build.gradle&amp;#39; line: 18

* What went wrong:
An exception occurred applying plugin request [id: &amp;#39;jhipster.cucumber-conventions&amp;#39;]
&amp;amp;gt; Failed to apply plugin &amp;#39;jhipster.cucumber-conventions&amp;#39;.
   &amp;amp;gt; Could not create task &amp;#39;:cucumberTest&amp;#39;.
      &amp;amp;gt; Could not create task &amp;#39;:consoleLauncherTest&amp;#39;.
         &amp;amp;gt; Could not set unknown property &amp;#39;reportsDir&amp;#39; for task &amp;#39;:consoleLauncherTest&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা বিল্ড স্ক্রিপ্টের লোডিং থেকে এVEN উড়ে যাই না।&amp;lt;code&amp;gt;buildSrc/src/main/groovy/jhipster.cucumber-conventions.gradle&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ত্রুটি_১_অদৃশ্য_ভেরিয়েবল_reportsdir&amp;quot;&amp;gt;ত্রুটি ১ : অদৃশ্য ভেরিয়েবল `reportsDir&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্ক্রিপ্ট`jhipster.cucumber-conventions.gradle`ব ধরে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;tasks.register(&amp;#39;consoleLauncherTest&amp;#39;, JavaExec) {
    dependsOn(testClasses)
    String cucumberReportsDir = file(&amp;quot;$buildDir/reports/tests&amp;quot;)
    outputs.dir(reportsDir)           // &amp;amp;lt;-- reportsDir n&amp;#39;existe PAS
    classpath = sourceSets[&amp;quot;test&amp;quot;].runtimeClasspath
    main = &amp;quot;org.junit.platform.console.ConsoleLauncher&amp;quot;
    // ...
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সংজ্ঞায়িত ভেরিয়েবল`cucumberReportsDir`. ব্যাবহারিতটি আছে`reportsDir`-- যেখানেও সংজ্ঞায়িত করা হয়নি.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন&amp;lt;/strong&amp;gt; : &amp;lt;code&amp;gt;outputs.dir(cucumberReportsDir)&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ত্রুটি_২_main_gradle_9_এ_আর_বিদ্যমান_নেই&amp;quot;&amp;gt;ত্রুটি ২: &amp;lt;code&amp;gt;main = \&amp;quot;&amp;amp;#8230;&amp;amp;#8203;\&amp;quot;&amp;lt;/code&amp;gt; Gradle 9-এ আর বিদ্যমান নেই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অবিলম্বে পুনরায় চালু :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Could not set unknown property &amp;#39;main&amp;#39; for task &amp;#39;:consoleLauncherTest&amp;#39; of type org.gradle.api.tasks.JavaExec.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle 9 প্রপার্টি মুছে ফেলে`main`উপকারে`mainClass`কার্য সংক্রান্ত`JavaExec`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন&amp;lt;/strong&amp;gt;:`mainClass = &amp;quot;org.junit.platform.console.ConsoleLauncher&amp;quot;`&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ত্রুটি_৩_sourcecompatibility_এখন_একটি_প্রকল্পের_বৈশিষ্ট্য_নয়&amp;quot;&amp;gt;ত্রুটি ৩ : &amp;lt;code&amp;gt;sourceCompatibility&amp;lt;/code&amp;gt; এখন একটি প্রকল্পের বৈশিষ্ট্য নয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নতুন ত্রুটি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Could not set unknown property &amp;#39;sourceCompatibility&amp;#39; for root project &amp;#39;edster&amp;#39; of type org.gradle.api.Project.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মূল স্ক্রিপ্ট ছিল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;sourceCompatibility=17
targetCompatibility=17&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle 9 রুট লেভেল থেকে এই প্রপার্টিগুলো মুছে ফেলে। এগুলোকে একটি ব্লকে রাখতে হবে।&amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন&amp;lt;/strong&amp;gt; :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;java {
    sourceCompatibility = JavaVersion.VERSION_21
    targetCompatibility = JavaVersion.VERSION_21
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ত্রুটি_৪_groovy_ত্রিভুক্ত_দাবি&amp;quot;&amp;gt;ত্রুটি ৪ : Groovy ত্রিভুক্ত দাবি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পুরনো স্ক্রিপ্টে ছিল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;assert System.properties[&amp;quot;java.specification.version&amp;quot;] == &amp;quot;17&amp;quot; || &amp;quot;21&amp;quot; || &amp;quot;24&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্রুভি,&amp;lt;code&amp;gt;&amp;quot;21&amp;quot;&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;&amp;quot;24&amp;quot;`স্ট্রিংস truthy। অভিব্যক্তি সমাধান হয়&amp;lt;/code&amp;gt;(&amp;amp;#8230;&amp;amp;#8203; == &amp;quot;17&amp;quot;) || true || true`, যে সদা সত্য&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;কিন্তু সিনট্যাক্স অমিল আশিত কঠোর দাবির জন্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;assert System.properties[&amp;quot;java.specification.version&amp;quot;] in [&amp;quot;17&amp;quot;, &amp;quot;21&amp;quot;, &amp;quot;23&amp;quot;, &amp;quot;24&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ত্রুটি_5_অস্পষ্ট_নির্ভরতা_compilekotlin_openapigenerate&amp;quot;&amp;gt;ত্রুটি 5 : অস্পষ্ট নির্ভরতা &amp;lt;code&amp;gt;compileKotlin&amp;lt;/code&amp;gt; → `openApiGenerate&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিল্ড প্রগ্রেস হচ্ছে। কোটলিন কোম্পাইলেশন সফল। তারপর :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Task &amp;#39;:compileKotlin&amp;#39; uses this output of task &amp;#39;:openApiGenerate&amp;#39;
without declaring an explicit or implicit dependency.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle 9 কাজের মধ্যে নিহিত নির্ভরতা প্রত্যাখ্যাত করে। যেহেতু`compileKotlin`উৎপন্ন উৎস পড়ে`openApiGenerate`, এটি ঘোষণা করা দরকার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংশোধন&amp;lt;/strong&amp;gt;অন্দরে`build.gradle`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;afterEvaluate {
    tasks.named(&amp;quot;compileKotlin&amp;quot;).configure {
        dependsOn(tasks.named(&amp;quot;openApiGenerate&amp;quot;))
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `afterEvaluate`কারণ প্রয়োজন`openApiGenerate`একটি এক্সটেনশন (plugin OpenAPI Generator) এবং কনফিগারেশন পর্বের সময় সরাসরি অ্যাক্সেসযোগ্য কোনো টাস্ক নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভুল_৬_generategitproperties_filteroutputstream_write_এ_ব্যর্থ_হয়&amp;quot;&amp;gt;ভুল ৬: &amp;lt;code&amp;gt;generateGitProperties&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;FilterOutputStream.write()&amp;lt;/code&amp;gt;-এ ব্যর্থ হয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জাভা কম্পাইলেশন সফল হয়। উপকরণগুলি প্রক্রিয়া করা হয়। তারপরে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;&amp;amp;gt; Task :generateGitProperties FAILED

No signature of method: java.io.FilterOutputStream.write() is applicable for argument types: (Integer) values: [103]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি`gradle-git-properties`version 2.5.0 Java 21 / Gradle 9-এ অসমঞ্জস. একটি অভ্যন্তরীন বাগ কল করার চেষ্টা করছে`write(int)`Groovy এর মাধ্যমে একটি প্রবাহ যা তা বন্ধ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শোধন&amp;lt;/strong&amp;gt;মধ্যে`gradle.properties` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;gitPropertiesPluginVersion=2.5.7&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অবশেষে_testcontainers_পর্বে_আসে&amp;quot;&amp;gt;অবশেষে : Testcontainers পর্বে আসে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একেবার পর্যন্ত, এটি শুদ্ধ &amp;quot;build script debugging&amp;quot; ছিল। প্রতিটি ত্রুটি বিল্ড স্ক্রিপ্টে Gradle 9 বা Java 21 অসংতি ছিল। উপরের ছয়টি সংশোধনের পর, এটা`./gradlew assemble`সফলভাবে পাস করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু`./gradlew build`এক্সিকিউট করে এছাড়াও পরীক্ষাগুলো, এবং Cucumber পরীক্ষাগুলো Testcontainers ব্যবহার করে একটি অস্থায়ী PostgreSQL শুরু করার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;Could not find a valid Docker environment.

EnvironmentAndSystemPropertyClientProviderStrategy: failed with exception BadRequestException
(Status 400: {&amp;quot;message&amp;quot;:&amp;quot;client version 1.32 is too old. Minimum supported API version is 1.40&amp;quot;}
UnixSocketClientProviderStrategy: failed with exception BadRequestException
(Status 400: {&amp;quot;message&amp;quot;:&amp;quot;client version 1.32 is too old. Minimum supported API version is 1.40&amp;quot;}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Testcontainers ডকারের সাথে যোগাযোগ করতে অক্ষম। দুটি ভিন্ন পদ্ধতি (পরিবেশ ভেরিয়েবল + ইউনিক্স সকেট) একই ত্রুটিতে ব্যর্থ হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-docker-handshake&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

actor &amp;quot;Testcontainers
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

actor &amp;quot;Testcontainers
1.20.6&amp;quot; as TC
participant &amp;quot;docker-java
3.4.1&amp;quot; as DJ
participant &amp;quot;Docker ইঞ্জিন
29.4.1&amp;quot; as DE

TC -&amp;amp;gt; DJ : new DockerClient()
DJ -&amp;amp;gt; DE : GET /_ping\nUser-Agent: docker-java/3.4.1\nAPI-Version: 1.32
DE --&amp;amp;gt; DJ : HTTP 400 Bad Request\nclient version 1.32 is too old.\nMinimum supported API version is 1.40
DJ --&amp;amp;gt; TC : BadRequestException
TC --&amp;amp;gt; TC : Could not find a valid\nDocker environment

note right of DE
  Docker Engine 29.x impose
  API minimum = 1.40
  (défaut ancien : 1.24)
end note

note left of DJ
  docker-java 3.4.1 envoie
  hardcoded API version 1.32
  dans l&amp;#39;en-tête HTTP
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_১_ডকার_জাভা_পাথ&amp;quot;&amp;gt;ফেজ ১ : ডকার-জাভা পাথ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম ধাপ: Testcontainers‑এর द्वारा ব্যবহৃত জাভা ডকার ক্লায়েন্ট API সংস্করণ পাঠায়।&amp;lt;code&amp;gt;1.32`তার HTTP handshake-এ, কিন্তু Docker Engine 29.4.1 ন্যূনতম চাহিশ`1.40&amp;lt;/code&amp;gt;. সমস্যা ক্লায়েন্ট স্তরে আছে, ড্যামন নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Testcontainers 1.20.6によって समाधित docker-java संस्करण जाँच :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew dependencies --configuration testRuntimeClasspath | grep docker-java

+--- com.github.docker-java:docker-java-api:3.4.1
+--- com.github.docker-java:docker-java-transport:3.4.1&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;docker-java 3.4.1, Testcontainers 1.20.6 থেকে। docker-java এর সর্বজনীন সর্বশেষ সংস্করণ 3.5.1। আমরা সংস্করণ আপগ্রেড বাধ্য করার চেষ্টা করি মাধ্যমে`resolutionStrategy`ব্লকে`configurations` de &amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;configurations {
    all {
        resolutionStrategy.eachDependency { details -&amp;amp;gt;
            if (details.requested.group == &amp;quot;com.github.docker-java&amp;quot;
                &amp;amp;amp;&amp;amp;amp; details.requested.name.startsWith(&amp;quot;docker-java&amp;quot;)) {
                details.useVersion(&amp;quot;3.5.1&amp;quot;)
            }
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিল্ডটি পুনরায় চালু করুন। একই ত্রুটি:`client version 1.32 is too old`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্রেডল ক্যাশ যাচাই : JAR ফাইলগুলো সঠিকভাবে পুনরায় ডাউনলোড করা হয়েছে, কিন্তু ত্রুটি বজায় থাকে। docker-java 3.5.1 এখনও পাঠায়`1.32`. এই সংস্করণ তাই Docker Engine 29.4.1-এর জন্য পর্যাপ্ত নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শুচিকরন Kriya&amp;lt;/strong&amp;gt;:গ্রেডল ক্যাশটি সম্পূর্ণরূপে খালি করুন, নিশ্চিত থাকতে হলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;rm -rf ~/.gradle/caches
rm -rf /path/to/project/.gradle&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরিষ্কার করার পর পূর্ণ পুনরায় চালু। একই ত্রুটি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_২_ওয়েব_অনুসন্ধান_এবং_ব্রেডক্রাম্ব_github&amp;quot;&amp;gt;ফেজ ২ : ওয়েব অনুসন্ধান এবং ব্রেডক্রাম্ব GitHub&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;docker-java 3.5.1 পর্যাপ্ত নেই। শুধু এই সমস্যার সমাধান করেছেন কি না খুজে বের করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেস্টকনটেইনرز-জাভা ও ডকর-জাভা ইসুয়ার লক্ষ্য-নির্ধারিত অনুসন্ধান:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;site:github.com/testcontainers &amp;quot;client version 1.32 is too old&amp;quot;
site:github.com/docker-java &amp;quot;client version 1.32&amp;quot; Docker Engine 29&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম ফলাফল (অবিলম্বে) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/testcontainers/testcontainers-java/issues/11210&amp;quot;&amp;gt;testcontainers-java#11210&amp;lt;/a&amp;gt;—&amp;lt;code&amp;gt;[Bug]: client version 1.32 is too old. Minimum supported API version is 1.44&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/testcontainers/testcontainers-java/issues/11212&amp;quot;&amp;gt;testcontainers-java#11212&amp;lt;/a&amp;gt;—&amp;lt;code&amp;gt;[Bug]: Docker 29.0.0 could not find a valid Docker environment&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/testcontainers/testcontainers-java/issues/11491&amp;quot;&amp;gt;testcontainers-java#11491&amp;lt;/a&amp;gt;—&amp;lt;code&amp;gt;[Bug]: Incompatibility in Ubuntu Github runners with Docker Engine 29.1.*&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্রেডক্রাম্ব পাথটি স্পষ্ট : Docker Engine 29.x তার ন্যूनতম API সংস্করণ বাড়িয়েছে`1.24`(পুরানো ত্রুটি) কে`1.40`. Testcontainers 1.20.x docker-java 3.4.x ব্যবহার করে API সংস্করণের চুক্তি করে, পাঠiye`1.32`. ডেমন ভদ্রভাবে কিন্তু দৃঢ়ভাবে প্রত্যাখ্যান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ইস্যু #11491-এ, একজন মেইনটেইনার উত্তর দিয়েছেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ হাই, আমার একটি প্রকল্প 2.0.3 সংস্করণে একটি GH রান্নারে ইঞ্জিন 29.1 দিয়ে চালু আছে এবং এটি কাজ করে। অনুগ্রহ করে আপনারা পরীক্ষা করুন যে কোনো সংস্করণের সংঘর্ষ নেই? অনুগ্রহ করে মনে রাখবেন, সমস্ত মডিউলের আগে একটি প্রিফিক্স ছিল`testcontainers-&amp;lt;code&amp;gt;. সুতরাং, ভার্সন 2.x থেকে শুরু করে আমরা থেকে`postgresql&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;testcontainers-postgresql&amp;lt;/code&amp;gt; &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই উত্তর ধারণ করে&amp;lt;strong&amp;gt;দুটি গুরুত্বপূর্ণ তথ্য&amp;lt;/strong&amp;gt; :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Testcontainers 2.0.3+ সমস্যা সমাধান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;মডিউলগুলো ছিল&amp;lt;strong&amp;gt;prefix &amp;lt;code&amp;gt;testcontainers-&amp;lt;/code&amp;gt; দিয়ে নামকৃত&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্যায়_৩_নাম_পরিবর্তিত_আর্টিফ্যাক্টের_জাল&amp;quot;&amp;gt;প্যায় ৩: নাম পরিবর্তিত আর্টিফ্যাক্টের জাল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নাম পরিবর্তনটি কঠিন। Testcontainers 2.x-এ, আর কোনো পুরনো নাম এই নামে কাজ করে না :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 10%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পুরনো নাম (1.x)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নতুন নাম (2.x)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:postgresql&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:testcontainers-postgresql&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:jdbc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:testcontainers-jdbc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:junit-jupiter&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:testcontainers-junit-jupiter&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;org.testcontainers:testcontainers&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপরিবর্তিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম চেষ্টা : BOM Testcontainers 2.0.5 প্রয়োগ করা এবং নতুন আর্টিফ্যাক্টের নামগুলো মধ্যে`build.gradle`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;dependencies {
    testImplementation platform(&amp;quot;org.testcontainers:testcontainers-bom:2.0.5&amp;quot;)
    testImplementation &amp;quot;org.testcontainers:testcontainers-postgresql&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers-jdbc&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers-junit-jupiter&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers&amp;quot;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;./gradlew build&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;FAILURE: Could not find org.testcontainers:jdbc:2.0.5.
Could not find org.testcontainers:junit-jupiter:2.0.5.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;testcontainers-bom BOM কাফি নেই&amp;lt;/strong&amp;gt;কেন? Spring Boot 3.4.5 তার নিজের BOM (বিল্ড অফ মেটেরিয়াল) নির্ভরতা ব্যবস্থাপনা প্রদর্শন করে (&amp;lt;code&amp;gt;spring-boot-dependencies&amp;lt;/code&amp;gt;) কে&amp;lt;strong&amp;gt;জয়িত&amp;lt;/strong&amp;gt;টেস্টকন্টেইনার্স BOM-এ ট্রানজিটিভ রেজোলিউশনে। Spring Boot ঠিক করে`testcontainers` à &amp;lt;code&amp;gt;1.20.6&amp;lt;/code&amp;gt;, সুতরাং স্প্রিং বুটের BOM-এ স্পষ্টভাবে অন্তর্ভুক্ত না হওয়া সব আর্টিফ্যাক্ট (যekar nuevos_groups`testcontainers-*&amp;lt;code&amp;gt;) পুরাতন নামের দিকে সমাধান হয়`1.20.6&amp;lt;/code&amp;gt;-- এই সংস্করণে আর নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরীক্ষার সময়ে`dependencies --configuration testRuntimeClasspath`,あります:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;+--- org.testcontainers:testcontainers -&amp;amp;gt; 1.20.6 (*)
|    \--- org.testcontainers:testcontainers:2.0.5 -&amp;amp;gt; 1.20.6&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le &amp;lt;code&amp;gt;&amp;amp;#8594;`পরিবর্তন নির্দেশ করে : Testcontainers 2.0.5 &amp;lt;strong&amp;gt;প্রয়োজনীয়&amp;lt;/strong&amp;gt;, কিন্তু স্প্রিং বুট বাধ্য করে`1.20.6&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-bom-war&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 9) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
skinparam componentStyle rectangle

left to right direction

component &amp;quot;build.gradle\n(ব্যবহারকারী)&amp;quot; as BG #E3F2FD {
    rectangle &amp;quot;অনুরোধ
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
skinparam componentStyle rectangle

left to right direction

component &amp;quot;build.gradle\n(ব্যবহারকারী)&amp;quot; as BG #E3F2FD {
    rectangle &amp;quot;অনুরোধ
`testcontainers-bom:2.0.5&amp;quot; as REQ
    rectangle &amp;quot;অনুরোধ
`testcontainers-postgresql&amp;quot; as REQ2
}

component &amp;quot;Maven Central&amp;quot; as MC #FFF3E0

component &amp;quot;ghoshanabolī&amp;quot; as DEC #E8F5E9 {
    rectangle &amp;quot;testcontainers-bom:2.0.5`
নিরীহারিত 2.0.5&amp;quot; as BOM2
    rectangle &amp;quot;spring-boot-dependencies:3.4.5`
ঠিক করে ১.২০.৬&amp;quot; as BOM1
}

component &amp;quot;গ্রেডল সমাধান&amp;quot; as RES #FFEBEE {
    rectangle &amp;quot;জয়ী সংস্করণ
`testcontainers:1.20.6&amp;quot; as WIN #EF9A9A
}

BG --&amp;amp;gt; DEC : &amp;quot;BOMs বিশ্লেষণ কর&amp;quot;
BOM2 --&amp;amp;gt; RES : &amp;quot;প্রস্তাব কর ২.০.৫&amp;quot;
BOM1 --&amp;amp;gt; RES : &amp;quot;প্রস্তাব 1.20.6&amp;quot;
WIN -&amp;amp;gt; MC : &amp;quot;ডাউনলোড
testcontainers:1.20.6&amp;quot;

note bottom of WIN
  Spring Boot BOM prime car
  le plugin spring-boot applique
  ses dépendances de gestion
  après la résolution du consommateur
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফেজ_4_সমাধানকে_বাধ্য_করুন&amp;quot;&amp;gt;ফেজ 4 : সমাধানকে বাধ্য করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রৌনক কৌশল দ্বিগুণ হয়ে যায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;docker-java-কে তার ৩.৭.১ সংস্করণে বাধ্য করুন (Docker Engine 29-এ সামঞ্জস্যপূর্ণ হিসাবে পরীক্ষা করা হয়েছে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;টেস্টকনটেইনার্স কোরকে ২.০.৫ তে বাধ্য করতে স্প্রিং বুট BOM বাইপাস করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-resolution-override&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
skinparam componentStyle rectangle

left to right direction

component &amp;quot;build.gradle
^^^^^
 Syntax Error? (Assumed diagram type: class)

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false
skinparam componentStyle rectangle

left to right direction

component &amp;quot;build.gradle
(resolutionStrategy সাথে)&amp;quot; as BG #E8F5E9 {
    rectangle &amp;quot;BOM Testcontainers
`2.0.5&amp;quot; as BOM2
    rectangle &amp;quot;resolutionStrategy\n.eachDependency&amp;quot; as RS #66BB6A
}

component &amp;quot;সংঘাত সমাধান&amp;quot; as RESOLVED #E3F2FD {
    rectangle &amp;quot;docker-java
`3.7.1` (বাধ্যতামূলক)&amp;quot; as DJ
    rectangle &amp;quot;testcontainers
`2.0.5` (বাধাপ্রাপ্ত)&amp;quot; as TC #81C784
    rectangle &amp;quot;testcontainers-postgresql
`2.0.5&amp;quot; as TPG
    rectangle &amp;quot;testcontainers-jdbc
`2.0.5&amp;quot; as TJ
    rectangle &amp;quot;testcontainers-junit-jupiter
`2.0.5&amp;quot; as TJJ
}

component &amp;quot;BOM Spring Boot\n(অপ্রকাশিত, অবরাইড)&amp;quot; as BOM1 #FFEBEE

component &amp;quot;Maven Central&amp;quot; as MC #FFF3E0

BG --&amp;amp;gt; RESOLVED : &amp;quot;BOM Testcontainers 2.0.5
সরাসরি যায়&amp;quot;
RS -&amp;amp;gt; DJ : &amp;quot;বল 3.7.1&amp;quot;
RS -&amp;amp;gt; TC : &amp;quot;বল 2.0.5&amp;quot;
RESOLVED --&amp;amp;gt; MC : &amp;quot;JARs ডাউনলোড কর\nDocker 29-সামঞ্জস্যপূর্ণ&amp;quot;
BOM1 -[#gray,dashed]-&amp;amp;gt; RESOLVED : &amp;quot;অবহেলিত উপরে testcontainers
এবং docker-java&amp;quot;

note bottom of RS
  Le `eachDependency` intercepte
  la résolution Gradle AVANT
  que le BOM Spring Boot ne gagne.
  C&amp;#39;est une intervention chirurgicale.
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শেষ সংশোধন&amp;lt;/strong&amp;gt;মধ্যে`build.gradle`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy hljs&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;configurations {
    all {
        resolutionStrategy.eachDependency { details -&amp;amp;gt;
            if (details.requested.group == &amp;quot;com.github.docker-java&amp;quot;
                &amp;amp;amp;&amp;amp;amp; details.requested.name.startsWith(&amp;quot;docker-java&amp;quot;)) {
                details.useVersion(&amp;quot;3.7.1&amp;quot;)
            }
            if (details.requested.group == &amp;quot;org.testcontainers&amp;quot;
                &amp;amp;amp;&amp;amp;amp; details.requested.name == &amp;quot;testcontainers&amp;quot;) {
                details.useVersion(&amp;quot;2.0.5&amp;quot;)
            }
        }
    }
}

dependencies {
    testImplementation platform(&amp;quot;org.testcontainers:testcontainers-bom:2.0.5&amp;quot;)
    testImplementation &amp;quot;org.testcontainers:testcontainers-jdbc&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers-junit-jupiter&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers-postgresql&amp;quot;
    testImplementation &amp;quot;org.testcontainers:testcontainers&amp;quot;
    // ... autres dépendances Spring Boot
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `resolutionStrategy.eachDependency`একমাত্র উপায় বটিওএম বাইপাস করতে`spring-boot-dependencies`Spring Boot প্লাগইন tarafından পরিচালিত। সমতা পরীক্ষা উপর`details.requested.name == &amp;quot;testcontainers&amp;quot;`এটি ইচ্ছামত সীমাবদ্ধকৃত: আমরা শুধুমাত্র কোর মডিউলই বাধ্য করি। মডিউলগুলো`testcontainers-*`যারা স্পষ্টভাবে ঘোষিত Testcontainers 2.0.5 BOM অনুসরণ করে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষ_ফল&amp;quot;&amp;gt;শেষ ফল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build --no-daemon

&amp;amp;gt; Task :consoleLauncherTest
[2 containers found]
[2 containers started]
[2 containers successful]

BUILD SUCCESSFUL in 1m 16s&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Testcontainers 2.0.5 + docker-java 3.7.1 এখন শেষ পর্যন্ত তাদের PostgreSQL কনটেইনারগুলো Docker Engine 29.4.1 মাধ্যমে তৈরি করতে সক্ষম হয়। শেষ ব্যবসায়িক ত্রুটি (Cucumber টেস্টে HTTP 500) একটি সম্পূর্ণভাবে বিল্ড স্ক্রিপ্ট থেকে স্বাধীন অ্যাপ্লিকেশন সমস্যা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সংশোধনের_সারাংশ_টেবিল&amp;quot;&amp;gt;সংশোধনের সারাংশ টেবিল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;#&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ফাইল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সমস্যা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সংশোধন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;buildSrc/src/main/groovy/jhipster.cucumber-conventions.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পরিবর্তনশীল`reportsDir`অস্তিত্বহীন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;outputs.dir(cucumberReportsDir)&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;buildSrc/src/main/groovy/jhipster.cucumber-conventions.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`main`অপ্রচলিত Gradle 9&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;mainClass&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`sourceCompatibility`top-level নিষিদ্ধ Gradle 9&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্লক`java { sourceCompatibility = JavaVersion.VERSION_21 }`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যাসার্ট Groovy সিনট্যাক্সে অযুগ্ম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;assert &amp;amp;#8230;&amp;amp;#8203; in [&amp;quot;17&amp;quot;, &amp;quot;21&amp;quot;, &amp;quot;23&amp;quot;, &amp;quot;24&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অস্পষ্ট নির্ভরতা`compileKotlin`→&amp;lt;code&amp;gt;openApiGenerate&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;afterEvaluate { tasks.named(&amp;quot;compileKotlin&amp;quot;).dependsOn(&amp;quot;openApiGenerate&amp;quot;) }&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;gradle.properties&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`gitPropertiesPluginVersion`অসংগত Java 21&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;2.5.7&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;7&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Cache Gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;docker-java 3.5.1 পরীক্ষিত, সমাধান করা হয়েছে কিন্তু পর্যাপ্ত নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শোধন + পরিবর্তন docker-java 3.7.1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;build.gradle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Testcontainers 1.20.6 Docker Engine 29-এর সাথে অসংগত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বল্যাপান Testcontainers 2.0.5 + prefix`testcontainers-*`+ resolutionStrategy vs Spring Boot BOM&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি JHipster/Gradle বিল্ডটি Gradle 9 + Docker Engine 29 সংস্করণে আপগ্রেড করার পরে ক্র্যাশ হয়, তাহলে ত্রুটিগুলি দুটি বিভাগে ভাগ করা হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিল্ড স্ক্রিপ্টের ত্রুটি&amp;lt;/strong&amp;gt;(প্রথম ৬টি) : Gradle 9 কিছু প্রোপার্টি এবং সিনট্যাক্সকে মুছে ফেলেছে, যা বছর ধরে কাজ করছিল`sourceCompatibility=&amp;lt;code&amp;gt;, `main =&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;reportsDir&amp;lt;/code&amp;gt;). এগুলো মেকানিকাল মাইগ্রেশন, যা একবার আপনি নতুন API জানলে হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডকার রানটাইম ত্রুটি&amp;lt;/strong&amp;gt;(২টি শেষ) : &amp;lt;code&amp;gt;Docker Engine 29.4.1&amp;lt;/code&amp;gt; বহির্গত 한다 API ক্লায়েন্টগুলো &amp;lt;code&amp;gt;&amp;amp;lt; 1.40&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;Testcontainers 1.20.6&amp;lt;/code&amp;gt; (অনিবার্য &amp;lt;code&amp;gt;Spring Boot 3.4.5&amp;lt;/code&amp;gt;) ব্যবহার করে &amp;lt;code&amp;gt;docker-java 3.4.1&amp;lt;/code&amp;gt; যে পাঠায় &amp;lt;code&amp;gt;1.32&amp;lt;/code&amp;gt;. একমাত্র &amp;lt;code&amp;gt;Testcontainers 2.0.5&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;docker-java 3.7.1&amp;lt;/code&amp;gt; সমস্যার সমাধান করে, আর্টিফ্যাক্টের নামকরণের সাথে এবং সংস্করণ বাধ্য করে via`resolutionStrategy.eachDependency`একমাত্র উপായ作为 Spring Boot এর নিহিত BOM বাইপাস করতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রজেক্টের মূলে Gradle বিল্ড স্ক্রিপ্ট এখন পরিষ্কার।`./gradlew build`Java 21, Gradle 9.4.1, Spring Boot 3.4.5 এবং Docker Engine 29.4.1-এ চলে যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি AI এজেন্টকে AsciiDoc দিয়ে শাসনকারী: আমার ইগার/লেজি কৌশল অপেনকোড সেশনের জন্য কোনো কন্টেক্সট লিক না হওয়া</title>
            <link >https://cheroliv.com//blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html</link>
            <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0108_gouvernance_agent_opencode_eager_lazy_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারসংক্ষেপ&amp;quot;&amp;gt;সারসংক্ষেপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যখন ningún Opencode মতো একটি কৃত্রিম বুদ্ধিমত্তা এজেন্টের সাথে জটিল প্রকল্পগুলো একাধিক সেশনে করা হয়, তখন মৌলিক একটি সমস্যা আমাদের সম্মুখীন :&amp;lt;strong&amp;gt;প্রসঙ্গের রিস্য&amp;lt;/strong&amp;gt;. এজেন্টটি পূর্ববর্তী সেশনে স্মরণ করতে পারে না। যা তাকে ব্যাখ্যা করা ছিল — আর্কিটেকচার, নীতিমালা, ব্যাকলগের অবস্থা — হারিয়ে গেছে। প্রতিটি সেশনে এই প্রেক্ষাপট পুনর্মির্দেশ করা ব্যয়বহুল, ধীর এবং ত্রুটির উৎস।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে আমি এই সমস্যাটি সমাধান করার জন্য নির্মিত শিল্প কৌশলটি বিস্তারিত করছি: AsciiDoc ফাইল-ভিত্তিক ধারাবাহিক শासन পদ্ধতি, একটি দ্বৈততা সঙ্গে।&amp;lt;strong&amp;gt;উৎসাহী/অলস&amp;lt;/strong&amp;gt;কনটেক্সট টোকেনের ব্যবহারকে অপ্টিমাইজ করতে, এবং একটি&amp;lt;strong&amp;gt;অবশ্য্য সেশনের শেষের প্রক্রিয়া&amp;lt;/strong&amp;gt;সততা নিশ্চিত করার জন্য.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_সোমবার_21_আপ্রিল_900&amp;quot;&amp;gt;দৃশ্য: সোমবার 21 আপ্রিল, 9:00&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি Opencode খুলে দিই যাতে আমার Gradle প্লাগইন চালিয়ে যেতে পারে।&amp;lt;code&amp;gt;plantuml-plugin&amp;lt;/code&amp;gt;. গত সন্ধ্যা, আমি API কী পুলের আর্কিটেকচার এজেন্টের সাথে তিন ঘন্টা কথা বলেছিলাম — রাউন্ড-রবিন রোটেশন, কোটা ম্যানেজমেন্ট, স্বয়ংক্রিয় ফলব্যাক। একাল সকাল, এজেন্ট আমাকে লাল মাছের চোখের মতো চোখ দিয়ে দেখছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ নমস্কার, আমি আপনার Opencode সহকারী। আপনাকে কীভাবে সাহায্য করতে পারি আজ? &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;না&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;আহ, হ্যাঁ, API কীজের পুল, আমরা YAML কাঠামোতে ছিলাম। না&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;সাবধান,&amp;lt;code&amp;gt;PlantumlManager`এটিই Kotlin সিঙ্গলটন অবজেক্ট, একটি শ্রেণী নয়। না&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;না, আমরা গতকাল সিদ্ধান্ত নিয়েছি যে`SyntaxValidationResult`একটি sealed class nested ছিল`PlantumlService&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবকিছু পুনরায় করার দরকার। বরং বলতে পারি: সবকিছুর পুনরায় ব্যাখ্যা করা দরকার। আমি আমার সেশনের প্রথম ২০ মিনিটকে এজেন্টের হাতে গতকাল যে প্রেক্ষাপট ছিল তা পুনরায় গঠন করতে ব্যয় করব। ২০ মিনিট জ্বলানো টোকেন। ২০ মিনিট যেখানে আমি কোড করতে পারতাম, কিন্তু বাধ্যতামূলক শিক্ষাদান করছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি ওপেনকোডের বাগ নয়। এটি কথোপকথন চালু LLM এর প্রকৃত প্রকৃতি: দুটি সেশনের মধ্যে, কাজের স্মৃতি হয়&amp;lt;strong&amp;gt;সম্পূর্ণভাবে মুছে ফেলা&amp;lt;/strong&amp;gt;। এজেন্টটি পূর্বের মিশনকে, নেওয়া সিদ্ধান্তগুলোকে, সনাক্তকৃত ঝুঁকিগুলোকে এবং একসাথে লিখিত কোডটি স্মরণ করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি এই কাজকে দশগুণবারই অভিজ্ঞতা করেছি। چار সমান্তরাল প্রজেক্টে। সপ্তাহ ধরে একের পর一个 চলে যাওয়া সেশনগুলো সহ। আমি হিসাব করেছি: গড়ে,&amp;lt;strong&amp;gt;সেশনের সময়ের ৩০ থেকে ৪০ %&amp;lt;/strong&amp;gt;এজেন্টকে পুন:bgঠিত করা তে সমর্পিত ছিল। প্রকল্পের সেশন 87-এ`plantuml-plugin`, আমি ভেঙে পড়েছি। আমি আর দশমবার ব্যাখ্যা করার অনুমতি দিতে পারিনি যে`AttemptEntry`একটি টপ-লেভেল ডেটা ক্লাস`DiagramProcessor.kt`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাকে একটি সিস্টেমের দরকার ছিল। একটি হ্যাক না। একটি সত্য গবর্নেন্স।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_জেনেসিস_অশান্তি_থেকে_পদ্ধতি&amp;quot;&amp;gt;জেনেসিস: অশান্তি থেকে পদ্ধতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রথম_সেশনস_অন্ধকারের_যুগ&amp;quot;&amp;gt;প্রথম সেশনস : অন্ধকারের যুগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ওপেনকোডের সাথে আমার প্রথম প্রকল্প,&amp;lt;code&amp;gt;plantuml-plugin&amp;lt;/code&amp;gt;, কোনো শাসনমূলক ব্যবস্থা ছাড়াই শুরু&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন ৬২-এ, সংখ্যাগুলি এখানে:&amp;lt;strong&amp;gt;১৯৮ ইউনিট টেস্ট পাস হয়&amp;lt;/strong&amp;gt;, &amp;lt;strong&amp;gt;42 যাচাইকৃত কার্যকর পরীক্ষা&amp;lt;/strong&amp;gt;, প্লাগইন কাজ করে। কিন্তু বৌদ্ধিক খরচ অসহ্য। প্রত্যেক নতুন সেশন প্রকল্পের গঠন নিয়ে Twenty মিনিটের একটি মোনোলগ দিয়ে শুরু হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_site_yml_er_nashṭo_episoḍ_session_2_bakery_plugin&amp;quot;&amp;gt;site.yml er nashṭo episoḍ (Session 2, bakery-plugin)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পদ্ধতি একটি দুর্ঘটনাও থেকে জন্ম নেয়। প্রজেক্টে`bakery-gradle`, সেশন 2-এ, আমি এজেন্টকে ফাইল পরিবর্তন করার অনুরোধ করি`site.yml`. এজেন্ট, ফাইলটি সংস্করণ করা হয়েছে কি না যাচাই না করে, একটি`Write`complet যে বিষয়বস্তুটি ওভাররাইট করে। ফলাফল: প্রকৃত টোকেন (ফায়ারবেস API কী, স্থাপন গোপনীয়তা) মিথ্যা প্লেসহোল্ডারের দ্বারা প্রতিস্থাপিত হয়। ফাইলটি git-এ ছিল না — এটি ছিল`.gitignore`গোপনীয়তাগুলো রক্ষা করতে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যাকআপ ছাড়া। ছাড়া`git restore`সম্ভব। আমি ফাঁসiye পড়েছি। আমি ম্যানুয়ালি কনফিগারেশন ফাইলটি পুনরায় তৈরি করতে দরকার, আমি পাসওয়ার্ড ম্যানেজার থেকে টোকেনগুলো খুঁজে পেতে দরকার, সবকিছু পুন: সংnect করতে দরकार।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই মনঃক্ষোভ থেকে যো জন্ম নেই&amp;lt;strong&amp;gt;অবশ্য নিয়ম 1b&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ &amp;lt;strong&amp;gt;কখনো চূর্ণ না করো&amp;lt;/strong&amp;gt;একটি কনফিগ ফাইল একটি`Write`সম্পূর্ণ যখন একটি`Edit`আংশিক পর্যাপ্ত.&amp;lt;strong&amp;gt;কখনও প্রতিস্থাপন করবেন না&amp;lt;/strong&amp;gt;সংবেদনশীল মান মিথ্যা মান দিয়ে।&amp;lt;strong&amp;gt;জাঁচ করুন &amp;lt;code&amp;gt;git check-ignore&amp;lt;/code&amp;gt; এবং `git ls-files&amp;lt;/strong&amp;gt;কোনো পরিবর্তন করার আগে। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিয়মটি আজ আমার সব ফাইলের মার্বেলে খোদা করা হয়েছে।&amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt; et `INDEX.adoc`চার প্রকল্পের মধ্যে, একটি সত্য ভুল থেকে জন্মগ্রহণ করেছে, যা আমাকে এক ঘন্টা হস্তকারী কাজ করতে লাগিয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মাইগ্রেশন_মার্কডাউন_asciidoc_সেশন_১_cheroliv_com&amp;quot;&amp;gt;মাইগ্রেশন মার্কডাউন → AsciiDoc (সেশন ১, cheroliv.com)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;২৫ এপ্রিল ২০২৬, উপর`cheroliv.com`, আমি একটি রেডিকাল নির্ণয় নেওয়াছি: Markdownের সম্পূর্ণ শাসনকে AsciiDoc-এ রূপান্তরিত করা। এটি सौন্দর্যপূর্ণ নয়। এটি কার্যকর। AsciiDoc একটি সেমান্টিক কাঠামো প্রদান করে যা LLM-গুলো ভালোভাবে পড়ে: শ্রেণীবদ্ধ বিভাগ, টাইপড টেবিল, নোটিশ (&amp;lt;code&amp;gt;NOTE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;WARNING&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;CAUTION&amp;lt;/code&amp;gt;), মেশিন-পড়াযোগ্য নথির attribuত্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সেশন 1 এর`cheroliv.com`ফর্মালাইজ করে গঠন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;রূপান্তর`AGENTS.md` en &amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিশেষজ্ঞ এজেন্টদের সৃষ্টি :`CODER.adoc`, &amp;lt;code&amp;gt;SCRUM_MASTER.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PLANTUML_DESIGNER.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Eager/Lazy স্ট্রাকচার তৈরি :`INDEX.adoc`, &amp;lt;code&amp;gt;SESSIONS_HISTORY.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AGENT_SESSION_MANAGER.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;SESSION_CHECKLIST.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;PROCEDURES.adoc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একমাত্র কমিট:`90975e9 refactor: migrate agent governance from Markdown to AsciiDoc`। এবং সাইটটি কাজ চালিয়ে রেখে আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-timeline&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 18) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

title সেশনoglobের বিকাশ — সেশন 1 থেকে 150+
legend top
    |= Couleur |= Projet |
    | &amp;amp;lt;#4CAF50&amp;amp;gt; | cheroliv.com |
    | &amp;amp;lt;#2196F3&amp;amp;gt; | plantuml-plugin |
    | &amp;amp;lt;#FF9800&amp;amp;gt; | bakery-plugin |
    | &amp;amp;lt;#9C27B0&amp;amp;gt; | magic-stick |
endlegend

concise &amp;quot;সক্রিয় সেশন&amp;quot; as S

@S
0 is &amp;quot;.md অপরিষ্কৃত&amp;quot;
1 is &amp;quot;অভিবাসন
^^^^^
 Syntax Error? (Assumed diagram type: timing)

@startuml
skinparam backgroundColor #FEFEFE
skinparam handwritten false

title সেশনoglobের বিকাশ — সেশন 1 থেকে 150+
legend top
    |= Couleur |= Projet |
    | &amp;amp;lt;#4CAF50&amp;amp;gt; | cheroliv.com |
    | &amp;amp;lt;#2196F3&amp;amp;gt; | plantuml-plugin |
    | &amp;amp;lt;#FF9800&amp;amp;gt; | bakery-plugin |
    | &amp;amp;lt;#9C27B0&amp;amp;gt; | magic-stick |
endlegend

concise &amp;quot;সক্রিয় সেশন&amp;quot; as S

@S
0 is &amp;quot;.md অপরিষ্কৃত&amp;quot;
1 is &amp;quot;অভিবাসন
AsciiDoc&amp;quot;
10 is &amp;quot;Eager/Lazy
প্রমাণীকৃত&amp;quot;
62 is &amp;quot;নিরাপত্তা বিধি\n(site.yml)&amp;quot;
87 is &amp;quot;ফাটান
প্রসঙ্গ&amp;quot;
109 is &amp;quot;অপ্টিমাইজেশন
-60% টোকেনস&amp;quot;
133 is &amp;quot;133 সেশন
240 টেস্ট পাস&amp;quot;

S@0 -&amp;amp;gt; S@1 : Session 1\n(cheroliv.com)
S@1 -&amp;amp;gt; S@10
S@10 -&amp;amp;gt; S@62 : Session 62\n(plantuml-plugin)
S@62 -&amp;amp;gt; S@87 : Session 87\n(Cry 4 help)
S@87 -&amp;amp;gt; S@109 : Session 109\n(API Key Pool)
S@109 -&amp;amp;gt; S@133 : Session 133\n(Aujourd&amp;#39;hui)

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উপরের টাইমলাইনটি বাস্তব অগ্রগতি দেখায়। ফটিং পয়েন্ট হল সেশন ৮৭ : সেখানে পুনরাবৃত্তি পুনরায়োগের নিরাশা সহনশীলতার সীমানা অতিক্রম করে, এবং ইগার/লেজি পদ্ধতি একটি ধারণা থেকে বাধ্যতামূলক নিয়মে পরিণত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_रणीतিঃ_eagerlazy_গভীরে&amp;quot;&amp;gt;रणीतিঃ Eager/Lazy গভীরে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_দর্শন_ক্যাশ_কম্পিউটিং_বুদ্ধিবৃত্তিয়ে_প্রয়োগ&amp;quot;&amp;gt;দর্শন : ক্যাশ কম্পিউটিং বুদ্ধিবৃত্তিয়ে প্রয়োগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার পদ্ধতি সরাসরি কম্পিউটার ক্যাশ ব্যবস্থাপনা থেকে অনুপ্রাণিত। যে কিছো&amp;lt;strong&amp;gt;জরurierি এবং বোইবার ব্যবহারিত&amp;lt;/strong&amp;gt;এটিকে অবিলম্বে অ্যাক্সেসযোগ্য করা উচিৎ (&amp;lt;strong&amp;gt;আগ্রহী&amp;lt;/strong&amp;gt;). সব যে আছে&amp;lt;strong&amp;gt;প্রексиাপটিক বা বড় আকারের&amp;lt;/strong&amp;gt;যে দরকার হলে চার্জ করা উচিত&amp;lt;strong&amp;gt;আলসী&amp;lt;/strong&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 6.6676%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Eager (ড্যাশবোর্ড)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Lazy (মালিকের নির্দেশিকা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;আকার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt; 100 লাইন, &amp;amp;lt; 10k টোকেন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অসীম, বিস্তারিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;লোড হচ্ছে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Auto, সেশনের শুরুতে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজেন্টের অনুরোধে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বিষয়বস্তু&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অশর্ত নিয়ম,বর্তমান মিশন,ক্রিটিক্যাল অবস্থা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সেশন আর্কাইভ, সম্পূর্ণ ইতিহাস, বিস্তারিত প্রক্রিয়া, প্রযুক্তিগত রেফারেন্স&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ভুমিকা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অমিলকে তৎক্ষণে নির্দেশ দিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গভীর পরিস্থিতি প্রশ্নের উত্তর দিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_eager_ফাইলগুলো_ড্যাশবোর্ড&amp;quot;&amp;gt;Eager ফাইলগুলো : ড্যাশবোর্ড&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফাইলগুলি প্রতিটি প্রকল্পের রুটে আছে এবং প্রতিটি সেশনের শুরুতে এজেন্ট tarafından স্বয়ংক্রিয়ভাবে লোড হয়। তারা গঠন করে&amp;lt;strong&amp;gt;ড্যাশবোর্ড&amp;lt;/strong&amp;gt;-- গুরুত্বপূর্ণ তথ্য, তৎক্ষণে অ্যাক্সেসযোগ্য.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-eager-lazy&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 13) ]

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package &amp;quot;প্রজেক্টের মূল (ইগার - স্বয়ং-লোড)&amp;quot; {
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;AGENT.adoc&amp;amp;lt;/b&amp;amp;gt;\nঅবশ্যপালনীয় নিয়ম\nগঠন &amp;amp;amp; প্রথা&amp;quot; as AGENT
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;PROMPT_REPRISE.adoc&amp;amp;lt;/b&amp;amp;gt;\nসেশন N-এর মিশন\nসারাংশ N-1&amp;quot; as PROMPT
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;INDEX.adoc&amp;amp;lt;/b&amp;amp;gt;\nপ্রবেশ বিন্দু\nনিয়ম + সেশন&amp;quot; as INDEX
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;*_ESSENTIALS.adoc&amp;amp;lt;/b&amp;amp;gt;\nব্যবসায়িক প্রেক্ষাপট\nগুরুত্বপূর্ণ&amp;quot; as ESS
}

package &amp;quot;.agents/ (Lazy - অনুরোধে লোড)&amp;quot; {
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;sessions/N-*.adoc&amp;amp;lt;/b&amp;amp;gt;
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200

package &amp;quot;প্রজেক্টের মূল (ইগার - স্বয়ং-লোড)&amp;quot; {
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;AGENT.adoc&amp;amp;lt;/b&amp;amp;gt;\nঅবশ্যপালনীয় নিয়ম\nগঠন &amp;amp;amp; প্রথা&amp;quot; as AGENT
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;PROMPT_REPRISE.adoc&amp;amp;lt;/b&amp;amp;gt;\nসেশন N-এর মিশন\nসারাংশ N-1&amp;quot; as PROMPT
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;INDEX.adoc&amp;amp;lt;/b&amp;amp;gt;\nপ্রবেশ বিন্দু\nনিয়ম + সেশন&amp;quot; as INDEX
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;*_ESSENTIALS.adoc&amp;amp;lt;/b&amp;amp;gt;\nব্যবসায়িক প্রেক্ষাপট\nগুরুত্বপূর্ণ&amp;quot; as ESS
}

package &amp;quot;.agents/ (Lazy - অনুরোধে লোড)&amp;quot; {
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;sessions/N-*.adoc&amp;amp;lt;/b&amp;amp;gt;
বিস্তারিত আর্কাইভ
সিদ্ধান্ত &amp;amp;amp; আউটপুট&amp;quot; as SESS
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;SESSIONS_HISTORY.adoc&amp;amp;lt;/b&amp;amp;gt;\nসারসংক্ষেপ টেবিল\nতারিখ/প্রকার/স্কোর&amp;quot; as HIST
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;PROCEDURES.adoc&amp;amp;lt;/b&amp;amp;gt;
session শেষের টেমপ্লেট
6 ধাপ&amp;quot; as PROC
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;*_REFERENCE.adoc&amp;amp;lt;/b&amp;amp;gt;
সম্পূর্ণ আর্কিটেকচার
প্রযুক্তিগত রেফারেন্স&amp;quot; as REF
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;COMPLETED_TASKS_ARCHIVE&amp;amp;lt;/b&amp;amp;gt;\nসম্পন্ন কাজগুলো\nপ্রতি মাসে&amp;quot; as ARCH
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;AGENT_MODUS_OPERANDI.adoc&amp;amp;lt;/b&amp;amp;gt;
রৌতনীতি ডকুমেন্টেশন
পদ্ধতিবিদ্যা&amp;quot; as MOD
    component &amp;quot;&amp;amp;lt;b&amp;amp;gt;*_REFERENCE.adoc&amp;amp;lt;/b&amp;amp;gt;
বুট পরীক্ষা, A/B পার্টিশন
বিশেষ প্রেক্ষাপট&amp;quot; as SPEC
}

AGENT --&amp;amp;gt; PROMPT : &amp;quot;রেফারেন্স&amp;quot;
AGENT --&amp;amp;gt; INDEX : &amp;quot;রেফারেন্স&amp;quot;
INDEX --&amp;amp;gt; SESS : &amp;quot;সূচী&amp;quot;
INDEX --&amp;amp;gt; HIST : &amp;quot;সূচী&amp;quot;
INDEX --&amp;amp;gt; PROC : &amp;quot;উক্তি&amp;quot;
INDEX --&amp;amp;gt; ARCH : &amp;quot;উক্তি&amp;quot;
INDEX --&amp;amp;gt; REF : &amp;quot;উক্তি&amp;quot;
PROMPT --&amp;amp;gt; SESS : &amp;quot;আর্কাইভ N-1&amp;quot;
PROMPT --&amp;amp;gt; ESS : &amp;quot;ব্যবসায়িক প্রেক্ষাপট N&amp;quot;

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;AGENT.adoc&amp;lt;/strong&amp;gt;-- মাস্টার ফাইল। উপর`cheroliv.com`, 200 Ligne ache以及этих coronavirus koron :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পের অবশ্য মেনে চলা উচিত নিয়ম (অনুমতির বিনা কোনো কমিট নেই, কোনো`rm`পusher? Actually we need correct Bengali: &amp;quot;পুষ্টি ছাড়াই)&amp;quot;. Yes.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পুষ্টি ছাড়াই)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পের গঠন এবং কোডের নিয়মাবলী&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জরুরি কমান্ডগুলো ()&amp;lt;code&amp;gt;./gradlew serve&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;./gradlew test&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এপিকস এবং পণ্য ব্যাকলগ (প্রাধান্য দেওয়া ব্যবহারকারী কাহিনী)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অনুভূমিক গুণমানের মানদণ্ড (অ্যাক্সেসিবিলিটি, রেসপন্সিভ, কম্প্যাটিবিলিটি)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উপর`bakery-plugin`, নিমন 0 ভিন্ন :&amp;lt;strong&amp;gt;./gradlew -q publishToMavenLocal` প্রতিটি সোর্স কোড পরিবর্তনের পরে বাধ্যতামূলক&amp;lt;/strong&amp;gt;কারণ স্থানীয় JAR-কে পুনঃপ্রকাশ না করে প্লাগইনটি পরীক্ষা করার ফলে আমি একটি কোড ডিবাগ করতে এক ঘণ্টা বर्बাদ করেছি, যা এখনো প্যাকেজিং করা হয়নি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/strong&amp;gt;--বর্তমান সেশনের মিশন। প্রতিটি সেশনের শেষে আপডেট করা হয়, এতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সেশন নম্বর এবং অগ্রাধিকার মিশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পূর্ব সেশনের সংক্ষিপ্তসার (কী করা হয়েছে, কী করতে বাকি আছে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বর্তমান সেশনের স্বীকৃতি মানদণ্ড&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নির্দিষ্ট_projuktigoto_noto_groups&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;.agents/INDEX.adoc&amp;lt;/strong&amp;gt;প্রবেশের বিন্দু। এটি Nirnishpotto নিয়ম, সাম্প্রতিক সেশনগুলো, এবং বিশেষ করে&amp;lt;strong&amp;gt;প্রকল্পের পোর্টফোলিও&amp;lt;/strong&amp;gt;এ একই পদ্ধতি ব্যবহার করে পরিচালিত করা হয়। এপর্যন্ত, পাঁচটি প্রকল্প এখানে তালিকাভুক্ত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code&amp;gt;----
----
| magic-stick    | Session 23 | SCRIPT_VERIFICATION.adoc | 2026-04-27 |
| bakery-gradle  | Session 11 | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| cheroliv.com   | Session 9  | TEST_COVERAGE_ANALYSIS   | 2026-04-27 |
| plantuml-gradle| Session 133| TEST_COVERAGE_ANALYSIS   | 2026-04-23 |
| jhipster-gradle-plugins | Session 1 | TEST_COVERAGE_ANALYSIS | 2026-04-28 |
----

**`*_ESSENTIALS.adoc`** -- একটি সম্প্রতি যোগফল (Session 109, plantuml-plugin) Eager কনটেক্সট আরও অপ্টিমাইজ করার জন্য। API কী পুলে 200 লাইন ব্যবসায়িক কনটেক্সট লোড করার পরিবর্তে, আমি 50 লাইন জরুরি অংশ লোড করি, এবং বাকি 150 লাইন LAZY-এ বاقية রাখি।`*_REFERENCE.adoc`.

মাপা ফলাফল : গমন**~25k টোকেন EAGER ~10k টোকেনে**(60% লাভ) এজেন্টকে আর শক্তিবাহী স্মরণপত্রের প্রয়োজন নেই।

==== অনুপস্থিত লিংক : `opencode.json

আমি আপনাকে কবুল করতে চাই যে আমি প্রায় দকুমেন্ট করতে ভুলে গিয়েছিলাম এমন একটি বিষয়। এই সব `.adoc` ফাইলের উপরে একটি ক্ষুদ্র `JSON` ফাইল আছে যেটা ছাড়া কোনো কাজ চলবে না। যের নাম`opencode.json`এবং এটি ছয় লাইন করে। অক্ষরসত্য ভাবে ছয় লাইন।

[source,json]
----
{
  &amp;quot;$schema&amp;quot;: &amp;quot;https://opencode.ai/config.json&amp;quot;,
  &amp;quot;instructions&amp;quot;: [
    &amp;quot;AGENT.adoc&amp;quot;
  ]
}
----

এই ফাইলটিই Opencode-কে বলে: « চালু হলে, লোড`AGENT.adoc`স্বয়ংক্রিয়ভাবে। » তার বিনা, এজেন্টটি একটি শ্বেত পাতা, exactly as I described at the beginning of the article.

আমি এই ফাইলের গুরুত্ব দুর্ঘটনাক্রমে আবিষ্কার করেছি। Sur`bakery-plugin`, এটি বিদ্যমান ছিল না। আমি কেন এজেন্টটি এই প্রকল্পে অন্যান্য প্রকল্পের তুলনায় তৈরিয়তভাবে বেশি « হারiye » ছিল তা ভাবছিলাম। অবিলম্বীয় নিয়মগুলো ভালোভাবে ছিল`AGENT.adoc`— কি ন্তু`AGENT.adoc`সেটি কোনো বারও চার্জ করা হয়নি। এজেন্টটি শুধুমাত্র আমি যে বলেছিলাম সেটি পড়েছিল, ম্যানুয়ালি, প্রতিটি সেশনে। এটি সেশন ১১ এর`bakery-plugin`�যখন আমি অনুভব করি যে এর অনুপস্থিত`opencode.json`. আমি এটি তৈরি করেছি — এবং সেশন ১২ অন্যদের মতো শুরু হয়েছে।

এখন এই ফাইলটি আমার জন্য স্পষ্ট হয়ে গেছে, যাতে আমি এখনও সেটি নিয়ে ভাবি না। এটি ডেভেলপারের একটি সাধারণ ভুল, যিনি সরঞ্জাম সম্পর্কে বেশি জানেন। আজ থেকে, আমি সিস্টেম্যাটিকলি এটিকে *avant* তৈরি করি।`AGENT.adoc`এই প্রথম পাথর।

==== দ্বৈতিত্বের `INDEX.adoc

একটি আরো সূক্ষ্মতা যা স্পষ্টভাবে ব্যাখ্যা করার যোগ্য:`INDEX.adoc`বাস করে`.agents/`— একটি ফাইল যা আমি LAZY হিসেবে উপস্থাপন করেছি। কিন্তু, আমি সব তালিকায় এটি EAGER হিসেবে তালিকাভুক্ত করি। এখানে একটি দৃশ্যমান তেনশন আছে।

ক্ষেত্রের বাস্তবতা : ফাইলগুলো`.agents/INDEX.adoc`শুরুতে সেশন স্বয়ংক্রিয়ভাবে ভালোভাবে লোড করা হয়, exactly`AGENT.adoc` et `PROMPT_REPRISE.adoc`. তারা আ.ctx মধ্যে`.agents/`সংগঠনের কারণে — মূলকে আক্রমণ করবেন না — কিন্তু їх আচরণ EAGER.

পর`plantuml-plugin`, `INDEX.adoc`২০০ লাইন আছে এবং অবশ্য মেনে চলা *সম্পূর্ণ* নিয়মের সাথে তাদের ইতিহাস (গত সেশনেরบทเรียน), EPIC(score)-সাথে, এবং প্রকল্প পোর্টফোলিও। এই দস্তাবেজটি যে এজেন্টটি «কোথায় আমরা আছি» জানতে পরামর্শ নেয়। উপর`bakery-plugin`, এতে ১৫০ লাইন রোডম্যাপ এবং সাম্প্রতিক সেশনদের সাথে আছে

ইচ্ছামত পুনরাবৃত্তি মধ্যে`AGENT.adoc` et `INDEX.adoc`এটি আশ্চর্য করতে পারে। অবশ্য নিয়মগুলো দুটোই उपस्थित र�यछे। কেন? কারণ তারা দুটি ভিন্ন ভূমিকা পালন করে : এতে`AGENT.adoc`, তারা *ব্যাখ্যামূলক* (নিয়মের কাহিনী, শেখা পাঠ) ; এতে`INDEX.adoc`, তারা sono *এক্সেকিউটিভ* (নগ্ন নিয়ম, কারণ বিহীন, দ্রুত পরামর্শের জন্য). এজেন্ট পড়ে`AGENT.adoc`একবার *বুঝতে* ; ও আবার পড়ে`INDEX.adoc`প্রতিটি সেশনে *appliquer*. দুটি ব্যবহার, দুটি বিন্যাস।

[plantuml, format=svg, id=diag-dualite-agent-index, alt=&amp;quot;Comparaison entre AGENT.adoc (narratif) et INDEX.adoc (exécutif)&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center

title দ্বৈততা AGENT.adoc ←→ INDEX.adoc
left to right direction

rectangle &amp;quot;AGENT.adoc
(মূল — EAGER)&amp;quot; as AGENT #E3F2FD {
  rectangle &amp;quot;📖 **কাহিনীর ফরম্যাট**
নিয়মের কাহিনীবলন
শেখা পাঠ, প্রসঙ্গ&amp;quot; as NARR
  rectangle &amp;quot;�🏗️ **সম্পূর্ণ আর্কিটেকচার**
প্রজেক্টের গঠন, উপাদান
বিস্তারিত ব্যাকলগ US&amp;quot; as ARCHI
  rectangle &amp;quot;�📋 **ব্যাখ্যাকরম নিয়ম**
নিয়মটি কেন আছে?
ঘটনার ইতিহাস&amp;quot; as EXPL
}

rectangle &amp;quot;INDEX.adoc
(.agents/ — EAGER)&amp;quot; as INDEX #E8F5E9 {
  rectangle &amp;quot;⚡ **একজেকিউটিভ ফরম্যাট**
নিরা নিয়ম, ব্যাখ্যা রাহিত
দ্রুত পরামর্শ&amp;quot; as EXEC
  rectangle &amp;quot;**রোডম্যাপ &amp;amp;amp; EPICs**
সারাংশ টেবিল
প্রগ্রেস, স্কোর, অগ্রাধিকার&amp;quot; as ROAD
  rectangle &amp;quot;🌐 **প্রকল্প পোর্টফোলিও**
অনুভাগিক দৃশ্য
৫ সমন্বিত প্রকল্প&amp;quot; as PORT
}

AGENT --&amp;amp;gt; INDEX : &amp;quot;Agent পড়ে AGENT.adoc
1 বার জন্য **বোঝা**&amp;quot;
INDEX --&amp;amp;gt; AGENT : &amp;quot;এজেন্ট INDEX.adoc পুনরায় পড়ে
প্রতিটি সেশনে **অ্যাপ্লাই** করতে&amp;quot;

note bottom of AGENT
  Taille max : 200 lignes
end note

note bottom of INDEX
  Taille max : 200 lignes
  Source de vérité en cas de divergence
end note

@enduml
----

এই অনুমানিত রিডান্ডেন্সি ডিজাইনের একটি পছন্দ। এটি প্রায় ৫০ অতিরিক্ত লাইন ইগের টোকেন খরচ করে — কিন্তু তা নিশ্চিত করে যে এজেন্ট সর্বদা নিয়মগুলো চোখের সামনে রাখে, সংক্ষিপ্ত ফরম্যাটও অন্তর্ভুক্ত, যা তাত্ক্ষণিক পালনাকে সহজ করে।

=== LAZY ফাইলগুল : মালিকের নির্দেশিকা

এ ফাইলগুলো বাস করে`.agents/`এবং এগুলো শুধুমাত্র এজেন্টকে দরকার হলে পড়া হয়। তারা পদ্ধতির সত্য সম্পদ গঠন করে, কারণ তারা প্রকল্পের জ্ঞান সংচয় করে বর্তমান संदेशকে দুষণ না করেই।

[plantuml, format=svg, id=diag-agents-tree, alt=&amp;quot;Arborescence complète du dossier .agents/&amp;quot;]
----
@startuml
skinparam folderBackgroundColor #E3F2FD
skinparam folderBorderColor #1565C0
skinparam fileBackgroundColor #FFF3E0
skinparam fileBorderColor #EF6C00

folder &amp;quot;.agents/&amp;quot; as ROOT {
  file &amp;quot;INDEX.adoc
(EAGER -- ২০০ লাইন)&amp;quot; as IDX #E8F5E9
  file &amp;quot;AGENT_SESSION_MANAGER.adoc
(টেমপ্লেট সেশন)&amp;quot; as ASM
  file &amp;quot;SESSION_CHECKLIST.adoc
(কখন পরিবর্তন করতে হয়)&amp;quot; as CHK
  file &amp;quot;PROCEDURES.adoc
(6 ধাপ + LAZY/EAGER)&amp;quot; as PRO
  file &amp;quot;SESSIONS_HISTORY.adoc
(সব সেশন)&amp;quot; as HIS

  folder &amp;quot;সেশন/&amp;quot; as SESS {
    file &amp;quot;1-chore-migration.adoc&amp;quot; as S1
    file &amp;quot;109-সাধারণকরণ-আলস.adoc&amp;quot; as S109 #FFECB3
    file &amp;quot;133-epic11-article.adoc&amp;quot; as S133
    file &amp;quot;... +130 অন্যান্য&amp;quot; as SMORE
  }

  folder &amp;quot;আর্কাইভ/&amp;quot; as ARCH {
    file &amp;quot;COMPLETED_TASKS_2026-04.adoc&amp;quot; as CTA
    file &amp;quot;SESSIONS_HISTORY_83-95.adoc&amp;quot; as SHIST
    folder &amp;quot;sessions_summaries/&amp;quot; as SUM {
      file &amp;quot;SESSION_64_SUMMARY.adoc&amp;quot; as SU64
      file &amp;quot;SESSION_73_SUMMARY.adoc&amp;quot; as SU73
      file &amp;quot;...&amp;quot; as SUMORE
    }
    folder &amp;quot;prompts_archive/&amp;quot; as PARCH {
      file &amp;quot;PROMPT_REPRISE_S65.adoc&amp;quot; as PR65
      file &amp;quot;PROMPT_REPRISE_S75.adoc&amp;quot; as PR75
      file &amp;quot;...&amp;quot; as PMORE
    }
  }
}

IDX --&amp;amp;gt; SESS : &amp;quot;সুচি&amp;quot;
IDX --&amp;amp;gt; HIS : &amp;quot;সুচি&amp;quot;
IDX --&amp;amp;gt; ARCH : &amp;quot;রেফারেন্স&amp;quot;

note right of S109
  Session 109 =
  Formalisation stratégie
  LAZY/EAGER
  Token : ~25k → ~10k
end note

@enduml
----

উপরের ডিরেক্টরি ট্রি ফোল্ডারের প্রকৃত গঠন দেখায়।`.agents/`উপর`plantuml-plugin`, এই প্রকল্পটি সবচেয়ে পরিপক্ক। tin-স্তরের গভérie নোট করুন: মূল ফাইল (মেটাডেটা), ফোল্ডার`sessions/`(কালানুক্রমিক আর্কাইভ), এবং ফাইল`archives/`(সমষ্টি ও সংক্ষিপ্ত). এই গভীরতা একটি সিম্পল TODO ফাইলের শাসনকে একটি**সম্পূর্ণ সাংগঠনিক স্মৃতি**।

**.agents/sessions/{N}-{titre}.adoc**-- প্রত্যেক সেশনের বিস্তারিত আর্কাইব. বর্তমানে:

* `plantuml-plugin` : **১৩৩ আর্কাইভ করা সেশন**(সেশান ১ থেকে ১৩৩)
* `bakery-plugin` : **১১টি সেশন**
* `magic-stick`:**২৩ সessione**
* `cheroliv.com`:**9 प्रतिष्ठিত सेशन**+ 7 sessions প্রি-সিস্টেম পুনরায় গঠিত রেট্রোঅ্যাক্টিভভাবে

প্রতিটি আর্কাইভে সেশনের पूर्ण প্রেক্ষাপট, নেওয়া সিদ্ধান্ত, সম্মুখীন হওয়া সমস্যা ও তার সমাধান, চালিত(cmd) কমান্ড এবং ihren আউটপুট অন্তর্ভুক্ত হয়।

**.agents/SESSIONS_HISTORY.adoc**-- সব সেশনের সারাংশ টেবিল একটি স্কোর সঙ্গে। উদাহরণে`cheroliv.com` :

----

| -6 | 2025-05 | chore | Initialisation projet Gradle/JBake | 7/10 |  1 | 2026-04-25 | chore | Migration gouvernance agent | 8/10 |  7 | 2026-04-27 | debug/fix | Correction publishSite | 9/10 |  8 | 2026-04-27 | analyse | Analyse article 0108 | 7/10

**.agents/COMPLETED_TASKS_ARCHIVE_{mois}.adoc**-- মেೞে সমাপ্ত কাজগুলো মাসভিত্তিকভাবে আর্কাইভ করা হয়, যাতে অ্যাক্টিভ ব্যাকলগের বোঝা বাড়ে না। যখন একটি user story সমাপ্ত হয়, তখন তা এখানে মিগ্রেট হয়। ব্যাকলগ পড়া যায় রাখে: সর্বোচ্চ ১০টি অ্যাক্টিভ আইটেম।

**.agents/PROCEDURES.adoc**-- সেশন সমাপ্তি প্রক্রিয়ার বিস্তারিত টেমপ্লেট। দীর্ঘ, কিন্তু এজেন্ট যে পদ্ধতিটি শেখার সময় শুধুমাত্র একবারের পড়ে হয়। পরবর্তীতে প্রক্রিয়া মেকানিকাল হয়ে যায়।

**.agents/AGENT_MODUS_OPERANDI.adoc**সম্পূর্ণ রণনৈতিক ডকুমেন্টেশন। উপর`plantuml-plugin`, এই ফাইল করে**৯০০+ রেখা**এবং প্রকৃতপক্ষে নামকৃত হয়`AGENT_METHODOLOGIES.adoc`— আমি এই লেখা লেখার ও বাস্তবায়নের মধ্যে নাম পরিবর্তন করেছি। এই ধরনের নামিং বিচ্যুতি একটি বিকশমান শিল্প পদ্ধতিতে পরিহার্য। গুরুত্বপূর্ণ হল নামের নিয়ম: যদি ফাইলটি *মেথড* নথিভুক্ত করে, তবে তা শুরু হয়`AGENT_`বা একটি স্পষ্ট প্রিফিক্স। ইগার/লেজি পদ্ধতির মোথোডোলজি, অনুসরণ করতে হবে প্যাটার্ন এবং এড়াতে হবে অ-প্যাটার্ন নথিভুক্ত করে। এটি LAZY কারণ একটি এজেন্টকে প্রতিটি সেশনে পুরো কৌশল পুনরায় পড়তে দরকার হয় না, শুধুমাত্র যখন কোন অস্পষ্টতা হয়।

আপনি একজন পেশাজীবী অনুবাদক। fr থেকে bn-এ অনুবাদ করুন। সব ব্যackটিক কোড স্প্যান (`...`) অপরিবর্তিত রাখুন — ব্যackটিকের কনটেন্ট, স্থানাঙ্ক, বা পজিশন পরিবর্তন করবেন না। এই টেক্সট বড়বাক্যের একটি অংশ হতে পারে — আরও প্রসঙ্গ চাইয়া না কি অংশটি অনুবাদ করুন। শুধুমাত্র অনুবাদিত পাঠ্য আউটপুট করুন — কোন ব্যাখ্যা, মন্তব্য, ভূমিকা, বিকল্প বা विकল্প নেই।`*_REFERENCE.adoc`** -- প্রকল্পের নির্দিষ্ট প্রযুক্তিগত রেফারেন্সগুলো। উপর`magic-stick`, দুটি LAZY ঘন ফাইল :

* `AB_PARTITION_REFERENCE.adoc`(147 লাইন) -- আর্কিটেকচার পার্টিশন A/B GPT, স্ক্রিপ্ট`update-system.sh`, অনুমানিত আকার, রোলব্যাক মেকানিজম
* `BOOT_TEST_REFERENCE.adoc`(144 লাইন) -- QEMU + VNC ব্যবহার করে ISO-র বুট পরীক্ষা করার প্রক্রিয়া শারীরিক পণ্য ছাড়াই, BIOS/UEFI চেকলিস্ট, CI/CD সীমাবদ্ধতা

উপর`plantuml-plugin`:

* `ARCHITECTURE.adoc`(134 লাইন) -- ১১ ডেটা ক্লাসের গঠন, মনোযোগ দরকারি বিষয় (বাঁচতে দরকারি ঝুঁকি), অপ্টিমাইজড পরীক্ষার কমান্ড
* `API_KEY_POOL_REFERENCE.adoc`-- কী পুলের সম্পূর্ণ বিবরণ (LAZY যতক্ষণে`ESSENTIALS`উত্সাহিত EAGER)

== বিশেষজ্ঞ এজেন্টস : একটি ভার্চুয়াল টিম

শাসন নিষ্ক্রিয় ফাইলগুলিতে সীমাবদ্ধ নয়। আমি কিছুকে প্রামাণিককরণ করেছি**বিশেষজ্ঞ এজেন্টদের ভূমিকা**বিশেষ LAZY ফাইলগুলো, যা টাস্কের প্রকারের অনুযায়ী প্রত্যাশিত কর্মপ্রবাহকে নির্ধারণ করে।

|===
|এজেন্ট |ফাইল |ভুমিকা |প্রকল্প |**কোডার** |`CODER.adoc` |FTL/CSS/JS বাস্তবায়ন, সেমান্টিক ট্যাগ, অ্যাক্সেসিবিলিটি মানদণ্ড |cheroliv.com |**স্ক্রাম মাস্টার** |`SCRUM_MASTER.adoc` |US পরিকল্পনা, সাবটাস্কে ভাগ করা, নির্ভরতাগুলির শনাক্তকরণ |cheroliv.com |**PlantUML Designer** |`PLANTUML_DESIGNER.adoc` |ডায়াগ্রাম তৈরি, PUML সিনট্যাক্স, JBake ইন্টিগ্রেশন |cheroliv.com
|===

ফাইলটি`CODER.adoc`উপর`cheroliv.com`এতে স্পষ্ট নিয়ম আছে : _শুধু একটি`&amp;amp;lt;h1&amp;amp;gt;`प्रति पृष्ठा_, _प्रिफिक्स किया एगुलो पथ साथে`${content.rootpath}`_, _ভাষা ঘোষণা করা`&amp;amp;lt;html lang=&amp;quot;${content.lang!&amp;quot;fr&amp;quot;}&amp;quot;&amp;amp;gt;`_. এই কনভেনশনগুলো একবার লিখে দেওয়া হলে, এজেন্ট দ্বারা সেশন ১ থেকে স্বয়ংক্রিয়ভাবে পালন করা হয়।

ফাইলটি`SCRUM_MASTER.adoc`একটি ডেলিভারযোগ্য গঠন প্রয়োগ করে :**লক্ষ্য**, **কাজ**(অ্যাসাইনমেন্ট সহ স্থানাঙ্ক)**গ্রহণের মানদণ্ড**, **ঝুঁকি**. Whenever I ask for an action plan, the agent builds this structure even though I haven&amp;#39;t asked for it. Governance**প্রোগ্রাম**এজেন্ট.

==== বিশেষজ্ঞ এজেন্টরা অপরিহার্য হয়ে ওঠে

বিশেষজ্ঞ এজেন্টদের সৃষ্টি প্রাকৃতিক এর্ক অনুসরণ করে। প্রজেক্টের শুরুতে, আপনাকে বিশেষজ্ঞ এজেন্টগুলো দরকার নেই —`AGENT.adoc`এটি পর্যাপ্ত। কিন্তু প্রকল্প বাড়ে হলে (উদাহরণস্বরূপ, 20 সেশনের বেশি), দুটি সংকেত আপনাকে সতর্ক করবে:

1. এজেন্ট দুটি ভিন্ন ক্ষেত্রের নিয়ম মিশ্রণ করে (যেমন: PlantUML সিনট্যাক্স এবং CSS নিয়ম)
2. আপনি কনভেনশন নিয়ে এজেন্টকে ঠিক করতে আপনি পাঁচবারই ব্যাখ্যা করেছেন যেসব জিনিষগুলো তার জন্য বেশি সময় বিতান

উপর`cheroliv.com`, এই সেশনে ঘটেছে। ১. হ্যাঁ, প্রারম্ভ থেকেই। কারণ এই প্রকল্পটি FTL, CSS, JS — তিনটি ভাষা সহ একটি ওয়েবসাইট, AsciiDoc কনটেন্ট এবং PlantUML ডায়াগ্রাম — তিনটি আলাদা ক্ষেত্র যা কোনো সম্পর্ক নেই। CODER এজেন্টকে ফন্টের আকার এবং মিডিয়া কোয়ারি জানা দরকার; PLANTUML_DESIGNER এজেন্টকে সিনট্যাক্স জানা দরকার`@startuml`. বিভাজন ছাড়া, CODER এজেন্ট আমাকে ডায়াগ্রাম প্রস্তাব করতেছিল, এবং উল্টোও। বিশৃঙ্খলতা।

উপর`jhipster-gradle-plugins`, আমি Gradle প্লাগইন ডেভেলপমেন্টের জন্য কাস্টমাইজড দুটি বিশেষজ্ঞ এজেন্ট তৈরি করেছি :`PLUGIN_DEVELOPER.adoc` et `BACKLOG_MANAGER.adoc`**. প্রথমটি সব Kotlin/Gradle কনভেনশন এনকোড করে (না**`!!`, ডেটা ক্লাস মডেলদের জন্য,`@TaskAction`کاریাগুলির জন্য) দ্বিতীয়জান জানেন`persistence`স্থির থাকতে হবে আগে`assistant`এটি তার উন্নয়ন শুরু করে না — একটি মোনো-রেপোতে একটি গুরুত্বপূর্ণ নির্ভরতা।

কমেট করা উচিত না এমন ভুল: অসময়িক অতিরিক্ত এজেন্ট সৃষ্টি করা`plantuml-plugin`সেশন ১০৮ অপেক্ষা করার পরে একটি বিশেষজ্ঞ এজেন্টকে API কী পুলের জন্য গঠন করেন। এদিক আগে, ব্যবসার প্রেক্ষাপট`AGENT.adoc`. অনুমানিক নিয়ম : একটি বিশেষজ্ঞ এজেন্ট নিশ্চয় হয় যখন তার ব্যবসায়িক ডোমেইন ১০০ লাইনের ডকুমেন্টেশন অতিক্রম করে।

==== সেশনের নামকরণ কনভেনশন

একটি বিবরণ যা মনে হয় অউপকারী কিন্তু যখন ১০০ সেশনে পৌঁছায় তখনটি গুরুত্বপূর্ণ হয়ে ওঠে। আর্কাইভ ফাইলগুলো কীভাবে নাম দেবেন?

আমি কঠোরভাব থেকে শিখলাম যে একটি কনভেনশন প্রয়োজন — চারটি প্রকল্প, চারটি ভিন্ন ফরম্যাটের শুরুতেই, এবং আমি আর এটি অনুসরণ করতে পারিনি। আজ, আমি যে কনভেনশনটি স্থিতিশীল করেছি তা হল:&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;{N}-{type}-{sujet-kebab-case}.adoc&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;বাস্তব উদাহরণ :

* `1-chore-migration-gouvernance-agent.adoc`— সেশন ১, কাজের ধরন
* `10-solidification-tests.adoc`— সেশন ১০, স্পষ্ট ধরন ছাড়াই (বিষয়টি যথেষ্ট)
* `036-debug-graphify-symlink-epic9.adoc`— সেশন 36, ৩ অঙ্কের নম্বর সহ, সাজাকরণের জন্য

সেশন নম্বর হলো প্রধান সাজানোর মানদণ্ড। ৩ অংকীয় নম্বর (০০১, ০৩৬, ১৩৩) ব্যবহার করার প্রকল্পগুলো ৯৯ এর বেশি হলে লেক্সিকোগ্রাফিকাল সাজানোর সমস্যা থেকে মুক্ত থাকে। এটিই এখনো আমি ব্যবহার করি উপর`magic-stick`(Empty)`001-init-projet.adoc`, `036-debug-graphify-symlink-epic9.adoc`.

টাইপ ঐচ্ছিক এবং সেশন কীওয়ার্ড (debug, feature, refactor, docs, chore, test) থেকে phái হয়। kebab-case ফর্মেটে শিরোনাম হল সবচেয়ে গুরুত্বপূর্ণ অংশ: এটি ফাইল খোলা না করেও সেশন খুঁজে পেতে সক্ষম হওয়া উচিত। যদি আপনি নিজে থেকে জিজ্ঞাসা করেন « কোন সেশনে ইন্টিগ্রেশন টেস্টের টাইমআউট ঠিক করা`124-fix-timeout-integration-test.adoc`.

পুনঃসংশোধিত ঐতিহাসিক সেশনগুলির জন্য (শাসন পূর্বে জন্মগ্রহণকৃত প্রকল্পের জন্য), আমি ঋণাত্মক সংখ্যা ব্যবহার করি. উপর`cheroliv.com`, সেশন -6 থেকে 0 পর্যন্ত সমস্ত প্রাক-শাসন ইতিহাসটি প্রকল্পটি কভার করে। এবং « নথিভুক্ত না করা » বা হারানো সেশানগুলো জন্য, আমি একটি এন্ট্রি তৈরি করি মধ্যে`SESSIONS_HISTORY.adoc`মেলানো আর্কাইভ না থাকা, একটি স্কোর সহ`?`এটি আরও সৎ মোতায়েবের চেয়ে।

[plantuml, format=svg, id=diag-naming-convention, alt=&amp;quot;Arbre de décision pour le nommage des fichiers de session&amp;quot;]&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 200&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;title সেশন নামকরণ নিয়ম
start&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;:Une session se termine;
note right: Trigger &amp;quot;সেশনের শেষ&amp;quot;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;if (Session antérieure\nà la gouvernance ?) then (oui)
  :Numéro &amp;lt;strong&amp;gt;NÉGATIF&amp;lt;/strong&amp;gt;\n-6, -5 &amp;amp;#8230;&amp;amp;#8203; 0;
  note right: Historique\nreconstitué
  :Suffixe : reconstitution;
else (non)
  :Numéro &amp;lt;strong&amp;gt;POSITIF&amp;lt;/strong&amp;gt;\nsur 3 chiffres si &amp;amp;gt; 99;
  note right: 001, 036, 133\npour le tri lexicographique&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;literalblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;:Détecter le **TYPE**;
if (Mots-clés trouvés ?) then (oui)
  :debug / feature / refactor\ndocs / chore / test;
else (non)
  :Omettre le type\n(le sujet suffit);
endif&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;literalblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;  :Formuler le **SUJET** en kebab-case;
  note right
    Ex: fix-timeout-integration-test
    Doit permettre de retrouver
    sans ouvrir le fichier
  end note
endif&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;note right
  • 1-chore-migration-gouvernance.adoc
  • 036-debug-graphify-symlink.adoc
  • 124-fix-timeout-integration-test.adoc
  • 133-epic11-article-blog-kg.adoc
end note&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;if (Session documentée ?) then (oui)
  :Créer archive dans sessions/;
  :Ajouter ligne SESSIONS_HISTORY\navec score X/10;
else (non)
  :Ajouter ligne SESSIONS_HISTORY\navec score &amp;lt;strong&amp;gt;?&amp;lt;/strong&amp;gt;\n&amp;lt;strong&amp;gt;sans archive&amp;lt;/strong&amp;gt;;
  note right: L&amp;amp;#8217;honnêteté\nplutôt que le vide
endif&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;stop
@enduml&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;==== TEST_COVERAGE_ANALYSIS.adoc` — ধাপ ৫ বিস্তারিত

সেশন শেষের প্রক্রিয়ার পঞ্চম ধাপটি সবচেয়ে রহস্যময়। সে বলেন « আপডেট করা`TEST_COVERAGE_ANALYSIS.adoc`যদি কোনো পরীক্ষা যোগ করা হয়েছে বা পরিবর্তন করা হয়েছে। » কিন্তু এই ফাইলটি কেমন দেখায়?

উপর`plantuml-plugin`একটি কয়েকটি লাইন থেকে একটি সম্পূর্ণ গঠনে বিকাশ পেয়েছে। এর স্থায়িতকৃত রূপ এখানে:

[source]&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;h1 id=&amp;quot;_analyse_de_couverture_de_tests&amp;quot; class=&amp;quot;sect0&amp;quot;&amp;gt;Analyse de Couverture de Tests&amp;lt;/h1&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_suivi_des_tests&amp;quot;&amp;gt;Suivi des Tests&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Classe de test&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Type&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Tests&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Statut&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Dernière MAJ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PlantumlServiceTest&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;unit&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;45/45&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ PASS&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2026-04-23&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ApiKeyPoolTest&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;integration&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;15/15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ PASS&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2026-04-20&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_historique_par_session&amp;quot;&amp;gt;Historique par Session&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;| Session | Tests ajoutés | Tests modifiés | Couverture
| 133     | 0             | 2              | 100%
| 132     | 5             | 0              | 100%&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বস্তুটি ফাইল নিজেই নয় — এটি &amp;lt;strong&amp;gt;নোট করার&amp;lt;/strong&amp;gt; বাধ্যবাধ্যতা যে কোনো পরিবর্তন হয়েছে। এই ধাপ ছাড়া, 50 সেশনের পর, আপনি আর জানবেন না কোন টেস্ট কি কভার করে। এজেন্টও জানেন না। ফাইলটি প্রকল্পের টেস্ট কভারেজের একক সত্যের উৎস হয়ে ওঠে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রকল্পগুলোর জন্য যাতে প্রথাগত পরীক্ষা নেই (যেমন`magic-stick`বাশ স্ক্রিপ্ট পরীক্ষা করে), ধাপ 5 প্রতিস্থাপিত হয়`SCRIPT_VERIFICATION.adoc`.একটি ফাইল যা স্ক্রিপ্টের যাচাইয়ের অবস্থা অনুসরণ করে। আপনার প্রকল্পে ধাপ ৫টি প্রয়োজন অনুযায়ী করুন, কিন্তু কখনও এটি না ছোড়বেন। এটি নিরাপত্তার জাল, যা নীরব রিগ্রেশনকে বন্ধ করে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;যদি আপনার প্রকল্পে &amp;lt;strong&amp;gt;কোনো&amp;lt;/strong&amp;gt; পরীক্ষা না থাকে — ইউনিট, ফাংশনাল, বা স্ক্রিপ্ট না — তবুও একটি খালি ফাইল তৈরি করুন, যেখানে « কাজ করতে হবে : পরীক্ষার কৌশল নির্ধারণ » অংশ থাকবে। এটি একটি বুকমার্ক যা আপনার ভবিষyatের আপনাকে স্মরণ করাবে যে এই বিষয়টি সমাধান করা হয়নি।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[plantuml, format=svg, id=diag-session-flow, alt=&amp;quot;Flux d&amp;amp;#8217;une session type avec Eager/Lazy et agents&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;start&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Début session;
note right: L&amp;amp;#8217;agent est une page blanche&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Chargement EAGER auto;
note right
  * AGENT.adoc (règles absolues)
  * PROMPT_REPRISE.adoc (mission N)
  * INDEX.adoc (état projet)
end note&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;if (Mission claire ?) then (oui)
  :Exécution directe;
else (non)
  :Charge LAZY sur demande;
  note right
    * SESSIONS_HISTORY.adoc (contexte passé)
    * sessions/{N-1}-&amp;lt;strong&amp;gt;.adoc (décisions)
    * *&amp;lt;em&amp;gt;REFERENCE.adoc (architechture)
  end note
endif&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Délégation agent spécialisé ?;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;if (CODER ?) then (oui)
  :Lit CODER.adoc;
  :Suit conventions FTL/CSS;
elseif (SCRUM Master ?) then (oui)
  :Lit SCRUM_MASTER.adoc;
  :Structure livrable imposée;
elseif (PlantUML ?) then (oui)
  :Lit PLANTUML_DESIGNER.adoc;
  :Syntaxe PUML + intégration;
else (non)
endif&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Travail de la session;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Fin de session (trigger utilisateur);&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Procédure 6 étapes;
note right
  1. Archive sessions/N-&amp;lt;/strong&amp;gt;.adoc
  2. Maj PROMPT_REPRISE.adoc (N+1)
  3. Maj SESSIONS_HISTORY.adoc
  4. Maj INDEX.adoc
  5. Maj TEST_COVERAGE (si applicable)
  6. Maj COMPLETED_TASKS_ARCHIVE.adoc
end note&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Checklist [✅] x 6;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;stop
@enduml
----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উপরের চিত্রটি একটি সেশন-এর সম্পূর্ণ জীবনচক্র দেখায়। মূল পয়েন্ট হলো EAGER লোডিং এর পরে বিভাজন: বা মিশনটি পর্যাপ্ত স্পষ্ট, যা সরাসরি কার্যকর করার অনুমতি দেয় (৮০% ক্ষেত্রে), বা এজেন্টটি LAZY লোড করে একটি অস্পষ্টতা দূর করে (২০% ক্ষেত্রে)। এই বিভেদই টোকেন বাঁচায়।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;== সেশনের শেষের প্রক্রিয়া : স্বর্ণীয় নিয়ম&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== সে কেন অপরিহার্য?&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এই পদ্ধতির বিনা ইগার/লেজি কৌশলে কোন লাভ নেই। এই পদ্ধতিই সেশনের কাজকে স্থায়ী তথ্যে রূপান্তর করে। এটি চালু হয়।&amp;lt;strong&amp;gt;ব্যবহারকারীর স্পষ্ট অনুরোধে&amp;lt;/strong&amp;gt;(কীওয়ার্ড: &amp;quot;সেশনের শেষ&amp;quot;, &amp;quot;আমি যাচ্ছি&amp;quot;, এবং অন্যান্য), এবং তা&amp;lt;strong&amp;gt;বাধ্যতামূলক&amp;lt;/strong&amp;gt;-- অপवाद নেই, অবিলম্ব নেই.&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল`SESSION_CHECKLIST.adoc`এটি মোতায়েন সেশন মেট্রিক্সের সংজ্ঞা :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;* समय : १५-३० मिनिट
* পরিবর্তিত ফাইল : 1-3 সর্বোচ্চ
* LLM বিনিময় : 5-10 বার্তা
* প্রসঙ্গ টোকেন : &amp;amp;lt; 50k&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এবং সেশন পরিবর্তনের সযন: _LLM ইতিমধ্যে সংশোধিত ত্রুটিগুলোকে পুনরাবৃত্তি করে&amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt;3 টির থেকে বেশি সমান্তরালে পরিবর্তিত ফাইল&amp;lt;/em&amp;gt;, &amp;lt;em&amp;gt;বাতচিতা &amp;amp;gt; 50 বার্তা&amp;lt;/em&amp;gt;. সুইন নীম :&amp;lt;strong&amp;gt;৫ সেশন ২০ মিনিটের একটি ২ ঘন্টার সেশানের চেয়ে ভাল, বিশৃঙ্ফল ডিবাগিং সঙ্গে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 6 ধাপের প্রবাহ (নীরবে)&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[plantuml, format=svg, id=diag-end-session-flow, alt=&amp;quot;Flux de la procédure de fin de session&amp;quot;]
----
@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200
skinparam activityBackgroundColor #E3F2FD&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;start
:L&amp;amp;#8217;utilisateur dit &amp;quot;সেশন শেষ&amp;quot;;
note right: Mots-clés déclencheurs&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Agent détecte le trigger;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 1\nCréer archive\n`.agents/sessions/N-&amp;lt;strong&amp;gt;.adoc`;
note right: Tout le contexte de la session&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 2\nMettre à jour\n`PROMPT_REPRISE.adoc`;
note right: Mission N + critères d&amp;amp;#8217;acceptation N+1&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 3\nMettre à jour\n`SESSIONS_HISTORY.adoc`;
note right: Ligne récap : # / Date / Type / Sujet / Score&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 4\nMettre à jour\n`INDEX.adoc`;
note right: État courant, roadmap, fichiers modifiés&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 5\nMettre à jour\n`TEST_COVERAGE_ANALYSIS.adoc`;
note right: Si tests ajoutés ou modifiés&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 6\nMettre à jour\n`COMPLETED_TASKS_ARCHIVE.adoc`;
note right: Archiver tâches terminées&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Afficher la checklist de confirmation;
note right: Vérifier que chaque [✅] est mérité&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;stop
@enduml
----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ১৫০+ সেশনের ফলাফল&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এখানে আমার চারটি প্রকল্পে এই প্রক্রিয়াকে সistetম্যাটিকভাবে প্রয়োগ করার ফলে যে ফলাফল পায়:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;plantuml-plugin&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;* &amp;lt;strong&amp;gt;১৩৩ সেশন&amp;lt;/strong&amp;gt;প্রজেক্টের শুরু থেকে
* &amp;lt;strong&amp;gt;240/240 পরীক্ষা পাস&amp;lt;/strong&amp;gt;(100% কভারেজ)&amp;amp;#8201;&amp;amp;#8212;&amp;amp;#8201;EPICs 1-7 সম্পন্ন
* &amp;lt;strong&amp;gt;57টি Cucumber BDD সেনারিও&amp;lt;/strong&amp;gt;যাচাইকৃত
* কনফিগারেশান ফাইলের নিরাপত্তা নিয়ম বাস্তব ত্রুটি থেকে জন্মা (Session 2 bakery-plugin)&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ব্যাকেরি-প্লাগইন&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;* &amp;lt;strong&amp;gt;11 সেশন&amp;lt;/strong&amp;gt;দুই সপ্তাহের পরে
* সুপাবেস → ফায়ারবেস মাইগ্রেশন সমাপ্ত (৯টি টেস্ট সমাধান করা)
* EPIC 6 (publishProfile) উত্পদiane কার্যকর
* নিয়ম 0 তৈরি:`publishToMavenLocal`প্রতিটি সংশোধনের পর বাধ্যতামূলক&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;যাদুি চাপ&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;* &amp;lt;strong&amp;gt;২৩টি সেশন&amp;lt;/strong&amp;gt;একটি লাইভ Xubuntu সিস্টেম A/B পার্টিশন সঙ্গে তৈরি করতে
* প্রথম ISO সেশন ১০-এ তৈরি হয়েছিল
* ফর্মালাইজড কিউইএমিঊ + ভিএনসি বুট পরীক্ষা (LAZY ডকুমেন্টেশন (১৪৪ লাইনের))
* CI/CD SourceForge কার্যকর&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;cheroliv.com&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;* &amp;lt;strong&amp;gt;৯ ফরমাল সেশন&amp;lt;/strong&amp;gt;+ 7টি প্রে-সিস্টেম সেশন পুন:নির্মাণ
* অনুচ্ছেদ ০১০১ (OpenCode PATH) প্রকাশিত
* অনুচ্ছেদ ০১০৮ (এইটি) এর ত্রুটিগুলো বিশ্লেষণের পর পুনরালিখিত
* সম্পূর্ণ গবর্ন্যান্স Markdown থেকে AsciiDoc-এ স্থানান্তরিত&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== অন্তিম চেকলিস্ট&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শান্তিপূর্ণভাবে 6 ধাপ সম্পাদন করার পর, এজেন্টকে একটি নিশ্চয়তাচেকলিস্ট প্রদর্শন করতে হবে:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅ Procédure de fin de session exécutée 📋 Checklist :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অবশ্য নিয়ম&amp;lt;/strong&amp;gt;: কোনো ধাপ চিহ্নিত করা যায় না`[✅]&amp;lt;code&amp;gt;যদি ফাইলটি প্রকৃতভাবে পরিবর্তন করা না হয়েছে এবং যাচাই করা না হয়।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;== Bootstrap গাইড : দিন ১, সেশন ০&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনি পদ্ধতিতে আশ্বাসিত। আপনি একটি নতুন প্রকল্পে এটি প্রয়োগ করতে চান। শুরু কোথা থেকে?&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আমি ২৮ এপ্রিল ২০২৬ তারিখে সেই মুহূর্তকে অভিজ্ঞতা করেছি। আমি Opencode খুলি`jhipster-gradle-plugins&amp;lt;/code&amp;gt;, mon mono-repo de deux plugins Gradle JHipster. C&amp;amp;#8217;est un projet qui existe déjà — le code est là, les tâches Gradle fonctionnent. Mais la gouvernance agent ? Zéro. Page blanche. Comme`plantuml-plugin`তার সেশন ১-এ, মাস আগে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি হলো সঠিক পদ্ধতি যা আমি অনুসরণ করেছি এবং যে পদ্ধতিমি প্রতিটি নতুন প্রকল্পের জন্য অনুসরণ করব। দয়া করে ক্রমটিকে লক্ষ্য করুন — তা গুরুত্বপূর্ণ।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[plantuml, format=svg, id=diag-bootstrap, alt=&amp;quot;Flux de bootstrap en 6 étapes pour initialiser la gouvernance agent sur un nouveau projet&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam wrapWidth 250
skinparam activityBackgroundColor #E8F5E9&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;title বুটস্ট্র্যাপ গভর্নেন্স — দিন ১, সেশন ০
start
:Étape 0\nCréer &amp;lt;strong&amp;gt;opencode.json&amp;lt;/strong&amp;gt;\n(6 lignes, instructions: AGENT.adoc);
note right: Le pont qui charge\nAGENT.adoc automatiquement&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 1\nCréer les dossiers\n&amp;lt;strong&amp;gt;mkdir -p .agents/sessions/ .agents/archives/&amp;lt;/strong&amp;gt;;
note right: Les conteneurs vides\navant que l&amp;amp;#8217;agent écrive dedans&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 2\nCréer &amp;lt;strong&amp;gt;AGENT.adoc&amp;lt;/strong&amp;gt;\n(200 lignes, règles absolues);
note right: Le fichier maître\nStructure minimale v1&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 3\nCréer &amp;lt;strong&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/strong&amp;gt;\nMission session 1 (max 70 lignes);
note right: Ce que l&amp;amp;#8217;agent doit\nfaire à la prochaine session&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 4\nCréer &amp;lt;strong&amp;gt;.agents/INDEX.adoc&amp;lt;/strong&amp;gt;\nRègles exécutives + roadmap;
note right: Point d&amp;amp;#8217;entrée EAGER\ndans le dossier LAZY&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 5\nCréer les fichiers LAZY structurants\n6 fichiers : SESSIONS_HISTORY, CHECKLIST, etc.;
note right
  • SESSIONS_HISTORY.adoc
  • SESSION_CHECKLIST.adoc
  • PROCEDURES.adoc
  • AGENT_SESSION_MANAGER.adoc
  • TEST_COVERAGE_ANALYSIS.adoc
  • Agents spécialisés (si besoin)
end note&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:Étape 6\nAjouter le projet au Portefeuille\nMettre à jour TOUS les INDEX.adoc existants;
note right: Maintenance transverse\nObligatoire mais fastidieuse&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;:✅ Bootstrap terminé\nSession 1 prête;
note right: 20 minutes investies\nDes centaines économisées&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;stop
@enduml
----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ 0 : &amp;lt;code&amp;gt;opencode.json&amp;lt;/code&amp;gt; তৈরি&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি প্রথম ফাইল। না`AGENT.adoc`, না`INDEX.adoc`।&amp;lt;code&amp;gt;opencode.json`প্রথমে, একটি সহজ कारणের জন্য : আপনি যদি তৈরি করেন`AGENT.adoc`প্রথমে, আপনি স্বয়ংক্রিয়ভাবে এটি বোঝানোর জন্য ব্রিজ তৈরি করতে ভুলবেন। আমি এটি করেছি ওপর`bakery-plugin&amp;lt;/code&amp;gt;, আমি জানি যে কি কথা বলছি।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ ১ : ফোল্ডার তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[source,bash]
----
mkdir -p .agents/sessions .agents/archives
----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দুটি খালি ফোল্ডার।&amp;lt;code&amp;gt;sessions/`প্রতিটি সেশনের আর্কাইভগুলি পাবে।`archives/`মাসিক `COMPLETED_TASKS_ARCHIVE&amp;lt;/code&amp;gt; গ্রহণ করবে। এই ফোল্ডারগুলোকে *পূর্বে&amp;lt;/strong&amp;gt; এজেন্টকে এদের মধ্যে লিখতে দরকার হওয়ার আগে বিদ্যমান থাকতে হবে। একটি এজেন্ট যেটিকে ফোল্ডার এবং ফাইল উভয়কে একই সময়ে তৈরি করতে হয়, সেই এজেন্টটি নিরবোদ ধরে ব্যর্থ হতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ 2: তৈরি করুন &amp;lt;code&amp;gt;AGENT.adoc&amp;lt;/code&amp;gt; — প্রধান ফাইল&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রথম সংস্করণের জন্য সর্বনিম্ন গঠন (যেটি বাড়ে) :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[source]
----
= {NOM_PROJET} — Directives Agent&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[CAUTION]
----&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বাধyatামূলক থামুন&amp;lt;/strong&amp;gt;আগে rm, Write, দাবন:&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1. ফাইলটি পুরোপুরি পড়ুন
2. যাচাই করুন git ls-files
3. প্রমাণের অনুরোধ
4. ‘হ্যাঁ’ এর জন্য প্রতীক্ষা করুন&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;== প্রকল্প&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;নাম&amp;lt;/strong&amp;gt;: &amp;amp;#8230;&amp;amp;#8203; &amp;lt;strong&amp;gt;স্ট্যাক&amp;lt;/strong&amp;gt;: &amp;amp;#8230;&amp;amp;#8203; &amp;lt;strong&amp;gt;ডকুমেন্টেশন&amp;lt;/strong&amp;gt;: AsciiDoc&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;== অবিচ্ছেদ্য নিয়ম&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 0. ডেভেলপমেন্ট পরিবেশ&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রয়োজনীয় কমান্ড&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 1. COMMITS/GIT&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আনুষ্ঠানিক নিষেধ&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 1b. কনফিগারেশন ফাইল — নিরাপত্তার মঞ্জিল নিয়ম&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কখনো চাপাই না&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 2. পরীক্ষা সেশনের শেষে&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আধিকারিক নিষেধ&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== 3. সেশন সমাপ্তি প্রক্রিয়া&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আবশ্যক ৬ ধাপ&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;== প্রসnector erপরিচালনা — LAZY/EAGER&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;EAGER ফাইল / LAZY ফাইল&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এই মিনিমাল টেমপ্লেট এজেন্টকে শুরু করার অনুমতি দেয়। সম্পৃক্ত সংস্করণ — প্রকল্পের গঠন, মূল উপাদান, EPICs, ব্যাকলগ সহ — সেশন ১‑এ আসবে, যখন এজেন্টে মৌলিক নিয়ম এখন থাকবে এবং স/সে আপনাকে ডকুমেন্টে সমৃদ্ধ করতে সাহায্য করতে পারবে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ 3 : &amp;lt;code&amp;gt;PROMPT_REPRISE.adoc&amp;lt;/code&amp;gt; তৈর কর — মিশন সেশন 1&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি ফাইল যা স্পষ্টভাবে বলে : « এটি সেশন ১, মিশন নির্ধারণ করতে হবে। » সর্বোচ্চ ৭০ লাইন, সেশন ০ (বুটস্ট্র্যাপের সারাংশ) বিভাগ এবং সেশন ১ (ব্যবহারকারী সহ প্রাধాన్యতা নির্ধারণ করতে হবে) বিভাগ সহ।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ ৪: &amp;lt;code&amp;gt;.agents/INDEX.adoc&amp;lt;/code&amp;gt; তৈরি করুন — প্রবেশের বিন্দু&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;যে ফাইলটি সম্পূর্ণ নিয়ম (এক্সিকিউটিভ সংস্করণ) এবং সেশন টেবিল ধারণ করবে। বুটস্ট্র্যাপের জন্য, এটি ০ থেকে ৩ পর্যন্ত নিয়মগুলোকে সংক্ষিপ্ত ফরম্যাটে তালিকাভুক্ত করে, প্রকল্পের পোর্টফোলিও (একটি নতুন প্রকল্পের সাথে 🆕 ইমোজি অন্তর্ভুক্ত করে), এবং পূরণের জন্য প্রস্তুত খালি রোডম্যাপকে।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== পর্ব 5 : LAZY গঠনশীল ফাইলগুলো তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্রমে :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1. &amp;lt;code&amp;gt;.agents/SESSIONS_HISTORY.adoc&amp;lt;/code&amp;gt;— একটি টেবিল শুধুমাত্র সেশন 0 সহ
2. &amp;lt;code&amp;gt;.agents/SESSION_CHECKLIST.adoc&amp;lt;/code&amp;gt;— টেমপ্লেট &amp;quot;সেশন পরিবর্তনের সেকেন্ড&amp;quot; No, wait — I made a typo. It should be &amp;quot;সেশন পরিবর্তনের সময়&amp;quot;, not &amp;quot;सेकंड&amp;quot;.&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Correct: — টেমপ্লেট &amp;quot;সেশন পরিবর্তনের সময়&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1. &amp;lt;code&amp;gt;.agents/PROCEDURES.adoc&amp;lt;/code&amp;gt;— ৬ ধাপের সম্পূর্ণ প্রক্রিয়া + EAGER/LAZY
2. &amp;lt;code&amp;gt;.agents/AGENT_SESSION_MANAGER.adoc&amp;lt;/code&amp;gt;— আর্কাইভ টেমপ্লেট
3. &amp;lt;code&amp;gt;.agents/TEST_COVERAGE_ANALYSIS.adoc&amp;lt;/code&amp;gt;— পরীক্ষা ট্র্যাকিং টেবিল, শুরুতে খালি&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনার প্রজেক্টে যদি জটিল ব্যবসায়িক ডোমেইন থাকে (যেমন`jhipster-gradle-plugins`এর মোনো-রেপো persistence/assistant), বিশেষজ্ঞ এজেন্টগুলো এখনই তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1. &amp;lt;code&amp;gt;.agents/PLUGIN_DEVELOPER.adoc&amp;lt;/code&amp;gt;— কোড কনভেনশন এবং বন্ধন্য সীমা (যদি প্লাগইন)
2. &amp;lt;code&amp;gt;.agents/BACKLOG_MANAGER.adoc&amp;lt;/code&amp;gt;— পরিকল্পনার কাঠামো এবং সনDHHিত ঝুঁকি&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনি যে এজেন্টদের ব্যবহার করবেন না, সেগুলো তৈরি করবেন না। কোনো বাস্তবমূলক নিয়ম না থাকা এজেন্টটি একটি মৃত ফাইল যা দূষণ করে।&amp;lt;code&amp;gt;.agents/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;=== ধাপ 6 : প্রকল্পকে সব প্রকল্পের পোর্টফোলিওতে যোগ করুন&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি হলো যে ধাপটি আমরা নিয়মিতভাবে ভুলে যাই। প্রতিটি`INDEX.adoc`প্রতিটি প্রকল্পে একটি টেবিল আছে « প্রকল্প পোর্টফোলিও » যা একই পদ্ধতির সাথে সব প্রকল্পকে তালিকায় রাখে। যখন আপনি একটি নতুন প্রকল্প তৈরি করেন, আপনাকে :&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1. নতুন প্রকল্পের পোর্টফলিওতে একটি লাইন যোগ করুন (তর্কশ)
2. একটি লাইন যোগ করুন সব বর্তমান প্রকল্পের পোর্টফোলিওতে — হ্যাঁ, সব&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আমার চারটি (এখন পাঁচটি) প্রকল্পে, এর মানে এগুলো খোলা`INDEX.adoc` de &amp;lt;code&amp;gt;magic-stick&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bakery-gradle&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;cheroliv.com&amp;lt;/code&amp;gt;, `plantuml-gradle`এবং লাইন যোগ করা`jhipster-gradle-plugins&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Session 1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2026-04-28 🆕&amp;lt;code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি বিরক্তিকর। এটি হস্তচলিত। এটি একমাত্র উপায় যা নিশ্চিত করে যে, কোন প্রোজেক্টে আপনি কাজ করছেন না হোক, এজেন্টটি জানবে যে কোনো অন্যান্য প্রোজেক্টগুলো আছে এবং তাদের অবস্থা কী। সেশন 012-এ`magic-stick&amp;lt;/code&amp;gt;, এজেন্টটি পোর্টফোলিওতে দুটি অসংসঙ্গতি খুঁজে পেল —`bakery-gradle`তার COMPLETED_TASKS_ARCHIVE বিলম্বিত ছিল, এবং`plantuml-gradle`যে একটি প্রক্রিয়া নথিভুক্তি (5 ধাপ) এবং তার INDEX (6 ধাপ) মধ্যে একটি অসংস্লেষ্ট ছিল। এই ক্রস টেবিল না থাকলে, এই অসংলগ্নতাগুলি দৃশ্যমান না থাকত।&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[plantuml, format=svg, id=diag-portfolio-graph, alt=&amp;quot;Graphe du portefeuille de projets — références croisées entre INDEX.adoc&amp;quot;]
----
@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultTextAlignment center
skinparam nodeBackgroundColor #E3F2FD&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;title প্রকল্প পোর্টফোলিও — ক্রস রেফারেন্স INDEX.adoc
node &amp;quot;&amp;lt;strong&amp;gt;ম্যাজিক-স্টিক&amp;lt;/strong&amp;gt;
সেশন 037
স্ক্রিপ্ট_ভেরিফিকেশন&amp;quot; as MS #E1BEE7
node &amp;quot;&amp;lt;strong&amp;gt;bakery-gradle&amp;lt;/strong&amp;gt;
Session 11
TEST_COVERAGE&amp;quot; as BG #FFE0B2
node &amp;quot;cheroliv.com
সেশন ১০
TEST_COVERAGE&amp;quot; as CH #C8E6C9
node &amp;quot;&amp;lt;strong&amp;gt;plantuml-gradle&amp;lt;/strong&amp;gt;\nসেশন 133\nTEST_COVERAGE&amp;quot; as PG #BBDEFB
node &amp;quot;&amp;lt;strong&amp;gt;jhipster-gradle&amp;lt;/strong&amp;gt;
সেশন 1 🆕
TEST_COVERAGE&amp;quot; as JG #FFCDD2&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;MS -&amp;amp;#8594; BG : INDEX.adoc référence
MS -&amp;amp;#8594; CH : INDEX.adoc référence
MS -&amp;amp;#8594; PG : INDEX.adoc référence
MS -&amp;amp;#8594; JG : INDEX.adoc référence 🆕&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;BG -&amp;amp;#8594; MS : INDEX.adoc référence
BG -&amp;amp;#8594; CH : INDEX.adoc référence
BG -&amp;amp;#8594; PG : INDEX.adoc référence
BG -&amp;amp;#8594; JG : INDEX.adoc référence 🆕&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CH -&amp;amp;#8594; MS : INDEX.adoc référence
CH -&amp;amp;#8594; BG : INDEX.adoc référence
CH -&amp;amp;#8594; PG : INDEX.adoc référence
CH -&amp;amp;#8594; JG : INDEX.adoc référence 🆕&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PG -&amp;amp;#8594; MS : INDEX.adoc référence
PG -&amp;amp;#8594; BG : INDEX.adoc référence
PG -&amp;amp;#8594; CH : INDEX.adoc référence
PG -&amp;amp;#8594; JG : INDEX.adoc référence 🆕&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JG -&amp;amp;#8594; MS : INDEX.adoc référence
JG -&amp;amp;#8594; BG : INDEX.adoc référence
JG -&amp;amp;#8594; CH : INDEX.adoc référence
JG -&amp;amp;#8594; PG : INDEX.adoc référence&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;note bottom of JG
  Quand on ajoute un projet :
  • 4 INDEX.adoc à mettre à jour
  • 1 ligne par portefeuille
  • Coût : 5 minutes
end note&amp;lt;/p&amp;gt;
&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;legend bottom&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;= Couleur&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;= Projet&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;#E1BEE7&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;magic-stick — ISO Linux live&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;#FFE0B2&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;bakery-gradle — Plugin JBake&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;#C8E6C9&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;cheroliv.com — Site personnel&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;#BBDEFB&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;plantuml-gradle — Plugin IA&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;amp;lt;#FFCDD2&amp;amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>কেন `serve` প্রদর্শন করছিল একটি দুর্লোক website যখন `publishSite` ছিল সুপরিষ্কার</title>
            <link >https://cheroliv.com//blog/2026/0107_jbake_serve_rendering_bug_fix_post.html</link>
            <pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0107_jbake_serve_rendering_bug_fix_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃশ্য_চারটি_স্ক্রিনশট_দুটি_রেন্ডার&amp;quot;&amp;gt;দৃশ্য : চারটি স্ক্রিনশট, দুটি রেন্ডার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্থানীয়_রেন্ডারিং&amp;quot;&amp;gt;স্থানীয় রেন্ডারিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনলাইনে_রেন্ডার&amp;quot;&amp;gt;অনলাইনে রেন্ডার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিদান_serve_সঠিক_ফোল্ডারের_দিকে_নির্দেশ_করত_না&amp;quot;&amp;gt;নিদান : &amp;lt;code&amp;gt;serve&amp;lt;/code&amp;gt; সঠিক ফোল্ডারের দিকে নির্দেশ করত না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মূল_কারণ_jbake_cli_এইভাবে_কাজ_করে_না&amp;quot;&amp;gt;মূল কারণ: JBake CLI এইভাবে কাজ করে না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_পজিশনাল_আর্গুমেন্ট_ফ্ল্যাগ_নয়&amp;quot;&amp;gt;সমাধান: পজিশনাল আর্গুমেন্ট, ফ্ল্যাগ নয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_curl_দিয়ে_দ্রুত_যাচাই&amp;quot;&amp;gt;curl দিয়ে দ্রুত যাচাই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_বাগটি_কেন_দুষ্ট_ছিল&amp;quot;&amp;gt;এই বাগটি কেন দুষ্ট ছিল?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;podorar samay: 10 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি যে মুহূর্তটি চিনেন যখন আপনার লোকাল সাইটটি কোনো কিছু না মনে হওয়ার মতো দেখায়, কিন্তু একবার آنলাইনে স্থাপিত হলে সবকিছু ঠিকঠাক হয়ে যায়? এটাই যা Gradle JBake প্লাগইন দিয়ে আমার সঙ্গে ঘটেছিল। কাজটি`serve`দেখাচ্ছিল বর্গ বোতাম, কালো পটভূমিরউপর ঢালু টেক্সট, এবং একটি অদ্ভুতভাবে অনুপস্থিত CSS। তবে`publishSite`উৎপন্ন করত একই সাইট, এkei, নির্ডোষ. দোষী ছিল CSS না, ব্রাউজার না, ক্যাশ না. এটি ছিল একটি Kotlin কোড লাইন — এবং কমান্ড লাইন আর্গুমেন্টের সঙ্গে একটি খারাপ অভ্যাস।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;([])&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_চারটি_স্ক্রিনশট_দুটি_রেন্ডার&amp;quot;&amp;gt;দৃশ্য : চারটি স্ক্রিনশট, দুটি রেন্ডার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি সিস্টেমক্র্যাশের পরে ছিল। আমি স্থানীয় রেন্ডারিং তুলনা করার জন্য চারটি স্ক্রীনশট নিয়েছিলাম (&amp;lt;code&amp;gt;./gradlew serve`উপর`localhost:8820&amp;lt;/code&amp;gt;) ইনলাইন রেন্ডারিং সঙ্গে (`publishSite`গিটহাব পেজ)। প্রতি পৃষ্ঠায় দুটি স্ক্রিনশট: উপরের অংশ এবং নিচের অংশ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্থানীয়_রেন্ডারিং&amp;quot;&amp;gt;স্থানীয় রেন্ডারিং&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পৃষ্ঠার শীর্ষ&amp;lt;/strong&amp;gt;— বোতাম &amp;lt;strong&amp;gt;Project&amp;lt;/strong&amp;gt; এবং &amp;lt;strong&amp;gt;Template&amp;lt;strong&amp;gt;*ছোট, আয়তাকোষ&amp;lt;/strong&amp;gt;, স্ট্যান্ডার্ড রঙ (নীল ও সবুজ)। *Start Writing&amp;lt;/strong&amp;gt; কয়ার্ড একটি&amp;lt;strong&amp;gt;একরঙা কালো পটভূমি&amp;lt;/strong&amp;gt;, ফ্রেম ছাড়া.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/screen_local1.png&amp;quot; alt=&amp;quot;Rendu local - haut de page&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পাতার নিচের অংশ&amp;lt;/strong&amp;gt;— উপশিরোনাম &amp;lt;strong&amp;gt;&amp;quot;সর্বশেষ लेख ও সম্পদ&amp;lt;/strong&amp;gt;&amp;quot; আছে&amp;lt;strong&amp;gt;প্রায় অপঠনীয়&amp;lt;/strong&amp;gt;, খুব গাড়া কালো পৃষ্ঠভূমি. ব্লগ ছবির নিচের তারিখগুলো (&amp;quot;17 October 2013&amp;quot;, ইত্যাদি) আছেন&amp;lt;strong&amp;gt;অনুপস্থিত&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/screen_local2.png&amp;quot; alt=&amp;quot;Rendu local - bas de page&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অনলাইনে_রেন্ডার&amp;quot;&amp;gt;অনলাইনে রেন্ডার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পৃষ্ঠার শীর্ষ&amp;lt;/strong&amp;gt;— একই বোতামগুলো আছে&amp;lt;strong&amp;gt;বড়, ভেড়ার, চমকদার নিয়ন সবুজ&amp;lt;/strong&amp;gt;, বড় হাতের অক্ষরের পাঠ্য. কার্ডে একটি&amp;lt;strong&amp;gt;সাদা গolakার নিম্নাগত ছায়াযুক্ত ফ্রেম&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/screen_online1.png&amp;quot; alt=&amp;quot;Rendu en ligne - haut de page&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পৃষ্ঠার নিচ&amp;lt;/strong&amp;gt;— উপশিরোনামটি&amp;lt;strong&amp;gt;সুবিধাজনক পঠনযোগ্য&amp;lt;/strong&amp;gt;. তারিখ_groupspace_있다&amp;lt;strong&amp;gt;দৃশ্যমান&amp;lt;/strong&amp;gt;. আর্টিকেল কার্ডগুলো আছে&amp;lt;strong&amp;gt;বৃত্তাকার কোণ&amp;lt;/strong&amp;gt;এবং শিরোনামগুলো হল&amp;lt;strong&amp;gt;ভড়া&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/screen_online2.png&amp;quot; alt=&amp;quot;Rendu en ligne - bas de page&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম প্রতিক্রিয়া: থিম। আমি একটি ডায়নামিক থিম (উজ্জ্বল, আন্ধকার, high-contrast) সিস্টেম ব্যবহার করছি যা`localStorage`. विश्वাস করছেন যে লোকাল স্টোরটি একটি উচ্চ-কন্ট্রাস্ট থিম ট্রিগার করছিল? না। আমি ইতিমধ্যে লিখেছিলামhttps://cheroliv.com/blog/2025/0098_preloading_css_variable_post.html[একটি পূর্ণাঙ্গ নিবন্ধ থিমের প্রিলোডিং সম্পর্কে], আমি জানি কীভাবে এটি কাজ করে. এবং, হাই-কন্টারাস্ট মোডেও, CSS-এর গঠন (ওভাল বোতাম, ছায়া) থাকতে উচিত ছিল। এটা ছিল না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দ্বিতীয় প্রতিক্রিয়া: ব্রাউজার ক্যাশ। না, আমি পরিষ্কার প্রোফাইল দিয়ে পরীক্ষা করেছিলাম। পার্থক্য দৃঢ়ভাবে থাকত ছিল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তৃতীয় প্রতিক্রিয়া:`serve`একই ফাইলগুলো পরিষেবা দেননি যেমন`publishSite`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিদান_serve_সঠিক_ফোল্ডারের_দিকে_নির্দেশ_করত_না&amp;quot;&amp;gt;নিদান : &amp;lt;code&amp;gt;serve&amp;lt;/code&amp;gt; সঠিক ফোল্ডারের দিকে নির্দেশ করত না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার Gradle প্লাগইন`bakery`দুটি প্রধান কাজ আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;bake&amp;lt;/code&amp;gt;: স্ট্যাটিক সایت তৈরি করে এ`build/bake/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;serve&amp;lt;/code&amp;gt;: একটি স্থানীয় ওয়েব সার্ভার চালু করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;publishSite&amp;lt;/code&amp;gt;: কেলে`build/bake/`GitHub Pages-এর দিকে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ভেদ শুধুমাত্র আসতে পারে`serve`. Si &amp;lt;code&amp;gt;publishSite`সঠিক বিষয়বস্তু প্রকাশ করত, যা হলো`build/bake/`ভাল ছিল। যদি`serve`এটি অন্য কিছু দেখাচ্ছিল, অর্থাৎ এটি কাজ করত না`build/bake/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা কোডটি দেখি. অ ভিতরে`SiteManager.kt`, কাজ`serve`এভাবে সংজ্ঞায়িত করা হয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;SiteManager.kt — La tâche serve (version buggy)&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;tasks.register(&amp;quot;serve&amp;quot;, JavaExec::class.java) { task -&amp;amp;gt;
    task.apply {
        mainClass.set(&amp;quot;org.jbake.launcher.Main&amp;quot;)
        classpath = jbakeRuntime
        environment(&amp;quot;GEM_PATH&amp;quot;, jbakeRuntime.asPath)
        jvmArgs(/* ... */)
        args = listOf(
            &amp;quot;-b&amp;quot;, file(site.bake.srcPath).absolutePath,
            &amp;quot;-s&amp;quot;, layout.buildDirectory.get()
                .asFile.resolve(site.bake.destDirPath)
                .absolutePath
        )
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;org.jbake.launcher.Main`এই JBake CLI 2.7.0-র প্রবেশ বিন্দু। ধারনা : যাওয়া&amp;lt;/code&amp;gt;-b`উত্স ফোল্ডারের জন্য এবং`-s`গন্তব্য ফোল্ডারের জন্য, তারপর সার্ভার মোড চালু করুন। কিন্তু&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মূল_কারণ_jbake_cli_এইভাবে_কাজ_করে_না&amp;quot;&amp;gt;মূল কারণ: JBake CLI এইভাবে কাজ করে না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;JBake 2.7.0 অপেক্ষা করছে&amp;lt;strong&amp;gt;পজিশনাল আর্গুমেন্ট&amp;lt;/strong&amp;gt;সোর্স এবং ডেস্টিনেশনের জন্য, তারপর ঐচ্ছিক ফ্ল্যাগ। স্বাক্ষরটি হলঃ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;jbake &amp;amp;lt;source&amp;amp;gt; &amp;amp;lt;destination&amp;amp;gt; [options]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তবে আমার কোডে আমি লিখছিলাম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;args = listOf(&amp;quot;-b&amp;quot;, &amp;quot;/path/to/site&amp;quot;, &amp;quot;-s&amp;quot;, &amp;quot;/path/to/build/bake&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;JBake এটিকে এইভাবে বুঝত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;-b&amp;lt;/code&amp;gt;\&amp;quot;bake\&amp;quot; ফ্ল্যাগ (বুলিয়ান) পার্স করা হয়েছে, ব্যাবহৃত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;/path/to/site&amp;lt;/code&amp;gt;→ পজিশনাল আর্গুমেন্ট 1 (উৎস)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;→ পার্স ফ্ল্যাগ &amp;quot;serve&amp;quot; (বুলিয়ান), সার্ভার চালু হয়েছে&amp;lt;strong&amp;gt;অবিলম্বে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;/path/to/build/bake&amp;lt;/code&amp;gt;→ একটি অনুথক্তি হয়ে যায়, যা উপেক্ষা করা হয় বা ভুলে বোঝা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল : JBake নীয়েছিল`/path/to/site`উৎস作为,&amp;lt;strong&amp;gt;গন্তব্য বিবেচনা করেননি&amp;lt;/strong&amp;gt;প্রদানকৃত (&amp;lt;code&amp;gt;build/bake&amp;lt;/code&amp;gt;), এবং ব্যবহার করত তার রিপার্টোয়ার ডিফল্ট (প্রায়ে`./output`অথবা একটি অস্থায়ী নকল) ফাইল`css/styles.css`বিল্ডটি তাই চাপে দেওয়া&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তুলনায়,&amp;lt;code&amp;gt;bake&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;publishSite`তারা এটি ব্যবহার করে&amp;lt;strong&amp;gt;অফিশিয়াল Gradle JBake প্লাগিন&amp;lt;/strong&amp;gt; (`jbake-gradle-plugin&amp;lt;/code&amp;gt;) যে পরিষ্কারভাবে লিখে`build/bake/`গ্রেডল API এর মাধ্যমে। তারা CLI-এ পাস করেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_পজিশনাল_আর্গুমেন্ট_ফ্ল্যাগ_নয়&amp;quot;&amp;gt;সমাধান: পজিশনাল আর্গুমেন্ট, ফ্ল্যাগ নয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সংশোধনটি সহজ — একবার আপনি জেনে ফেলে। শুধু উৎস ও গন্তব্য কে পজিশনাল আর্গুমেন্ট হিসেবে পাস করুন, তারপর`-s`শেষে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;SiteManager.kt — La tâche serve (version corrigée)&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;args = listOf(
    file(site.bake.srcPath).absolutePath,
    layout.buildDirectory.get()
        .asFile.resolve(site.bake.destDirPath)
        .absolutePath,
    &amp;quot;-s&amp;quot;
)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এইটাই। তিন লাইন পরিবর্তন করা হয়েছে, বাগ সমাধান করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি স্থানীয়ভাবে প্রকাশ করা পরে (&amp;lt;code&amp;gt;publishToMavenLocal&amp;lt;/code&amp;gt;), un `./gradlew serve`JBake-কে সঠিক সিনট্যাক্স দিয়ে চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;jbake /home/user/project/site /home/user/project/build/bake -s&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এইবারও, JBake-এ একীভূত Jetty সার্ভার নিম্নোক্ত কন্টেন্টকে ভালভাবে পরিবেশন করে`build/bake/`— অনলাইনে প্রকাশিতের মতো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/serve-vs-publish-diagram.svg&amp;quot; alt=&amp;quot;serve vs publish diagram&amp;quot; width=&amp;quot;1751&amp;quot; height=&amp;quot;5496&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_curl_দিয়ে_দ্রুত_যাচাই&amp;quot;&amp;gt;curl দিয়ে দ্রুত যাচাই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সার্ভারটি সঠিক কন্টেন্ট পরিষেবা দেয় তা নিশ্চিত করার জন্য, একটি সহজ`curl`যা নিশ্চিত করে`index.html`শামিল`data-bs-theme=&amp;quot;light&amp;quot;`এবং যে`build/bake/css/styles.css`সঠিকভাবে ওজন করে ৩১,৪০২ বাইট — তৈরীকৃত ফাইলের মতো একই`bake`।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew serve
# Dans un autre terminal :
$ curl -s http://localhost:8820/ | grep data-bs-theme
&amp;amp;lt;html ... data-bs-theme=&amp;quot;light&amp;quot; ...&amp;amp;gt;

$ curl -I http://localhost:8820/css/styles.css
HTTP/1.1 200 OK
Content-Length: 31402
Content-Type: text/css&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লোকাল রেন্ডারিং এখন&amp;lt;strong&amp;gt;পিক্সেল-একই&amp;lt;/strong&amp;gt;ডিপ্লয় করা রেন্ডারিং-এ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এই_বাগটি_কেন_দুষ্ট_ছিল&amp;quot;&amp;gt;এই বাগটি কেন দুষ্ট ছিল?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি কেন এটি ধরা কঠিন ছিল তা দেখছেন?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্পষ্ট ত্রুটি নেই&amp;lt;/strong&amp;gt;JBake দ্রুত নেই। সে &amp;quot;কাজ করছিল&amp;quot; শুধুমাত্র একটি ভুল ফোল্ডারের সাথে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিল্ডটি কাজ করছিল&amp;lt;/strong&amp;gt; : &amp;lt;code&amp;gt;./gradlew bake`সঠিকভাবে ফাইলগুলো তৈরি করছিল মধ্যে`build/bake/&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডিপ্লয়মেন্ট কাজ করছিল&amp;lt;/strong&amp;gt;:`publishSite`ভালো কন্টেন্টকে অনলাইনে প্রচার করছিল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শুধু &amp;lt;code&amp;gt;serve&amp;lt;/code&amp;gt; টুটে গেছিল।&amp;lt;/strong&amp;gt;: বিকাশ কাজ, যা আমরা ধারাবাহিকভাবে ব্যবহার করি পুনরাবৃত্তি করার জন্য.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অভ্যাস &amp;lt;code&amp;gt;-key value&amp;lt;/strong&amp;gt;: ডেভেলপার হিসাবে, আমরা CLI Unixের বছরগুলো দ্বারা শর্তিত (&amp;lt;/code&amp;gt;-o output`, &amp;lt;code&amp;gt;-i input&amp;lt;/code&amp;gt;). JBake CLI একটি ব্যতিক্রম — উৎস এবং গন্তব্য পজিশনাল.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি একটি Gradle প্লাগইন বজায় রাখেন যা JBake-কে আবরণ করে (বা যেকোনো CLI উপকরণ),&amp;lt;strong&amp;gt;আর্গুমেন্টের ডক পড়ুন&amp;lt;/strong&amp;gt;আপনি যদি তদেরকে জানতে ভাবেন, তবও। একটি অব প্রকাশিত ধারণা (&amp;lt;code&amp;gt;-s&amp;lt;/code&amp;gt;= &amp;quot;set destination&amp;quot;) এটি আপনাকে ভিজ্যুয়াল ডিবাগিংয়ে ঘন্টারও খরচ করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে, সংশোধনটি শব্দবদ্ধভাবে পরিবর্তন করতে ছিল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;args = listOf(&amp;quot;-b&amp;quot;, src, &amp;quot;-s&amp;quot;, dest)   // ❌ BUG&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;en :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;args = listOf(src, dest, &amp;quot;-s&amp;quot;)         // ✅ FIX&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তিনটি টোকেন স্থানান্তরিত হলে, আমার স্থানীয় সাইট উত্পাদন সাইটের মতো সুন্দর হয়ে ওঠে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পাঠ&amp;lt;/strong&amp;gt;�যখন রেন্ডারিং স্থানীয় ও উত্পাদনে কোনো স্পষ্ট কারণেই ভিন্ন হয়, প্রথমে &amp;lt;strong&amp;gt;pipeline&amp;lt;/strong&amp;gt;‑কে সন্দেহ করুন — CSS নয়, ব্রাউজার নয়, এবং ফ্রেমওয়ার্কও নয়। প্রায়শই, রেন্ডারিং-এর 바로 আগের ধাপই প্রতারণা করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>OpenCode এবং অসম্পূর্ণ PATH: আপনার টুলস কেন এজেন্টের শেলে ছিল না?</title>
            <link >https://cheroliv.com//blog/2026/0106_opencode_path_sdkman_nvm_post.html</link>
            <pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0106_opencode_path_sdkman_nvm_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দৃশ্য_একটি_অন্ধ_এজেন্ট_টুলের_জগতে&amp;quot;&amp;gt;দৃশ্য: একটি অন্ধ এজেন্ট টুলের জগতে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাগের_অ্যানাটমি_দুই_শেল_দুই_বিশ্ব&amp;quot;&amp;gt;বাগের অ্যানাটমি: দুই শেল, দুই বিশ্ব&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দোষièreরা_zshrc_বนาม_zshenv&amp;quot;&amp;gt;দোষièreরা: .zshrc বนาม .zshenv&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপে_ধাপে_নিদান&amp;quot;&amp;gt;ধাপে ধাপে নিদান&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এজেন্টের_পাথ_যাচাই_করুন&amp;quot;&amp;gt;এজেন্টের পাথ যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_২_zshrc_এ_থাকা_কিন্তু_zshenv_এ_না_থাকা_যে_কোনো_কিছু_চিহ্নিত_করুন&amp;quot;&amp;gt;২. .zshrc-এ থাকা কিন্তু .zshenv-এ না থাকা যে কোনো কিছু চিহ্নিত করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_৩_zshenv_ফাইল_আছে_কি_পরীক্ষা_করুন&amp;quot;&amp;gt;৩. .zshenv ফাইল আছে কি পরীক্ষা করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_zshenv_সঠিক_পাথগুলো&amp;quot;&amp;gt;সমাধান: .zshenv + সঠিক পাথগুলো&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সব_জরুরি_পথসাথে_zshenv_তৈরি_করুন&amp;quot;&amp;gt;সব জরুরি পথসাথে .zshenv তৈরি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_না_source_sdkman_init_sh_zshenv_এ&amp;quot;&amp;gt;কেন না &amp;lt;code&amp;gt;source sdkman-init.sh&amp;lt;/code&amp;gt; .zshenv-এ ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_nvm_কেস_ভার্সন_ম্যানেজার_একটি_চিহ্ন_gone_ভুলে_যায়&amp;quot;&amp;gt;NVM কেস: ভার্সন ম্যানেজার একটি চিহ্ন Gone ভুলে যায়&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_nvm_সমস্যা&amp;quot;&amp;gt;NVM সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_nvm_এর_জন্য_current_সিমলিংক_তৈরি_করুন&amp;quot;&amp;gt;সমাধান: NVM- এর জন্য &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; সিমলিংক তৈরি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_symlinkএর_আপডেট_স্বয়ংক্রিয়_করুন&amp;quot;&amp;gt;symlinkএর আপডেট স্বয়ংক্রিয় করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পথের_সংক্ষিপ্ত_সারণী&amp;quot;&amp;gt;পথের সংক্ষিপ্ত সারণী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ঝুঁকি_ও_মানন&amp;quot;&amp;gt;�ঝুঁকি ও মানন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখা_পাওয়া&amp;quot;&amp;gt;শেখা পাওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেষ_যাচাই&amp;quot;&amp;gt;শেষ যাচাই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লিঙ্ক&amp;quot;&amp;gt;লিঙ্ক&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রسمী_ডকুমেন্টেশন&amp;quot;&amp;gt;রسمী ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উল্লেখিত_সরঞ্জাম&amp;quot;&amp;gt;উল্লেখিত সরঞ্জাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;।পাঠনের সময় : 13 minutes&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আপনার টার্মিনালে OpenCode চালাচ্ছেন, সবকিছু কাজ করে। এজেন্টটি একটি চেষ্টা করছে`gh`— অনুপলব্ধ. এক`java -version`— অনুপস্থিত. এক`node`— কোনো জায়গায় না। তবু, এই সরঞ্জামগুলো সঠিকভাবে &amp;lt;em&amp;gt;আপনার&amp;lt;/em&amp;gt; শেলে উপস্থিত। সমস্যা? OpenCode শেল চালায়&amp;lt;strong&amp;gt;অন্তরবākেতnahীন&amp;lt;/strong&amp;gt;যারা কখনো আপনার পড়েন না`.zshrc`. এখানে কিভাবে এটি সঠিকভাবে ডায়াগনস্টিক ও মেরামত করা যায়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;([])&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৃশ্য_একটি_অন্ধ_এজেন্ট_টুলের_জগতে&amp;quot;&amp;gt;দৃশ্য: একটি অন্ধ এজেন্ট টুলের জগতে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটা একটি মঙ্গলবারের সন্ধ্যা ছিল। আমি তাজা ইন্সটল করেছি।https://opencode.ai[মুক্ত কোড], এজেন্ট কৃত্রিম বুদ্ধিমত্তা যা বলিত ছিল যে আমার কোডিং পদ্ধতিকে রূপান্তর করবে। প্রথম পরীক্ষা: তাকে বলা যাতে আমার GitHub রেপোজিটরিগুলো তালিকাভুক্ত করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ opencode
&amp;amp;gt; Utilise gh pour lister mes repos
❌ bash: gh: command not found&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অস্বাভাবিক।`gh`আমার টার্মিনালে এটি পুরোপুরি ভালোভাবে কাজ করতো। আমি কিছু অন্য চেষ্টা করছি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;&amp;amp;gt; Vérifie la version de Java
❌ bash: java: command not found&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;&amp;amp;gt; Lance le build Gradle
❌ bash: gradle: command not found&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Java, Gradle, Node,&amp;lt;code&amp;gt;gh&amp;lt;/code&amp;gt;— এজেন্টের জন্য সব شيء দৃশ্যমান ছিল না। আমার টারমিনাল, সে, সব شيء দেখত। য budsি এজেন্ট ও আমি দুটি সমান্তরাল বিশ্বে বাস করতessem.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি বুঝতে ঘন্টা জুড়ে লেগেছি। ঘন্টা`echo $PATH`, de &amp;lt;code&amp;gt;which java&amp;lt;/code&amp;gt;, বৃদ্ধিমান निराशা। আমি অবশেষে বুঝলাম যে সমস্যাটি সরঞ্জামগুলো ছিল না — এটি ছিল&amp;lt;strong&amp;gt;শেল&amp;lt;/strong&amp;gt;. OpenCode, যে কোন এজেন্ট য.launch করে সাবপ্রসেসের মতো, শেলসে কাজ করে&amp;lt;strong&amp;gt;অতিইন্টারঅ্যাক্টিভ&amp;lt;/strong&amp;gt;। এবং Zsh, এই শেলস গুলোতে, আপনারকে পূর্ণরূপে উপেক্ষা করে`.zshrc`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি হল সেই ডায়াগনস্টিক, সমাধান এবং আমি যে শিক্ষা নিলাম তার পূর্ণ বর্ণনা। যদি আপনি একটি AI এজেন্ট ব্যবহার করেন — OpenCode, Aider, Cursor, বা এমনকি cron স্ক্রিপ্ট — একটি দিন আপনি এই সমস্মুখীন হবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাগের_অ্যানাটমি_দুই_শেল_দুই_বিশ্ব&amp;quot;&amp;gt;বাগের অ্যানাটমি: দুই শেল, দুই বিশ্ব&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি টার্মিনাল খুললে, Zsh এটি একটি শেল হিসাবে বিবেচনা করে।&amp;lt;strong&amp;gt;অন্তঃক্রিয়াশীল&amp;lt;/strong&amp;gt;। ও চার্জ করছে`.zshrc`, যে সবকিছু শুরু করে: SDKMAN, NVM, pnpm, alias, আপনার সুন্দর প্রম্পট। আপনার পরিবেশটি সম্পূর্ণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু যখন OpenCode একটি কমান্ড চালায়, তা একটি ইন্টারেক্টিভ টার্মিনাল চালায় না। এটি একটি শেল চালায়&amp;lt;strong&amp;gt;অন-ইন্টারেক্টিভ&amp;lt;/strong&amp;gt;— একটি কাজের শেল, স্ক্রীন পিছনে কোনো মানুষ নেই। এছাড়াও Zsh, এই প্রেক্ষাপটে, লাফটি`.zshrc`. শুধুমাত্র পড়ে`.zshenv`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পার্থক্য কেন বিদ্যমান? কারণ একটি non-interactive শেল স্ক্রিপ্ট চালatorze ডিজাইন করা হয়েছে, একজন মানব ব্যবহারকারীকে সেবা প্রদানের জন্য নয়। একটি ব্যাকগ্রাউন্ডে চলমান স্ক্রিপ্টে অ্যালিয়াস, প্রম্পট ও অটো-কমপ্লিট লোড করা একটি বর্জ্য হবে। সমস্যা হল, আপনার PATH — executables খুঁজে পानेের জন্য সবচেয়ে গুরুত্বপূর্ণ তথ্য — প্রায়শই initialize করা হয়।&amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt;, না`.zshenv`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

actor &amp;quot;আপনি&amp;quot; as user
actor &amp;quot;OpenCode\n(প্রতিনিধি)&amp;quot; as agent
participant &amp;quot;Shell\nঅন্তক্রিয়\n(.zshrc সোর্স করা&amp;quot; as ishell
participant &amp;quot;Shell
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

actor &amp;quot;আপনি&amp;quot; as user
actor &amp;quot;OpenCode\n(প্রতিনিধি)&amp;quot; as agent
participant &amp;quot;Shell\nঅন্তক্রিয়\n(.zshrc সোর্স করা&amp;quot; as ishell
participant &amp;quot;Shell
অনিঙ্কেটিভ
(.zshrc উপেক্ষিত)&amp;quot; as nshell

user -&amp;amp;gt; ishell : gh, java, node ✅
agent -&amp;amp;gt; nshell : gh, java, node ❌

note right of ishell
  Source .zshrc :
  - SDKMAN init
  - NVM init
  - ~/apps dans PATH
  - pnpm dans PATH
end note

note right of nshell
  .zshrc ignoré !
  PATH = /usr/bin:/bin
  + quelques répertoires défaut
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যার মূল:&amp;lt;strong&amp;gt;Zsh শুধুমাত্র ইন্টার্যাক্টিভ শেলদের জন্য &amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt; সোর্স করে।&amp;lt;/strong&amp;gt;. OpenCode, যেকোনো IA এজেন্টের মতো যা সাবপ্রসেস চালায়, ইন্টারঅ্যাকশন‑শেল ব্যবহার করে। এই শেলগুলি শুধুমাত্র`.zshenv`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দোষièreরা_zshrc_বนาม_zshenv&amp;quot;&amp;gt;দোষièreরা: .zshrc বนาม .zshenv&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Zsh-এ আছে&amp;lt;strong&amp;gt;চারটি আরম্ভিক ফাইল&amp;lt;/strong&amp;gt;, প্রতিটির একটি নির্দিষ্ট ভূমিকা আছে। এটি একটি শোভন ডিজাইন — কিন্তু এটি সমস্যার মূলবিন্দু:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 5%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কিংশ যখন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভুমিকা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PATH বদলАО ?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.zshenv&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;সবসময়&amp;lt;/strong&amp;gt;(সাক্ষাত্কারিক + অ-সাক্ষাত্কারিক + লগইন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপরিহার্য পরিবেশ চল, PATH&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�✅ হ্যাঁ — এটা SA-এর স্থান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.zprofile&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র লগইন শেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মন্দ অদেশ (প্রতি সেশনে একবার)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সম্ভব সম্ভব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.zshrc&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;শুধুমাত্র ইন্টারেক্টিভ শেল&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অ্যালিয়াস, প্রম্পট, সম্পূর্ণতা, ইন্টারঅ্যাক্টিভ টุลস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্রিটিকাল ভেরিয়েবল জন্য নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;.zlogin&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লগইন শেল (.zshrc-এর পরে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বাগত বার্তা, সমাপ্তি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দুর্দൃশে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তালিকাটি একটি ইঙ্গিত দেয়, কিন্তু তা গভীরভাবে বোঝা দরকার। এটা একটি বাড়ির কক্ষগুলো মনে করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`.zshenv`এটি&amp;lt;strong&amp;gt;প্রবেশ দালান&amp;lt;/strong&amp;gt;— সবাই এই জায়গ দিয়ে যায়, ভিজিটর বা বাসিন্দা। আপনি যদি কিছু এখানে রাখেন, কোনো শেলও এটি দেখতে পাবে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`.zshrc`হয়&amp;lt;strong&amp;gt;সালন&amp;lt;/strong&amp;gt;— শুধুমাত্র বাসিন্দা (ইন্টারেকটিভ শেল) এ যায়। অতিথি (অ-ইন্টারেকটিভ শেল) হল দলে থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;.zprofile&amp;lt;/code&amp;gt; et `.zlogin`এগুলো লগইন শেলের জন্য বিশেষ অংশ (যেমন আপনি SSH-এর মাধ্যমে সংযুক্ত থাকা সময়)।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দরুণ কঠিনতা হল যে আমাদের অধিকাংশ আমরা PATH কে বাসাগারে রাখি। এবং এই AI এজেন্টকে কখনো সেখানে প্রবেশ করার অধিকার নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা একটি আলোকচিত্রে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/zsh-init-flow.svg&amp;quot; alt=&amp;quot;zsh init flow&amp;quot; width=&amp;quot;543&amp;quot; height=&amp;quot;404&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যখন আপনি একটি টার্মিনাল খোলেন, Zsh ইন্টারেক্টিভ হয়: এটি পড়ে`.zshrc`, সবSomething কাজ করে। OpenCode একটি শেল চালু করে একটি কমান্ড চালানোর জন্য, Zsh অন-ইন্টার্যাক্টিভ: তা কूदে`.zshrc`, শুধু পড়ে`.zshenv`. Et si `.zshenv`অস্তিত্ব নেই অথবা PATH ধারণ করে না — এটি বাঘুনি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কেন Zsh এটি这样做？&amp;lt;/strong&amp;gt;এটি Unix থেকে উত্তরাধিকার পেল একটি ডিজাইন নির্বাচন। একটি নন-ইন্টারেক্টিভ শেলকে হওয়া উচিত&amp;lt;strong&amp;gt;দ্রুত&amp;lt;/strong&amp;gt; et &amp;lt;strong&amp;gt;প্রতিলিপিযোগ্য&amp;lt;/strong&amp;gt;. ইলিয়াসগুলো, রঙিন প্রম্পটগুলো এবং SDKMAN-এর ভারী ইনিশিয়ালাইজেশনগুলোকে একটি cron স্ক্রিপ্ট বা একটি AI এজেন্টে লোড করলে তা ধীর ও ভঙ্গু হত। অতএব, বিভাজনটি যুক্তিমূলক:`.zshenv`মূলত (variables, PATH)`.zshrc`আরামের জন্য (alias, প্রম্পট, পূর্ণ করি)। সমস্যা তখন উঠে আসে যখন আমরা জরুরি বিষয়গুলোকে আরামের মধ্যে রাখি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপে_ধাপে_নিদান&amp;quot;&amp;gt;ধাপে ধাপে নিদান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোনো সংশোধনের আগে, আপনাকে সঠিকভাবে বুঝতে হবে যে কি পড়ছে না। এখানে একটি পুনরাবৃত্তিমূলক নিদর্শন পদ্ধতি দেওয়া হল — যদি আপনি কৃত্রিম বুদ্ধিমত্তা-এজেন্টদের সাথে কাজ করেন, তাহলে এটি আপনার বুকমার্কে রাখুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এজেন্টের_পাথ_যাচাই_করুন&amp;quot;&amp;gt;এজেন্টের পাথ যাচাই করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা আপনার ইন্টারেক্টিভ টার্মিনালের দেখা কি এবং একটি নন-ইন্টারেক্টিভ শেলের দেখা কি তুলনা করি — অর্থাৎ, OpenCode-এ যা দেখা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Dans votre terminal interactif (tout fonctionne)
echo $PATH | tr &amp;#39;:&amp;#39; &amp;#39;\n&amp;#39; | grep -v &amp;#39;^/usr&amp;#39; | sort&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাধারণ ফলাফল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;/home/cheroliv/apps
/home/cheroliv/.nvm/versions/node/v22.19.0/bin
/home/cheroliv/.sdkman/candidates/java/current/bin
/home/cheroliv/.sdkman/candidates/gradle/current/bin
/home/cheroliv/.local/share/pnpm
/home/cheroliv/.local/bin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন, এজেন্ট যেটি দেখছে সেটি সিমুলেট করি— একটি অন-ইন্টারাক্টিভ শেল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Shell non-interactif : pas de .zshrc
zsh -c &amp;#39;echo $PATH&amp;#39; | tr &amp;#39;:&amp;#39; &amp;#39;\n&amp;#39; | grep -v &amp;#39;^/usr&amp;#39; | sort&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;/home/cheroliv/.local/bin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ছয় পথের পাঁচটি গায়েব হয়ে গেছে।&amp;lt;/strong&amp;gt;এজেন্ট তার পরিবেশের ৮৩% হারিয়েছে। যেমন কেউ আপনাকে আপনার রান্নার সরঞ্জামের অর্ধেক ছাড়া রান্না করতে বলে — আপনি শুধুমাত্র পানি গরম করতে পারবেন, কিন্তু আর কিছু করতে পারবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;Warning&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কমান্ড`zsh -c &amp;#39;echo $PATH&amp;#39;`আপনার&amp;lt;strong&amp;gt;নম্বর 1 ডায়াগনস্টিক টুল&amp;lt;/strong&amp;gt;. একটি সরঞ্জাম যা আপনি দৈনন্দিনে ব্যবহার করেন যদি ফলাফলে অনুপস্থিত থাকে, তাহলে আপনার AI এজেন্টও তা দেখতে পারবে না। এটি পরিবর্তনের আগে এবং পরেও পরীক্ষা করুন।&amp;lt;code&amp;gt;.zshenv&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_২_zshrc_এ_থাকা_কিন্তু_zshenv_এ_না_থাকা_যে_কোনো_কিছু_চিহ্নিত_করুন&amp;quot;&amp;gt;২. .zshrc-এ থাকা কিন্তু .zshenv-এ না থাকা যে কোনো কিছু চিহ্নিত করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন, তারা দোষীকে খোঁজছে`.zshrc`. আমরা আমaders উপকরণ_groups mention করে liner_groups ফিল্টার করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;grep -n &amp;#39;apps\|SDKMAN\|NVM\|PNPM\|PATH&amp;#39; ~/.zshrc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাধারণত পাওয়া যায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;119: PATH=&amp;quot;/usr/bin/python3:$HOME/apps:$PATH&amp;quot;           # ← pas exporté !
171: export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot;
172: [ -s &amp;quot;$NVM_DIR/nvm.sh&amp;quot; ] &amp;amp;amp;&amp;amp;amp; \. &amp;quot;$NVM_DIR/nvm.sh&amp;quot;   # ← NVM init
176: nvm use --lts --silent                              # ← active une version
179: export PNPM_HOME=&amp;quot;/home/cheroliv/.local/share/pnpm&amp;quot;
187: export SDKMAN_DIR=&amp;quot;$HOME/.sdkman&amp;quot;
188: [[ -s &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot; ]] &amp;amp;amp;&amp;amp;amp; source &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সব আছে&amp;lt;strong&amp;gt;অদৃশ্য&amp;lt;/strong&amp;gt;OpenCode এর জন্য।`PATH`লাইন ১১৯ থেকে조차 না`export`এ — এটি কখনো বর্তমান শেল থেকে যায় না। এটি একটি গুরুত্বপূর্ণ টেকনিকাল বিবরণ: কোনো ভেরিয়েবল ছাড়া`export`এটি সংজ্ঞা দেওয়া শেলের সাথে স্থানীয় থাকে। সাবশেলগুলো — Opencode-এর মাধ্যমেই চালিতদের মতো — কখনও এটি উত্তরাধিকার নেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_৩_zshenv_ফাইল_আছে_কি_পরীক্ষা_করুন&amp;quot;&amp;gt;৩. .zshenv ফাইল আছে কি পরীক্ষা করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;cat ~/.zshenv 2&amp;amp;gt;/dev/null || echo &amp;quot;FICHIER ABSENT&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি উত্তর «অনুপস্থিত ফাইল» হয়, তাহলে সেখানে সবকিছু সিদ্ধান্ত নেওয়া হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_zshenv_সঠিক_পাথগুলো&amp;quot;&amp;gt;সমাধান: .zshenv + সঠিক পাথগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কৌশলটি সহজ, কিন্তু তা নিখুঁত চাহে: রাখা`.zshenv` &amp;lt;strong&amp;gt;শুধুমাত্র&amp;lt;/strong&amp;gt;অবশ্যক পাথগুলো, ভারী আরম্ভক স্ক্রিপ্টগুলো সোর্স না করে। আমরা কোনো কিছুকে সরানো না।&amp;lt;code&amp;gt;.zshrc`মধ্যে&amp;lt;/code&amp;gt;.zshenv`— সারাংশ বের করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সব_জরুরি_পথসাথে_zshenv_তৈরি_করুন&amp;quot;&amp;gt;সব জরুরি পথসাথে .zshenv তৈরি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`.zshenv`_available -টা&amp;lt;strong&amp;gt;একটি ফাইল&amp;lt;/strong&amp;gt;যে Zsh গ্যারান্টি দেয় যে এটি source করবে মধ্যে&amp;lt;strong&amp;gt;সব&amp;lt;/strong&amp;gt;প্রেক্ষিতগুলো। এখানেই PATH-কে যাওয়া উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;export SDKMAN_DIR=&amp;quot;$HOME/.sdkman&amp;quot;
export NVM_DIR=&amp;quot;$HOME/.nvm&amp;quot;
export PNPM_HOME=&amp;quot;$HOME/.local/share/pnpm&amp;quot;
export PATH=&amp;quot;$HOME/apps:$HOME/.sdkman/candidates/java/current/bin:$HOME/.sdkman/candidates/gradle/current/bin:$HOME/.nvm/current/bin:$PNPM_HOME:$HOME/.local/bin:$HOME/.local/share/JetBrains/Toolbox/scripts:/usr/bin/python3:$PATH&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যবহার করা হয়`$HOME/.nvm/current/bin`ও না`$HOME/.nvm/versions/node/v22.19.0/bin`। কারণ : Node সংস্করণগুলো পরিবর্তিত হয়। একটি কঠোর পথ পরবর্তীতে ভুল হয়ে যায়।`nvm install`অতिरিক্ত বিস্তারিত পরবর্তী বিভাগে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কেন_না_source_sdkman_init_sh_zshenv_এ&amp;quot;&amp;gt;কেন না &amp;lt;code&amp;gt;source sdkman-init.sh&amp;lt;/code&amp;gt; .zshenv-এ ?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বাধিক আকর্ষণীয় পদ্ধতি হবে সহজেই её মধ্যে পুনরাবৃত্তি করা`.zshenv`আমরা যা করি`.zshrc`— ইনিশিয়ালাইজেশন স্ক্রিপ্টগুলো সোর্স করুন। আমরা&amp;lt;strong&amp;gt;পারত&amp;lt;/strong&amp;gt;করার ইচ্ছা হত্তয়া&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# ❌ MAUVAISE IDÉE
[[ -s &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot; ]] &amp;amp;amp;&amp;amp;amp; source &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমस्यাবলি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ধीर&amp;lt;/strong&amp;gt;:`sdkman-init.sh`নেটওয়ার্ক সমাধান এবং প্রতিটি শেলে যাচাই করে। অন-ইন্টার্যাক্টিভ শেলে, এটি একটি অপ্রয়োজনীয় খরচ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;হ্রাসপদ&amp;lt;/strong&amp;gt;SDKMAN একটি ইন্টারেক্টিভ কনটেক্সট আশা করে। এর শুরুবৎ (শুরুকরণ) একটি পাইপ বা একটি সাবশেলে শান্তভাবে ব্যর্থ হতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অব্যবহার্য&amp;lt;/strong&amp;gt;SDKMAN তার প্রার্থীদেরকে এ বসায়`~/.sdkman/candidates/&amp;amp;lt;tool&amp;amp;gt;/current/bin`— স্থিতিশীল সিমলিংকগুলো কার্যকর সংস্করণের দিকে নির্দেশ করে। এদের ব্যবহার করা যায়।&amp;lt;strong&amp;gt;সীধরে&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সঠিক পদ্ধতি : SDKMAN-এর ইনিশিয়ালাইজেশনকে বাইপাস করা এবং সরাসরি সিম্বলিক লিংকে নির্দেশ করা`current`. এติ সমাধানের সমগ্র চাবী:&amp;lt;strong&amp;gt;ফাইলের গঠনকে কন্ট্র্যাক্ট হিসেবে ব্যবহার করুন, আর প্রারম্ভ কোডের পরিবর্তে&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ধীর পদ্ধতি\n(source sdkman-init.sh)&amp;quot; as slow {
  card &amp;quot;.zshenv source sdkman-init.sh
2-3 সেকেন্ড শেল প্রতি
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ধীর পদ্ধতি\n(source sdkman-init.sh)&amp;quot; as slow {
  card &amp;quot;.zshenv source sdkman-init.sh
2-3 সেকেন্ড শেল প্রতি
নেটওয়ার্ক পরীক্ষা
ব্যর্থতার ঝুঁকি&amp;quot; as s1 #FDEDEC
}

rectangle &amp;quot;পদ্ধতি দ্রুত
(symlinks সরাসরি)&amp;quot; as fast {
  card &amp;quot;.zshenv export PATH=...current/bin
0 ms
নেটওয়ার্ক নেই
প্রারম্ভিকরণ নেই&amp;quot; as s2 #E8F8E8
}

slow --&amp;amp;gt; fast : Même résultat final\nLe PATH pointe sur current/bin\ndans les deux cas

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_nvm_কেস_ভার্সন_ম্যানেজার_একটি_চিহ্ন_gone_ভুলে_যায়&amp;quot;&amp;gt;NVM কেস: ভার্সন ম্যানেজার একটি চিহ্ন Gone ভুলে যায়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_nvm_সমস্যা&amp;quot;&amp;gt;NVM সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;C&amp;amp;#8217;est ici que l&amp;amp;#8217;enquête m&amp;amp;#8217;a mené le plus loin. SDKMAN a un design élégant : quand on fait &amp;lt;code&amp;gt;sdk install java 25.0.2-tem&amp;lt;/code&amp;gt;, এটি একটি সিমলিঙ্ক :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;~/.sdkman/candidates/java/current -&amp;amp;gt; ~/.sdkman/candidates/java/25.0.2-tem&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সিমলিংক&amp;lt;strong&amp;gt;সবसमয় আপডেটেড&amp;lt;/strong&amp;gt;. পয়েন্ট করুন উপরে এটিতে`.zshenv`আপনি কভার করা আছে, কোনো শেল কি হোক। সুন্দর।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;NVM, সে তৈরি করে না&amp;lt;strong&amp;gt;কিছু না&amp;lt;/strong&amp;gt;এই ধরনের সিম্বলিক লিংক নেই`current`. স্থির নবয়ন পয়েন্ট নেই। আমাদের একটি ভার্সনকৃত ও হার্ড-কোডেড পথের দিকে ইশারা করতে হবে, যা এটা দেখে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;~/.nvm/versions/node/v22.19.0/bin/node&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আগামীটে`nvm install 24`, এই পথ morto? Wait I need correct Bengali: &amp;quot;মৃত&amp;quot; is adjective for dead. So &amp;quot;এই পথ মৃত।&amp;quot; Good. Then &amp;quot;আপনার&amp;quot;. So final.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;, এই পথ মৃত। আপনার`.zshenv`এটি এমন একটি সংস্করণের দিকে পয়েন্ট করবে যা আর সক্রিয় সংস্করণ নয়। এটি একটি সময়বম্ব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কেন NVM এটা করে?&amp;lt;/strong&amp;gt;NVM গতিশীলভাবে PATH পরিবর্তন করে প্রতিটি`nvm use`. এই ডিজাইন করা হয়েছে ঘন ঘন সংস্করণ পরিবর্তনকারী ডেভেলপারদের জন্য, একটি ইন্টারেক্টিভ শেলে। সিমলিঙ্ক`current`এটি প্রাথমিক স্পেসিফিকেশনে ছিল না — এটি ডিজাইনের একটি ভুল যা আমরা নিজেদের হাতে ঠিক করব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/nvm-vs-sdkman.svg&amp;quot; alt=&amp;quot;nvm vs sdkman&amp;quot; width=&amp;quot;1769&amp;quot; height=&amp;quot;5676&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_nvm_এর_জন্য_current_সিমলিংক_তৈরি_করুন&amp;quot;&amp;gt;সমাধান: NVM- এর জন্য &amp;lt;code&amp;gt;current&amp;lt;/code&amp;gt; সিমলিংক তৈরি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যেহেতু NVM এটি করে না, আমরা নিজেদের করি। উপায়টি SDKMAN‑এর মতো — একটি সিমলিঙ্ক।`current`এটি সর্বদা সক্রিয় সংস্করণকে নির্দেশ করে। আমরা এটি একবার তৈরি করি, এবং তা স্বয়ংক্রিয়ভাবে আপডেট হওয়ার জন্য স্বয়ংক্রিয় করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Créer le symlink initial
ln -sfn &amp;quot;$HOME/.nvm/versions/node/v22.19.0&amp;quot; &amp;quot;$HOME/.nvm/current&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন,&amp;amp;lt;/tool_call&amp;amp;gt;`.zshenv`, ব্যবহার করা হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$HOME/.nvm/current/bin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বদলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# ❌ Chemin en dur — cassé au prochain changement de version
$HOME/.nvm/versions/node/v22.19.0/bin&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_symlinkএর_আপডেট_স্বয়ংক্রিয়_করুন&amp;quot;&amp;gt;symlinkএর আপডেট স্বয়ংক্রিয় করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সিমলিঙ্ক কোনো মূল্য রাখে না যদি এটি আপডেট না হয়। সিমলিঙ্ক`current`আপডেট করতে হবে যখন করা হয়`nvm use` ou &amp;lt;code&amp;gt;nvm install&amp;lt;/code&amp;gt;. সমাধান : ایک&amp;lt;strong&amp;gt;র্যাপার&amp;lt;/strong&amp;gt;— একটি ফাংশন যা সত্য কমান্ডকে ঘেরে`nvm`এবং সিম্বলিক লিঙ্ক প্রতিটি কলের পরে আপডেট করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# À la fin de .zshrc, APRÈS le chargement de NVM
nvm use --lts --silent
ln -sfn &amp;quot;$(nvm_version_path &amp;quot;$(nvm current)&amp;quot;)&amp;quot; &amp;quot;$NVM_DIR/current&amp;quot;

_nvm() {
  command nvm &amp;quot;$@&amp;quot;
  local rc=$?
  ln -sfn &amp;quot;$(nvm_version_path &amp;quot;$(nvm current)&amp;quot;)&amp;quot; &amp;quot;$NVM_DIR/current&amp;quot;
  return $rc
}
alias nvm=&amp;#39;_nvm&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কীভাবে কাজ করে, বিস্তারিতভাবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur
participant &amp;quot;nvm wrapper
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur
participant &amp;quot;nvm wrapper
(_nvm)&amp;quot; as wrapper
participant &amp;quot;nvm বাস্তব
(command nvm)&amp;quot; as realnvm
participant &amp;quot;~/.nvm/current\n(সিম্বলিক লিঙ্ক)&amp;quot; as symlink

Développeur -&amp;amp;gt; wrapper : nvm use 20
wrapper -&amp;amp;gt; realnvm : command nvm use 20
realnvm --&amp;amp;gt; wrapper : version activée
wrapper -&amp;amp;gt; symlink : ln -sfn .../v20.16.0 ~/.nvm/current
wrapper --&amp;amp;gt; Développeur : retour

note right of symlink
  Toujours à jour !
  Utilisé par .zshenv
  → accessible par OpenCode
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;র্যাপারটি`_nvm`সত্য কমান্ডটি কল করে`nvm`, তারপর সিমলিঙ্ক আপডেট করে। এলিয়াস`nvm=&amp;#39;_nvm&amp;#39;`টাইপ করার সময় নিশ্চিত করে`nvm`, আমরা র্যাপারের মাধ্যমে যাই। এবং শেলের ইনিশিয়ালাইজেশনের সময়ও, আমরা একইভাবে পরে করি`nvm use --lts`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`nvm_version_path`এটি NVMএর একটি অভ্যন্তরিক ফাংশন যা কোনো সংস্করণের সম্পূর্ণ পথ সমাধান করে। এটি পাথকে ম্যানুয়ালি পুনঃস্রষ্ট করার প্রয়োজন কমান।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পথের_সংক্ষিপ্ত_সারণী&amp;quot;&amp;gt;পথের সংক্ষিপ্ত সারণী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জালে যাওয়ার আগে, রূপান্তরের একটি দৃশ্য সারাংশ। বামদিকে, আপনার যে ছিল (সব মধ্যে`.zshrc`, এজেন্টের জন্য অদৃশ্য). ডান পাশে, এখন আপনার কাছে আছে (প্রয়োজনীয় পথগুলো`.zshenv`, সর্বত্র দৃশ্যমান).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;উপকরণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আগে (.zshrc শুধুমাত্র)&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;(.zshenv + symlink) এর পরে&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ওপেনকোড द्वारा দৃশ্য?&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/apps&amp;lt;/code&amp;gt;(gh, vscode)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PATH .zshrc-এ exports করা হয়নি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;$HOME/apps&amp;lt;/code&amp;gt;.zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;SDKMAN জাভা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;sdkman-init.sh&amp;lt;/code&amp;gt;.zshrc-এ সোর্স করা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;$HOME/.sdkman/candidates/java/current/bin&amp;lt;/code&amp;gt;.zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;SDKMAN Gradle&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`sdkman-init.sh`সোর্স করা `.zshrc&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;$HOME/.sdkman/candidates/gradle/current/bin&amp;lt;/code&amp;gt;.zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনি একজন পেশাগত অনুবাদক। fr থেকে bn-এ অনুবাদ করুন। সমস্ত backtick কোড spans (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) ঠিক মতো সংরক্ষণ করুন — কখনো backtick কনটেন্ট, স্পেসিং বা পজিশন পরিবর্তন করবেন না। এই পাঠ্য একটি বাক্যের অংশ হতে পারে — contexte চাইয়া না.fragmentটি অনুবাদ করুন। শুধু অনুবাদিত পাঠ্য আউটপুট করুন — কোন ব্যাখ্যা, কোন মন্তব্য, কোন ভূমিকা, কোন বিকল্প, কোন অপশন না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;NVM নোড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;nvm use --lts&amp;lt;/code&amp;gt;.zshrc-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`$HOME/.nvm/current/bin`midpoint .zshenv (symlink)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সকল ব্যাকটিক কোড স্প্যান (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) একইভাবে রাখুন — ব্যাকটিকের কন্টেন্ট, স্পেসিং, বা পজিশন পরিবর্তন করবেন না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;pnpm&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;$PNPM_HOME&amp;lt;/code&amp;gt;.zshrc-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;$PNPM_HOME&amp;lt;/code&amp;gt;.zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JetBrains Toolbox&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;টুলবক্স দ্বারা .zshrc-এ স্বয়ংক্রিয়ভাবে যোগ করা হয়েছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`$HOME/.local/share/JetBrains/Toolbox/scripts`মধ্যে .zshenv&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✅&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাইথন ৩&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`/usr/bin/python3`PATH .zshrc-তে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রস্পষ্টভাবে .zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(Empty)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ঝুঁকি_ও_মানন&amp;quot;&amp;gt;�ঝুঁকি ও মানন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিতে সবকিছু পরিপূর্ণ নয়। এখানে সমস্যাগুলো দেওয়া হয়েছে যা আমি मुखোমুখি হয়েছি এবং কীভাবে এড়ানো যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;জাল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিবরণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;শমন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাথ ডুপ্লিকেট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;.zshenv এবং .zshrc একই প্যাথ যোগ করলে, তা দুবার দেখা যায়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`.zshenv`উৎস থেকে আসা&amp;lt;strong&amp;gt;আগে&amp;lt;/strong&amp;gt;.zshrc. দুটিি یک ইন্টারেক্টিভ শেলে পড়া হয়। PATH দ্বিগুণিত হতে পারে। এটি কস্মেটিক, ফাংশনাল নয়। .zshenv এ শুধুমাত্র ডিফল্ট PATH‑এ &amp;lt;em&amp;gt;অনুপস্থিত&amp;lt;/em&amp;gt; পথ রাখুন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;NVM : .zshenv-এ হ্যার্ডকোডেড সংস্করণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রাখা`~/.nvm/versions/node/v22.19.0/bin`পরবর্তীতে কঠিন হয় মিথ্যা`nvm install`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সিমলিংক ব্যবহার করুন`$HOME/.nvm/current/bin`+ র্যাপার`_nvm`.zshrc-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;SDKMAN : source sdkman-init.sh .zshenv-এ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ধীর, দুর্বল, ইন্টারেক্টিভ নয় এমন শেলে অনুপযোগী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;symlinks ব্যাবহার করুন`candidates/&amp;amp;lt;tool&amp;amp;gt;/current/bin`সরাসরি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শোধনের পর অ্যালিয়াস অনুপস্থিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ওয়ার্যাপার`nvm=&amp;#39;_nvm&amp;#39;`.zshrc-এ পরিবর্তন শুধু রিলোড করার পরে প্রভাব পায়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শেল রিস্টার্ট কর অথবা`source ~/.zshrc`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;OpenCode পরিবর্তনগুলো দেখে না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজেন্টটি ইতিমধ্যে পুরনো .zshenv ফাইল দিয়ে তার সাব-শেলগুলো চালিয়েছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;.zshenv সংশোধনের পরে OpenCode পুনরায় চালু করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;.zshenv অতিরিক্তভাবে লোড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভারী ফাংশন বা ইন্টারেক্টিভ ইনিশিয়ালাইজেশন .zshenv-এ রাখুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;.zshenv = পরিবেশ চলবده + PATH শুধু. না`source`, কোনো ভারী ফাংশন নেই, কোনো প্রম্পট নেই.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখা_পাওয়া&amp;quot;&amp;gt;শেখা পাওয়া&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;.zshrc` ইন্টার্যাক্টিভ, &amp;lt;code&amp;gt;.zshenv&amp;lt;/code&amp;gt; সার্বজনীন&amp;lt;/strong&amp;gt;— যদি একটি ভেরিয়েবল &amp;lt;em&amp;gt;সব&amp;lt;/em&amp;gt; শেল (AI এজেন্ট, cron, স্ক্রিপ্ট, IDE) এ থাকতে দরকার, তাহলে Jaya এtte`.zshenv`. সালোনটি আরামদায়ক, কিন্তু প্রবেশের হলে একমাত্র স্থান যেখানে সবার গমন হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বার্জন ম্যানেজার সমান নেই&amp;lt;/strong&amp;gt;— SDKMAN সিমলিংক তৈরি করে`current`ডিজাইনের মাধ্যমে। NVM না। এই ঘাটতি ম্যানুয়ালি পূর্ণ করতে হবে। এটি একটি গুরুত্বপূর্ণ শিক্ষা: আপনার PATH কনফিগার করার আগে, যাচাই করুন যে আপনার প্যাকেজ ম্যানেজার একটি স্থabile নকড়ি পয়েন্ট দান করে কি না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;.zshenv-এ প্রারম্ভ স্ক্রিপ্টগুলো উৎস নিন না&amp;lt;/strong&amp;gt;—&amp;lt;code&amp;gt;sdkman-init.sh&amp;lt;/code&amp;gt; et `nvm.sh`এইগুলি ইন্টারেক্টিভ শেলের জন্য ডিজাইন করা হয়েছে। এইগুলো ধীর এবং নাজুক একটি নন-ইন্টারেক্টিভ পরিবেশে। সিমলিংকগুলি`current`পর্যাপ্ত এবং তৎক্ষণিক।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অ-ইন্টারেক্টিভ শেলে সর্বদা পরীক্ষা করুন&amp;lt;/strong&amp;gt;—`zsh -c &amp;#39;echo $PATH&amp;#39;`একটি এজেন্টের যা দেখে তা ঠিকভাবে অনুকরণ করে। এটি যাচাই পরীক্ষা। এই পরীক্ষা না থাকলে, আপনি জâne না যে আপনার কনফিগারেশন এজেন্টদের জন্য কাজ করে কিনা।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ওয়্র্যাপার প্যাটার্নটি পুন:প্রয়োগযোগ্য&amp;lt;/strong&amp;gt;— একই প্যাটার্ন`_nvm`+`alias nvm=&amp;#39;_nvm&amp;#39;`যে কোনও টুল যা ডাইনামিকভাবে PATH পরিবর্তন করে কোনও স্থিতিশীল চিহ্ন ছোড়াই না, সেগুলিতে প্রয়োগ করা হয়। এটি আপনার টুলবক্সের আরেকটি টুল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;পূর্বে&amp;quot; as avant {
  card &amp;quot;ইন্টারঅ্যাক্টিভ শেল : ✅
নন-ইন্টারঅ্যাক্টিভ শেল : ❌
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;পূর্বে&amp;quot; as avant {
  card &amp;quot;ইন্টারঅ্যাক্টিভ শেল : ✅
নন-ইন্টারঅ্যাক্টিভ শেল : ❌
OpenCode : ❌
Cron : ❌
স্ক্রিপ্ট : ❌&amp;quot; as av1 #FDEDEC
}

rectangle &amp;quot;পরে&amp;quot; as apres {
  card &amp;quot;ইন্টারঅ্যাক্টিভ শেল : ✅
অইন্টারঅ্যাক্টিভ শেল : ✅
OpenCode : ✅
Cron : ✅
স্ক্রিপ্ট : ✅&amp;quot; as ap1 #E8F8E8
}

avant --&amp;amp;gt; apres : .zshenv +\nsymlink ~/.nvm/current

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষ_যাচাই&amp;quot;&amp;gt;শেষ যাচাই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তৈরি করার পরে`.zshenv`এবং NVM সিমলিংক যাচাই করুন যে সব شيء কাজ করে — দুটো প্রেক্ষাপটের মধ্যে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Shell interactif (votre terminal)
gh --version &amp;amp;amp;&amp;amp;amp; java -version &amp;amp;amp;&amp;amp;amp; node --version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Shell non-interactif (simulation OpenCode)
zsh -c &amp;#39;gh --version &amp;amp;amp;&amp;amp;amp; java -version &amp;amp;amp;&amp;amp;amp; node --version&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উভয়কে সফল হতে হবে। যদি হ্যাঁ, তাহলে আপনার AI এজেন্ট আপনার মতো একই টুলগুলো দেখবে। যদি না, ধাপে ধাপে নিরীক্ষনে ফিরিয়ে যান — আপনি সম্ভবত একটি পথ ভুলে গেছেন বা NVM সিমলিঙ্ক আপ-টু-ডেট নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এই পরীক্ষাটি অটোমেটাইজ করুন।&amp;lt;/strong&amp;gt;এই পরীক্ষাটি আপনার সরঞ্জামগুলোর প্রতিটি আপডেটের পরে চালানোর জন্য একটি হেলথচেক স্ক্রিপ্টে যোগ করুন। Un`zsh -c &amp;#39;which java &amp;amp;amp;&amp;amp;amp; which node &amp;amp;amp;&amp;amp;amp; which gh&amp;#39;`CI-এ, এটি আকস্মিক ঘটনাদের বিরুদ্ধে একটি নিশ্চয়তা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(empty) একটি নন-ইন্টারঅ্যাক্টিভ শেল একটি নীরব অতিথির মতো: এটি শুধুমাত্র প্রবেশদ্বারের দিকে প্রদর্শিত যে বিষয়গুলো পড়ে। যদি PATH সালনে থাকে, তবে তা কখনো দেখবে না। &amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লিঙ্ক&amp;quot;&amp;gt;লিঙ্ক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রسمী_ডকুমেন্টেশন&amp;quot;&amp;gt;রسمী ডকুমেন্টেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://zsh.sourceforge.io/Doc/Release/Files.html&amp;quot;&amp;gt;Zsh দস্তাবেজ : Startup Files&amp;lt;/a&amp;gt;— Zsh ফাইল ইনিশিয়ালাইজেশনের অফিসিয়াল রেফারেন্স। সেখানে সব ব্যাখ্যা করা হয়েছে, যদিও প্রায়শই তা ভুলে যাওয়া হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://opencode.ai/docs/config/&amp;quot;&amp;gt;OpenCode : কনফিগারেশন&amp;lt;/a&amp;gt;OpenCode কীভাবে কনফিগার করবেন এবং এর চালানোর পরিবেশকে কীভাবে সেট আপ করবেন?&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উল্লেখিত_সরঞ্জাম&amp;quot;&amp;gt;উল্লেখিত সরঞ্জাম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/nvm-sh/nvm&amp;quot;&amp;gt;NVM GitHub-এ&amp;lt;/a&amp;gt;— Node Version Manager. Node.js সংস্করণ ব্যবস্থাপক।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://sdkman.io&amp;quot;&amp;gt;SDKMAN — রسمি সাইট&amp;lt;/a&amp;gt;— SDKMAN! জেভিএম (Java, Kotlin, Gradle&amp;amp;#8230;&amp;amp;#8203;)-এর সংস্করণ ব্যবস্থাপক&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://sdkman.io/install&amp;quot;&amp;gt;SDKMAN : ইন্সটলেশন&amp;lt;/a&amp;gt;— SDKMAN ইনস্টলেশন গাইড&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://cli.github.com&amp;quot;&amp;gt;gh` — গিটহাব CLI&amp;lt;/a&amp;gt;— গিটহাব কমান্ড লাইন টুল, যা প্রত্যেক ডেভেলপারকে অপরিহার্য।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://gradle.org&amp;quot;&amp;gt;গ্রেডল — অফিসিয়াল সাইট&amp;lt;/a&amp;gt;— SDKMAN এর মাধ্যমে আমরা যে বিল্ড সিস্টেমটি ইনস্টল করছি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://pnpm.io&amp;quot;&amp;gt;pnpm — অফিশিয়াল সাইট&amp;lt;/a&amp;gt;— দ্রুত এবং স্থান-মুক্তিপ্রবণ Node.js প্যাকেজ ম্যানেজার।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.jetbrains.com/toolbox-app/&amp;quot;&amp;gt;JetBrains টুলবক্স&amp;lt;/a&amp;gt;— জেটব্রেইন্স আইডি ই ম্যানেজার, যা তার স্ক্রিপ্টগুলো পাথে যোগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://blog.andy2003.org/posts/2022/zsh-dotfiles/&amp;quot;&amp;gt;Zsh dotfiles : একটি সম্পূর্ণ গাইড&amp;lt;/a&amp;gt;— Zsh ডটফাইলসের ব্যবস্থাপনার বিষয়ে একটি গভীর নিবন্ধ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://wiki.archlinux.org/title/Zsh&amp;quot;&amp;gt;Zsh আর্ক উইকি-তে&amp;lt;/a&amp;gt;— এটি Zsh-এর একটি সর্বোত্তম কমিউনিটি ডকুমেন্টেশন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/nvm-sh/nvm/issues&amp;quot;&amp;gt;NVM issues GitHub&amp;lt;/a&amp;gt;— সিমলিংকের আশেপাশের আলোচনা দেখতে`current`এবং PATH-এর সমস্যা।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গ্রেডল ওয়ার্কফ্লোতে Graphify সংহত করুন : Knowledge Graph থেকে PlantUML ডায়াগ্রাম পর্যন্ত একটি কমান্ডে</title>
            <link >https://cheroliv.com//blog/2026/0105_integrer_graphify_workflow_gradle_post.html</link>
            <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0105_integrer_graphify_workflow_gradle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_ডায়াগ্রামগুলো_সর্বদা_কোডের_পিছনে_থাকে&amp;quot;&amp;gt;সমস্যা: ডায়াগ্রামগুলো সর্বদা কোডের পিছনে থাকে।&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_একটি_নিয়মিত_পাইপলাইন_knowledge_graph_plantuml&amp;quot;&amp;gt;সমাধান : একটি নিয়মিত পাইপলাইন Knowledge Graph → PlantUML&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_graphify_ইনস্টল_কর_এবং_knowledge_graph_বের_কর&amp;quot;&amp;gt;ধাপ ১: Graphify ইনস্টল কর এবং Knowledge Graph বের কর&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন&amp;quot;&amp;gt;ইনস্টলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যাহত্যাবরণ_কনফিগার_করুন&amp;quot;&amp;gt;ব্যাহত্যাবরণ কনফিগার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নালেজ_গ্রাফ_নিষ্কাশন_করা&amp;quot;&amp;gt;নালেজ গ্রাফ নিষ্কাশন করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_২_গ্রেডল_প্লাগইন_নোলেজ_গ্রাফটি_প্লান্টউএমএলে_রূপান্তর_করে&amp;quot;&amp;gt;ধাপ ২ : গ্রেডল প্লাগইন নোলেজ গ্রাফটি প্লান্টউএমএলে রূপান্তর করে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইনের_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইনের আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভিতরের_উপাদান&amp;quot;&amp;gt;ভিতরের উপাদান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেন্ডারিং_নিয়ম&amp;quot;&amp;gt;রেন্ডারিং নিয়ম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৩_দৈনন্দিন_ব্যবহার&amp;quot;&amp;gt;ধাপ ৩ : দৈনন্দিন ব্যবহার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_ডায়াগ্রাম&amp;quot;&amp;gt;সম্পূর্ণ ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কমিউনিটি_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;কমিউনিটি অনুযায়ী ফিল্টার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এজের_প্র컬_অনুযায়ী_फिल्टर&amp;quot;&amp;gt;এজের প্র컬 অনুযায়ী फिल्टर&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নোডের_ধরন_এবং_বিশ্বাস_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;নোডের ধরন এবং বিশ্বাস অনুযায়ী ফিল্টার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কাস্টম_আউটপুট_ডিরেক্টরি&amp;quot;&amp;gt;কাস্টম আউটপুট ডিরেক্টরি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রপার্টির_সম্পূর্ণ_রেফারেন্স&amp;quot;&amp;gt;প্রপার্টির সম্পূর্ণ রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গ্রেডল_ওয়ার্কফ্লোতে_সম্পূর্ণ_পাইপলাইন&amp;quot;&amp;gt;গ্রেডল ওয়ার্কফ্লোতে সম্পূর্ণ পাইপলাইন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কর্মপ্রবাহের_ধরন&amp;quot;&amp;gt;কর্মপ্রবাহের ধরন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডেভেলপমেন্ট_চক্রে_একীকরণ&amp;quot;&amp;gt;ডেভেলপমেন্ট চক্রে একীকরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনক্রমিক_আপডেট&amp;quot;&amp;gt;অনক্রমিক আপডেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডগফুডিং_প্লাগইন_নিজের_ডকুমেন্ট_তৈরি_করে&amp;quot;&amp;gt;ডগফুডিং : প্লাগইন নিজের ডকুমেন্ট তৈরি করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_এটি_নির্ধারিত_এবং_কেন_এটি_barrow&amp;quot;&amp;gt;কেন এটি নির্ধারিত (এবং কেন এটি Barrow)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইনের_নিজের_ডায়াগ্রাম&amp;quot;&amp;gt;পাইপলাইনের নিজের ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকল্প_গভর্নেন্সে_ইন্টিগ্রেশন&amp;quot;&amp;gt;প্রকল্প গভর্নেন্সে ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেটআপ_5_মিনিটের_চেকলিস্ট&amp;quot;&amp;gt;সেটআপ : 5 মিনিটের চেকলিস্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাতাল_এবং_শमन&amp;quot;&amp;gt;পাতাল এবং শमन&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেষে_যা_পাওয়া_যায়&amp;quot;&amp;gt;শেষে যা পাওয়া যায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লিংক&amp;quot;&amp;gt;লিংক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pather samay : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনার কোডবেস বাড়ছে। মডিউলের মধ্যে নির্ভরতাগুলি গুণাগুণে বাড়ছে। আর্কিটেকচার ডকুমেন্টেশন এখনও লেখা হয় তা পুরনো হয়ে যায়। এবং যদি আপনার Gradle বিল্ড &amp;lt;em&amp;gt;স্বয়ক্রিয়ভাবে&amp;lt;/em&amp;gt; বাস্তব কোডের গঠন থেকে আপডেটেড ডায়াগ্রাম তৈরি করতে পারত? এটিই সঠিকভাবে যা Graphify + PlantUML Gradle প্লাগইন পাইপলাইন করে:`graphify . --no-viz`Knowledge Graph.extract করে,`./gradlew generateKnowledgeGraphDiagram`এটিকে PlantUML ডায়াগ্রামে রূপান্তর করে। শূন্য LLM, শূন্য ম্যানুয়াল, ১০০% নির্ধারিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_ডায়াগ্রামগুলো_সর্বদা_কোডের_পিছনে_থাকে&amp;quot;&amp;gt;সমস্যা: ডায়াগ্রামগুলো সর্বদা কোডের পিছনে থাকে।&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কয়েক হাজার লাইনের বেশি যে কোন প্রকল্প এই সিনড্রোমকে ভোগ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পের শুরুতে একটি আর্কিটেকচার ডাইয়াগ্রাম আঁকা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোডটি বিকশিত হচ্ছে, নির্ভরতাগুলি পরিবর্তিত হচ্ছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডায়াগ্রামটি একটি সজোড় মিথ্যা হয়ে যায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কে এইটা আপডেট করে না, কারণ এইটা কষ্টকর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নতুন লোকরা এটায় নির্ভর করে কাজ করেন এবং ভুল করেন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/probleme-diagrammes-obsoletes.svg&amp;quot; alt=&amp;quot;probleme diagrammes obsoletes&amp;quot; width=&amp;quot;824&amp;quot; height=&amp;quot;418&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রশ্নটি &amp;lt;em&amp;gt;কি ডায়াগ্রাম প্রয়োজন?&amp;lt;/em&amp;gt; — সবাই জানে যে হ্যাঁ। প্রশ্নটি হল:&amp;lt;strong&amp;gt;কে তাদের আপ-টু-ডেট রাখে?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তর: কেউ নয়। যদি এটি স্বয়ংক্রিয় না হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_একটি_নিয়মিত_পাইপলাইন_knowledge_graph_plantuml&amp;quot;&amp;gt;সমাধান : একটি নিয়মিত পাইপলাইন Knowledge Graph → PlantUML&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিয়মটি সহজ: হাতে ডায়াগ্রাম আঁকে বদলে, আমরা তাদের&amp;lt;strong&amp;gt;কোডের প্রকৃত কাঠামো থেকে উৎপন্ন করে&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component &amp;quot;গ্রাফিফাই
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component &amp;quot;গ্রাফিফাই
(pip install graphifyy)&amp;quot; as Graphify
collections &amp;quot;graphify-out/graph.json
(জ্ঞান গ্রাফ)&amp;quot; as KGJSON
component &amp;quot;PlantUML Gradle প্লাগইন\n(generateKnowledgeGraphDiagram)&amp;quot; as Plugin
component &amp;quot;KnowledgeGraphParser&amp;quot; as Parser
component &amp;quot;জ্ঞান গ্র্যাফ রেন্ডারার&amp;quot; as Renderer
component &amp;quot;PlantumlService
(যাচাই + পিএনজি রেন্ডার)&amp;quot; as PS
collections &amp;quot;diagrams/knowledge-graph/\n(.puml + .png)&amp;quot; as Output

Développeur --&amp;amp;gt; Graphify : graphify . --no-viz
Graphify --&amp;amp;gt; KGJSON : extrait la structure\ndu code source
Développeur --&amp;amp;gt; Plugin : ./gradlew generateKnowledgeGraphDiagram
Plugin --&amp;amp;gt; Parser : parse(graph.json)
Parser --&amp;amp;gt; Plugin : KnowledgeGraph\n(noeuds + arêtes + communautés)
Plugin --&amp;amp;gt; Renderer : render(graph, filters)
Renderer --&amp;amp;gt; Plugin : code PlantUML\ndéterministe
Plugin --&amp;amp;gt; PS : validateSyntax + generateImage
PS --&amp;amp;gt; Output : .puml + .png

note bottom of Plugin
  Pipeline DÉTERMINISTE
  Aucun appel LLM
  Résultat reproductible
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি কমান্ড। এটাই সব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Étape 1 : extraire le Knowledge Graph
graphify . --no-viz

# Étape 2 : générer les diagrammes PlantUML
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল? কিছু ফাইল`.puml` et &amp;lt;code&amp;gt;.png&amp;lt;/code&amp;gt; dans &amp;lt;code&amp;gt;diagrams/knowledge-graph/&amp;lt;/code&amp;gt;, গিট-এ সংস্করণबंधিত, সবসময় কোডের সাথে আপ টু ডেট。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_১_graphify_ইনস্টল_কর_এবং_knowledge_graph_বের_কর&amp;quot;&amp;gt;ধাপ ১: Graphify ইনস্টল কর এবং Knowledge Graph বের কর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইনস্টলেশন&amp;quot;&amp;gt;ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Graphify একটি Python টুল যা আপনার কোডবেস বিশ্লেষণ করে এবং একটি কাঠামোগত জ্ঞান গ্রাফ নির্মাণ করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Méthode recommandée
uv tool install graphifyy &amp;amp;amp;&amp;amp;amp; graphify install --platform opencode

# Alternative avec pip
pip install graphifyy &amp;amp;amp;&amp;amp;amp; graphify install --platform opencode&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যাহত্যাবরণ_কনফিগার_করুন&amp;quot;&amp;gt;ব্যাহত্যাবরণ কনফিগার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ফাইল তৈরি করুন`.graphifyignore`প্রজেক্টের মূলে, ব্যবসায়িক লজিকের অংশ না হওয়া ফাইলগুলো বাদ দেওয়ার জন্য:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-gitignore hljs&amp;quot; data-lang=&amp;quot;gitignore&amp;quot;&amp;gt;# Secrets — JAMAIS dans le graphe
*-context.yml
*.env

# Fichiers générés
build/
.gradle/

# Tests fonctionnels
src/functionalTest/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নালেজ_গ্রাফ_নিষ্কাশন_করা&amp;quot;&amp;gt;নালেজ গ্রাফ নিষ্কাশন করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;graphify . --no-viz&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফ্ল্যাগ`--no-viz`HTML জেনারেশনটি স্কিপ করুন (Gradle পাইপলাইনে অপ্রয়োজনীয়)। ফলাফলটি একটি ফাইল`graphify-out/graph.json`Shamīl :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বন্ধন&amp;lt;/strong&amp;gt;: ক্লাস, ফাংশন, ফাইল — তাদের ধরন এবং সম্প্রদায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;মাছের কাঁটা&amp;lt;/strong&amp;gt;নোডের মধ্যে संबंध (EXTRACTED কোড से, INFERRED LLM由谁？)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্প্রদায়&amp;lt;/strong&amp;gt;: স্বয়ংক্রিয় সংযুক্ত নোডের গোষ্ঠী&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;স্ট্রাকচারের উদাহরণ`graph.json`&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;nodes&amp;quot;: [
    {&amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;LlmService&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 0},
    {&amp;quot;id&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;ApiKeyPool&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 0},
    {&amp;quot;id&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;PlantumlService&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 1}
  ],
  &amp;quot;links&amp;quot;: [
    {&amp;quot;source&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;target&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;relation&amp;quot;: &amp;quot;uses&amp;quot;, &amp;quot;confidence&amp;quot;: &amp;quot;EXTRACTED&amp;quot;, &amp;quot;weight&amp;quot;: 0.9},
    {&amp;quot;source&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;target&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;relation&amp;quot;: &amp;quot;calls&amp;quot;, &amp;quot;confidence&amp;quot;: &amp;quot;INFERRED&amp;quot;, &amp;quot;weight&amp;quot;: 0.7}
  ]
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উৎস কোড (&amp;lt;code&amp;gt;.kt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.java&amp;lt;/code&amp;gt;) tree-sitterによる স্থানীয়ভাবে বিশ্লেষণ করা হয়,&amp;lt;strong&amp;gt;অপ্রত্যাহার্য LLM&amp;lt;/strong&amp;gt;. শুধুমাত্র ডকুমেন্টেশন ফাইলগুলো (&amp;lt;code&amp;gt;.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.md&amp;lt;/code&amp;gt;) প্রয়োজন হয় একটি LLM কলের জন্য সেমানটিক এক্সট্র্যাকশন। তাই`--update`Kotlin কোডে প্রায় তৎক্ষণিক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_২_গ্রেডল_প্লাগইন_নোলেজ_গ্রাফটি_প্লান্টউএমএলে_রূপান্তর_করে&amp;quot;&amp;gt;ধাপ ২ : গ্রেডল প্লাগইন নোলেজ গ্রাফটি প্লান্টউএমএলে রূপান্তর করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাইপলাইনের_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইনের আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইন`com.cheroliv.plantuml`একটি কাজ অন্তর্ভুক্ত করে`generateKnowledgeGraphDiagram`যে রূপান্তর করে`graph.json`প্ল্যান্টইউএমল ডায়াগ্রামে ভাবে&amp;lt;strong&amp;gt;সম্পূর্ণরূপে నిర్ధారಿತ&amp;lt;/strong&amp;gt; :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/architecture-pipeline-kg.svg&amp;quot; alt=&amp;quot;architecture pipeline kg&amp;quot; width=&amp;quot;1103&amp;quot; height=&amp;quot;450&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ভিতরের_উপাদান&amp;quot;&amp;gt;ভিতরের উপাদান&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কম্পোনেন্ট&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ভุมিকা&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;KnowledgeGraphParser&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পার্স`graph.json`— সমর্থন করে ৩ ফরম্যাট : graphify natif (&amp;lt;code&amp;gt;nodes&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;), legacy ()&amp;lt;code&amp;gt;communities&amp;lt;/code&amp;gt;), flat. সংখ্যात्मक ID-কে লেবেলে সমাধান করে.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;KnowledgeGraphRenderer&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নির্ধারকভাবে একটি রূপান্তর করে`KnowledgeGraph`PlantUML কোডে। টাইপ অনুযায়ী গোষ্ঠী, প্যাকেজে কমিউনিটি, স্বয়ংচালিত লেজেন্ড।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;GenerateKnowledgeGraphDiagramTask&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gradle টাস্ক যা পার্স → রেন্ডার → বৈধতা যাচাই → PNG তৈরি করে। Gradle বৈশিষ্ট্যসমূহের মাধ্যমে কনফিগারযোগ্য।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kgmodels.kt&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডেটা মডেল :`KnowledgeGraph`, &amp;lt;code&amp;gt;KnowledgeGraphNode&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;KnowledgeGraphEdge&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;KnowledgeGraphCommunity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;EdgeType&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;PlantumlService&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সিনট্যাক্স যাচাই + PNG রেন্ডারিং (প্লাগইনের সমস্ত কাজে পুনঃব্যবহারযোগ্য).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রেন্ডারিং_নিয়ম&amp;quot;&amp;gt;রেন্ডারিং নিয়ম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রেন্ডারার ডিটারমিনিস্টিক ভিজ্যুয়াল কনভেনশন প্রয়োগ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কেৰের ধরন&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;নোটেশন PlantUML&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অর্থ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নিষ্কাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;-&amp;amp;#8594;&amp;lt;/code&amp;gt;(সরাসর রেখা, কালো)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সোর্স কোড থেকে নিষ্কাশিত সম্পর্ক (নিশ্চয়তা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনুমানিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;..&amp;amp;gt;&amp;lt;/code&amp;gt;(ডটেড লাইন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LLM tarafından অনুমানিত সম্পর্ক (বিশ্বাসের স্কোর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অস্পষ্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;--x&amp;lt;/code&amp;gt;(লাল চকচক রেখা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অস্পষ্ট সম্পর্ক (যাচাই করতে হবে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমুদয়গুলোকে স্বয়ংক্রিম রঙ প্যালেট সহ PlantUML প্যাকেজের মতো প্রদর্শিত করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_৩_দৈনন্দিন_ব্যবহার&amp;quot;&amp;gt;ধাপ ৩ : দৈনন্দিন ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্পূর্ণ_ডায়াগ্রাম&amp;quot;&amp;gt;সম্পূর্ণ ডায়াগ্রাম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Générer le diagramme du Knowledge Graph complet
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আউটপুট :`diagrams/knowledge-graph/knowledge-graph-full.puml`+&amp;lt;code&amp;gt;.png&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কমিউনিটি_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;কমিউনিটি অনুযায়ী ফিল্টার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Une seule communauté
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0

# Limiter le nombre de noeuds (lisibilité)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0 \
  -Pplantuml.kg.maxNodes=15&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এজের_প্র컬_অনুযায়ী_फिल्टर&amp;quot;&amp;gt;এজের প্র컬 অনুযায়ী फिल्टर&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Uniquement les relations certaines (EXTRACTED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED

# Relations certaines + inférées
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED,INFERRED&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নোডের_ধরন_এবং_বিশ্বাস_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;নোডের ধরন এবং বিশ্বাস অনুযায়ী ফিল্টার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Uniquement les classes de code
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.nodeTypes=code

# Seuil de confiance minimum (pour les INFERRED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.minConfidence=0.7&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কাস্টম_আউটপুট_ডিরেক্টরি&amp;quot;&amp;gt;কাস্টম আউটপুট ডিরেক্টরি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.outputDir=docs/architecture&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রপার্টির_সম্পূর্ণ_রেফারেন্স&amp;quot;&amp;gt;প্রপার্টির সম্পূর্ণ রেফারেন্স&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;স্বত্ব&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ডিফল্ট&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিবরণ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(সব)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নাম অনুযায়ী সম্প্রদায় ফিল্টার করুন (উপস্ট্রিং মিল)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.edgeTypes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(সব)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;किनারের প্রকার, কমা দিয়ে পৃথক :`EXTRACTED`, &amp;lt;code&amp;gt;INFERRED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AMBIGUOUS&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.minConfidence&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজের জন্য ন্যূনতম আত্মবিশ্বাসের সীমা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.maxNodes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(অসীম)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রদর্শন করতে নোডের সর্বোচ্চ সংখ্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.nodeTypes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(সকল)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কমা দিয়ে পৃথক করা নোডের ধরন (উদা.&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.outputDir&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;diagrams/knowledge-graph&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইলদের জন্য আউটপুট ডিরেক্টরি`.puml` et &amp;lt;code&amp;gt;.png&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_গ্রেডল_ওয়ার্কফ্লোতে_সম্পূর্ণ_পাইপলাইন&amp;quot;&amp;gt;গ্রেডল ওয়ার্কফ্লোতে সম্পূর্ণ পাইপলাইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কর্মপ্রবাহের_ধরন&amp;quot;&amp;gt;কর্মপ্রবাহের ধরন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/workflow-complet.svg&amp;quot; alt=&amp;quot;workflow complet&amp;quot; width=&amp;quot;618&amp;quot; height=&amp;quot;714&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডেভেলপমেন্ট_চক্রে_একীকরণ&amp;quot;&amp;gt;ডেভেলপমেন্ট চক্রে একীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইনটি স্বাভাবিকভাবে উন্নয়নের মূল পর্যায়গুলিতে ইন্টিগ্রেট হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

state &amp;quot;বিকাশ&amp;quot; as dev
state &amp;quot;Extraction
^^^^^
 Syntax Error? (Assumed diagram type: state)

@startuml
skinparam backgroundColor #FEFEFE

state &amp;quot;বিকাশ&amp;quot; as dev
state &amp;quot;Extraction
graphify . --no-viz&amp;quot; as extract
state &amp;quot;উৎপাদন
./gradlew generateKnowledgeGraphDiagram&amp;quot; as generate
state &amp;quot;Commit
সংস্কারিত আকস&amp;quot; as commit

[*] --&amp;amp;gt; dev
dev --&amp;amp;gt; extract : Code modifié
extract --&amp;amp;gt; generate : graph.json à jour
generate --&amp;amp;gt; commit : .puml + .png générés
commit --&amp;amp;gt; dev : Diagrammes dans le repo

note right of extract
  Quasi instantané sur du code Kotlin
  (tree-sitter, pas de LLM)
end note

note right of generate
  Déterministe
  Pas de LLM
  Résultat reproductible
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অনক্রমিক_আপডেট&amp;quot;&amp;gt;অনক্রমিক আপডেট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোড পরিবর্তন হলে, আমরা পুরো গ্রাফকে শূন্য থেকে পুনঃনির্মাণ করি না :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Mise à jour incrémentale (fichiers modifiés uniquement)
graphify . --update

# Puis régénérer les diagrammes
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;--update`পুন:\\বের\\কORE\\শুধুমাত্র\\সংশোধিত\\ফाइल_groups\\(SHA256\\द्वारा\\शनाक्ता\\erte`graphify-out/cache/&amp;lt;/code&amp;gt;) Kotlin কোডে এটি প্রায়ৎক্ষণিক, কারণ tree-sitter স্থানীয়ভাবে কাজ করে এবং কোনো LLM আহ্বান না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডগফুডিং_প্লাগইন_নিজের_ডকুমেন্ট_তৈরি_করে&amp;quot;&amp;gt;ডগফুডিং : প্লাগইন নিজের ডকুমেন্ট তৈরি করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;PlantUML প্লাগইন প্রম্পটগুলোকে ডায়াগ্রামে রূপান্তর করে। এটি בנוסף নিজের &amp;lt;em&amp;gt;propre&amp;lt;/em&amp;gt; codebase-ের Knowledge Graphকে ডকুমেন্টেশন ডায়াগ্রামে রূপান্তর করতে পারে। এটি &amp;lt;em&amp;gt;dogfooding&amp;lt;/em&amp;gt; : প্লাগইন তার নিজের পরিষেবা ব্যবহার করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;পাইপলাইন স্বাভাবিক
(ব্যবহারকারী → নকশা)&amp;quot; as normal {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;পাইপলাইন স্বাভাবিক
(ব্যবহারকারী → নকশা)&amp;quot; as normal {
    [Fichier .prompt] as prompt
    [LlmService\n+ ApiKeyPool] as llm1
    [ProcessPlantumlPromptsTask] as task1
    [Diagramme PNG] as out1

    prompt --&amp;amp;gt; task1
    task1 --&amp;amp;gt; llm1
    llm1 --&amp;amp;gt; out1
}

package &amp;quot;Pipeline Knowledge Graph
(নির্ধারিত, LLM নেই)&amp;quot; as kg {
    [graphify-out/graph.json] as kgjson
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantumlService] as ps
    [Diagramme PNG\n(documentation du plugin)] as out2

    kgjson --&amp;amp;gt; parser
    parser --&amp;amp;gt; renderer
    renderer --&amp;amp;gt; ps
    ps --&amp;amp;gt; out2
}

package &amp;quot;Pipeline Dogfooding
(LLM → প্লাগইন ডকুমেন্টেশন)&amp;quot; as dogfood {
    [GraphifyPromptAdapter] as gpa
    [Fichiers .prompt\nauto-générés] as auto_prompt
    [LlmService\n+ ApiKeyPool] as llm2
    [ProcessPlantumlPromptsTask] as task2
    [Diagramme PNG\n(documentation LLM)] as out3

    kgjson --&amp;amp;gt; gpa
    gpa --&amp;amp;gt; auto_prompt
    auto_prompt --&amp;amp;gt; task2
    task2 --&amp;amp;gt; llm2
    llm2 --&amp;amp;gt; out3
}

note &amp;quot;একই LlmService, একই ApiKeyPool,
একই PlantumlService
— শূন্য ডুপ্লিকেশন&amp;quot; as N

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle-তে সম্পর্কিত কাজ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;টাস্ক&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;LLM ?&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বর্ণনা&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পরিবর্তন করো`graph.json`PlantUML-এ (নির্ধারিত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;generateDiagramDocs&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জেনারেট করো`.prompt`গ্রাফ থেকে, সেগুলোকে LLM-কে (dogfooding) ব্যবহার করে প্রক্রিয়া করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Documentation déterministe (rapide, pas de LLM)
./gradlew generateKnowledgeGraphDiagram

# Documentation LLM (plus riche, consomme des tokens)
./gradlew generateDiagramDocs&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_এটি_নির্ধারিত_এবং_কেন_এটি_barrow&amp;quot;&amp;gt;কেন এটি নির্ধারিত (এবং কেন এটি Barrow)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইনের মূল পয়েন্ট`generateKnowledgeGraphDiagram`:&amp;lt;strong&amp;gt;সে কোনো LLM কল করে না&amp;lt;/strong&amp;gt;. পরিবর্তন`graph.json`PlantUML একটি শুদ্ধ ফাংশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle &amp;quot;নির্ধারিত পাইপলাইন
(generateKnowledgeGraphDiagram)&amp;quot; as det {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle &amp;quot;নির্ধারিত পাইপলাইন
(generateKnowledgeGraphDiagram)&amp;quot; as det {
    [graph.json] as json
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantUML code] as puml

    json --&amp;amp;gt; parser : parse
    parser --&amp;amp;gt; renderer : KnowledgeGraph
    renderer --&amp;amp;gt; puml : render (fonction pure)
}

rectangle &amp;quot;Pipeline LLM
(processPlantumlPrompts)&amp;quot; as llm {
    [.prompt] as prompt
    [LlmService] as llmSvc
    [ChatModel] as model
    [PlantUML code] as puml2

    prompt --&amp;amp;gt; llmSvc
    llmSvc --&amp;amp;gt; model : API call
    model --&amp;amp;gt; puml2 : réponse non-déterministe
}

note bottom of det
  Même entrée → même sortie
  Pas de latence réseau
  Pas de coût en tokens
  Reproductible en CI
end note

note bottom of llm
  Même entrée → sortie variable
  Latence réseau (1-5s)
  Coût en tokens
  Nécessite une clave API
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তব সুবিধাগুলো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;লাভ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রত্যাবৃত্তিমূলকতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একই`graph.json`→ একই চিত্র। সঠিকভাবে। প্রতিবার।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LLM কল নেই = টোকেন নেই = API বিল নেই।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য লেটেন্সি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Parse + render ~100ms-এ নেয়, ১-৫ সেকেন্ড না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সামঞ্জস্যপূর্ণ CI&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;API কি দরকার নেই। ভিন্ন LLM প্রতিক্রিয়ার কারণে ফ্লকি টেস্ট নেই।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংস্করণযোগ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Le &amp;lt;code&amp;gt;.puml`টেক্সট জেনারেট করা হয়েছে। এটা করা হয়.`diff&amp;lt;/code&amp;gt;, PR-এ রিভিউয়ার, Git-এ সংস্করণ করা।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইপলাইনের_নিজের_ডায়াগ্রাম&amp;quot;&amp;gt;পাইপলাইনের নিজের ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লুপটি বন্ধ করতে, প্লাগইন দ্বারা তৈরি হওয়া পাইপলাইনের ডায়াগ্রাম এখানে দেওয়া হল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/pipeline-sequence.svg&amp;quot; alt=&amp;quot;pipeline sequence&amp;quot; width=&amp;quot;1671&amp;quot; height=&amp;quot;554&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকল্প_গভর্নেন্সে_ইন্টিগ্রেশন&amp;quot;&amp;gt;প্রকল্প গভর্নেন্সে ইন্টিগ্রেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্রজেক্টে, এই পাইপলাইনটি AI এজেন্টের জন্য EAGER/LAZY কনটেক্সট ম্যানেজমেন্ট রণনীতির অংশ হিসেবে একত্রিত হয়। নালেজ গ্রাফ হাতনির্দেশিত আর্কিটেকচার ডকুমেন্টেশনকে একটি গঠনগত, কুয়েরি योग্য এবং স্বয়ং আপডেটযোগ্য গ্রাফ দিয়ে প্রতিস্থাপন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;উৎসাহী
(সবসময় চার্জিত)&amp;quot; as eager {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;উৎসাহী
(সবসময় চার্জিত)&amp;quot; as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d&amp;#39;ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package &amp;quot;LAZY — কৌশল
(অনুরোধে)&amp;quot; as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package &amp;quot;LAZY — Graphify
(লক্ষিত প্রশ্ন)&amp;quot; as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package &amp;quot;পাইপলাইন PlantUML
(স্বয়ংক্রিয়ভাবে তৈরি)&amp;quot; as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --&amp;amp;gt; eager : Lit en début de session
Agent ..&amp;amp;gt; lazy_strat : Charge si type détecté
Agent ..&amp;amp;gt; lazy_graph : Query si besoin structurel
kgTask --&amp;amp;gt; diagrams : Déterministe
ddTask --&amp;amp;gt; diagrams : Via LLM

note right of gr
  Condensé du Knowledge Graph
  God nodes + communautés
  Remplace ECOSYSTEM_OVERVIEW
  (225 lignes → 50 lignes)
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি পদ্ধতির সংমিলন পরিপূরক :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্ট্র্যাটেজি কখন এবং কিভাবে পরিচালনা করে&amp;lt;/strong&amp;gt;— শাসন, কর্মপ্রবাহ, সংরক্ষণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Graphify কী এবং কোথায় পরিচালনা করে&amp;lt;/strong&amp;gt;— কোডের গঠন, সম্পর্ক, লক্ষ্য করা কুয়েরি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt; সেশন কৌশলটি পরিচালনা করে&amp;lt;strong&amp;gt;কখন&amp;lt;/strong&amp;gt; et le &amp;lt;strong&amp;gt;কেমন&amp;lt;/strong&amp;gt;(শাসন, কর্মপ্রবাহ, সীমা), Graphify এটি পরিচালনা করে&amp;lt;strong&amp;gt;কি&amp;lt;/strong&amp;gt; et le &amp;lt;strong&amp;gt;কোথায়&amp;lt;/strong&amp;gt;(কোডের গঠন, সম্পর্ক, লক্ষ্য করা কোয়েরি)। প্ল্যান্টুএমল পাইপলাইনটি পরিচালনা করে&amp;lt;strong&amp;gt;কি দিয়ে&amp;lt;/strong&amp;gt;(নির্ণեյ ডায়াগ্রাম, সংস্করণযোগ্য, সর্বদা আপ-টু-ডেট) (output nothing)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেটআপ_5_মিনিটের_চেকলিস্ট&amp;quot;&amp;gt;সেটআপ : 5 মিনিটের চেকলিস্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;amp;lt;/think&amp;amp;gt; (No text provided to translate)&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ধাপ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অর্ডার&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Graphify installation korun&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uv tool install graphifyy&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যাখ্যাগুলি কনফিগার করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সৃষ্টি করা`.graphifyignore`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Knowledge Graph নিষ্কাশন করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;graphify . --no-viz&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়াগ্রামগুলো তৈরি করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফলাফলগুলো কমিট করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;git add diagrams/knowledge-graph/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Script complet en 5 commandes
uv tool install graphifyy
cat &amp;amp;gt; .graphifyignore &amp;amp;lt;&amp;amp;lt; &amp;#39;EOF&amp;#39;
*-context.yml
*.env
build/
.gradle/
EOF
graphify . --no-viz
./gradlew generateKnowledgeGraphDiagram
git add graphify-out/GRAPH_REPORT.adoc graphify-out/graph.json diagrams/knowledge-graph/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাতাল_এবং_শमन&amp;quot;&amp;gt;পাতাল এবং শमन&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;পাঁজ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিবরণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রশমন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অতিঘন গ্রাফ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বড় প্রকল্প শতকটি অপঠনযোগ্য নোড তৈরি করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্য�্যবহার করা`-Pplantuml.kg.maxNodes=30`এবং সম্প্রদায় অনুযায়ী ফিল্টার করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অতিরিক্তভাবে বিস্তৃত বর্জন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনেক বেশি ফাইল এর মধ্যে`.graphifyignore`গ্রাফের মানকে কমায়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র credentials এবং build বর্জন করে শুরু করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;তীরদের দিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজগুলো INFERRED এর একটি অস্পষ্ট দিশা থাকতে পারে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনুযায়ী ফিল্টার`-Pplantuml.kg.edgeTypes=EXTRACTED`শুধুমাত্র নিশ্চিত সম্পর্কের জন্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রচলিত গ্রাফ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোড পরিবর্তিত হয় তবে গ্রাফ পুনঃনির্মাণ হয় না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহার করা`graphify . --update`নিয়মিতভাবে বা গিট হুক`graphify hook install`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপডেট করা খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ইনক্রিমেন্টাল আপডেটগুলি প্রায় বিনামূল্যে (tree-sitter local)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র ডক্স (&amp;lt;code&amp;gt;.adoc&amp;lt;/code&amp;gt;) LLM টোকেন খরচ করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষে_যা_পাওয়া_যায়&amp;quot;&amp;gt;শেষে যা পাওয়া যায়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;আগে&amp;quot; as avant {
    card &amp;quot;হাতে আঁকা ডায়াগ্রাম
এই সব সময় অপ্রচলিত
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;আগে&amp;quot; as avant {
    card &amp;quot;হাতে আঁকা ডায়াগ্রাম
এই সব সময় অপ্রচলিত
কেউ এই ডায়াগ্রামগুলো আপডেট করে না&amp;quot; as av1 #FDEDEC
}

rectangle &amp;quot;পরে&amp;quot; as apres {
    card &amp;quot;স্বয়ংক্রিয়ভাবে উত্পন্ন ডায়াগ্রাম
কোডের সাথে সর্বদা আপ-টু-ডেট
গিট-এ ভার্সনকৃত
নির্ধারিত এবং পুনরুত্পাদনযোগ্য&amp;quot; as ap1 #E8F8E8
}

avant --&amp;amp;gt; apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবীয় সুবিধা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;লাভ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিস্তার&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডকুমেন্টেশন সর্বদা আপ-টু-ডেট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ঐকতালিক গ্রাফগুলো বর্তমান কোডকে প্রতিফলিত করে, কোনো ম্যানুয়াল স্ন্যাপশট নয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য রক্ষাবেক্ষণ পরিশ্রম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়াগ্রামগুলো প্রতিটি বিল্ডে পুনরুত্পন্ন হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রযুক্তিগত ঋণের হ্রাস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়গ্রামগুলো হাতে বজায় রাখার দরকার আর নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নতুনদের জন্য ভিজ্যুয়াল কনটেক্সট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একজন নতুন ডেভেলপার ডায়াগ্রামগুলো দেখে আর্কিটেকচার বুঝে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পটেনশিয়াল ফাইন-টিউনিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সাব-গ্রাফ → ডায়াগ্রাম (যুগ) কৃত্রিম বুদ্ধিমত্তা প্রশিক্ষণের উদাহরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বয়ংক্রিয় যাচাই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`PlantumlService.validateSyntax()`প্রতিটি উত্পন্ন ডায়াগ্রাম পরীক্ষা করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দ্রুত অনবোর্ডিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5 চিত্র = আর্কিটেকচারের সম্পূর্ণ দৃশ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ যে ব্যক্তির একটি _কেন&amp;lt;/em&amp;gt; আছে, সে সকল &amp;lt;em&amp;gt;কীভাবে&amp;lt;/em&amp;gt; সহ্য করতে পারে। &amp;lt;/em&amp;gt;__&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;কেন&amp;lt;/em&amp;gt; : সর্বгда আপডেট থাকা ডায়াগ্রাম। &amp;lt;em&amp;gt;comment&amp;lt;/em&amp;gt; : দুটি কমান্ড یک Gradle পাইপлайনে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লিংক&amp;quot;&amp;gt;লিংক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/nicholasgasior/graphify&amp;quot;&amp;gt;Graphify GitHub-এ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/cheroliv/plantuml-gradle&amp;quot;&amp;gt;PlantUML Gradle প্লাগইন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog/2026/0104_fg_command_super_tips_post.html&amp;quot;&amp;gt;fg কমান্ডের সুপার টিপস&amp;lt;/a&amp;gt;— পূর্বের টার্মিনাল ওয়ার্কফ্লো সম্পর্কে লিখিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Graphify-কে Gradle ওয়ার্কফ্লোএ ইন্টিগ্রেট করা : Knowledge Graph থেকে PlantUML ডায়াগ্রামে এক কমান্ডে</title>
            <link >https://cheroliv.com//blog/pilot-batch/0105_integrer_graphify_workflow_gradle_post.html</link>
            <pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/pilot-batch/0105_integrer_graphify_workflow_gradle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_ডায়াগ্রামগুলো_কোডের_পিছনে_পড়েছে&amp;quot;&amp;gt;সমস্যা : ডায়াগ্রামগুলো কোডের পিছনে পড়েছে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_একটি_পাইপলাইন_নিয়মিত_জ্ঞান_গ্রাফ_plantuml&amp;quot;&amp;gt;সমাধান : একটি পাইপলাইন নিয়মিত জ্ঞান গ্রাফ → PlantUML&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_graphify_ইনস্টল_করুন_এবং_knowledge_graph_বের_করুন&amp;quot;&amp;gt;ধাপ ১ : Graphify ইনস্টল করুন এবং Knowledge Graph বের করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন&amp;quot;&amp;gt;ইনস্টলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাতিলকরণগুলি_কনফিগার_করুন&amp;quot;&amp;gt;বাতিলকরণগুলি কনফিগার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_knowledge_graph_বের_করুন&amp;quot;&amp;gt;Knowledge Graph বের করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_2_gradle_প্লাগইন_knowledge_graph_কে_plantuml_এ_রূপান্তর_করা_হয়&amp;quot;&amp;gt;ধাপ 2 : Gradle প্লাগইন Knowledge Graph কে PlantUML-এ রূপান্তর করা হয়&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইন_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইন আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অভ্যন্তরীণ_উপকরণ&amp;quot;&amp;gt;অভ্যন্তরীণ উপকরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেন্ডারিং_নিয়ম&amp;quot;&amp;gt;রেন্ডারিং নিয়ম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৩_দৈনন্দিন_ব্যবহার&amp;quot;&amp;gt;ধাপ ৩ : দৈনন্দিন ব্যবহার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_ডায়াগ্রাম&amp;quot;&amp;gt;সম্পূর্ণ ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্প্রদায়_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;সম্প্রদায় অনুযায়ী ফিল্টার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এজের_ধরন_অনুযায়ী_ফিল্টার&amp;quot;&amp;gt;এজের ধরন অনুযায়ী ফিল্টার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নোডের_ধরন_এবং_বিশ্বাস_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;নোডের ধরন এবং বিশ্বাস অনুযায়ী ফিল্টার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কাস্টম_আউটপুট_ডিরেক্টরি&amp;quot;&amp;gt;কাস্টম আউটপুট ডিরেক্টরি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বৈশিষ্ট্যের_সম্পূর্ণ_রেফারেন্স&amp;quot;&amp;gt;বৈশিষ্ট্যের সম্পূর্ণ রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গ্রেডেল_ওয়ার্কফ্লোতে_সম্পূর্ণ_পাইপলাইন&amp;quot;&amp;gt;গ্রেডেল ওয়ার্কফ্লোতে সম্পূর্ণ পাইপলাইন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ওয়ার্কফ্লো_প্রকার&amp;quot;&amp;gt;ওয়ার্কফ্লো প্রকার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকাশ_চক্রে_একীকরণ&amp;quot;&amp;gt;বিকাশ চক্রে একীকরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্র진ক্রমিক_আপডেট&amp;quot;&amp;gt;প্র진ক্রমিক আপডেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডগফুডিং_প্লাগইনটি_নিজেই_ডকুমেন্টেশন_করে&amp;quot;&amp;gt;ডগফুডিং: প্লাগইনটি নিজেই ডকুমেন্টেশন করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_এটি_নির্ধারক_এবং_কেন_তা_গুরুত্বপূর্ণ&amp;quot;&amp;gt;কেন এটি নির্ধারক (এবং কেন তা গুরুত্বপূর্ণ)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইন_নিজের_ডায়াগ্রামগুলো&amp;quot;&amp;gt;পাইপলাইন নিজের ডায়াগ্রামগুলো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রজেক্ট_গবর্নেন্সে_ইন্টিগ্রেশন&amp;quot;&amp;gt;প্রজেক্ট গবর্নেন্সে ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেটআপ_৫_মিনিটে_চেকলিস্ট&amp;quot;&amp;gt;সেটআপ : ৫ মিনিটে চেকলিস্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ঝুঁকি_এবং_নিরাময়&amp;quot;&amp;gt;�ঝুঁকি এবং নিরাময়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেষে_যা_পাওয়া_যায়&amp;quot;&amp;gt;শেষে যা পাওয়া যায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লিঙ্ক_groups&amp;quot;&amp;gt;লিঙ্ক_groups&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pdfের সময় : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনার কোডবেস বাড়ছে। মডিউলের মধ্যে নির্ভরতাগুলি গুণগুণে বাড়ছে। আর্কিটেকচার ডকুমেন্টেশন লিখতেই পুরনো হয়ে যায়। আপনার Gradle বিল্ড যদি স্বয়ংক্রিয়ভাবে আসল কোডের গঠন থেকে আপ-টু-ডেট ডায়াগ্রাম তৈরি করতে পারত, কিভাবে হতো? ঠিক এটাই Graphify + PlantUML Gradle Plugin পাইপলাইনটি করে।&amp;lt;code&amp;gt;graphify . --no-viz`Knowledge Graph নিষ্কাশন করে,&amp;lt;/code&amp;gt;./gradlew generateKnowledgeGraphDiagram`এটিকে PlantUML ডায়াগ্রামে রূপান্তর করে। শূন্য LLM, শূন্য ম্যানুয়াল, ১০০% নির্ধারিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_ডায়াগ্রামগুলো_কোডের_পিছনে_পড়েছে&amp;quot;&amp;gt;সমস্যা : ডায়াগ্রামগুলো কোডের পিছনে পড়েছে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কয়েক হাজার লাইনের বেশি যেকোনো প্রজেক্ট এই সিনড্রোমকে জানে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রজেক্টের শুরুতে আমরা একটি আর্কিটেকচার ডায়াগ্রাম আঁকে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোড বদলে যাচ্ছে, নির্ভরতাগুলি পরিবর্তিত হচ্ছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;চিত্র একটি সাজসুসজ্জিত মিথ্যা হয়ে উঠে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কেউ এটি আপডেট করে না কারণ এটি বিরক্তিকর&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নতুন আসন্নরা সেই উপর নির্ভর করে এবং ভুল করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/probleme-diagrammes-obsoletes.svg&amp;quot; alt=&amp;quot;probleme diagrammes obsoletes&amp;quot; width=&amp;quot;824&amp;quot; height=&amp;quot;418&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রশ্নটি হল না &amp;lt;em&amp;gt;কি আমাদের ডায়াগ্রাম দরকার?&amp;lt;/em&amp;gt; — সবাই জানে যে হ্যাঁ। প্রশ্নটি হল :&amp;lt;strong&amp;gt;কে他们的 আপ-টু-ডেট রাখে?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তর: কেউ না। যদি না তা স্বয়ংক্রিয় হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_একটি_পাইপলাইন_নিয়মিত_জ্ঞান_গ্রাফ_plantuml&amp;quot;&amp;gt;সমাধান : একটি পাইপলাইন নিয়মিত জ্ঞান গ্রাফ → PlantUML&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিয়মটি সহজ: হাতে চিত্র আঁকে না, আমরা সেগুলো&amp;lt;strong&amp;gt;কোডের বাস্তব কাঠামো থেকে তৈরি হয়&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component &amp;quot;Graphify\n(pip install graphifyy)&amp;quot; as Graphify
collections &amp;quot;graphify-out/graph.json\n(জ্ঞান গ্রাফ)&amp;quot; as KGJSON
component &amp;quot;PlantUML Gradle প্লাগইন
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur
component &amp;quot;Graphify\n(pip install graphifyy)&amp;quot; as Graphify
collections &amp;quot;graphify-out/graph.json\n(জ্ঞান গ্রাফ)&amp;quot; as KGJSON
component &amp;quot;PlantUML Gradle প্লাগইন
(generateKnowledgeGraphDiagram)&amp;quot; as Plugin
component &amp;quot;KnowledgeGraphParser&amp;quot; as Parser
component &amp;quot;জ্ঞান গ্রাফ রেন্ডারার&amp;quot; as Renderer
component &amp;quot;PlantumlService
(যাচাই + PNG রেন্ডার)&amp;quot; as PS
collections &amp;quot;আরেখ/জ্ঞান-গ্রাফ/\n(.puml + .png)&amp;quot; as Output

Développeur --&amp;amp;gt; Graphify : graphify . --no-viz
Graphify --&amp;amp;gt; KGJSON : extrait la structure\ndu code source
Développeur --&amp;amp;gt; Plugin : ./gradlew generateKnowledgeGraphDiagram
Plugin --&amp;amp;gt; Parser : parse(graph.json)
Parser --&amp;amp;gt; Plugin : KnowledgeGraph\n(noeuds + arêtes + communautés)
Plugin --&amp;amp;gt; Renderer : render(graph, filters)
Renderer --&amp;amp;gt; Plugin : code PlantUML\ndéterministe
Plugin --&amp;amp;gt; PS : validateSyntax + generateImage
PS --&amp;amp;gt; Output : .puml + .png

note bottom of Plugin
  Pipeline DÉTERMINISTE
  Aucun appel LLM
  Résultat reproductible
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি কমান্ড। এটাই সব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Étape 1 : extraire le Knowledge Graph
graphify . --no-viz

# Étape 2 : générer les diagrammes PlantUML
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফলাফল? কিছু ফাইল`.puml` et &amp;lt;code&amp;gt;.png`মধে`diagrams/knowledge-graph/&amp;lt;/code&amp;gt;, ভার্সনকৃত Git-এ, সবsomয় কোডের সাথে আপ-টু-ডেট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_১_graphify_ইনস্টল_করুন_এবং_knowledge_graph_বের_করুন&amp;quot;&amp;gt;ধাপ ১ : Graphify ইনস্টল করুন এবং Knowledge Graph বের করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইনস্টলেশন&amp;quot;&amp;gt;ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Graphify একটি পাইথন সরঞ্জাম যা আপনার কোডবেস বিশ্লেষণ করে এবং গঠিত জ্ঞান গ্রাফ তৈরি করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Méthode recommandée
uv tool install graphifyy &amp;amp;amp;&amp;amp;amp; graphify install --platform opencode

# Alternative avec pip
pip install graphifyy &amp;amp;amp;&amp;amp;amp; graphify install --platform opencode&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাতিলকরণগুলি_কনফিগার_করুন&amp;quot;&amp;gt;বাতিলকরণগুলি কনফিগার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ফাইল তৈরি করুন`.graphifyignore`প্রকল্পের রুটে, ব্যবসায়িক লজিকের অংশ নয় এমন ফাইলগুলো বাদ দেওয়ার জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-gitignore hljs&amp;quot; data-lang=&amp;quot;gitignore&amp;quot;&amp;gt;# Secrets — JAMAIS dans le graphe
*-context.yml
*.env

# Fichiers générés
build/
.gradle/

# Tests fonctionnels
src/functionalTest/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_knowledge_graph_বের_করুন&amp;quot;&amp;gt;Knowledge Graph বের করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;graphify . --no-viz&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;flagটি`--no-viz`HTML তৈরির প্রক্রিয়া অতিক্রম করে (Gradle পাইপলে অপ্রয়োজনীয়)। ফলাফলটি একটি ফাইল।`graphify-out/graph.json`শামিল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বন্ধন&amp;lt;/strong&amp;gt;: শ্রেণী, ফাংশন, ফাইল — তাদের ধরন ও সম্প্রদায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কিনার&amp;lt;/strong&amp;gt;: নোডের মধ্যে সম্পর্ক (EXTRACTED কোড থেকে, INFERRED LLM দ্বারা)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্প্রদায়&amp;lt;/strong&amp;gt;: সংযুক্ত নোডের অটোম্যাটিক গোষ্ঠীসমূহ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;স্ট্রাকচারের উদাহরণ`graph.json`&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;nodes&amp;quot;: [
    {&amp;quot;id&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;LlmService&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 0},
    {&amp;quot;id&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;ApiKeyPool&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 0},
    {&amp;quot;id&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;label&amp;quot;: &amp;quot;PlantumlService&amp;quot;, &amp;quot;file_type&amp;quot;: &amp;quot;code&amp;quot;, &amp;quot;community&amp;quot;: 1}
  ],
  &amp;quot;links&amp;quot;: [
    {&amp;quot;source&amp;quot;: &amp;quot;1&amp;quot;, &amp;quot;target&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;relation&amp;quot;: &amp;quot;uses&amp;quot;, &amp;quot;confidence&amp;quot;: &amp;quot;EXTRACTED&amp;quot;, &amp;quot;weight&amp;quot;: 0.9},
    {&amp;quot;source&amp;quot;: &amp;quot;0&amp;quot;, &amp;quot;target&amp;quot;: &amp;quot;2&amp;quot;, &amp;quot;relation&amp;quot;: &amp;quot;calls&amp;quot;, &amp;quot;confidence&amp;quot;: &amp;quot;INFERRED&amp;quot;, &amp;quot;weight&amp;quot;: 0.7}
  ]
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সোর্স কোড (&amp;lt;code&amp;gt;.kt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.java&amp;lt;/code&amp;gt;) tree-sitterによって স্থানীয়ভাবে বিশ্লেষণ করা হয়,&amp;lt;strong&amp;gt;অপ্রত্যাহার্য LLM&amp;lt;/strong&amp;gt;. শুধুমাত্র ডকুমেন্টেশন ফাইলগুলো (&amp;lt;code&amp;gt;.adoc&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.md&amp;lt;/code&amp;gt;) প্রয়োজন হয় LLM কল সিমান্টিক এক্সট্র্যাকশনের জন্য. সুতরাং`--update`কোটলিন কোড চালু করা প্রায়ই তৎক্ষণিক হয়.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_2_gradle_প্লাগইন_knowledge_graph_কে_plantuml_এ_রূপান্তর_করা_হয়&amp;quot;&amp;gt;ধাপ 2 : Gradle প্লাগইন Knowledge Graph কে PlantUML-এ রূপান্তর করা হয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাইপলাইন_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইন আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইন`com.cheroliv.plantuml`একটি কাজ অন্তর্ভুক্ত করে`generateKnowledgeGraphDiagram`যে রূপান্তর করে`graph.json`PlantUML ডায়াগ্রামে একটি পদ্ধতির মাধ্যমে&amp;lt;strong&amp;gt;পুরোপুরি নিয়মনুসার&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/architecture-pipeline-kg.svg&amp;quot; alt=&amp;quot;architecture pipeline kg&amp;quot; width=&amp;quot;1101&amp;quot; height=&amp;quot;450&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অভ্যন্তরীণ_উপকরণ&amp;quot;&amp;gt;অভ্যন্তরীণ উপকরণ&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;উপকরণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ভূমিকা&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;KnowledgeGraphParser&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিশ্লেষণ`graph.json`— সমর্থন করে ৩ ফরম্যাট : নেটিভ ग्राफिइ (&amp;lt;code&amp;gt;nodes&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;links&amp;lt;/code&amp;gt;), legacy (&amp;lt;code&amp;gt;communities&amp;lt;/code&amp;gt;), flat. সংখ্যাগত আইডিকে লেবেলে রূপান্তর করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;KnowledgeGraphRenderer&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নির্ধারিতভাবে একটিকে রূপান্তরিত করে`KnowledgeGraph`PlantUML কোডে। প্রকার অনুযায়ী গোষ্ঠী, প্যাকেজে কমিউনিটি, স্বয়ংক্রিয় লেজেন্ড&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;GenerateKnowledgeGraphDiagramTask&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gradle কাজ যা parse → render → validate → PNG কে সমন্বয় করে। Gradle বৈশিষ্ট্য ব্যবহার করে কনফিগারযোগ্য।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kgmodels.kt&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডেটা মডেল :`KnowledgeGraph`, &amp;lt;code&amp;gt;KnowledgeGraphNode&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;KnowledgeGraphEdge&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;KnowledgeGraphCommunity&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;EdgeType&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;PlantumlService&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সিনট্যাক্স যাচাই + পিঁজি রেন্ডার (প্লাগিনের সব কাজে পুনরায় ব্যবহার করা হয়).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রেন্ডারিং_নিয়ম&amp;quot;&amp;gt;রেন্ডারিং নিয়ম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রেন্ডারার নিশ্চিত দৃশ্য সম্মতিসম্মিলন প্রয়োগ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;এজের ধরণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;নোটেশন PlantUML&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অর্থ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নিষ্কাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;-&amp;amp;#8594;&amp;lt;/code&amp;gt;(অটুট রেখা, কালো)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উৎস কোড থেকে বের করা সম্পর্ক (নিশ্চয়তা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অনুমানিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;..&amp;amp;gt;&amp;lt;/code&amp;gt;(বিন্দুযুক্ত রেখা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LLM দ্বারা অনুমানিত সম্পর্ক (বিশ্বাসের স্কোর)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অস্পষ্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;--x&amp;lt;/code&amp;gt;(লাল পুঁচি চিহ্নিত রেখা)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অস্পষ্ট সম্পর্ক (যাচাই করতে হয়)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কমিউনিটি[] প্ল্যান্টিUML প্যাকেজের মতো রেন্ডার করা হয়, স্বয়ংক্রিয় রঙের প্যালেটের সাথে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_৩_দৈনন্দিন_ব্যবহার&amp;quot;&amp;gt;ধাপ ৩ : দৈনন্দিন ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্পূর্ণ_ডায়াগ্রাম&amp;quot;&amp;gt;সম্পূর্ণ ডায়াগ্রাম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Générer le diagramme du Knowledge Graph complet
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আউটপুট :`diagrams/knowledge-graph/knowledge-graph-full.puml`+&amp;lt;code&amp;gt;.png&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্প্রদায়_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;সম্প্রদায় অনুযায়ী ফিল্টার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Une seule communauté
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0

# Limiter le nombre de noeuds (lisibilité)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.community=community_0 \
  -Pplantuml.kg.maxNodes=15&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এজের_ধরন_অনুযায়ী_ফিল্টার&amp;quot;&amp;gt;এজের ধরন অনুযায়ী ফিল্টার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Uniquement les relations certaines (EXTRACTED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED

# Relations certaines + inférées
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.edgeTypes=EXTRACTED,INFERRED&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নোডের_ধরন_এবং_বিশ্বাস_অনুযায়ী_ফিল্টার_করুন&amp;quot;&amp;gt;নোডের ধরন এবং বিশ্বাস অনুযায়ী ফিল্টার করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Uniquement les classes de code
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.nodeTypes=code

# Seuil de confiance minimum (pour les INFERRED)
./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.minConfidence=0.7&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কাস্টম_আউটপুট_ডিরেক্টরি&amp;quot;&amp;gt;কাস্টম আউটপুট ডিরেক্টরি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew generateKnowledgeGraphDiagram \
  -Pplantuml.kg.outputDir=docs/architecture&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বৈশিষ্ট্যের_সম্পূর্ণ_রেফারেন্স&amp;quot;&amp;gt;বৈশিষ্ট্যের সম্পূর্ণ রেফারেন্স&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;স্বত্ব&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;দোষ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিবরণ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.community&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(সকল)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কমিউনিটি নাম অনুযায়ী ফিল্টার (উপস্ট্রিং মিল)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.edgeTypes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(সব)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কমা দিয়ে পৃথক করা किनार के প্রকার :`EXTRACTED`, &amp;lt;code&amp;gt;INFERRED&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;AMBIGUOUS&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.minConfidence&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;0.0&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এজের জন্য ন্যূনতম বিশ্বাস সীমা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.maxNodes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;em&amp;gt;(অসীম)&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রদর্শনযোগ্য সর্বোচ্চ নোড সংখ্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.nodeTypes&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(সব)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নোডের ধরন কমা দিয়ে বিভক্ত (উদাহরণ.&amp;lt;code&amp;gt;class&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;code&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;plantuml.kg.outputDir&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;diagrams/knowledge-graph&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইলগুলির জন্য আউটপুট ডিরেক্টরি`.puml` et &amp;lt;code&amp;gt;.png&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_গ্রেডেল_ওয়ার্কফ্লোতে_সম্পূর্ণ_পাইপলাইন&amp;quot;&amp;gt;গ্রেডেল ওয়ার্কফ্লোতে সম্পূর্ণ পাইপলাইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ওয়ার্কফ্লো_প্রকার&amp;quot;&amp;gt;ওয়ার্কফ্লো প্রকার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/workflow-complet.svg&amp;quot; alt=&amp;quot;workflow complet&amp;quot; width=&amp;quot;618&amp;quot; height=&amp;quot;714&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিকাশ_চক্রে_একীকরণ&amp;quot;&amp;gt;বিকাশ চক্রে একীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইনটি প্রকৃতপক্ষে বিকাশের মূল ধাপগুলো স্বাভাবিকভাবে একত্রিত হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

state &amp;quot;উন্নয়ন&amp;quot; as dev
state &amp;quot;নিষ্কাশন
^^^^^
 Syntax Error? (Assumed diagram type: state)

@startuml
skinparam backgroundColor #FEFEFE

state &amp;quot;উন্নয়ন&amp;quot; as dev
state &amp;quot;নিষ্কাশন
graphify . --no-viz&amp;quot; as extract
state &amp;quot;উৎপাদন
./gradlew generateKnowledgeGraphDiagram&amp;quot; as generate
state &amp;quot;Commit
ভার্সনকৃত ডায়াগ্রাম&amp;quot; as commit

[*] --&amp;amp;gt; dev
dev --&amp;amp;gt; extract : Code modifié
extract --&amp;amp;gt; generate : graph.json à jour
generate --&amp;amp;gt; commit : .puml + .png générés
commit --&amp;amp;gt; dev : Diagrammes dans le repo

note right of extract
  Quasi instantané sur du code Kotlin
  (tree-sitter, pas de LLM)
end note

note right of generate
  Déterministe
  Pas de LLM
  Résultat reproductible
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্র진ক্রমিক_আপডেট&amp;quot;&amp;gt;প্র진ক্রমিক আপডেট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোড পরিবর্তিত হলে, আমরা শূন্য থেকে পুরো গ্রাফটি পুনর্গঠন করি না :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Mise à jour incrémentale (fichiers modifiés uniquement)
graphify . --update

# Puis régénérer les diagrammes
./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;--update`শুধুমাত্র পরিবর্তিত ফাইলগুলো Punar.extract করে (SHA256 দ্বারা সনাক্ত এ`graphify-out/cache/&amp;lt;/code&amp;gt;). Kotlin কোডের উপর, এটি প্রায় তৎক্ষণিক কারণ tree-sitter স্থানীয়ভাবে কাজ করে, কোনো LLM আহ্বান না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডগফুডিং_প্লাগইনটি_নিজেই_ডকুমেন্টেশন_করে&amp;quot;&amp;gt;ডগফুডিং: প্লাগইনটি নিজেই ডকুমেন্টেশন করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;PlantUML প্লাগইনটি প্রম্পটকে ডায়াগ্রামে রূপান্তর করে। এটি &amp;lt;em&amp;gt;স্বয়ং&amp;lt;/em&amp;gt; কোডবেসের নোলেজ গ্রাফকে ও ডকুমেন্টেশন ডায়াগ্রামে রূপান্তর করতে পারে। &amp;lt;em&amp;gt;dogfooding&amp;lt;/em&amp;gt; : প্লাগইন তার নিজের সেবা ব্যবহার করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;সাধারণ পাইপলাইন
(ব্যবহারকারী → আকচিত্র)&amp;quot; as normal {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;সাধারণ পাইপলাইন
(ব্যবহারকারী → আকচিত্র)&amp;quot; as normal {
    [Fichier .prompt] as prompt
    [LlmService\n+ ApiKeyPool] as llm1
    [ProcessPlantumlPromptsTask] as task1
    [Diagramme PNG] as out1

    prompt --&amp;amp;gt; task1
    task1 --&amp;amp;gt; llm1
    llm1 --&amp;amp;gt; out1
}

package &amp;quot;পাইপলাইন জ্ঞান গ্রাফ\n(নির্ধারক, LLM না)&amp;quot; as kg {
    [graphify-out/graph.json] as kgjson
    [KnowledgeGraphParser] as parser
    [KnowledgeGraphRenderer] as renderer
    [PlantumlService] as ps
    [Diagramme PNG\n(documentation du plugin)] as out2

    kgjson --&amp;amp;gt; parser
    parser --&amp;amp;gt; renderer
    renderer --&amp;amp;gt; ps
    ps --&amp;amp;gt; out2
}

package &amp;quot;পাইপলাইন ডগফুডিং
(LLM → প্লাগইনের ডকুমেন্টেশন)&amp;quot; as dogfood {
    [GraphifyPromptAdapter] as gpa
    [Fichiers .prompt\nauto-générés] as auto_prompt
    [LlmService\n+ ApiKeyPool] as llm2
    [ProcessPlantumlPromptsTask] as task2
    [Diagramme PNG\n(documentation LLM)] as out3

    kgjson --&amp;amp;gt; gpa
    gpa --&amp;amp;gt; auto_prompt
    auto_prompt --&amp;amp;gt; task2
    task2 --&amp;amp;gt; llm2
    llm2 --&amp;amp;gt; out3
}

note &amp;quot;একই LlmService, একই ApiKeyPool,
একই PlantumlService
— শূন্য ডুপ্লিকেশন&amp;quot; as N

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সংযুক্ত Gradle টাস্ক :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কাজ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;LLM ?&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বর্ণনা&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পরিবর্তন কর`graph.json`এ PlantUML (নির্ধারিত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;generateDiagramDocs&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কিছু তৈরি কর`.prompt`গ্রাফ থেকে, LLM ব্যবহার করে (dogfooding) তা প্রক্রিয়া করা হয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Documentation déterministe (rapide, pas de LLM)
./gradlew generateKnowledgeGraphDiagram

# Documentation LLM (plus riche, consomme des tokens)
./gradlew generateDiagramDocs&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_এটি_নির্ধারক_এবং_কেন_তা_গুরুত্বপূর্ণ&amp;quot;&amp;gt;কেন এটি নির্ধারক (এবং কেন তা গুরুত্বপূর্ণ)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইনের মূল পয়েন্ট`generateKnowledgeGraphDiagram` : &amp;lt;strong&amp;gt;এটা কোনো LLMকে ডাকে না&amp;lt;/strong&amp;gt;. পরিবর্তন`graph.json`→ PlantUML একটি শুদ্ধ ফাংশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/determinisme-vs-llm.svg&amp;quot; alt=&amp;quot;determinisme vs llm&amp;quot; width=&amp;quot;1004&amp;quot; height=&amp;quot;405&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবিক সুবিধা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সুবিধা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পুনরুত্পাদনযোগ্যতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একই`graph.json`→ একই نمودার। ঠিক আছে। প্রতিবার।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;LLM কল না = tokens না = API বিল না.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য বিলম্ব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Parse + render নেমে ~100ms, 1-5 সেকেন্ড নয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সামঞ্জস্যপূর্ণ CI&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোন API কী প্রয়োজন নেই। ভেরিয়েবল LLM প্রতিক্রিয়ার কারণে কোন ফ্লাকি টেস্ট নেই।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ভার্সনযোগ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Le &amp;lt;code&amp;gt;.puml`উত্পন্ন পাঠ্য. আমরা এটি পারি`diff&amp;lt;/code&amp;gt;, PR-এ রিভিউয়ার, Git-এ ভার্সন করা.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইপলাইন_নিজের_ডায়াগ্রামগুলো&amp;quot;&amp;gt;পাইপলাইন নিজের ডায়াগ্রামগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লুপকে বন্ধ করতে, এখানে প্লাগইন দ্বারা তৈরি হওয়া পাইপলাইনের ডায়াগ্রাম দেওয়া হল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/pipeline-sequence.svg&amp;quot; alt=&amp;quot;pipeline sequence&amp;quot; width=&amp;quot;1648&amp;quot; height=&amp;quot;554&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রজেক্ট_গবর্নেন্সে_ইন্টিগ্রেশন&amp;quot;&amp;gt;প্রজেক্ট গবর্নেন্সে ইন্টিগ্রেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্রকল্পে, এই পাইপলাইনটি AI‑এজেন্টের জন্য EAGER/LAZY কনটেক্সট ম্যানেজমেন্ট কৌশলের অংশ। Knowledge Graph ম্যানুয়াল আর্কিটেকচার ডকুমেন্টেশনকে একটি স্ট্রাকচার্ড, কুয়েরিयोग্য এবং স্বয়ং আপডেটযোগ্য গ্রাফ দ্বারা প্রতিস্থাপন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 11) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;EAGER\n(সempre চার্জিত)&amp;quot; as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d&amp;#39;ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package &amp;quot;LAZY — রণনীতি
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

package &amp;quot;EAGER\n(সempre চার্জিত)&amp;quot; as eager {
    [PROMPT_REPRISE.adoc\n(contexte session)] as pr
    [INDEX.adoc\n(vue d&amp;#39;ensemble)] as idx
    [GRAPH_REPORT.adoc\n(~50 lignes)] as gr
}

package &amp;quot;LAZY — রণনীতি
(অনুরোধে)&amp;quot; as lazy_strat {
    [Méthodologies] as meth
    [Archives sessions] as sessions
}

package &amp;quot;LAZY — Graphify
(লক্ষ্য-নির্ধারিত কুয়েরি)&amp;quot; as lazy_graph {
    [graph.json] as gj
    [Queries\n(query/path/explain)] as queries
}

package &amp;quot;Pipeline PlantUML
(স্বয়ং-উৎপন্ন)&amp;quot; as puml {
    [generateKnowledgeGraphDiagram] as kgTask
    [generateDiagramDocs] as ddTask
    [Diagrammes PNG] as diagrams
}

Agent --&amp;amp;gt; eager : Lit en début de session
Agent ..&amp;amp;gt; lazy_strat : Charge si type détecté
Agent ..&amp;amp;gt; lazy_graph : Query si besoin structurel
kgTask --&amp;amp;gt; diagrams : Déterministe
ddTask --&amp;amp;gt; diagrams : Via LLM

note right of gr
  Condensé du Knowledge Graph
  God nodes + communautés
  Remplace ECOSYSTEM_OVERVIEW
  (225 lignes → 50 lignes)
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দুটি সিস্টেমের একত্রিত হওয়া সমন্বয়মূলক:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কৌশল কখন এবং কীভাবে&amp;lt;/strong&amp;gt;— শাসন, কর্মপ্রবাহ, সংরক্ষণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Graphify কী এবং কোথায় তা পরিচালনা করে&amp;lt;/strong&amp;gt;— কোডের গঠন, সম্পর্ক, লক্ষ্য অনুসন্ধান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ সেশন কৌশলটি পরিচালনা করে&amp;lt;strong&amp;gt;কখন&amp;lt;/strong&amp;gt; et le &amp;lt;strong&amp;gt;কিভাবে&amp;lt;/strong&amp;gt;(শাসন, workflow, সীমা), Graphify পরিচালনা করে&amp;lt;strong&amp;gt;কি?&amp;lt;/strong&amp;gt; et le &amp;lt;strong&amp;gt;কোথায়&amp;lt;/strong&amp;gt;(কোডের গঠন, সম্পর্ক, লক্ষ্য করা কোয়েরি)। PlantUML পাইপলাইনটি পরিচালনা করে&amp;lt;strong&amp;gt;কি দিয়ে?&amp;lt;/strong&amp;gt;(নির্ধারিত ডায়াগ্রাম, সংস্করণবद्ध, সর্বদা আপ-টু-ডেট) &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেটআপ_৫_মিনিটে_চেকলিস্ট&amp;quot;&amp;gt;সেটআপ : ৫ মিনিটে চেকলিস্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;#&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ধাপ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অর্ডার&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Graphify ইনস্টল করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;uv tool install graphifyy&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপব্যাহনগুলো কনফিগার করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;তৈরি`.graphifyignore`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নলেজ গ্রাফ এক্সট্র্যাক্ট করা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;graphify . --no-viz&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়াগ্রামগুলো তৈরি করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;./gradlew generateKnowledgeGraphDiagram&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফলাফলগুলোকে কমিট করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;git add diagrams/knowledge-graph/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Script complet en 5 commandes
uv tool install graphifyy
cat &amp;amp;gt; .graphifyignore &amp;amp;lt;&amp;amp;lt; &amp;#39;EOF&amp;#39;
*-context.yml
*.env
build/
.gradle/
EOF
graphify . --no-viz
./gradlew generateKnowledgeGraphDiagram
git add graphify-out/GRAPH_REPORT.adoc graphify-out/graph.json diagrams/knowledge-graph/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ঝুঁকি_এবং_নিরাময়&amp;quot;&amp;gt;�ঝুঁকি এবং নিরাময়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3334%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ফাঁস&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বর্ণনা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;শমন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অতidéষ্ট ঘন গ্রাফ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বড় প্রকল্প শতাঙ্করো অপঠনযোগ্য নোড তৈরি করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্য�্যবহার করা`-Pplantuml.kg.maxNodes=30`এবং সম্প্রদায় অনুযায়ী ফিল্টার করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্জন অতি বিস্তritos&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বেশ বেশি ফাইল মধ্যে`.graphifyignore`গ্রাফের মান কমায়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র credentials এবং build বাদ দিয়ে শুরু করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;তীরদের দিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;किनার INFERRED অস্পষ্ট দিক হতে পারে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফিল্টার করুন`-Pplantuml.kg.edgeTypes=EXTRACTED`শুধুমাত্র নিশ্চিত সম্পর্কের জন্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপ্রচলিত গ্রাফ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোড পরিবর্তিত হয় কিন্তু গ্রাফটি পুনর্নির্মিত হয় না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহার করা`graphify . --update`নিয়মিতভাবে অথবা গিট হুক`graphify hook install`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপডেট করা খরচ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অবক্রমিত আপডেট প্রায়ে বিনামূল্য (tree-sitter local)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র ডক্স (&amp;lt;code&amp;gt;.adoc&amp;lt;/code&amp;gt;) LLM টোকেন ব্যবহার করা হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষে_যা_পাওয়া_যায়&amp;quot;&amp;gt;শেষে যা পাওয়া যায়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 10) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;আগে&amp;quot; as avant {
    card &amp;quot;হাতে আঁকা নকশা\nসবসময় পুরনো\nকেউ আপডেট করে না&amp;quot; as av1 #FDEDEC
}

rectangle &amp;quot;পরে&amp;quot; as apres {
    card &amp;quot;স্বয়ংক্রিয়ভাবে তৈরি ডায়াগ্রাম
কোডের সাথে সর্বদা আপ-টু-ডেট
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;আগে&amp;quot; as avant {
    card &amp;quot;হাতে আঁকা নকশা\nসবসময় পুরনো\nকেউ আপডেট করে না&amp;quot; as av1 #FDEDEC
}

rectangle &amp;quot;পরে&amp;quot; as apres {
    card &amp;quot;স্বয়ংক্রিয়ভাবে তৈরি ডায়াগ্রাম
কোডের সাথে সর্বদা আপ-টু-ডেট
Git-এ সংস্করণবদ্ধ
নির্ধারিত এবং পুনরায় উৎপন্নযোগ্য&amp;quot; as ap1 #E8F8E8
}

avant --&amp;amp;gt; apres : graphify . --no-viz\n+ ./gradlew generateKnowledgeGraphDiagram

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবীয় সুবিধা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;লাভ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিস্তার&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সদা আপ-টু-ডেট ডকুমেন্টেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়াগ্রামগুলি বর্তমান কোডকে প্রতিফলিত করে, একটি ম্যানুয়াল স্ন্যাপশট নয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য রক্ষণাবেক্ষণের পরিশ্রম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডায়াগ্রামগুলি প্রতিটি বিল্ডে পুন:সৃষ্টি হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রযুক্তিগত ঋণের হ্রাস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আর হাতে ডায়াগ্রাম রক্ষা করার দরকার নেই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নতুনদের জন্য বিজ্যুয়াল প্রেক্ষাপট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি নতুন ডেভেলপার ডায়াগ্রাম দেখে আর্কিটেকচার বুঝে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শম্ভাব্য শুক্ষ্ম টিউনিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(সাবগ্রাফ → ডায়াগ্রাম) যুগলগুলি কৃত্রিম বুদ্ধিমত্তার প্রশিক্ষণের উদাহরণ।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বয়ংক্রিয় বৈধতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`PlantumlService.validateSyntax()`প্রতিটি তৈরি করা ডায়াগ্রাম যাচাই করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;দ্রুত অনবোর্ডিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;৫ চিত্র = আর্কিটেকচারের পূর্ণ দৃশ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ যে কোনও _pourquoi&amp;lt;/em&amp;gt; ধারণ করে, সে সব &amp;lt;em&amp;gt;comment&amp;lt;/em&amp;gt; বर्दاشت করতে পারে। &amp;lt;/em&amp;gt;__&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;pourquoi&amp;lt;/em&amp;gt; : সবসময় আপডেট থাকা ডায়াগ্রাম। &amp;lt;em&amp;gt;comment&amp;lt;/em&amp;gt; : Gradle পাইপলাইনে দুটি কমান্ড।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লিঙ্ক_groups&amp;quot;&amp;gt;লিঙ্ক_groups&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/nicholasgasior/graphify&amp;quot;&amp;gt;Graphify GitHub-এ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/cheroliv/plantuml-gradle&amp;quot;&amp;gt;PlantUML Gradle প্লাগইন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;/blog/2026/0104_fg_command_super_tips_post.html&amp;quot;&amp;gt;fg কমান্ডের সুপার টিপস&amp;lt;/a&amp;gt;— পূর্বের নিবন্ধ টার্মিনাল ওয়ার্কফ্লো সম্পর্কে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>fg কমান্ডের সুপার টিপস: Ctrl+Z যখন আপনার টার্মিনাল সেশনকে বাঁচায়</title>
            <link >https://cheroliv.com//blog/2026/0104_fg_command_super_tips_post.html</link>
            <pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0104_fg_command_super_tips_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_একটি_ব্যস্ত_টার্মিনাল&amp;quot;&amp;gt;সমস্যা : একটি ব্যস্ত টার্মিনাল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তিনটি_অপরিহার্য_কমান্ড&amp;quot;&amp;gt;তিনটি অপরিহার্য কমান্ড&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ctrlz_নিরোধ_sigtstp&amp;quot;&amp;gt;Ctrl+Z — নিরোধ (SIGTSTP)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_fg_আগের_পلانে_লাওয়া&amp;quot;&amp;gt;fg — আগের পلانে লাওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_bg_পটভূমিতে_পুনরায়_শুরু_করুন&amp;quot;&amp;gt;bg — পটভূমিতে পুনরায় শুরু করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jobs_শেলের_কাজগুলো_তালিকা_করুন&amp;quot;&amp;gt;jobs — শেলের কাজগুলো তালিকা করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেনারিও_১_দীর্ঘ_বিল্ড&amp;quot;&amp;gt;সেনারিও ১ : দীর্ঘ বিল্ড&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপে_ধাপে&amp;quot;&amp;gt;ধাপে ধাপে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেনারিও_২_ভুলিত_সম্পাদক&amp;quot;&amp;gt;শেনারিও ২ : ভুলিত সম্পাদক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেনারিও_৩_প্রক্রিয়া_opencode_স্থগিত&amp;quot;&amp;gt;সেনারিও ৩ : প্রক্রিয়া opencode স্থগিত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেনারিও_৪_একই_সাথে_অনেক_কাজ_পরিচালনা_করা&amp;quot;&amp;gt;সেনারিও ৪ : একই সাথে অনেক কাজ পরিচালনা করা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_জব_কমান্ডের_সারসংক্ষেপ&amp;quot;&amp;gt;জব কমান্ডের সারসংক্ষেপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_fg_bg_ctrlz_ctrlc_এবং_এর_মধ্যে_পার্থক্য&amp;quot;&amp;gt;fg, bg, Ctrl+Z, Ctrl+C এবং &amp;amp;amp; এর মধ্যে পার্থক্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_কাজের_সম্পূর্ণ_জীবন_চক্র&amp;quot;&amp;gt;একটি কাজের সম্পূর্ণ জীবন-চক্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উন্নত_টিপস&amp;quot;&amp;gt;উন্নত টিপস&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_fg_সঙ্গে_সবচেয়ে_নতুন_চাকরি_এবং_বিনিময়&amp;quot;&amp;gt;fg সঙ্গে সবচেয়ে নতুন চাকরি এবং বিনিময়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কामকে_পরিষ্কারভাবে_শেষ_করা&amp;quot;&amp;gt;কामকে পরিষ্কারভাবে শেষ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_désown_শেল_থেকে_ডিট্যাচ_করুন&amp;quot;&amp;gt;désown : শেল থেকে ডিট্যাচ করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দীর্ঘস্থায়ী_প্রক্রিয়াগুলোর_জন্য_nohup_এর_সাথে_মিশ্রিত_করুন&amp;quot;&amp;gt;দীর্ঘস্থায়ী প্রক্রিয়াগুলোর জন্য nohup-এর সাথে মিশ্রিত করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাধারন_ব্যাহতি_ও_ভุล&amp;quot;&amp;gt;সাধারন ব্যাহতি ও ভุล&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ctrlz_এবং_ctrlc_বুলিয়ে_নেওয়া&amp;quot;&amp;gt;Ctrl+Z এবং Ctrl+C বুলিয়ে নেওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_জবগুলো_শেলের_জন্য_স্থানীয়&amp;quot;&amp;gt;জবগুলো শেলের জন্য স্থানীয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেল_বন্ধ_হলে_জবস_suriname_করে_না&amp;quot;&amp;gt;শেল বন্ধ হলে জবস Suriname করে না&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইন্টারঅ্যাক্টিভ_প্রক্রিয়াগুলো_এবং_fg&amp;quot;&amp;gt;ইন্টারঅ্যাক্টিভ প্রক্রিয়াগুলো এবং fg&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সারসংক্ষেপ_ডায়াগ্রাম&amp;quot;&amp;gt;সারসংক্ষেপ ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_fg_কেন_হ্রাসপত্রিত&amp;quot;&amp;gt;fg কেন হ্রাসপত্রিত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রযুক্তিগত_স্মৃতি_সিগন্যুল&amp;quot;&amp;gt;প্রযুক্তিগত স্মৃতি : সিগন্যুল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;patherner samay : 10 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি ফেলেন`./gradlew build`, টার্মিনাল ৩ মিনিটের জন্য ব্লক করা হয়েছে, এবং আপনাকে étrangère কিছু করতে দরকার &amp;lt;em&amp;gt;প্রতীক্ষার সময়&amp;lt;/em&amp;gt;? একটি নতুন ট্যাব খুলতে দরকার নেই।`Ctrl+Z`প্রครিয়া বন্ধ করা,`fg`এটি আপনি যে জায়গায় ছেড়ে গিয়েছিলেন সেখানে আনে। এটি ডেভেলপারের দৈনন্দিন জীবনে সবচেয়ে অমূল্যায়িত Unix টিপস।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_একটি_ব্যস্ত_টার্মিনাল&amp;quot;&amp;gt;সমস্যা : একটি ব্যস্ত টার্মিনাল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি ডেভেলপার এই পরিস্থিতি পাস করেছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build
&amp;amp;gt; Building...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টার্মিনাল ব্লক করা হয়েছে। আপনি আর কোনো কমান্ড টাইপ করতে পারবেন না। এবং আপনাকে একটি ফাইল পরিদর্শন করতে হবে, একটি চালু করতে`git status`, অথবা একটি ব্যস্ত পোর্ট পরীক্ষা করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur as dev
participant &amp;quot;python
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

actor Développeur as dev
participant &amp;quot;python
print(&amp;quot;টার্মিনাল&amp;quot;, end=&amp;#39;&amp;#39;)&amp;quot; as term
participant &amp;quot;Gradle
( প্রক্রিয়া )&amp;quot; as gradle

dev -&amp;amp;gt; term : ./gradlew build
term -&amp;amp;gt; gradle : Lance le build
gradle -&amp;amp;gt; term : Occupe le terminal\n(pas de prompt)
dev -&amp;amp;gt; term : veut taper une commande
term --&amp;amp;gt; dev : ❌ Terminal bloqué

note right of dev
  Le développeur est
  paralysé pendant
  toute la durée du build
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিপজির অধিকাংশ ডেভেলপার একটি নতুন টার্মিনাল খুলেন। কিন্তু একটি আরও সৌন্দর্য-সম্পন্ন, দ্রুত এবং নেটিভ সমাধান আছে: কাজের ব্যবস্থাপনা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_তিনটি_অপরিহার্য_কমান্ড&amp;quot;&amp;gt;তিনটি অপরিহার্য কমান্ড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ctrlz_নিরোধ_sigtstp&amp;quot;&amp;gt;Ctrl+Z — নিরোধ (SIGTSTP)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`Ctrl+Z`সিগনাল পাঠায়`SIGTSTP`ফোরগ্রাউন্ড প্রক্রিয়ার দিকে। প্রক্রিয়াটি&amp;lt;strong&amp;gt;অবসত&amp;lt;/strong&amp;gt;— মারা হয়নি — এবং টার্মিনাল তার প্রম্পট পেয়ে যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build
&amp;amp;gt; Building...
^Z
[1]+  Stoppé    ./gradlew build
$&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্র্যাকেটের মধ্যে সংখ্যা`[1]`এটি&amp;lt;strong&amp;gt;জব নম্বর&amp;lt;/strong&amp;gt;. Le `+`ডিফল্ট জবটি নির্দেশ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_fg_আগের_পلانে_লাওয়া&amp;quot;&amp;gt;fg — আগের পلانে লাওয়া&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`fg`সস্পেন্ডেড কাজকে অগ্রবর্তী প্ল্যাটফর্মে আনে। প্রক্রিয়া ঠিক যেমন থেকেই থেমে গেছে তা থেকে পুনরায় শুরু হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ fg
./gradlew build
&amp;amp;gt; Building... (reprend où il en était)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি নির্দিষ্ট জব নম্বর দিয়ে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ fg %2&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_bg_পটভূমিতে_পুনরায়_শুরু_করুন&amp;quot;&amp;gt;bg — পটভূমিতে পুনরায় শুরু করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`bg`প্রক্রিয়া টার্মিনাল ব্লক না করে পুনরায় চালু করুন। দীর্ঘ বিল্ডের জন্য উপযুক্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ bg
[1]+ ./gradlew build &amp;amp;amp;
$&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `&amp;amp;amp;`এতে শেষে বোঝায় যে প্রক্রিয়া পটভুমিতে চলছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_jobs_শেলের_কাজগুলো_তালিকা_করুন&amp;quot;&amp;gt;jobs — শেলের কাজগুলো তালিকা করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ jobs
[1]-  Stoppé    vim README.md
[2]+  En cours   ./gradlew build&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

state &amp;quot;অগ্রভূমি
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

state &amp;quot;অগ্রভূমি
(ব্লকযুক্ত টার্মিনাল)&amp;quot; as fg #LightCoral
state &amp;quot;বন্ধিত
(Ctrl+Z)&amp;quot; as stopped #LightYellow
state &amp;quot;পটভূমি
(bg)&amp;quot; as bg_ #LightGreen

[*] --&amp;amp;gt; fg : Lance une commande
fg --&amp;amp;gt; stopped : Ctrl+Z\n(SIGTSTP)
stopped --&amp;amp;gt; fg : fg\nreprend en avant-plan
stopped --&amp;amp;gt; bg_ : bg\nreprend en arrière-plan
bg_ --&amp;amp;gt; fg : fg\nramène en avant-plan
fg --&amp;amp;gt; [*] : Commande terminée

note right of stopped
  Le processus est figé
  mais _pas_ tué
end note

note left of bg_
  Le terminal est libre
  le build continue
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেনারিও_১_দীর্ঘ_বিল্ড&amp;quot;&amp;gt;সেনারিও ১ : দীর্ঘ বিল্ড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি সবচেয়ে সাধারন ব্যবহারের ক্ষেত্র। আপনি একটি Gradle বিল্ড চালু করেন, টার্মিনাল ব্লক হয়, এবং আপনাকে অন্য কিছু করতে হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant &amp;quot;টার্মিনাল&amp;quot; as term
participant &amp;quot;Gradle&amp;quot; as gradle
database &amp;quot;অবস্থা
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant &amp;quot;টার্মিনাল&amp;quot; as term
participant &amp;quot;Gradle&amp;quot; as gradle
database &amp;quot;অবস্থা
প্রক্রিয়া&amp;quot; as state

dev -&amp;amp;gt; term : ./gradlew build
term -&amp;amp;gt; gradle : Lance le build
gradle -&amp;amp;gt; state : En cours (FG)
dev -&amp;amp;gt; term : Ctrl+Z
term -&amp;amp;gt; state : Suspendu (job [1])
term --&amp;amp;gt; dev : Prompt libre $

dev -&amp;amp;gt; term : git status
term --&amp;amp;gt; dev : working tree clean

dev -&amp;amp;gt; term : fg
term -&amp;amp;gt; state : Reprend (FG)
gradle --&amp;amp;gt; dev : Build réussi ✓

note right of state
  Le processus Gradle
  n&amp;#39;a jamais été tué
  Il reprend exactement
  où il s&amp;#39;était arrêté
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপে_ধাপে&amp;quot;&amp;gt;ধাপে ধাপে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build
&amp;amp;gt; Building...
^Z
[1]+  Stoppé    ./gradlew build

$ git status
On branch main
nothing to commit, working tree clean

$ fg
./gradlew build
&amp;amp;gt; Building...
BUILD SUCCESSFUL in 2m 34s&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেনারিও_২_ভুলিত_সম্পাদক&amp;quot;&amp;gt;শেনারিও ২ : ভুলিত সম্পাদক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আছেন`vim`, vous avez besoin de consulter un autre fichier &amp;lt;em&amp;gt;sans&amp;lt;/em&amp;gt; quitter`vim`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Dans vim, en mode commande :
:shell
$ cat /path/to/other/file.txt
$ exit
# Retour dans vim&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিন্তু এটা ভারী। সঙ্গে`Ctrl+Z`, এটি তৎক্ষণিক :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Dans vim, n&amp;#39;importe quel moment :
Ctrl+Z
[1]+  Stoppé    vim README.md

$ cat /path/to/other/file.txt
# ... lire le fichier ...

$ fg
vim README.md
# Retour exact là où on en était, curseur en place&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/vim-suspend.svg&amp;quot; alt=&amp;quot;vim suspend&amp;quot; width=&amp;quot;406&amp;quot; height=&amp;quot;510&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(empty)&amp;lt;code&amp;gt;vim`পূর্ণরূপে তার অবস্থা পুনরুদ্ধার করে একটি`fg&amp;lt;/code&amp;gt;: কurzor-এর পজিশন, বাফারের কন্টেন্ট, অডো ইতিহাস — সবকিছু সংরক্ষিত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেনারিও_৩_প্রক্রিয়া_opencode_স্থগিত&amp;quot;&amp;gt;সেনারিও ৩ : প্রক্রিয়া opencode স্থগিত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি সেই পরিস্থিতি, যা এই নিবন্ধকে প্ররোচিত করেছে। আপনি ব্যবহার করছেন`opencode`(CLI টুল আপনার কোডে একটি LLM চালু করতে), এবং প্রক্রিয়া বন্ধ রাখা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/opencode-fg.svg&amp;quot; alt=&amp;quot;opencode fg&amp;quot; width=&amp;quot;433&amp;quot; height=&amp;quot;618&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ opencode
# ... session en cours, LLM analyse le code ...
^Z
[1]+  Stoppé    opencode

$ git diff HEAD~1
# vérifier les changements récents

$ fg
opencode
# Le LLM reprend là où il s&amp;#39;était arrêté&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লাভটি দ্বিগুণিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রসঙ্গ নষ্ট না&amp;lt;/strong&amp;gt;: LLM সেশন, কথোপকথন ইতিহাস, খোলা ফাইল — সবই সংরক্ষিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;রিস্টার্ট নেই&amp;lt;/strong&amp;gt;: কোনো দরকার নেই opencodeকে পুনরায় চালু করার, Contextকে পুনরায় লোড করার, LLM-এ সমস্যা পুনরায় ব্যাখ্যা করার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেনারিও_৪_একই_সাথে_অনেক_কাজ_পরিচালনা_করা&amp;quot;&amp;gt;সেনারিও ৪ : একই সাথে অনেক কাজ পরিচালনা করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt; et `bg`তারা একটি জব নম্বর গ্রহণ করে একটি নির্দিষ্ট প্রক্রিয়া লক্ষ্য করার জন্য, যখন একাধিক প্রক্রিয়া বন্ধ থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ vim config.yml
^Z
[1]+  Stoppé    vim config.yml

$ ./gradlew test
^Z
[2]+  Stoppé    ./gradlew test

$ htop
^Z
[3]+  Stoppé    htop

$ jobs
[1]   Stoppé    vim config.yml
[2]-  Stoppé    ./gradlew test
[3]+  Stoppé    htop

$ fg %2
./gradlew test
# Le build reprend en avant-plan

$ bg %3
[3] htop &amp;amp;amp;
# htop reprend en arrière-plan&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 12) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;বন্ধ থাকা চাকরি&amp;quot; as jobs #LightYellow {
  card &amp;quot;[1] vim config.yml&amp;quot; as j1
  card &amp;quot;[2] ./gradlew test&amp;quot; as j2
  card &amp;quot;[3] htop&amp;quot; as j3
}

rectangle &amp;quot;কার্যকলাপ&amp;quot; as actions #LightGreen {
  card &amp;quot;fg %2
→ অগ্রভূমি&amp;quot; as a1
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;বন্ধ থাকা চাকরি&amp;quot; as jobs #LightYellow {
  card &amp;quot;[1] vim config.yml&amp;quot; as j1
  card &amp;quot;[2] ./gradlew test&amp;quot; as j2
  card &amp;quot;[3] htop&amp;quot; as j3
}

rectangle &amp;quot;কার্যকলাপ&amp;quot; as actions #LightGreen {
  card &amp;quot;fg %2
→ অগ্রভূমি&amp;quot; as a1
  card &amp;quot;bg %3\n→ পটভূমি&amp;quot; as a2
  card &amp;quot;fg %1\n→ অগ্রভূমি&amp;quot; as a3
}

jobs --&amp;amp;gt; actions : fg/bg + numéro de job
actions --&amp;amp;gt; j2 : Reprend
actions --&amp;amp;gt; j3 : En arrière-plan

note bottom of jobs
  Chaque job conserve
  son état exact
  entre les suspend/resume
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_জব_কমান্ডের_সারসংক্ষেপ&amp;quot;&amp;gt;জব কমান্ডের সারসংক্ষেপ&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অর্ডার&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;উদাহরণ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+Z&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফোরগ্রাউন্ড প্রক্রিয়াটি নিলম্বন করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পাঠানোর`SIGTSTP`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডিফল্ট কাজটি অগ্রভূমিতে নিন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;fg %1&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;fg %n&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জব nকে অগ্রভূমিতে নিয়ে আসো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;fg %2&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যাকগ্রাউন্ডে ডিফল্ট কাজটি পুনরায় চালু করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;bg %1&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;bg %n&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পটভূমিতে জব n পুনরায় শুরু কর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;bg %2&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;jobs&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্তমান শেলের জবগুলো তালিকা কর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;jobs -l&amp;lt;/code&amp;gt;(সঙ্গে PID)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kill %n&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জব n শেষ কর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kill %2&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_fg_bg_ctrlz_ctrlc_এবং_এর_মধ্যে_পার্থক্য&amp;quot;&amp;gt;fg, bg, Ctrl+Z, Ctrl+C এবং &amp;amp;amp; এর মধ্যে পার্থক্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বহুতো ডেভেলপার এই মেকানিজমগুলোকে ভুলে বুঝে। এখানে একটি নিশ্চয় ব্যাখ্যা দেওয়া হল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;**Ctrl+Z**\nSIGTSTP&amp;quot; as ctrlz #LightYellow {
  card &amp;quot;প্রক্রিয়া ব্যাহত করুন
(এটি এখনও মেমরিতে আছে)
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;**Ctrl+Z**\nSIGTSTP&amp;quot; as ctrlz #LightYellow {
  card &amp;quot;প্রক্রিয়া ব্যাহত করুন
(এটি এখনও মেমরিতে আছে)
fg/bg দিয়ে ব্যবহারযোগ্য&amp;quot; as c1
}

rectangle &amp;quot;**Ctrl+C**\nSIGINT&amp;quot; as ctrlc #LightCoral {
  card &amp;quot;প্রক্রিয়া বন্ধ করুন\n(ফিরে আসা সম্ভব না)\nসমস্ত অবস্থা হার&amp;quot; as c2
}

rectangle &amp;quot;**&amp;amp;amp; **\n(পটভূমি)&amp;quot; as ampersand #LightGreen {
  card &amp;quot;সরাসরি চালু করুন
ব্যাকগ্রাউন্ডে
এখনই মুক্ত টার্মিনাল&amp;quot; as c3
}

rectangle &amp;quot;fg
(অগ্রভূমি)&amp;quot; as fg_ #SkyBlue {
  card &amp;quot;একটি ব্যাঙ্কগ্রাউন্ড কাজকে সামনে আনুন
টার্মিনাল ব্যস্ত&amp;quot; as c4
}

rectangle &amp;quot;**bg**
(পটভূমি)&amp;quot; as bg_ #Lavender {
  card &amp;quot;একটি কাজ পুনরায় গ্রহণ করুন
ব্যাকগ্রাউন্ডে বন্ধ
মুক্ত টার্মিনাল&amp;quot; as c5
}

ctrlz -right-&amp;amp;gt; fg_ : fg pour reprendre
ctrlz -right-&amp;amp;gt; bg_ : bg pour continuer\nen arrière-plan
ctrlc -right-&amp;amp;gt; c2 : Pas de retour\nprocessus tué

note bottom of ctrlz
  Le processus est **figé**
  mais **pas tué**
end note

note bottom of ampersand
  Alternative : lancer
  ./gradlew build &amp;amp;amp;
  directement en arrière-plan
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 16.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 16.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3335%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;শর্টকাট/কমান্ড&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সংকেত&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ফিরে যাওয়া?&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+Z&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGTSTP&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রক্রিয়া বন্ধ করুন (বজিত, মেমোরিতে)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ :`fg` ou &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+C&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGINT&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রক্রিয়া বন্ধ করুন (সম্পন্ন)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না : প্রক্রিয়া নষ্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+\&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGQUIT&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রক্রিয়া বন্ধ করুন + কোর ডাম্প&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না : প্রক্রিয়া ধ্বস্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;commande &amp;amp;amp;&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;—&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পটভূমিতে সরাসরি চালু করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`fg`একে ফিরiye সামনে আনতে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;code&amp;gt;Ctrl+Z`হয়&amp;lt;strong&amp;gt;অক্ষয়&amp;lt;/strong&amp;gt;. প্রক্রিয়া যেমন আছে তেমনই মেমোরিতে জমে আছে। আপনি তুঁরত এই সাথে চালিয়ে যেতে পারেন`fg&amp;lt;/code&amp;gt;. এইটি একটি &amp;lt;em&amp;gt;pause&amp;lt;/em&amp;gt;, না &amp;lt;em&amp;gt;stop&amp;lt;/em&amp;gt;।
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_কাজের_সম্পূর্ণ_জীবন_চক্র&amp;quot;&amp;gt;একটি কাজের সম্পূর্ণ জীবন-চক্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 8) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

title শেল কাজের সম্পূর্ণ জীবন চক্র
state &amp;quot;অস্তিত্বহীন&amp;quot; as none
state &amp;quot;অগ্রভূমি\n(টার্মিনালকে اشغال করে)&amp;quot; as foreground #LightCoral
state &amp;quot;বন্ধ
^^^^^
 Syntax Error? (Assumed diagram type: state)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

title শেল কাজের সম্পূর্ণ জীবন চক্র
state &amp;quot;অস্তিত্বহীন&amp;quot; as none
state &amp;quot;অগ্রভূমি\n(টার্মিনালকে اشغال করে)&amp;quot; as foreground #LightCoral
state &amp;quot;বন্ধ
(Ctrl+Z / SIGTSTP)&amp;quot; as suspended #LightYellow
state &amp;quot;পটভূমি\n(bg অথবা &amp;amp;amp;)&amp;quot; as background #LightGreen
state &amp;quot;সমাপ্ত\n(exit code 0)&amp;quot; as done #LightGray

[*] --&amp;amp;gt; none
none --&amp;amp;gt; foreground : tape une commande
foreground --&amp;amp;gt; suspended : Ctrl+Z
foreground --&amp;amp;gt; done : fin normale

suspended --&amp;amp;gt; foreground : fg
suspended --&amp;amp;gt; background : bg
suspended --&amp;amp;gt; done : kill %n

background --&amp;amp;gt; foreground : fg
background --&amp;amp;gt; done : fin normale\n(en arrière-plan)
background --&amp;amp;gt; suspended : Ctrl+Z\n(si fg puis Ctrl+Z)

done --&amp;amp;gt; [*]

note right of suspended
  L&amp;#39;état suspendu est
  le pivot de tout le
  système de jobs
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উন্নত_টিপস&amp;quot;&amp;gt;উন্নত টিপস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_fg_সঙ্গে_সবচেয়ে_নতুন_চাকরি_এবং_বিনিময়&amp;quot;&amp;gt;fg সঙ্গে সবচেয়ে নতুন চাকরি এবং বিনিময়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;fg`আর্গুমেন্ট ছাড়াই চিহ্নিত করা কাজটি আনে&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;(সর্বশেষ). আপনি এটাও ব্যবহার করতে পারেন&amp;lt;/code&amp;gt;%-`আগের কাজটি লক্ষ্য করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ vim file1.txt
^Z
[1]+  Stoppé    vim file1.txt

$ vim file2.txt
^Z
[2]+  Stoppé    vim file2.txt

$ fg      # ramène job [2] (le plus récent)
$ fg %-   # ramène job [1] (le précédent)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কामকে_পরিষ্কারভাবে_শেষ_করা&amp;quot;&amp;gt;কामকে পরিষ্কারভাবে শেষ করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ jobs
[1]-  Stoppé    vim config.yml
[2]+  Stoppé    ./gradlew test

$ kill %2       # envoie SIGTERM au job 2
$ kill -9 %1    # envoie SIGKILL au job 1 (force)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_désown_শেল_থেকে_ডিট্যাচ_করুন&amp;quot;&amp;gt;désown : শেল থেকে ডিট্যাচ করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;disown`একটি job শেলের job টেবিল থেকে সরানো হয়। প্রক্রিয়া চলছে কিন্তু এখনও আর এর সাথে ফেরত আনা যায় না সঙ্গে`fg&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ ./gradlew build &amp;amp;amp;
[1] 12345

$ disown %1
# Le processus continue mais n&amp;#39;est plus lié au shell
# Ça survives à la fermeture du terminal&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_দীর্ঘস্থায়ী_প্রক্রিয়াগুলোর_জন্য_nohup_এর_সাথে_মিশ্রিত_করুন&amp;quot;&amp;gt;দীর্ঘস্থায়ী প্রক্রিয়াগুলোর জন্য nohup-এর সাথে মিশ্রিত করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি প্রক্রিয়া টার্মিনাল বন্ধ হওয়ার পরেও বাঁচতে পারে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ nohup ./gradlew build &amp;amp;amp;
[1] 12345
$ disown %1
# Le build continue même si vous fermez le terminal&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;fg&amp;quot; as fg_ #SkyBlue {
  card &amp;quot;কাজটি আনো
সর্বশেষটি (+)&amp;quot; as f1
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;fg&amp;quot; as fg_ #SkyBlue {
  card &amp;quot;কাজটি আনো
সর্বশেষটি (+)&amp;quot; as f1
  card &amp;quot;একটি নির্দিষ্ট কাজ লক্ষ্য করুন\nfg %n&amp;quot; as f2
  card &amp;quot;বিকল্প: fg %-%&amp;quot; as f3
}

rectangle &amp;quot;%n-কে হত্যা কর&amp;quot; as kill_ #LightCoral {
  card &amp;quot;SIGTERM (পরিষ্কার)&amp;quot; as k1
  card &amp;quot;SIGKILL -9 (বল)&amp;quot; as k2
}

rectangle &amp;quot;অস্বীকার&amp;quot; as disown #Lavender {
  card &amp;quot;শেল থেকে পৃথক করুন
(বন্ধকরণে জীবন্ত থাকা)&amp;quot; as d1
}

rectangle &amp;quot;nohup + &amp;amp;amp;&amp;quot; as nohup_ #LightGreen {
  card &amp;quot;SIGHUP-কে প্রতিরোধী প্রক্রিয়া (টার্মিনাল বন্ধ হওয়ার পর জীবিত থাকে)&amp;quot; as n1
}

fg_ -right-&amp;amp;gt; kill_ : si faut\nterminer
kill_ -right-&amp;amp;gt; disown_ : ou détacher
nohup_ -left-&amp;amp;gt; fg_ : fg ramène en\navant-plan

note bottom of disown_
  Après disown, fg ne peut
  plus ramener le job
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাধারন_ব্যাহতি_ও_ভุล&amp;quot;&amp;gt;সাধারন ব্যাহতি ও ভุล&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ctrlz_এবং_ctrlc_বুলিয়ে_নেওয়া&amp;quot;&amp;gt;Ctrl+Z এবং Ctrl+C বুলিয়ে নেওয়া&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি সবচেয়ে সচরাচর ত্রুটি।`Ctrl+C`প্রক্রিয়া মārন করে।`Ctrl+Z`এইকে বন্ধ করে। আপনি চাপ দিলে`Ctrl+C`প্রতিভাবনে, সকল অবস্থা হারিয়ে যায় — খোলা ফাইল, LLM সেশন, চলমান বিল্ড।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/ctrlz-vs-ctrlc.svg&amp;quot; alt=&amp;quot;ctrlz vs ctrlc&amp;quot; width=&amp;quot;1257&amp;quot; height=&amp;quot;129&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_জবগুলো_শেলের_জন্য_স্থানীয়&amp;quot;&amp;gt;জবগুলো শেলের জন্য স্থানীয়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;jobs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt; et `bg`তারা শুধুমাত্র সেই শেলে কাজ করে যা প্রক্রিয়াগুলি চালিয়েছিল। আপনি যদি একটি নতুন টার্মিনাল খুলেন, আপনি অন্যের কাজগুলো দেখবেন না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Terminal 1
$ vim file.txt
^Z
[1]+  Stoppé    vim file.txt

# Terminal 2 (nouveau)
$ jobs
# (rien — les jobs sont locaux au shell)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সিস্টেম-wide প্রক্রিয়া দেখতে, ব্যবহার করুন`ps` ou &amp;lt;code&amp;gt;htop&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;ps aux | grep vim&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শেল_বন্ধ_হলে_জবস_suriname_করে_না&amp;quot;&amp;gt;শেল বন্ধ হলে জবস Suriname করে না&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি টার্মিনাল বন্ধ করেন, তাহলে বিলম্বিত বা ব্যাকগ্রাউন্ডে চলমান সমস্ত কাজ নাশিত হয়। একটি প্রক্রিয়া জীবিত রাখতে, ব্যবহার করুন`nohup`+&amp;lt;code&amp;gt;disown&amp;lt;/code&amp;gt; :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ nohup ./gradlew build &amp;amp;amp;
[1] 12345
$ disown %1
# Fermer le terminal → le build continue&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইন্টারঅ্যাক্টিভ_প্রক্রিয়াগুলো_এবং_fg&amp;quot;&amp;gt;ইন্টারঅ্যাক্টিভ প্রক্রিয়াগুলো এবং fg&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কতগুলো ইন্টারঅ্যাক্টিভ প্রোগ্রাম ভালো না চলছে একটি`Ctrl+Z`+&amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt;.এটা দুর্ল্ভ কিন্তু ঘটে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কয়েকটি প্রোগ্রাম যা সিগন্যাল ব্যবহার করে (vim, htop, less ভালভাবে পরিচালনা করেন`Ctrl+Z`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;লম্বা নেটওয়ার্ক প্রোগ্রাম (ssh, opencode) সাধারণত সঠিকভাবে পুনরুদ্ধার করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;টার্মিনালকে পরিবর্তনকারী প্রোগ্রাম (ncurses) কখনো কখনো টার্মিনালকে একটি অপ্রত্যাশিত অবস্থায় রেখে দিতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি দুষ্ট টার্মিনালের পর একটি`fg`, টাইপ করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;reset&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারসংক্ষেপ_ডায়াগ্রাম&amp;quot;&amp;gt;সারসংক্ষেপ ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 10) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

title &amp;quot;fg — টিপস যা সবকিছু পরিবর্তন করে&amp;quot;

rectangle &amp;quot;সমস্যা&amp;quot; as problem #LightCoral {
  card &amp;quot;টার্মিনাল ব্লকড
একটি প্রครিয়া由&amp;quot; as p1
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

title &amp;quot;fg — টিপস যা সবকিছু পরিবর্তন করে&amp;quot;

rectangle &amp;quot;সমস্যা&amp;quot; as problem #LightCoral {
  card &amp;quot;টার্মিনাল ব্লকড
একটি প্রครিয়া由&amp;quot; as p1
  card &amp;quot;একটি নতুন
টার্মিনাল = ভারী সমাধান&amp;quot; as p2
}

rectangle &amp;quot;**সমাধান**&amp;quot; as solution #LightGreen {
  card &amp;quot;Ctrl+Z → বরখাস্ত&amp;quot; as s1
  card &amp;quot;fg → আবার শুরু করে&amp;quot; as s2
  card &amp;quot;bg → ব্যাকগ্রাউন্ড&amp;quot; as s3
  card &amp;quot;jobs → দেখতে নিলম্বিতদের&amp;quot; as s4
}

rectangle &amp;quot;**লাভ**&amp;quot; as advantages #SkyBlue {
  card &amp;quot;প্রসঙ্গে কোনো ক্ষতি হয়নি&amp;quot; as a1
  card &amp;quot;রিস্টার্ট নেই&amp;quot; as a2
  card &amp;quot;একটি টার্মিনাল کافی&amp;quot; as a3
}

problem -right-&amp;amp;gt; solution : &amp;quot;নেটিভ সমাধান
Unix থেকে ৪০ বছর&amp;quot;
solution -right-&amp;amp;gt; advantages : &amp;quot;ফল&amp;quot;

note bottom of advantages
  fg n&amp;#39;est pas un tips obscur
  C&amp;#39;est un mécanisme fondamental
  du shell Unix
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_fg_কেন_হ্রাসপত্রিত&amp;quot;&amp;gt;fg কেন হ্রাসপত্রিত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আধুনিক ডেভেলপারদের অধিকাংশ খুঁজে পাচ্ছেন`fg`অবিলম্বে, অথবা কখনও নয়। কিছু&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;IDE-গুলো টার্মিনালকে লুকায়&amp;lt;/strong&amp;gt;: VS Code একটি অন্তর্নির্মিত টার্মিনাল প্রদান করে, কিন্তু একাধিক ট্যাব`fg`দেখে মনে হচ্ছে কম প্রয়োজনীয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গ্রাফিক্যাল টুলস CLIকে প্রতিস্থাপন করে&amp;lt;/strong&amp;gt;: ফাইল ম্যানেজার, সিস্টেম মনিটর, গ্রাফিকাল গিট ক্লায়েন্ট&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;tmuxおよびscreen&amp;lt;/strong&amp;gt;: এই মাল্টিপ্লেক্সারগুলো একই সমস্যাটি ভিন্নভাবে সমাধান করে, কিন্তু`fg`এটা সহজ hơn এবং সর্বদা উপলব্ধ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তবে,`fg`thorax+:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সার্বজনীন&amp;lt;/strong&amp;gt;সব POSIX শেলে (bash, zsh, fish&amp;amp;#8230;&amp;amp;#8203;) উপস্থিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নিরғor&amp;lt;/strong&amp;gt;: tmux অথবা screen ইনস্টলের প্রয়োজন নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;তৎক্ষণিক&amp;lt;/strong&amp;gt;: দুটি আক্রমণ (&amp;lt;code&amp;gt;Ctrl+Z`তারপর`fg&amp;lt;/code&amp;gt;) বন্ধ করতে এবং পুনরায় শুরু করতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রসঙ্গ সংরক্ষক&amp;lt;/strong&amp;gt;: প্রক্রিয়ার অবস্থা অক্ষুণ্ন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;fg কেন
আন্ডার-ইস্টিমেটেড ?&amp;quot; as why #LightCoral {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif

rectangle &amp;quot;fg কেন
আন্ডার-ইস্টিমেটেড ?&amp;quot; as why #LightCoral {
  card &amp;quot;IDE-এ টার্মিনাল
বহু-ট্যাব&amp;quot; as w1
  card &amp;quot;গ্রাফিক্যাল টুলস
যারা CLI-কে প্রতিস্থাপন করে&amp;quot; as w2
  card &amp;quot;tmux/screen
সমস্যা সমাধান করে
অন্য উপায়ে&amp;quot; as w3
}

rectangle &amp;quot;fg
কেন উন্নত ?&amp;quot; as superior #LightGreen {
  card &amp;quot;সার্বজনীন : bash,
zsh, fish, sh...&amp;quot; as s1
  card &amp;quot;অশুধারিত:
স্থাপন ছাড়া&amp;quot; as s2
  card &amp;quot;দুটি চোত:\nCtrl+Z এরপর fg&amp;quot; as s3
  card &amp;quot;সরক্ষিত প্রেক্ষাপট :
শূন্য স্টেট লস&amp;quot; as s4
}

why -right-&amp;amp;gt; superior : &amp;quot;সরলতা
সব সময় জয় করে&amp;quot;
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রযুক্তিগত_স্মৃতি_সিগন্যুল&amp;quot;&amp;gt;প্রযুক্তিগত স্মৃতি : সিগন্যুল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কৌতুহলী পাঠকদের জন্য, এখানে জড়িত সিগনালগুলি হলো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 14.2857%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5714%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5714%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5715%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সিগনাল&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;নাম&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রেরিত_by&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রভাব&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGINT&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+C&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বি�িঘ্ন — প্রক্রিয়া শেষ করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGQUIT&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+\&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোর ডাম্পসাথে বের হইয়া গেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;18&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGTSTP&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;Ctrl+Z&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ইন্টারেক্টিভ স্টপ — প্রক্রিয়া বন্ধ রাখা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;19&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGCONT&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;চালিয়ে যান — একটি বন্ধ করা প্রক্রিয়া পুনরায় শুরু করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;15&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGTERM&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kill %n&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুদ্ধ পর্যপ্তি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;9&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;SIGKILL&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;kill -9 %n&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাধ্য সমাপ্তি (অব্যাহত্য)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ প্রবাহ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/signal-flow.svg&amp;quot; alt=&amp;quot;signal flow&amp;quot; width=&amp;quot;486&amp;quot; height=&amp;quot;525&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`fg`এটি একটি অস্পষ্ট টিপস নয় — এটি শেল Unix-এর একটি মৌলিক মেকানিজম, যা ১৯৭০-এর দশকে থেকে উপলব্ধ। অনেকজন ডেভেলপারের এটি বজায় রাখা না হওয়া আমাদের যुगের একটি লক্ষণ: আইডিই এবং মাল্টিপ্লেক্সারের কারণে আমরা মৌলিক থেকে দূরে গিয়েছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক&amp;amp;lt;/tool_call&amp;amp;gt; আপনি.when একটি SSH সার্ভারে, একটি মিনিমাল টার্মinaleএ, বা মাত্র ব্যবহার করছেন`opencode`এবং LLM পূর্ণ পরিশ্রমে কাজ করছে—&amp;lt;code&amp;gt;Ctrl+Z&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;fg&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bg&amp;lt;/code&amp;gt;, `jobs`আপনার সেরা বন্ধু।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt; Ctrl+Z দবিয়ে প্রক্রিয়া বন্ধ করুন, fg দিয়ে পুনরায় চালু করুন। এটি টার্মিনালের পজ‑প্লে। (empty)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রেফারেন্স&amp;quot;&amp;gt;রেফারেন্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;man bash&amp;lt;/code&amp;gt;— বিভাগ JOB CONTROL&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;man signal&amp;lt;/code&amp;gt;— POSIX সিগনালের তালিকা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.gnu.org/software/bash/manual/bash.html#Job-Control&amp;quot;&amp;gt;ব্যাশ রেফারেন্স ম্যানুয়াল — কাজ নিয়ন্ত্রণ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://man7.org/linux/man-pages/man7/signal.7.html&amp;quot;&amp;gt;man 7 signal — লিনাক্স সিগন্যাল&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://tldp.org/LDP/abs/html/x312743.htm&amp;quot;&amp;gt;উন্নত Bash-Scripting গাইড — কাজ নিয়ন্ত্রণ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>VS Code হোমে: স্থানীয় ইন্সটলেশন এবং ফন্ট কাসটমাইজেশন sudo ছাড়া</title>
            <link >https://cheroliv.com//blog/2026/0103_vscode_local_install_custom_fonts_post.html</link>
            <pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0103_vscode_local_install_custom_fonts_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পথের_ওভারভিউ&amp;quot;&amp;gt;পথের ওভারভিউ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_vs_code_হোমে&amp;quot;&amp;gt;কেন : VS Code হোমে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিস্টেম_ইনস্টলেশনের_সমস্যা&amp;quot;&amp;gt;সিস্টেম ইনস্টলেশনের সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_একটি_স্থানীয়_ইনস্টলেশন&amp;quot;&amp;gt;সমাধান : একটি স্থানীয় ইনস্টলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তব_সুবিধা&amp;quot;&amp;gt;বাস্তব সুবিধা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রধান_মেনু_ফন্ট_কাস্টমাইজ_করুন&amp;quot;&amp;gt;প্রধান মেনু ফন্ট কাস্টমাইজ করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্পত্তি&amp;quot;&amp;gt;নিষ্পত্তি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রযুক্তি_সরাসরি_css_প্যাচ&amp;quot;&amp;gt;প্রযুক্তি : সরাসরি CSS প্যাচ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অখণ্ডতা_সতর্কতা_মুছে_ফেলুন&amp;quot;&amp;gt;অখণ্ডতা সতর্কতা মুছে ফেলুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এক্সপ্লোরার_প্যানেলের_ফন্ট_কাস্টমাইজ_করুন_যুদ্ধ&amp;quot;&amp;gt;এক্সপ্লোরার প্যানেলের ফন্ট কাস্টমাইজ করুন — যুদ্ধ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রয়াশ_১_একটি_প্যারামিটার_যা_বিদ্যমান_নেই&amp;quot;&amp;gt;প্রয়াশ ১ : একটি প্যারামিটার যা বিদ্যমান নেই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রচেষ্টা_২_custom_css_and_js_loader_এক্সটেনশন&amp;quot;&amp;gt;প্রচেষ্টা ২ : Custom CSS and JS Loader এক্সটেনশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যন্ত্রণা_প্রতিবার_এক্সটেনশন_সক্রিয়_করতে_হবে&amp;quot;&amp;gt;�যন্ত্রণা : প্রতিবার এক্সটেনশন সক্রিয় করতে হবে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রয়াস_৩_রেখাগুলো_অতিক্রম_করে&amp;quot;&amp;gt;প্রয়াস ৩: রেখাগুলো অতিক্রম করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_zoom_পিতৃ_কন্টেইনারে&amp;quot;&amp;gt;সমাধান: &amp;lt;code&amp;gt;zoom&amp;lt;/code&amp;gt; পিতৃ কন্টেইনারে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিলেক্টরদের_সারাংশ_এবং_যা_কাজ_করে&amp;quot;&amp;gt;সিলেক্টরদের সারাংশ এবং যা কাজ করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্বয়ংক্রিয়_আপডেট_স্ক্রিপ্ট&amp;quot;&amp;gt;স্বয়ংক্রিয় আপডেট স্ক্রিপ্ট&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা&amp;quot;&amp;gt;সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্ক্রিপ্ট_vscode_update_sh&amp;quot;&amp;gt;স্ক্রিপ্ট `vscode-update.sh&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_জড়িত_ফাইল_ওভারভিউ&amp;quot;&amp;gt;জড়িত ফাইল — ওভারভিউ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখা_পাঠ&amp;quot;&amp;gt;শেখা পাঠ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_হোমে_ইনস্টল_করলে_সবকিছু_মুক্তি_পায়&amp;quot;&amp;gt;হোমে ইনস্টল করলে সবকিছু মুক্তি পায়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_zoom_font_size_কোম্পোনেন্ট_লিস্টের_জন্য&amp;quot;&amp;gt;zoom` &amp;amp;gt; &amp;lt;code&amp;gt;font-size&amp;lt;/code&amp;gt; কোম্পোনেন্ট লিস্টের জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_custom_css_এক্সটেনশন_স্পষ্টভাবে_সক্রিয়করণ_প্রয়োজন&amp;quot;&amp;gt;Custom CSS এক্সটেনশন স্পষ্টভাবে সক্রিয়করণ প্রয়োজন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_আপডেট_স্ক্রিপ্ট_অপরিহার্য&amp;quot;&amp;gt;একটি আপডেট স্ক্রিপ্ট অপরিহার্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_দ্রুত_রেফারেন্স&amp;quot;&amp;gt;দ্রুত রেফারেন্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pাঠনের সময় : 8 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;কেন VS Code ইন্সটল করা arasında`/opt`অথবা মাধ্যমে`apt`কখনও কিবোর্ড ছুঁয় না করে নিজের বাড়িতে এটি রাখতে এবং নিজের IDE-কে খেলার মাঠে পরিণত করতে পারা`sudo`? এখানে একটি স্থানীয় ইনস্টলেশনের কাহিনী এবং তারপরে মেনু ও ফাইল এক্সপ্লোরারের ফন্ট প্রস্তুত করার জন্য একটি দরকারী লড়াইয়ের বর্ণনা দেওয়া হল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পথের_ওভারভিউ&amp;quot;&amp;gt;পথের ওভারভিউ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur as dev
actor &amp;quot;opencode
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

actor Développeur as dev
actor &amp;quot;opencode
+ LLM&amp;quot; as agent

package &amp;quot;হোম ব্যবহারকারী (~)&amp;quot; #LightGreen {
    package &amp;quot;~/apps/&amp;quot; {
        component &amp;quot;VS Code\n(টারবাল)&amp;quot; as vscode #SkyBlue
        component &amp;quot;vscode-update.sh&amp;quot; as script #LightYellow
    }
    package &amp;quot;~/.config/Code/&amp;quot; {
        component &amp;quot;settings.json&amp;quot; as settings #Lavender
    }
    package &amp;quot;~/.vscode-custom-css/&amp;quot; {
        component &amp;quot;custom.css
(zoom: 1.25)&amp;quot; as customcss #Lavender
    }
}

cloud &amp;quot;code.visualstudio.com&amp;quot; as download

dev --&amp;amp;gt; vscode : Télécharge &amp;amp;amp; installe
dev --&amp;amp;gt; script : Lance mise à jour
script --&amp;amp;gt; download : wget dernière version
script --&amp;amp;gt; vscode : Remplace + re-patch CSS
agent --&amp;amp;gt; settings : Écrit config
agent --&amp;amp;gt; customcss : Écrit zoom CSS
agent --&amp;amp;gt; vscode : Patch workbench CSS

note right of vscode
  Installation dans le home
  = contrôle total sans sudo
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_vs_code_হোমে&amp;quot;&amp;gt;কেন : VS Code হোমে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিস্টেম_ইনস্টলেশনের_সমস্যা&amp;quot;&amp;gt;সিস্টেম ইনস্টলেশনের সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;VS Code ইনস্টল করা হয়েছে&amp;amp;lt;/tool_call&amp;amp;gt; মাধ্যমে`apt`, &amp;lt;code&amp;gt;dnf`বা midpoint&amp;lt;/code&amp;gt;/opt`verrouille les fichiers de l&amp;amp;#8217;application derrière les droits root. Toute modification du CSS natif, de becomes&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটিঅ্যাপ্লিকেশনের ফাইলগুলোকে রুট অধিকার সীমাবদ্ধতার পিছনে লকে। ব্রাউজারের নেটিভ CSS-এ যেকোনো পরিবর্তন,&amp;lt;code&amp;gt;product.json`অথবা ইনস্টলেশনের ফোল্ডার প্রয়োজন`sudo&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তবে, ব্যাবহারের সময়&amp;lt;strong&amp;gt;opencode&amp;lt;/strong&amp;gt;(tool CLI দিয়ে কোডে LLM নিয়ন্ত্রণ করতে), এজেন্টের প্রয়োজন হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশন ফাইলে লিখুন`~/.config/Code/User/settings.json`) — এইটি, এটি ইতিমধ্যে হোমে আছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আইডিইয়ের অ্যাসেটগুলো পরিবর্তন করুন (workbenchের CSS,&amp;lt;code&amp;gt;product.json&amp;lt;/code&amp;gt;) উন্নত কাস্টমাইজেশনের জন্য — এটি, ` sudo` ছাড়া ব্লক করা হয়েছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_একটি_স্থানীয়_ইনস্টলেশন&amp;quot;&amp;gt;সমাধান : একটি স্থানীয় ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অফিশিয়াল টারবল আর্কাইভ ডাউনলোড করা হয় এবং এটি ডিকম্প্রেস করা হয় সরাসরি মধ্যে`~/apps/`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/apps
cd ~/apps
wget &amp;quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;amp;os=linux-x64&amp;quot; -O vscode.tar.gz
tar -xzf vscode.tar.gz
rm vscode.tar.gz&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাইনারি তারপরে এ অবস্থিত`~/apps/VSCode-linux-x64/bin/code`। না`sudo`প্রয়োজন নেই যেকোনো ফাইল পড়ার, পরিবর্তন করার বা প্রতিস্থাপনের জন্য নিচে`~/apps/VSCode-linux-x64/`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তব_সুবিধা&amp;quot;&amp;gt;বাস্তব সুবিধা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;সিস্টেম ইনস্টলেশন
(/opt, apt, dnf)&amp;quot; #LightCoral {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;সিস্টেম ইনস্টলেশন
(/opt, apt, dnf)&amp;quot; #LightCoral {
    card &amp;quot;VS Code রুটের সম্পত্তি&amp;quot; {
        [CSS du workbench : sudo requis]
        [product.json : sudo requis]
        [Dossier d&amp;#39;install : non modifiable]
    }
}

rectangle &amp;quot;ইনস্টলেশন হোম
(~/apps)&amp;quot; #LightGreen {
    card &amp;quot;VS Code ব্যবহারকারীর সম্পত্তি&amp;quot; {
        [CSS du workbench : libre]
        [product.json : libre]
        [Dossier d&amp;#39;install : libre]
        [Script update maison]
    }
}

&amp;quot;সিস্টেম ইনস্টলেশন
(/opt, apt, dnf)&amp;quot; -right-&amp;amp;gt; &amp;quot;ইনস্টলেশন হোম
(~/apps)&amp;quot; : **Non, merci**\nJe prends le home

note bottom of &amp;quot;ইনস্টলেশন হোম
(~/apps)&amp;quot;
  L&amp;#39;agent opencode+LLM peut
  modifier les fichiers de l&amp;#39;IDE
  sans aucune élévation de privilèges
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 66.6667%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;প্রয়োজন&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;বিবরণ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;sudo না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;IDE-এর সব ফাইল ব্যবহারকারীর মালিকানাধীন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;CSS-এর সরাসরি পরিবর্তন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আমরা প্যাচ করতে পারি`workbench.desktop.main.css`অনুমোদন উন্নতি ছাড়া&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাড়ির আপডেট স্ক্রিপ্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি সাধারণ শেল স্ক্রিপ্ট স্বয়ংক্রিয়ভাবে ডাউনলোড, প্রতিস্থাপন এবং পুনরায় প্যাচ করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আলগা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সিস্টেম ইনস্টলেশন দূষিত নয় ; রোলব্যাক = ফোল্ডারটি মুছুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রধান_মেনু_ফন্ট_কাস্টমাইজ_করুন&amp;quot;&amp;gt;প্রধান মেনু ফন্ট কাস্টমাইজ করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিষ্পত্তি&amp;quot;&amp;gt;নিষ্পত্তি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্ট ফন্ট প্রধান মেনু (File, Edit, View&amp;amp;#8230;&amp;amp;#8203;) এবং dropdowns খুব ছোট। VS Code কোনো সেটিংস অফার না করে যastore এটি পরিবর্তন করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রযুক্তি_সরাসরি_css_প্যাচ&amp;quot;&amp;gt;প্রযুক্তি : সরাসরি CSS প্যাচ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলের শেষে CSS যোগ করা হয়`workbench.desktop.main.css`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant &amp;quot;workbench.desktop
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor Développeur as dev
participant &amp;quot;workbench.desktop
.main.css&amp;quot; as css
participant &amp;quot;product.json&amp;quot; as product
participant &amp;quot;VS কোড&amp;quot; as vscode

== Patch CSS ==
dev -&amp;amp;gt; css : Ajouter règles font-size\n(.menubar-menu-title, etc.)
dev -&amp;amp;gt; vscode : Redémarrer VS Code
vscode -&amp;amp;gt; vscode : Charge le CSS patché
vscode --&amp;amp;gt; dev : Menus et dropdowns en 23px/22px ✓

== Suppression warning ==
vscode --&amp;amp;gt; dev : ⚠️ &amp;quot;আপনার ইনস্টলেশন ভ্রষ্ট&amp;quot;
dev -&amp;amp;gt; product : Supprimer clé &amp;quot;চেকসামস&amp;quot;\n(python3 -c ...)
dev -&amp;amp;gt; vscode : Redémarrer VS Code
vscode --&amp;amp;gt; dev : Plus de warning ✓

note over css, product
  Deux fichiers dans ~/apps/
  = modifiables sans sudo
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;CSS_FILE=&amp;quot;$HOME/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css&amp;quot;

cat &amp;amp;gt;&amp;amp;gt; &amp;quot;$CSS_FILE&amp;quot; &amp;amp;lt;&amp;amp;lt; &amp;#39;EOF&amp;#39;
.menubar-menu-title{font-size:23px!important}
.menubar&amp;amp;gt;.menubar-menu-button{font-size:23px!important}
.monaco-menu-option{font-size:22px!important;line-height:34px!important}
.monaco-menu .action-label:not(.codicon){font-size:22px!important}
.menubar-menu-items-holder .monaco-menu .action-item .action-label{font-size:22px!important}
EOF&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অখণ্ডতা_সতর্কতা_মুছে_ফেলুন&amp;quot;&amp;gt;অখণ্ডতা সতর্কতা মুছে ফেলুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;VS Code তার ফাইলগুলোর পরিবর্তন অনুভব করে এবং &amp;#39;Your installation is corrupt&amp;#39; ব্যানারটি প্রদর্শন করে। এট এড়াতে, চেকসামস এর`product.json`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-python hljs&amp;quot; data-lang=&amp;quot;python&amp;quot;&amp;gt;import json
product_json = &amp;quot;$HOME/apps/VSCode-linux-x64/resources/app/product.json&amp;quot;
with open(product_json, &amp;#39;r&amp;#39;) as f:
    data = json.load(f)
data.pop(&amp;#39;checksums&amp;#39;, None)
with open(product_json, &amp;#39;w&amp;#39;) as f:
    json.dump(data, f, indent=2)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পুনরায় চালু করার পরে আর কোনও warning নেই এবং মেনুগুলো সঠিকভাবে পড়া যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এক্সপ্লোরার_প্যানেলের_ফন্ট_কাস্টমাইজ_করুন_যুদ্ধ&amp;quot;&amp;gt;এক্সপ্লোরার প্যানেলের ফন্ট কাস্টমাইজ করুন — যুদ্ধ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রয়াশ_১_একটি_প্যারামিটার_যা_বিদ্যমান_নেই&amp;quot;&amp;gt;প্রয়াশ ১ : একটি প্যারামিটার যা বিদ্যমান নেই&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথমে নেটিভ প্যারামিটারটি চেষ্টা করা হয়`workbench.tree.fontSize`মধ্যে`settings.json`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
    &amp;quot;workbench.tree.fontSize&amp;quot;: 20
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল:&amp;lt;strong&amp;gt;কোনো প্রভাব নেই&amp;lt;/strong&amp;gt;এই সেটিংটি VS Code-এ নেই। প্রমাণ যে অনুজ্ঞাপিত নয় এমন সেটিংসগুলো নীরবে উপেক্ষা করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রচেষ্টা_২_custom_css_and_js_loader_এক্সটেনশন&amp;quot;&amp;gt;প্রচেষ্টা ২ : Custom CSS and JS Loader এক্সটেনশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এক্সটেনশন ইনস্টল করা হয়`be5invis.vscode-custom-css` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;~/apps/VSCode-linux-x64/bin/code --install-extension be5invis.vscode-custom-css&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি CSS ফাইল তৈরি করি`~/.vscode-custom-css/custom.css`এক্সপ্লোরার উপাদান লক্ষ্য করে সিলেক্টর দিয়ে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;.monaco-tree-rows .monaco-tree-row,
.sidebar .monaco-list-row,
.explorer-viewlet .monaco-list-row,
.monaco-list-row .monaco-icon-label {
    font-size: 22px !important;
    line-height: 36px !important;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং আমরা এই ফাইলটি সেটিংস‑এ রেফারেন্স করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json hljs&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
    &amp;quot;vscode_custom_css.imports&amp;quot;: [
        &amp;quot;file:///home/user/.vscode-custom-css/custom.css&amp;quot;
    ]
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল:&amp;lt;strong&amp;gt;পরিবর্তনগুলো প্রয়োগ হয় না&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_যন্ত্রণা_প্রতিবার_এক্সটেনশন_সক্রিয়_করতে_হবে&amp;quot;&amp;gt;�যন্ত্রণা : প্রতিবার এক্সটেনশন সক্রিয় করতে হবে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এক্সটেনশনের ডকুমেন্টেশন এই গুরুত্বপূর্ণ বিষয়ে নীরব: প্রতিটি কাস্টম CSS পরিবর্তনের পর, প্রয়োজন&amp;lt;strong&amp;gt;অবশ্যই&amp;lt;/strong&amp;gt;প্যালেট থেকে কমান্ড চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;Ctrl+Shift+P&amp;lt;/code&amp;gt;→ টাইপ&amp;lt;strong&amp;gt;কাস্টম CSS এবং JS সক্রিয় করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;VS Code চAHে একটি রিস্টার্ট → স্বীকার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ধাপ ছাড়া, CSS কখনো IDE-এ ইনজেক্ট হয় না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রয়াস_৩_রেখাগুলো_অতিক্রম_করে&amp;quot;&amp;gt;প্রয়াস ৩: রেখাগুলো অতিক্রম করে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখনও সাথে`font-size: 22px` et &amp;lt;code&amp;gt;line-height: 36px&amp;lt;/code&amp;gt;, জ্যাম্বেজ অক্ষর (g, p, f, b) পাশের লাইনে বেরিয়ে যায়. যোগ দেওয়ার চেষ্টা করা হচ্ছে`height` et &amp;lt;code&amp;gt;min-height&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;.monaco-list-row {
    height: 36px !important;
    min-height: 36px !important;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল :&amp;lt;strong&amp;gt;কোনো পরিবর্তন নেই&amp;lt;/strong&amp;gt;. VS Code JavaScript-এ লাইনের উচ্চতা গণনা করে এবং CSS মানগুলোকে ওভাররাইড করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_zoom_পিতৃ_কন্টেইনারে&amp;quot;&amp;gt;সমাধান: &amp;lt;code&amp;gt;zoom&amp;lt;/code&amp;gt; পিতৃ কন্টেইনারে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;প্রয়াস ১
অমوجود প্যারামিটার&amp;quot; #LightCoral {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;প্রয়াস ১
অমوجود প্যারামিটার&amp;quot; #LightCoral {
    card &amp;quot;workbench.tree.fontSize&amp;quot; as t1 {
        [VS Code ignore le paramètre]
    }
}

rectangle &amp;quot;প্রয়াস ২
কাস্টম CSS + ফন্ট-সাইজ&amp;quot; #LightYellow {
    card &amp;quot;.monaco-list-row { font-size: 22px }&amp;quot; as t2 {
        [Texte plus grand\nmais lignes superposées]
    }
}

rectangle &amp;quot;প্রয়াস 3
font-size + line-height + height&amp;quot; #LightYellow {
    card &amp;quot;hauteur: 36px !important&amp;quot; as t3 {
        [VS Code override\npar JavaScript]
        [Aucun effet]
    }
}

rectangle &amp;quot;সমাধান
প্যারেন্ট কন্টেইনারের জুম&amp;quot; #LightGreen {
    card &amp;quot;.monaco-list-rows { zoom: 1.25 }&amp;quot; as t4 {
        [Texte + espacement\nproportionnels]
        [Layout JS respecté]
        [✓ Résultat conforme]
    }
}

t1 -down-&amp;amp;gt; t2 : Pas de paramètre ?\nOn essaie le CSS
t2 -down-&amp;amp;gt; t3 : Lignes superposées ?\nOn force la hauteur
t3 -down-&amp;amp;gt; t4 : Override JS ?\nOn utilise zoom

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;JavaScript লেআউটের সাথে লড়াই করার বদলে, আমরা প্রপার্টি ব্যবহার করি`zoom`লাইনের কন্টেইনারে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;.explorer-viewlet .monaco-list-rows,
.sidebar .monaco-list-rows {
    zoom: 1.25;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`zoom`কন্টেইনারের রেন্ডারকে সমানভাবে বাড়ায় — টেক্সট এবং স্পেসিং — VS Code-র JavaScript ইঞ্জিন tarafından গণনা করা লেআউটকে ভাঙা না করেই। ১.২৫ গুণক تقریباً ১৩px থেকে ১৬px এ পরিবর্তনের সমতুল্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল :&amp;lt;strong&amp;gt;ফাইল নামগুলো এখন পড়া যায়, লাইনগুলো সঠিকভাবে ফাঁকে বসেছে।&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিলেক্টরদের_সারাংশ_এবং_যা_কাজ_করে&amp;quot;&amp;gt;সিলেক্টরদের সারাংশ এবং যা কাজ করে&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;অভিগম্য&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;CSS&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ফল&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;font-size`উপর&amp;lt;/code&amp;gt;.monaco-list-row`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;font-size: 22px !important&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বড় টেক্সট কিন্তু চেনে পড়া রেখা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;line-height&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;height`উপর&amp;lt;/code&amp;gt;.monaco-list-row`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;line-height: 36px; height: 36px&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রভাব নেই (override JS)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;zoom&amp;lt;/code&amp;gt; উপর`.monaco-list-rows`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;zoom: 1.25&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সফল — পাঠ্য + সমানুপাতিক স্পেসিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_স্বয়ংক্রিয়_আপডেট_স্ক্রিপ্ট&amp;quot;&amp;gt;স্বয়ংক্রিয় আপডেট স্ক্রিপ্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor &amp;quot;বিকাশকারী
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
autonumber

actor &amp;quot;বিকাশকারী
অথবা cron&amp;quot; as dev
participant &amp;quot;vscode-update.sh&amp;quot; as script
participant &amp;quot;vscode টারবল\n(code.visualstudio.com)&amp;quot; as remote
participant &amp;quot;~/apps/\nVSCode-linux-x64/&amp;quot; as local
participant &amp;quot;~/apps/\nvscode-backup&amp;quot; as backup
participant &amp;quot;workbench
.desktop.main.css&amp;quot; as css
participant &amp;quot;product.json&amp;quot; as product

dev -&amp;amp;gt; script : ./vscode-update.sh
script -&amp;amp;gt; local : Lire version courante
script -&amp;amp;gt; remote : wget dernière version
script -&amp;amp;gt; script : Comparer versions

alt Version identique
    script --&amp;amp;gt; dev : &amp;quot;এখন আপ-টু-ডেট!&amp;quot;
else Nouvelle version
    script -&amp;amp;gt; backup : Sauvegarder installation courante\n(horodatée)
    script -&amp;amp;gt; local : rm -rf ancienne installation
    script -&amp;amp;gt; local : mv nouvelle installation
    script -&amp;amp;gt; css : Ajouter patch CSS\n(menubar 23px, dropdown 22px)
    script -&amp;amp;gt; product : Supprimer checksums\n(python3)
    script --&amp;amp;gt; dev : &amp;quot;আপডেট সম্পূর্ণ
1.xx.yy → 1.zz.ww&amp;quot;
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমস্যা&amp;quot;&amp;gt;সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;VS Code আপডেট হলে, তা ইনস্টলেশন ফোল্ডারটি প্রতিস্থাপন করে এবং&amp;lt;strong&amp;gt;সকল CSS প্যাচ মুছে ফেলে&amp;lt;/strong&amp;gt;প্রতিবার ম্যানুয়ালি পরিবর্তনগুলো পুনরায় প্রয়োগ করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্ক্রিপ্ট_vscode_update_sh&amp;quot;&amp;gt;স্ক্রিপ্ট `vscode-update.sh&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একজন তৈরি করে`~/apps/vscode-update.sh` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;#!/bin/bash
set -e

VSCODE_DIR=&amp;quot;$HOME/apps/VSCode-linux-x64&amp;quot;
BACKUP_DIR=&amp;quot;$HOME/apps/vscode-backup&amp;quot;
TEMP_DIR=&amp;quot;/tmp/vscode-update&amp;quot;

MENUBAR_FONT_SIZE=&amp;quot;23px&amp;quot;
DROPDOWN_FONT_SIZE=&amp;quot;22px&amp;quot;

echo &amp;quot;=== VS Code Local Updater ===&amp;quot;

CURRENT_VERSION=$(&amp;quot;$VSCODE_DIR/bin/code&amp;quot; --version 2&amp;amp;gt;/dev/null | head -1)
echo &amp;quot;Current version: $CURRENT_VERSION&amp;quot;

echo &amp;quot;Downloading latest VS Code...&amp;quot;
mkdir -p &amp;quot;$TEMP_DIR&amp;quot;
wget -q &amp;quot;https://code.visualstudio.com/sha/download?build=stable&amp;amp;amp;os=linux-x64&amp;quot; \
    -O &amp;quot;$TEMP_DIR/vscode.tar.gz&amp;quot;

echo &amp;quot;Extracting...&amp;quot;
mkdir -p &amp;quot;$TEMP_DIR/extracted&amp;quot;
tar -xzf &amp;quot;$TEMP_DIR/vscode.tar.gz&amp;quot; -C &amp;quot;$TEMP_DIR/extracted&amp;quot;

NEW_VERSION=$(&amp;quot;$TEMP_DIR/extracted/VSCode-linux-x64/bin/code&amp;quot; \
    --version 2&amp;amp;gt;/dev/null | head -1)
echo &amp;quot;New version: $NEW_VERSION&amp;quot;

if [ &amp;quot;$CURRENT_VERSION&amp;quot; = &amp;quot;$NEW_VERSION&amp;quot; ]; then
    echo &amp;quot;Already up to date!&amp;quot;
    rm -rf &amp;quot;$TEMP_DIR&amp;quot;
    exit 0
fi

echo &amp;quot;Backing up current installation...&amp;quot;
mkdir -p &amp;quot;$BACKUP_DIR&amp;quot;
cp -r &amp;quot;$VSCODE_DIR&amp;quot; &amp;quot;$BACKUP_DIR/VSCode-linux-x64-$(date +%Y%m%d-%H%M%S)&amp;quot;

echo &amp;quot;Updating...&amp;quot;
rm -rf &amp;quot;$VSCODE_DIR&amp;quot;
mv &amp;quot;$TEMP_DIR/extracted/VSCode-linux-x64&amp;quot; &amp;quot;$VSCODE_DIR&amp;quot;
rm -rf &amp;quot;$TEMP_DIR&amp;quot;

CSS_FILE=&amp;quot;$VSCODE_DIR/resources/app/out/vs/workbench/workbench.desktop.main.css&amp;quot;
echo &amp;quot;Re-applying custom CSS patch \
    (menubar=${MENUBAR_FONT_SIZE}, dropdown=${DROPDOWN_FONT_SIZE})...&amp;quot;
cat &amp;amp;gt;&amp;amp;gt; &amp;quot;$CSS_FILE&amp;quot; &amp;amp;lt;&amp;amp;lt; CSSEOF
.menubar-menu-title{font-size:${MENUBAR_FONT_SIZE}!important}\
.menubar&amp;amp;gt;.menubar-menu-button{font-size:${MENUBAR_FONT_SIZE}!important}\
.monaco-menu-option{font-size:${DROPDOWN_FONT_SIZE}!important;\
line-height:34px!important}\
.monaco-menu .action-label:not(.codicon)\
{font-size:${DROPDOWN_FONT_SIZE}!important}\
.menubar-menu-items-holder .monaco-menu .action-item .action-label\
{font-size:${DROPDOWN_FONT_SIZE}!important}
CSSEOF

PRODUCT_JSON=&amp;quot;$VSCODE_DIR/resources/app/product.json&amp;quot;
if [ -f &amp;quot;$PRODUCT_JSON&amp;quot; ]; then
    echo &amp;quot;Removing checksums to prevent integrity warning...&amp;quot;
    python3 -c &amp;quot;
import json
with open(&amp;#39;$PRODUCT_JSON&amp;#39;,&amp;#39;r&amp;#39;) as f: data=json.load(f)
data.pop(&amp;#39;checksums&amp;#39;, None)
with open(&amp;#39;$PRODUCT_JSON&amp;#39;,&amp;#39;w&amp;#39;) as f: json.dump(data,f,indent=2)
print(&amp;#39;Done.&amp;#39;)
&amp;quot;
fi

echo &amp;quot;=== Update complete: $CURRENT_VERSION -&amp;amp;gt; $NEW_VERSION ===&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্ক্রিপ্ট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সর্বশেষ স্থির সংস্করণটি ডাউনলোড করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জাচ করো যে সংস্করণ বর্তমান থেকে ভিন্ন কি না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বর্তমান ইনস্টলেশন (টাইমস্ট্যাম্পকৃত) ব্যাকআপ করুন`~/apps/vscode-backup/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইনস্টলেশন ফোল্ডার বদলে দাও&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পুনরায় প্রয়োগ কর&amp;lt;/strong&amp;gt;প্রধান মেনু CSS প্যাচ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;চেকসামগুলো মুছুন&amp;lt;/strong&amp;gt; de `product.json`ইন্টিগ্রিটি সতর্কতা এড়াতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
এক্সপ্লোরার প্যানের কাস্টমাইজেশনগুলো কাস্টম CSS এক্সটেনশন এবং ফাইলের&amp;amp;lt;/tool_call&amp;amp;gt;`~/.vscode-custom-css/custom.css`আপডেটে বাঁচে থাকেন কারণ তারা ইনস্টলেশনের ফোল্ডারের বাইরে বাস করে।
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_জড়িত_ফাইল_ওভারভিউ&amp;quot;&amp;gt;জড়িত ফাইল — ওভারভিউ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 6) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle &amp;quot;VS Code ইনস্টলেশন
(~/apps/VSCode-linux-x64/)&amp;quot; #LightCoral {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

rectangle &amp;quot;VS Code ইনস্টলেশন
(~/apps/VSCode-linux-x64/)&amp;quot; #LightCoral {
    component &amp;quot;workbench.desktop\n.main.css&amp;quot; as css #LightCoral
    component &amp;quot;product.json&amp;quot; as product #LightCoral
    component &amp;quot;বাইনারি
বাইনারি/কোড&amp;quot; as binary #LightCoral
}

rectangle &amp;quot;ব্যবহারকারী কনফিগারেশন
(~/.config/Code/)&amp;quot; #LightGreen {
    component &amp;quot;settings.json&amp;quot; as settings #LightGreen
    component &amp;quot;extensions/&amp;quot; as extensions #LightGreen
}

rectangle &amp;quot;স্থায়ী কাস্টমাইজেশন
(~/.vscode-custom-css/)&amp;quot; #SkyBlue {
    component &amp;quot;custom.css\n(জুম: 1.25)&amp;quot; as customcss #SkyBlue
}

rectangle &amp;quot;অটোমেশন\n(~/apps/)&amp;quot; #LightYellow {
    component &amp;quot;vscode-update.sh&amp;quot; as script #LightYellow
    component &amp;quot;vscode-backup/&amp;quot; as backup #LightYellow
}

script ..&amp;amp;gt; css : Re-patch après MAJ
script ..&amp;amp;gt; product : Supprime checksums\naprès MAJ
settings --&amp;amp;gt; customcss : Référence via\nvscode_custom_css.imports
extensions ..&amp;amp;gt; css : Custom CSS Loader\ninjecte custom.css

note bottom of css
  **Ne survit pas** aux mises à jour
  Re-patché par le script
end note

note bottom of customcss
  **Survit** aux mises à jour
  Vit hors du dossier d&amp;#39;installation
end note

note bottom of settings
  **Survit** aux mises à jour
  Vit dans ~/.config/
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5714%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 42.8571%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5715%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;পথ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ভুমিকা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আপডেটে বাঁچه?&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/apps/VSCode-linux-x64/&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;IDE ইনস্টলেশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না (বদলে দেওয়া)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/apps/VSCode-linux-x64/resources/app/out/vs/workbench/workbench.desktop.main.css&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;workbench এর CSS(menu, dropdowns)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না (স্ক্রিপ্ট द्वारा পুনরায় প্যাচকৃত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/apps/VSCode-linux-x64/resources/app/product.json&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ইন্টিগ্রিটি চেকসাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;না (স্ক্রিপ্ট দ্বারা পুন:সুপকৃত)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/apps/vscode-update.sh&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বয়ংক্রিয় আপডেট স্ক্রিপ্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/.config/Code/User/settings.json&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারীর সেটিংস (fontSize, custom CSS)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;~/.vscode-custom-css/custom.css&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কাস্টম CSS এক্সপ্লোরার (zoom) এর জন্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হ্যাঁ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখা_পাঠ&amp;quot;&amp;gt;শেখা পাঠ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

rectangle &amp;quot;**স্থানীয় ইনস্টলেশন**
 হোমে&amp;quot; as install #LightGreen {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE
skinparam defaultFontName sans-serif
skinparam ArrowColor #444444

rectangle &amp;quot;**স্থানীয় ইনস্টলেশন**
 হোমে&amp;quot; as install #LightGreen {
    card &amp;quot;sudo দরকার নেই\n CSS/config পরিবর্তরের জন্য&amp;quot; as i1
    card &amp;quot;opencode+LLM সবিছু পরিবর্তন করতে পারে&amp;quot; as i2
    card &amp;quot;Rollback = পুনরুদ্ধার
 টimestamp‑কৃত ব্যাকআপ&amp;quot; as i3
}

rectangle &amp;quot;কাস্টমাইজেশন CSS
জুম বนาม ফন্ট-সাইজ&amp;quot; as css #LightYellow {
    card &amp;quot;zoom &amp;amp;gt; font-size
জন্য উপকরণ list&amp;quot; as c1
    card &amp;quot;JS লেআউট ওভাররাইড
উচি/লাইন-উচি&amp;quot; as c2
    card &amp;quot;Extension Custom CSS
সক্রিয় করতে হয়
ম্যানুয়ালি (Ctrl+Shift+P)&amp;quot; as c3
}

rectangle &amp;quot;**অটোমেশন**\n আপডেট স্ক্রিপ্ট&amp;quot; as auto #LightCoral {
    card &amp;quot;প্রতিটি আপডেটের পরে CSS পুনর্প্যাচ করুন&amp;quot; as a1
    card &amp;quot;চেকসামস মুছে ফেলুন
 product.json&amp;quot; as a2
    card &amp;quot;টাইমস্ট্যাম্পসহ ব্যাকআপ\n প্রতিস্থাপনের আগে&amp;quot; as a3
}

install -right-&amp;amp;gt; css : ensuite
css -right-&amp;amp;gt; auto : enfin

note top of install
  Contrôle total sans élévation
  de privilèges
end note

note top of auto
  Sans script, chaque MAJ
  efface les patches CSS
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_হোমে_ইনস্টল_করলে_সবকিছু_মুক্তি_পায়&amp;quot;&amp;gt;হোমে ইনস্টল করলে সবকিছু মুক্তি পায়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি স্থানীয় ইনস্টলেশনের মধ্যে`~/apps`VS Code-এ পূর্ণ নিয়ন্ত্রণ দেওয়া :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;না`sudo`CSS বা কনফিগারেশন পরিবর্তন করতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;opencode+LLM এজেন্টটি IDE‑এর কনফিগারেশন ফাইল এবং এসেটগুলোতে লিখতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সাধারণ রোলব্যাক: টাইমস্ট্যাম্পড ব্যাকআপ পুনরুদ্ধার করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_zoom_font_size_কোম্পোনেন্ট_লিস্টের_জন্য&amp;quot;&amp;gt;zoom` &amp;amp;gt; &amp;lt;code&amp;gt;font-size&amp;lt;/code&amp;gt; কোম্পোনেন্ট লিস্টের জন্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;VS Code JavaScript এর মাধ্যমে লাইনের উচ্চতা নিয়ন্ত্রণ করে। সংশোধন`font-size`লেআউট ইঞ্জিনের द्वारा বরদ্দ করা উচ্চতায় কোনো পরিবর্তন করতে না পারলে পাঠ্য সীমানা পারিয়ে যায়। বৈশিষ্ট্যও`zoom`প্যারেন্ট কন্টেইনারকে সমানুপাতিকভাবে বড় করে এই সমস্যাটি পরihar করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_custom_css_এক্সটেনশন_স্পষ্টভাবে_সক্রিয়করণ_প্রয়োজন&amp;quot;&amp;gt;Custom CSS এক্সটেনশন স্পষ্টভাবে সক্রিয়করণ প্রয়োজন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি &amp;quot;set and forget&amp;quot; প্যারামিটার নয়। প্রতিটি CSS কাস্টম ফাইলের পরিবর্তন করতে &amp;quot;Enable Custom CSS and JS&amp;quot; কমান্ডপালেট থেকে পুনরায় চালু করতে হয় (&amp;lt;code&amp;gt;Ctrl+Shift+P&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_আপডেট_স্ক্রিপ্ট_অপরিহার্য&amp;quot;&amp;gt;একটি আপডেট স্ক্রিপ্ট অপরিহার্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্ক্রিপ্ট ছাড়া, VS কোডের প্রতিটি আপডেট ওয়েবেন্চের CSS প্যাচগুলো মুছে ফেলে। স্ক্রিপ্ট`vscode-update.sh`এটি ডাউনলোড, প্রতিস্থাপন, রিপ্যাচিং এবং চেকসামের পরিষ্কারীকরণকে স্বয়ংক্রিয়ভাবে করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দ্রুত_রেফারেন্স&amp;quot;&amp;gt;দ্রুত রেফারেন্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;VS Code ডাউনলোড: &amp;lt;a href=&amp;quot;https://code.visualstudio.com/Download&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://code.visualstudio.com/Download&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এক্সটেনশন কাস্টম CSS এবং JS লোডার :`be5invis.vscode-custom-css`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;VS Code-এ এক্সপ্লোরার ফন্টের জন্য নেটিভ প্যারামিটার চাওয়ার সমস্যাhttps://github.com/microsoft/vscode/issues/149[github.com/microsoft/vscode#149]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি Asciidoctor RevealJS প্লাগইনকে buildSrc Kotlin-এ মাইগ্রেশন: একটি Groovy API-এর রিভার্স ইঞ্জিনিয়ারিং</title>
            <link >https://cheroliv.com//blog/2026/0102_migration_gradle_script_to_plugin_post.html</link>
            <pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0102_migration_gradle_script_to_plugin_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রেক্ষাপট_এবং_উদ্দেশ্য&amp;quot;&amp;gt;প্রেক্ষাপট এবং উদ্দেশ্য&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শুরুর_বিন্দু&amp;quot;&amp;gt;শুরুর বিন্দু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লক্ষ্য&amp;quot;&amp;gt;লক্ষ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রথম_বাধা_ruby_gems&amp;quot;&amp;gt;প্রথম বাধা: `ruby { gems() }&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গ্রুভি_সিনট্যাক্সিক_চিনি_যা_গোপন_করে&amp;quot;&amp;gt;গ্রুভি সিনট্যাক্সিক চিনি যা গোপন করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যান্ত্রিক_মেকানিজ্মের_বিশ্লেষণ&amp;quot;&amp;gt;যান্ত্রিক মেকানিজ্মের বিশ্লেষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তিন_অংশের_সমাধান&amp;quot;&amp;gt;তিন অংশের সমাধান&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাগ_১_ivy_রেপো_রুবিজেমসের_জন্য&amp;quot;&amp;gt;ভাগ ১ : Ivy রেপো রুবিজেমসের জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অংশ_২_asciidoctorgems_এর_নির্ভরতা&amp;quot;&amp;gt;অংশ ২ : asciidoctorGems-এর নির্ভরতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অংশ_৩_settings_gradle_kts&amp;quot;&amp;gt;অংশ ৩: settings.gradle.kts&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_api_এর_বাইটকোডের_মাধ্যমে_আত্ম_পরীক্ষণ&amp;quot;&amp;gt;API এর বাইটকোডের মাধ্যমে আত্ম-পরীক্ষণ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_javap&amp;quot;&amp;gt;কেন &amp;lt;code&amp;gt;javap&amp;lt;/code&amp;gt; ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টাস্কের_হেরার্কি&amp;quot;&amp;gt;টাস্কের হেরার্কি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনুসন্ধান_forkoptions&amp;quot;&amp;gt;অনুসন্ধান `forkOptions&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_javaforkoptions_এর_api_grolifant&amp;quot;&amp;gt;JavaForkOptions এর API (grolifant)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_revealjs_এক্সটেনশন&amp;quot;&amp;gt;RevealJS এক্সটেনশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_জাভা_টুলচেইন_কনফিগারেশন&amp;quot;&amp;gt;জাভা টুলচেইন কনফিগারেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_javatoolchainservice_এর_সমস্যা&amp;quot;&amp;gt;JavaToolchainService এর সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডকারের_স্বয়ংক্রিয়_শনাক্ত&amp;quot;&amp;gt;ডকারের স্বয়ংক্রিয় শনাক্ত&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রেক্ষাপট&amp;quot;&amp;gt;প্রেক্ষাপট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কৌশল&amp;quot;&amp;gt;কৌশল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অন্তিম_ফল&amp;quot;&amp;gt;অন্তিম ফল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহারকারী_বিল্ডসক্রিপ্ট&amp;quot;&amp;gt;ব্যবহারকারী বিল্ডসক্রিপ্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_settings_gradle_kts&amp;quot;&amp;gt;settings.gradle.kts&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাঁস_এবং_সমাধানের_সারাংশ&amp;quot;&amp;gt;ফাঁস এবং সমাধানের সারাংশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনুসন্ধানের_পদ্ধতি_জাভাপ_দিয়ে_অজানা_একটি_api_পড়া&amp;quot;&amp;gt;অনুসন্ধানের পদ্ধতি : জাভাপ দিয়ে অজানা একটি API পড়া&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নীতি&amp;quot;&amp;gt;নীতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_গ্রেডল_ক্যাশে_মধ্যে_jar_ফাইলটি_খুঁজুন&amp;quot;&amp;gt;ধাপ ১: গ্রেডল ক্যাশে মধ্যে jar ফাইলটি খুঁজুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_2_জারের_ক্লাসগুলো_তালিকা_করা&amp;quot;&amp;gt;ধাপ 2: জারের ক্লাসগুলো তালিকা করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৩_একটি_শ্রেণি_পরীক্ষা_করুন&amp;quot;&amp;gt;ধাপ ৩ : একটি শ্রেণি পরীক্ষা করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৪_শ্রেণীবিন্যাসে_উঠা&amp;quot;&amp;gt;ধাপ ৪ : শ্রেণীবিন্যাসে উঠা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_5_অজানা_ধরনগুলো_অনুসরণ_করুন&amp;quot;&amp;gt;ধাপ 5 : অজানা ধরনগুলো অনুসরণ করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৬_প্রকল্পের_এক্সটেনশন_যাচাই_করুন&amp;quot;&amp;gt;ধাপ ৬: প্রকল্পের এক্সটেনশন যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পদ্ধতির_সারাংশ&amp;quot;&amp;gt;পদ্ধতির সারাংশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আগামী_ধাপ&amp;quot;&amp;gt;আগামী ধাপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রেক্ষাপট_এবং_উদ্দেশ্য&amp;quot;&amp;gt;প্রেক্ষাপট এবং উদ্দেশ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শুরুর_বিন্দু&amp;quot;&amp;gt;শুরুর বিন্দু&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রকল্প`slider-gradle`Reveal.js প্রেজেন্টেশন AsciiDoc ফাইল থেকে Gradle প্লাগ এর মাধ্যমে তাইর করে`org.asciidoctor.jvm.revealjs`. প্রধান কাজের কনফিগারেশন`asciidoctorRevealJs`সরাসরি বিল্ডস্ক্রিপ্টের রুটে থাকতেছিল`build.gradle.kts`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;plugins { id(&amp;quot;org.asciidoctor.jvm.revealjs&amp;quot;) }

apply&amp;amp;lt;slides.SlidesPlugin&amp;amp;gt;()

project.tasks.getByName&amp;amp;lt;AsciidoctorJRevealJSTask&amp;amp;gt;(TASK_ASCIIDOCTOR_REVEALJS) {
    repositories { ruby { gems() } }
    revealjs {
        version = &amp;quot;3.1.0&amp;quot;
        templateGitHub {
            setOrganisation(&amp;quot;hakimel&amp;quot;)
            setRepository(&amp;quot;reveal.js&amp;quot;)
            setTag(&amp;quot;3.9.1&amp;quot;)
        }
    }
    revealjsOptions {
        // ... configuration complète
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লক্ষ্য&amp;quot;&amp;gt;লক্ষ্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পুরো কনফিগারেশনকে`buildSrc/src/main/kotlin/slides/SlidesPlugin.kt`যাতে গ্রাহক বিল্ডসক্রিপ্টটি নিম্নে সীমিত হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;apply&amp;amp;lt;slides.SlidesPlugin&amp;amp;gt;()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনকে সম্পূর্ণরূপে স্বতন্ত্র হওয়া দরকার:它嫩え自己でそのプラグインの依存関係を適用し、リポジトリを設定し、Ruby の gems を管理します。&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রথম_বাধা_ruby_gems&amp;quot;&amp;gt;প্রথম বাধা: `ruby { gems() }&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গ্রুভি_সিনট্যাক্সিক_চিনি_যা_গোপন_করে&amp;quot;&amp;gt;গ্রুভি সিনট্যাক্সিক চিনি যা গোপন করে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লাইন`repositories { ruby { gems() } }`একটি Groovy DSL এক্সটেনশন শুধুমাত্র buildscript-এর নিষ্পাদন Context-এ উপলব্ধ। একটি স্ট্যাটিক Kotlin API নয় যা buildSrc থেকে অ্যাক্সেসযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি ডাক করার চেষ্টায়`SlidesPlugin.kt`, কম্পাইলিং তৎক্ষণিকভাবে ব্যর্থ হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_যান্ত্রিক_মেকানিজ্মের_বিশ্লেষণ&amp;quot;&amp;gt;যান্ত্রিক মেকানিজ্মের বিশ্লেষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle ক্যাশ বিশ্লেষণের পর (&amp;lt;code&amp;gt;~/.gradle/caches/modules-2/files-2.1/rubygems/&amp;lt;/code&amp;gt;), আমরা ফাইলে খুঁজে পাই`ivy-3.1.0.xml`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xml hljs&amp;quot; data-lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;amp;lt;artifact type=&amp;#39;gem&amp;#39; url=&amp;#39;https://rubygems.org/gems/asciidoctor-revealjs-3.1.0.gem&amp;#39; /&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`ruby { gems() }`আসলে করত ছিল&amp;lt;strong&amp;gt;তিনটি আলাদা অপারেশন&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি আইভি রিপো সংরক্ষণ করুন যা নির্দেশ করে`https://rubygems.org/gems/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গ্রুপটি বাদ দিন`rubygems`মাভেন রিপোজিটরি çatকত্যা এড়াতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশনে জেম সংরক্ষণ করুন`asciidoctorGems`python&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;print(&amp;quot;��&amp;amp;lt;/tool_call&amp;amp;gt; JRuby এটিকে লোড করে রানটাইমে&amp;quot;)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তিনটি দায়িত্বকে Kotlin-এ পৃথকভাবে পুনরুত্পাদন করা উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_তিন_অংশের_সমাধান&amp;quot;&amp;gt;তিন অংশের সমাধান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ভাগ_১_ivy_রেপো_রুবিজেমসের_জন্য&amp;quot;&amp;gt;ভাগ ১ : Ivy রেপো রুবিজেমসের জন্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;project.repositories.mavenCentral() {
    content { excludeGroup(&amp;quot;rubygems&amp;quot;) }
}
project.repositories.ivy {
    url = project.uri(&amp;quot;https://rubygems.org/gems/&amp;quot;)
    patternLayout { artifact(&amp;quot;[module]-[revision].gem&amp;quot;) } &amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;(1)&amp;lt;/b&amp;gt;
    metadataSources { artifact() }
    content { includeGroup(&amp;quot;rubygems&amp;quot;) }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;colist arabic&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;এক্সটেনশন`.gem`এটিকে hardcode করা উচিত।&amp;lt;code&amp;gt;[ext]`ডিফল্টে সমাধান করে&amp;lt;/code&amp;gt;.jar`, যা একটি ত্রুটি তৈরি করে`Resource missing`.&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
Ivy রেপো সরাসরি ঘোষণা করা হয়েছে`project.repositories`এবং ব্লকে না`repositories { }`কারণ এই ব্লকের রিসিভারটি &amp;amp;#8230;&amp;amp;#8203;`RepositoryHandler`Gradle-এর স্ট্যান্ডার্ড কিন্তু একটি grolifant API এক্সটেনশনের সাথে অসঙ্গত`ivy`কটলিন ডিএসএল।
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অংশ_২_asciidoctorgems_এর_নির্ভরতা&amp;quot;&amp;gt;অংশ ২ : asciidoctorGems-এর নির্ভরতা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি`org.asciidoctor.jvm.gems`প্রথমে প্রয়োগ করা দরকার — এটি কনফিগারেশন তৈরি করে`asciidoctorGems`এবং কাজ`asciidoctorGemsPrepare`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;project.plugins.apply(&amp;quot;org.asciidoctor.jvm.gems&amp;quot;)
project.plugins.apply(&amp;quot;org.asciidoctor.jvm.revealjs&amp;quot;) &amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;(1)&amp;lt;/b&amp;gt;

project.dependencies {
    add(&amp;quot;asciidoctorGems&amp;quot;, &amp;quot;rubygems:asciidoctor-revealjs:3.1.0@gem&amp;quot;) &amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;(2)&amp;lt;/b&amp;gt;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;colist arabic&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;প্রয়োগের ক্রম গুরুত্বপূর্ণ :`gems`আগে`revealjs`. &amp;amp;lt;2&amp;amp;gt; বিশেষণ`@gem`নির্ভরতায় সঠিক এক্সটেনশন প্রযোজ্য করুন।&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অংশ_৩_settings_gradle_kts&amp;quot;&amp;gt;অংশ ৩: settings.gradle.kts&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`dependencyResolutionManagement`মধ্যে`settings.gradle.kts`প্রকল্পগুলোকে নিজের নিজের সংগ্রহস্থল ঘোষণা করতে অনুমতি দিতে হবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Suppress(&amp;quot;UnstableApiUsage&amp;quot;)
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই লাইন না থাকলে, Gradle প্লাগিনে ঘোষিত রেপোজিটারিগুলো উপেক্ষা করে এবং জেম্স সমাধান ব্যর্থ হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_api_এর_বাইটকোডের_মাধ্যমে_আত্ম_পরীক্ষণ&amp;quot;&amp;gt;API এর বাইটকোডের মাধ্যমে আত্ম-পরীক্ষণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কেন_javap&amp;quot;&amp;gt;কেন &amp;lt;code&amp;gt;javap&amp;lt;/code&amp;gt; ?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি`asciidoctor-gradle-jvm-slides`একটি সংস্করণে আছে`4.0.0-alpha.1`. এর নথি অস্তিত্বহীন অথবা অসম্পূর্ণ। একমাত্র বিশ্বাসযোগ্য উৎস হল সংকলিত ক্লাসের সরাসরি পরীক্ষণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_টাস্কের_হেরার্কি&amp;quot;&amp;gt;টাস্কের হেরার্কি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar \
  org.asciidoctor.gradle.jvm.slides.AsciidoctorJRevealJSTask&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;public class AsciidoctorJRevealJSTask
  extends org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask
  implements org.asciidoctor.gradle.base.slides.SlidesToExportAware&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অনুসন্ধান_forkoptions&amp;quot;&amp;gt;অনুসন্ধান `forkOptions&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরীক্ষণ কর dabei`AbstractAsciidoctorTask`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath asciidoctor-gradle-jvm-4.0.0-alpha.1.jar \
  org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask | grep -i &amp;quot;fork\|exec\|jvm&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাওয়া যায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;final org.ysb33r.grolifant.api.v4.JavaForkOptions javaForkOptions;
public void forkOptions(org.gradle.api.Action&amp;amp;lt;org.ysb33r.grolifant.api.v4.JavaForkOptions&amp;amp;gt;);
public static final org.asciidoctor.gradle.base.process.ProcessMode JAVA_EXEC;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_javaforkoptions_এর_api_grolifant&amp;quot;&amp;gt;JavaForkOptions এর API (grolifant)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`javaLauncher`এই কাজে মजूद নেই. বাস্তব API এর`org.ysb33r.grolifant.api.v4.JavaForkOptions`প্রকাশ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;public void executable(java.lang.Object);  &amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;(1)&amp;lt;/b&amp;gt;
public void setExecutable(java.lang.Object);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;colist arabic&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;i class=&amp;quot;conum&amp;quot; data-value=&amp;quot;1&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;&amp;lt;b&amp;gt;1&amp;lt;/b&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;এই পদ্ধতি`executable(Object)`আসাইনমেন্টটি প্রতিস্থাপন করুন`executable = &amp;amp;#8230;&amp;amp;#8203;`কম্পাইল হয় না (`val`পরিবর্তন করা Jaya না).&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_revealjs_এক্সটেনশন&amp;quot;&amp;gt;RevealJS এক্সটেনশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`revealjs { }`এটি কোনো কাজের পদ্ধতি নয়, বরং একটি&amp;lt;strong&amp;gt;প্রকল্পের বিস্তার&amp;lt;/strong&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar \
  org.asciidoctor.gradle.jvm.slides.RevealJSExtension&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি মধ্যমে অ্যাক্সেস করা যায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;project.extensions.getByType&amp;amp;lt;RevealJSExtension&amp;amp;gt;().apply {
    version = &amp;quot;3.1.0&amp;quot;
    templateGitHub {
        setOrganisation(&amp;quot;hakimel&amp;quot;)
        setRepository(&amp;quot;reveal.js&amp;quot;)
        setTag(&amp;quot;3.9.1&amp;quot;)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_জাভা_টুলচেইন_কনফিগারেশন&amp;quot;&amp;gt;জাভা টুলচেইন কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_javatoolchainservice_এর_সমস্যা&amp;quot;&amp;gt;JavaToolchainService এর সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`JavaToolchainService`এটি কোন প্রকল্পের এক্সটেনশন নয়. নিম্নলিখিত কল ব্যর্থ হয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// ERREUR : Extension of type &amp;#39;JavaToolchainService&amp;#39; does not exist
project.extensions.getByType&amp;amp;lt;JavaToolchainService&amp;amp;gt;()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ভালো APIটা`serviceOf`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import org.gradle.kotlin.dsl.support.serviceOf

project.tasks.getByName&amp;amp;lt;AsciidoctorJRevealJSTask&amp;amp;gt;(TASK_ASCIIDOCTOR_REVEALJS) {
    setInProcess(&amp;quot;JAVA_EXEC&amp;quot;)
    forkOptions {
        executable(
            project.serviceOf&amp;amp;lt;JavaToolchainService&amp;amp;gt;()
                .launcherFor {
                    languageVersion.set(JavaLanguageVersion.of(17))
                    vendor.set(JvmVendorSpec.ADOPTIUM)
                }
                .get()
                .executablePath
                .asFile
                .absolutePath
        )
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডকারের_স্বয়ংক্রিয়_শনাক্ত&amp;quot;&amp;gt;ডকারের স্বয়ংক্রিয় শনাক্ত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রেক্ষাপট&amp;quot;&amp;gt;প্রেক্ষাপট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Asciidoctor/JRuby প্লাগইন Java 17 দরকার। buildSrc-এ Kotlin 2.0.x Java 25 সমর্থন করে না (ভার্সন পার্সার ক্র্যাশ হয় উপর`&amp;quot;25.0.2&amp;quot;`) অতএব, Gradle ডেমনকে Java 17-এ চালানো উচিত অথবা Docker ব্যবহার করা উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কৌশল&amp;quot;&amp;gt;কৌশল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Docker disponible → exécution via container &amp;lt;code&amp;gt;eclipse-temurin:17&amp;lt;/code&amp;gt;(ডিফল্ট আচরণ)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডকার অনুপস্থিত + Java 17 → স্থানীয় নিষ্পাদন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Docker অনুপস্থিত + Java &amp;amp;gt; 17 → স্পষ্ট ত্রুটি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val isDockerAvailable = try {
    Runtime.getRuntime().exec(arrayOf(&amp;quot;docker&amp;quot;, &amp;quot;info&amp;quot;)).waitFor() == 0
} catch (e: Exception) {
    false
}

val javaVersion = JavaVersion.current().majorVersion.toInt()

when {
    isDockerAvailable -&amp;amp;gt; project.tasks.register&amp;amp;lt;Exec&amp;amp;gt;(TASK_ASCIIDOCTOR_REVEALJS) {
        group = GROUP_TASK_SLIDER
        description = &amp;quot;Slider settings and generation (via Docker)&amp;quot;
        dependsOn(TASK_CLEAN_SLIDES_BUILD)
        finalizedBy(TASK_DASHBOARD_SLIDES_BUILD)
        commandLine(
            &amp;quot;docker&amp;quot;, &amp;quot;run&amp;quot;, &amp;quot;--rm&amp;quot;,
            &amp;quot;-v&amp;quot;, &amp;quot;${project.rootDir.absolutePath}:/workspace&amp;quot;,
            &amp;quot;-v&amp;quot;, &amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}/.gradle:/root/.gradle&amp;quot;,
            &amp;quot;-w&amp;quot;, &amp;quot;/workspace&amp;quot;,
            &amp;quot;eclipse-temurin:17&amp;quot;,
            &amp;quot;./gradlew&amp;quot;, TASK_ASCIIDOCTOR_REVEALJS
        )
        workingDir = project.rootDir
    }
    javaVersion == 17 -&amp;amp;gt; {
        project.repositories.mavenCentral() {
            content { excludeGroup(&amp;quot;rubygems&amp;quot;) }
        }
        project.repositories.ivy {
            url = project.uri(&amp;quot;https://rubygems.org/gems/&amp;quot;)
            patternLayout { artifact(&amp;quot;[module]-[revision].gem&amp;quot;) }
            metadataSources { artifact() }
            content { includeGroup(&amp;quot;rubygems&amp;quot;) }
        }
        project.extensions.getByType&amp;amp;lt;RevealJSExtension&amp;amp;gt;().apply {
            version = &amp;quot;3.1.0&amp;quot;
            templateGitHub {
                setOrganisation(&amp;quot;hakimel&amp;quot;)
                setRepository(&amp;quot;reveal.js&amp;quot;)
                setTag(&amp;quot;3.9.1&amp;quot;)
            }
        }
        project.tasks.getByName&amp;amp;lt;AsciidoctorJRevealJSTask&amp;amp;gt;(TASK_ASCIIDOCTOR_REVEALJS) {
            setInProcess(&amp;quot;JAVA_EXEC&amp;quot;)
            forkOptions {
                executable(
                    project.serviceOf&amp;amp;lt;JavaToolchainService&amp;amp;gt;()
                        .launcherFor {
                            languageVersion.set(JavaLanguageVersion.of(17))
                            vendor.set(JvmVendorSpec.ADOPTIUM)
                        }
                        .get()
                        .executablePath
                        .asFile
                        .absolutePath
                )
            }
            // ... reste de la configuration
        }
    }
    else -&amp;amp;gt; error(
        &amp;quot;Docker est requis pour exécuter $TASK_ASCIIDOCTOR_REVEALJS &amp;quot; +
        &amp;quot;avec Java $javaVersion. Installez Docker ou utilisez Java 17.&amp;quot;
    )
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অন্তিম_ফল&amp;quot;&amp;gt;অন্তিম ফল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহারকারী_বিল্ডসক্রিপ্ট&amp;quot;&amp;gt;ব্যবহারকারী বিল্ডসক্রিপ্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;apply&amp;amp;lt;slides.SlidesPlugin&amp;amp;gt;()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এইটাই। প্লগইন সম্পূর্ণ দায়িত্ব বহন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_settings_gradle_kts&amp;quot;&amp;gt;settings.gradle.kts&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;pluginManagement {
    repositories {
        mavenLocal()
        gradlePluginPortal()
    }
}

plugins {
    id(&amp;quot;org.gradle.toolchains.foojay-resolver-convention&amp;quot;) version &amp;quot;0.8.0&amp;quot;
}

@Suppress(&amp;quot;UnstableApiUsage&amp;quot;)
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
}

rootProject.name = &amp;quot;slider-gradle&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাঁস_এবং_সমাধানের_সারাংশ&amp;quot;&amp;gt;ফাঁস এবং সমাধানের সারাংশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 37.5%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 37.5%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সমস্যা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কারণ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সমাধান&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`ruby { gems() }`Kotlin-এ উপলব্ধ নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র Groovy DSL এক্সটেনশন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;তিনটি আলাদা প্রণালী : repo Ivy + বর্জন Maven +&amp;lt;code&amp;gt;asciidoctorGems&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Gradle একটি খোঁজ করছে`.jar`একের পরিবর্তে`.gem`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`[ext]`এই সমাধান করে`jar`ডিফল্ট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হার্ডকোডার`.gem`আইভি প্যাটার্নেতে + বিশেষণ`@gem`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;ivy { }`কম্পাইল হয় না`repositories { }&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Receiver grolifant DSL Kotlin-এ অযোগ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সরাসরি কল`project.repositories.ivy { }`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`javaLauncher`অসমাধান&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সুইতে না থাকা সম্পত্তি`AsciidoctorJRevealJSTask`&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;setInProcess(&amp;quot;JAVA_EXEC&amp;quot;)&amp;lt;/code&amp;gt;+&amp;lt;code&amp;gt;forkOptions { executable(&amp;amp;#8230;&amp;amp;#8203;) }&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`executable = &amp;amp;#8230;&amp;amp;#8203;`কম্পাইল হয় না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সম্পত্তি`val`ভিতরে`JavaForkOptions`গ্রোলিফান্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পদ্ধতি`executable(Object)`জায়গায়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;JavaToolchainService`অনুবলব্ধ দ্বারা`extensions&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি একটি Gradle পরিষেবা, এক্সটেনশন নয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;project.serviceOf&amp;amp;lt;JavaToolchainService&amp;amp;gt;()&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;`revealjs { }`কর্মে সমাধানকৃত নয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রকল্পের_বিস্তৃতি, কাজের পদ্ধতি না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;project.extensions.getByType&amp;amp;lt;RevealJSExtension&amp;amp;gt;()&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জাভা ২৫ দিয়ে বিল্ড crash হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Kotlin 2.0.x দুই অঙ্কের Java সংস্করণ parse করে না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বয়ংক্রিয় ডকার ডিটেকশন + ফallback জাভা ১৭&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অনুসন্ধানের_পদ্ধতি_জাভাপ_দিয়ে_অজানা_একটি_api_পড়া&amp;quot;&amp;gt;অনুসন্ধানের পদ্ধতি : জাভাপ দিয়ে অজানা একটি API পড়া&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নীতি&amp;quot;&amp;gt;নীতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি ডকুমেন্টেশন অনুপস্থিত বা অসম্পূর্ণ হয়, তবে বাইটকোডগুলি সত্যের উৎস। &amp;lt;code&amp;gt;javap`এইটি JDK-এ স্ট্যান্ডার্ড টুল যা ফাইলগুলোকে ডিকম্পাইল করে&amp;lt;/code&amp;gt;.class`পড়া যায় এমন জাভা স্বাক্ষর, কোড সোর্স প্রয়োজন ছাড়াই.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_১_গ্রেডল_ক্যাশে_মধ্যে_jar_ফাইলটি_খুঁজুন&amp;quot;&amp;gt;ধাপ ১: গ্রেডল ক্যাশে মধ্যে jar ফাইলটি খুঁজুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্রেডল তার সব নির্ভরতা ডাউনলোড করে মাঝে`~/.gradle/caches/modules-2/files-2.1/`. প্রথম ধাপ হলো যে জারটি পরিদর্শন করতে দরকারি ক্লাসটিকে ধারণ করেছে তা খুঁজে বের করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find ~/.gradle/caches -name &amp;quot;asciidoctor-gradle-jvm-slides*.jar&amp;quot; 2&amp;amp;gt;/dev/null&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;fল :&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;/home/user/.gradle/caches/modules-2/files-2.1/org.asciidoctor/
asciidoctor-gradle-jvm-slides/4.0.0-alpha.1/.../
asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_2_জারের_ক্লাসগুলো_তালিকা_করা&amp;quot;&amp;gt;ধাপ 2: জারের ক্লাসগুলো তালিকা করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ক্লাসকে পরিদর্শনের আগে, আমরা যাচাই করি যে সেটি জারে সঠিকভাবে উপস্থিত আছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;jar tf asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar | grep -i &amp;quot;RevealJS\|revealjs&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৩_একটি_শ্রেণি_পরীক্ষা_করুন&amp;quot;&amp;gt;ধাপ ৩ : একটি শ্রেণি পরীক্ষা করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এটি সব উপলব্ধ শ্রেণী দেখায় : &amp;lt;code&amp;gt;AsciidoctorJRevealJSTask&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RevealJSExtension&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;RevealJSOptions&amp;lt;/code&amp;gt;, এটসেটরা&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar \
org.asciidoctor.gradle.jvm.slides.AsciidoctorJRevealJSTask&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিকল্প`-p`ব্যক্তিগত সদস্যদেরও অন্তর্ভুক্ত করে সব সদস্য দেখায় ফলাফল তৎক্ষণিকভাবে মূল লাইন দেখায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;public class AsciidoctorJRevealJSTask
extends org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৪_শ্রেণীবিন্যাসে_উঠা&amp;quot;&amp;gt;ধাপ ৪ : শ্রেণীবিন্যাসে উঠা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কাজটি প্রসারিত করে`AbstractAsciidoctorTask`. এটি অনুক্রমে পরীক্ষা করা হয় প্রথমে তার জারটি লোকালাইজ করলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find ~/.gradle/caches -name &amp;quot;asciidoctor-gradle-jvm-[0-9]*.jar&amp;quot; 2&amp;amp;gt;/dev/null

javap -p -classpath asciidoctor-gradle-jvm-4.0.0-alpha.1.jar \
org.asciidoctor.gradle.jvm.AbstractAsciidoctorTask | grep -i &amp;quot;fork\|exec\|jvm\|java&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানেই আমরা আবিষ্কার করি`forkOptions`, &amp;lt;code&amp;gt;JAVA_EXEC&amp;lt;/code&amp;gt;, et &amp;lt;code&amp;gt;javaForkOptions&amp;lt;/code&amp;gt; প্রকারের`org.ysb33r.grolifant.api.v4.JavaForkOptions`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_5_অজানা_ধরনগুলো_অনুসরণ_করুন&amp;quot;&amp;gt;ধাপ 5 : অজানা ধরনগুলো অনুসরণ করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`JavaForkOptions`একটি অজানা grolifant শ্রেণি। আমরা তার jar  :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find ~/.gradle/caches -name &amp;quot;grolifant*.jar&amp;quot; 2&amp;amp;gt;/dev/null&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপর এটিকে পরিদর্শন করা Hoy :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath grolifant40-legacy-api-2.0.0-alpha.6.jar \
org.ysb33r.grolifant.api.v4.JavaForkOptions&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে পাওয়া যায়`executable(java.lang.Object)&amp;lt;code&amp;gt;— আহ্বানের সঠিক পদ্ধতি, বিপরীতভাবে`executable = &amp;amp;#8230;&amp;amp;#8203;`যা কম্পাইল হয় না কারণ এটি একটি প্রপার্টি`val&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৬_প্রকল্পের_এক্সটেনশন_যাচাই_করুন&amp;quot;&amp;gt;ধাপ ৬: প্রকল্পের এক্সটেনশন যাচাই করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জন্য`revealjs { }`, প্রশ্ন ছিল : এটি কি একটি কাজের পদ্ধতি অথবা একটি প্রজেক্টের এক্সটেনশন ? পরিদর্শন`AsciidoctorJRevealJSTask` কোনো পদ্ধতি দেখায় না`revealjs`. তখন আমরা পরিদর্শন করি`RevealJSExtension`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;javap -p -classpath asciidoctor-gradle-jvm-slides-4.0.0-alpha.1.jar \
org.asciidoctor.gradle.jvm.slides.RevealJSExtension | head -5&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;public class RevealJSExtension implements groovy.lang.GroovyObject {
public static final java.lang.String NAME;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উপস্থিতির`NAME`যা নিশ্চিত করে যে এটি প্রকল্পে নিবন্ধিত একটি এক্সটেনশন, প্রবেশযোগ্য মাধ্যমে`project.extensions.getByType&amp;amp;lt;RevealJSExtension&amp;amp;gt;()`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পদ্ধতির_সারাংশ&amp;quot;&amp;gt;পদ্ধতির সারাংশ&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 75%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;একটি ধাপ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;কর্ম&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;1&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;find ~/.gradle/caches -name &amp;quot;*.jar&amp;quot;&amp;lt;/code&amp;gt;— জার খুঁজে বের করা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;2&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;jar tf jar.jar | grep NomClasse&amp;lt;/code&amp;gt;— নিশ্চিত করুন যে শ্রেণি বিদ্যমান আছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;3&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;javap -p -classpath jar.jar NomCompletClasse&amp;lt;/code&amp;gt;— ক্লাসটি পরিদর্শন করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;4&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শনাক্তকারী`extends`এবং শ্রেণি উঠা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;5&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অজানা টাইপগুলোকে তাদের নিজস্ব জারে অনুসরণ করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;6&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;খুঁ�া করা`NAME`প্রকল্পের এক্সটেনশন চিহ্নিত করতে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি ডকুমেন্ট করা হয়নি এমন যেকোনো Gradle প্লাগিনের API-এর জন্য প্রযোজ্য। অথবা যেটির অ্যালফা সংস্করণ বর্তমান ডকুমেন্টেশনের সাথে মেলে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আগামী_ধাপ&amp;quot;&amp;gt;আগামী ধাপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই buildSrc প্লাগিনটি স্বাধীন প্রকল্পে নিষ্কাশন করা হবে যা Gradle Plugin Portal বা Maven Local-এ প্রকাশিত। উপভোক্তা বিল্ড স্ক্রিপ্ট তখন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;plugins { id(&amp;quot;slides&amp;quot;) version &amp;quot;1.0.0&amp;quot; }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Et &amp;lt;code&amp;gt;settings.gradle.kts`তার সর্বনিম্নে হ্রাস করা হবে যাতে কোনো উল্লেখ চেয়ে`foojay-resolver-convention&amp;lt;/code&amp;gt;, JDK-এর প্রোভিশনিং প্লাগইন নিজেই পরিচালিত হয় বা পূর্বশর্ত হিসেবে নথিভুক্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>আর্কিটেকচার পোর্টফোলিও JBake - দৃষ্টিভঙ্গি এবং ব্যবহারের ক্ষেত্র</title>
            <link >https://cheroliv.com//blog/2026/0101_jbake_portfolio_post.html</link>
            <pubDate>Thu, 15 Jan 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0101_jbake_portfolio_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আর্কিটেকচারাল_ভিশন&amp;quot;&amp;gt;আর্কিটেকচারাল ভিশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নির্দেশক_নীতি&amp;quot;&amp;gt;নির্দেশক নীতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রণনৈতিক_পছন্দ_পোর্টফোলিও_জন্য_asciidoc&amp;quot;&amp;gt;রণনৈতিক পছন্দ : পোর্টফোলিও জন্য AsciiDoc&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তথ্য_মডেল&amp;quot;&amp;gt;তথ্য মডেল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিস্তারিত_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;বিস্তারিত ব্যবহারের ক্ষেত্র&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_uc1_পোর্টফোলিয়োর_মধ্যে_একটি_আইটেম_যোগ_করুন&amp;quot;&amp;gt;UC1 : পোর্টফোলিয়োর মধ্যে একটি আইটেম যোগ করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নমিনাল_প্রবাহ&amp;quot;&amp;gt;নমিনাল প্রবাহ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তैयার_করতে_যাওয়া_ফাইলের_টেমপ্লেট&amp;quot;&amp;gt;তैयার করতে যাওয়া ফাইলের টেমপ্লেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_যাচাই_পয়েন্ট&amp;quot;&amp;gt;যাচাই পয়েন্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_uc2_পোর্টফোলিও_থেকে_একটি_আইটেম_মুছুন&amp;quot;&amp;gt;UC2 : পোর্টফোলিও থেকে একটি আইটেম মুছুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নামিনাল_প্রবাহ&amp;quot;&amp;gt;নামিনাল প্রবাহ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্পিক_কৌশল_সংরক্ষণ&amp;quot;&amp;gt;বিকল্পিক কৌশল : সংরক্ষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপকরণ_পরিষ্কারন&amp;quot;&amp;gt;উপকরণ পরিষ্কারন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_uc3_অপ্রকাশিত_ড্র্যাফট_হিসাবে_রাখুন&amp;quot;&amp;gt;UC3 : অপ্রকাশিত (ড্র্যাফট) হিসাবে রাখুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মানক_ফ্ল্যাক্স&amp;quot;&amp;gt;মানক ফ্ল্যাক্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্ভাব্য_অবস্থা&amp;quot;&amp;gt;সম্ভাব্য অবস্থা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রয়োগের_সাধারণ_ক্ষেত্র&amp;quot;&amp;gt;প্রয়োগের সাধারণ ক্ষেত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টেমপ্লেটিং_আর্কিটেকচার&amp;quot;&amp;gt;টেমপ্লেটিং আর্কিটেকচার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পুনরায়_ব্যবহারযোগ্য_টেমপ্লেট_কৌশল&amp;quot;&amp;gt;পুনরায় ব্যবহারযোগ্য টেমপ্লেট কৌশল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডেটা_এক্সট্র্যাকশন_প্যাটার্ন&amp;quot;&amp;gt;ডেটা এক্সট্র্যাকশন প্যাটার্ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নামকরণের_নিয়মাবলী&amp;quot;&amp;gt;নামকরণের নিয়মাবলী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকাশনের_ওয়ার্কফ্লো&amp;quot;&amp;gt;প্রকাশনের ওয়ার্কফ্লো&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উন্নয়ন_পাইপলাইন&amp;quot;&amp;gt;উন্নয়ন পাইপলাইন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিবেশ&amp;quot;&amp;gt;পরিবেশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রসারযোগ্যতা&amp;quot;&amp;gt;প্রসারযোগ্যতা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নতুন_বৈশিষ্ট্যের_যোগ&amp;quot;&amp;gt;নতুন বৈশিষ্ট্যের যোগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উন্নত_শ্রেণীবিন্যাস&amp;quot;&amp;gt;উন্নত শ্রেণীবিন্যাস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভালো_অনুশীলন&amp;quot;&amp;gt;ভালো অনুশীলন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাইল_সংগঠন&amp;quot;&amp;gt;ফাইল সংগঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিষয়বস্তু_পরিচালনা&amp;quot;&amp;gt;বিষয়বস্তু পরিচালনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কর্মক্ষমতা&amp;quot;&amp;gt;কর্মক্ষমতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আর্কিটেকচারাল_ভিশন&amp;quot;&amp;gt;আর্কিটেকচারাল ভিশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নির্দেশক_নীতি&amp;quot;&amp;gt;নির্দেশক নীতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মহাখ্যাপনি &amp;lt;strong&amp;gt;উদ্বেগের বিভাজন&amp;lt;/strong&amp;gt; নীটির ভিত্তিতে তৈরি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Contenu&amp;lt;/strong&amp;gt; : সমৃদ্ধ মেটাডেটা সহ গঠিত AsciiDoc ফাইল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রস্তুতি&amp;lt;/strong&amp;gt; : টেমপ্লেট Thymeleaf পুন:ব্যবহারযোগ্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডেটা&amp;lt;/strong&amp;gt; : JBake द्वारा AsciiDoc অ্যাট্রিবিউট থেকে স্বয়ংক্রিয়ভাবে মডেলটি নিষ্কাশিত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Style&amp;lt;/strong&amp;gt; : Bootstrap 5 দৃশ্যমূলক সমন্বয়ের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রণনৈতিক_পছন্দ_পোর্টফোলিও_জন্য_asciidoc&amp;quot;&amp;gt;রণনৈতিক পছন্দ : পোর্টফোলিও জন্য AsciiDoc&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;caption class=&amp;quot;title&amp;quot;&amp;gt;Table 1. AsciiDoc কেন?&amp;lt;/caption&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 33.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 66.6667%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মানক&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;লাভ&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সঙ্গতি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্লগ পোস্টের মতো একই ফরম্যাট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মেটাডেটা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংগঠিত এবং প্রসারণযোগ্য বৈশিষ্ট্য (&amp;lt;code&amp;gt;project-*&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বজায় রাখার যোগ্যতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সহজ টেক্সট সম্পাদনা, Git-এ সংস্করণযোগ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লবচতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমৃদ্ধ সামগ্রী ধারণ করতে পারে (টেবিল, কোড, ছবি)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;টেম্প্লেটিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JBake স্বয়ংক্রিয়ভাবে Thymeleaf-এর জন্য বৈশিষ্ট্যাগুলি বের করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_তথ্য_মডেল&amp;quot;&amp;gt;তথ্য মডেল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি পোর্টফোলিও প্রকল্প একটি AsciiDoc ডকুমেন্ট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শিরোনামের মেটাডেটা&amp;lt;/strong&amp;gt; : গঠিত তথ্য (গ্রাহক, সময়াবধি, প্রযুক্তি, এত্যাদি)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;দকুমেন্টের শরীর&amp;lt;/strong&amp;gt; : কাহিনীমূলক বর্ণনা, চ্যালেঞ্জ, সমাধান, ফলাফল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কাস্টম atribুট&amp;lt;/strong&amp;gt; : প্রিফিক্সড`project-*`স্বয়ংক্রিয় এক্সট্র্যাকশনের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-17c5710b288432f0bc8dbae63a73ce19.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;386&amp;quot; height=&amp;quot;811&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিস্তারিত_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;বিস্তারিত ব্যবহারের ক্ষেত্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_uc1_পোর্টফোলিয়োর_মধ্যে_একটি_আইটেম_যোগ_করুন&amp;quot;&amp;gt;UC1 : পোর্টফোলিয়োর মধ্যে একটি আইটেম যোগ করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_নমিনাল_প্রবাহ&amp;quot;&amp;gt;নমিনাল প্রবাহ&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;সম্পাদক\nপাঠ্য&amp;quot; as editor
participant &amp;quot;ফাইল\nAsciiDoc&amp;quot; as file
participant &amp;quot;JBake\nEngine&amp;quot; as jbake
participant &amp;quot;সাইট
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;সম্পাদক\nপাঠ্য&amp;quot; as editor
participant &amp;quot;ফাইল\nAsciiDoc&amp;quot; as file
participant &amp;quot;JBake\nEngine&amp;quot; as jbake
participant &amp;quot;সাইট
সট্যাটিক&amp;quot; as site

dev -&amp;amp;gt; editor : Créer nouveau fichier
activate editor
editor -&amp;amp;gt; file : portfolio/nouveau-projet.adoc
activate file

dev -&amp;amp;gt; editor : Rédiger en-tête avec métadonnées\n(titre, type=project, status=published,\nattributs project-*)
dev -&amp;amp;gt; editor : Rédiger contenu narratif\n(contexte, défis, solutions)
dev -&amp;amp;gt; editor : Ajouter images dans assets/img/portfolio/

editor -&amp;amp;gt; file : Sauvegarder
deactivate editor

dev -&amp;amp;gt; jbake : Lancer build (jbake -b)
activate jbake
jbake -&amp;amp;gt; file : Lire et parser
jbake -&amp;amp;gt; jbake : Extraire métadonnées
jbake -&amp;amp;gt; jbake : Convertir AsciiDoc → HTML
jbake -&amp;amp;gt; jbake : Appliquer template project.html
jbake -&amp;amp;gt; jbake : Ajouter à la liste portfolio.html
jbake -&amp;amp;gt; site : Générer pages statiques
deactivate jbake

dev -&amp;amp;gt; site : Vérifier résultat
activate site
site --&amp;amp;gt; dev : Afficher projet
deactivate site
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_তैयার_করতে_যাওয়া_ফাইলের_টেমপ্লেট&amp;quot;&amp;gt;তैयার করতে যাওয়া ফাইলের টেমপ্লেট&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেভেলপার তৈরি করে`content/portfolio/nom-projet.adoc`একটি মানককৃত গঠন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শিরোনাম সমস্ত প্রয়োজনীয় বৈশিষ্ট্য সহ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;মানকীভুক্ত বিভাগ (প্রেক্ষাপট, চ্যালেঞ্জ, সমাধান, ফলাফল)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ছবির সামঞ্জস্যপূর্ণ নামকরণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_যাচাই_পয়েন্ট&amp;quot;&amp;gt;যাচাই পয়েন্ট&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রয়োজনীয় বৈশিষ্ট্য উপস্থিত আছে (&amp;lt;code&amp;gt;jbake-type&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;jbake-status&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-thumbnail&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সূচিত ছবিগুলো [_] মধ্যে বিদ্যমান`assets/img/portfolio/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JBake বিল্ড ত্রুটি ছাড়া সফল হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পটি পোর্টফোলিও পৃষ্ঠায় দেখা যায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রকল্পের স্বতন্ত্র পৃষ্ঠা সঠিকভাবে প্রদর্শিত হচ্ছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_uc2_পোর্টফোলিও_থেকে_একটি_আইটেম_মুছুন&amp;quot;&amp;gt;UC2 : পোর্টফোলিও থেকে একটি আইটেম মুছুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_নামিনাল_প্রবাহ&amp;quot;&amp;gt;নামিনাল প্রবাহ&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 4) ]

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;সিস্টেম
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;সিস্টেম
ফাইল&amp;quot; as fs
participant &amp;quot;JBake\nইঞ্জিন&amp;quot; as jbake
participant &amp;quot;সাইট
স্থির&amp;quot; as site
database &amp;quot;ক্যাশ\nJBake&amp;quot; as cache

dev -&amp;amp;gt; fs : Supprimer portfolio/projet-ancien.adoc
activate fs
fs --&amp;amp;gt; dev : Fichier supprimé
deactivate fs

dev -&amp;amp;gt; fs : (Optionnel) Supprimer images associées\nassets/img/portfolio/projet-ancien-*
activate fs
fs --&amp;amp;gt; dev : Images supprimées
deactivate fs

dev -&amp;amp;gt; cache : Nettoyer cache JBake
activate cache
cache --&amp;amp;gt; dev : Cache vidé
deactivate cache

dev -&amp;amp;gt; jbake : Rebuild complet (jbake -b)
activate jbake
jbake -&amp;amp;gt; jbake : Scanner content/portfolio/
jbake -&amp;amp;gt; jbake : Projet absent → non généré
jbake -&amp;amp;gt; jbake : Régénérer portfolio.html\n(sans le projet supprimé)
jbake -&amp;amp;gt; site : Déployer nouveau build
deactivate jbake

dev -&amp;amp;gt; site : Vérifier
activate site
site --&amp;amp;gt; dev : Projet absent de la liste
deactivate site
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_বিকল্পিক_কৌশল_সংরক্ষণ&amp;quot;&amp;gt;বিকল্পিক কৌশল : সংরক্ষণ&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুধুমাত্র মুছে ফেলার পরিবর্তে, একটি ফোল্ডার তৈরি করা সম্ভব।&amp;lt;code&amp;gt;content/portfolio/archive/&amp;lt;/code&amp;gt;:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি মুছে ফেলার বদলে স্থানান্তর করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সহজে পুনরুদ্ধার করা যায়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গিটের ইতিহাস আরও পরিষ্কার রাখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_উপকরণ_পরিষ্কারন&amp;quot;&amp;gt;উপকরণ পরিষ্কারন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অশ্রেয় ছবি যাচাই করুন`assets/img/portfolio/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অন্য প্রকল্প দ্বারা উল্লেখ করা না থাকা চিত্রগুলো মুছুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JBake ক্যাশ পরিষ্কার করুন ফ্যান্টম রেফারেন্স এড়াতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_uc3_অপ্রকাশিত_ড্র্যাফট_হিসাবে_রাখুন&amp;quot;&amp;gt;UC3 : অপ্রকাশিত (ড্র্যাফট) হিসাবে রাখুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_মানক_ফ্ল্যাক্স&amp;quot;&amp;gt;মানক ফ্ল্যাক্স&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;ফাইল\nAsciiDoc&amp;quot; as file
participant &amp;quot;JBake
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE
actor Développeur as dev
participant &amp;quot;ফাইল\nAsciiDoc&amp;quot; as file
participant &amp;quot;JBake
ইঞ্জিন&amp;quot; as jbake
participant &amp;quot;সাইট
স্ট্যাটিক&amp;quot; as site

dev -&amp;amp;gt; file : Ouvrir portfolio/projet.adoc
activate file

dev -&amp;amp;gt; file : Modifier attribut\n:jbake-status: published\n↓\n:jbake-status: draft

file --&amp;amp;gt; dev : Sauvegardé
deactivate file

dev -&amp;amp;gt; jbake : Rebuild (jbake -b)
activate jbake
jbake -&amp;amp;gt; file : Parser le fichier
jbake -&amp;amp;gt; jbake : Détecter status=draft
jbake -&amp;amp;gt; jbake : Exclure de published_projects
jbake -&amp;amp;gt; jbake : Ne pas créer page publique
note right
  Le projet existe toujours
  mais n&amp;#39;est pas publié
end note
jbake -&amp;amp;gt; site : Générer site (sans ce projet)
deactivate jbake

dev -&amp;amp;gt; site : Vérifier portfolio
activate site
site --&amp;amp;gt; dev : Projet absent de la liste publique
deactivate site
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_সম্ভাব্য_অবস্থা&amp;quot;&amp;gt;সম্ভাব্য অবস্থা&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-a4b71e9dbf30083d131223257db47469.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;556&amp;quot; height=&amp;quot;448&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_প্রয়োগের_সাধারণ_ক্ষেত্র&amp;quot;&amp;gt;প্রয়োগের সাধারণ ক্ষেত্র&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ড্রাফট প্রকল্প&amp;lt;/strong&amp;gt; : ড্রাফট তৈরি, প্রকাশ করো যখন prepared&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অস্থায়ীভাবে গোপনীয় প্রজেক্ট : ড্রাফটে রাখা ক্লায়েন্ট সম্মতির মেয়াদে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বড় আপডেট&amp;lt;/strong&amp;gt; : ড্র্যাফটে যাওয়া, সম্পাদনা করা, পুনঃপ্রকাশ করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;A/B testing&amp;lt;/strong&amp;gt; : ড্রাফটে ডুপ্লিকেট করা, পরীক্ষা করা, শ্রেষ্ঠ সংস্করণটি প্রকাশ করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টেমপ্লেটিং_আর্কিটেকচার&amp;quot;&amp;gt;টেমপ্লেটিং আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পুনরায়_ব্যবহারযোগ্য_টেমপ্লেট_কৌশল&amp;quot;&amp;gt;পুনরায় ব্যবহারযোগ্য টেমপ্লেট কৌশল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-6fe52d6a61d46925ce520d7a7544f7a8.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;881&amp;quot; height=&amp;quot;350&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডেটা_এক্সট্র্যাকশন_প্যাটার্ন&amp;quot;&amp;gt;ডেটা এক্সট্র্যাকশন প্যাটার্ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;JBake স্বয়ংক্রিয়ভাবে AsciiDoc বৈশিষ্ট্য গুলোকে Thymeleaf-এ অ্যাক্সেসযোগ্য বৈশিষ্ট্য-এ রূপান্তর করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-31ad6234d35c7cc5b388b1ee4b5a3dea.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;909&amp;quot; height=&amp;quot;350&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নামকরণের_নিয়মাবলী&amp;quot;&amp;gt;নামকরণের নিয়মাবলী&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রকল্পের বৈশিষ্ট্য&amp;lt;/strong&amp;gt; : উপসর্গ`project-*` (ex: &amp;lt;code&amp;gt;project-client&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;project-tech-stack&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফাইল&amp;lt;/strong&amp;gt; : kebab-case (ex:`ecommerce-platform.adoc`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ছবি&amp;lt;/strong&amp;gt; : প্রিফিক্স প্রকল্পের নাম (উদাহরণ:`ecommerce-platform-thumb.jpg`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;টেমপ্লেট&amp;lt;/strong&amp;gt; : ফাংশনাল নাম (উদাহরণ:`project-card.html`, &amp;lt;code&amp;gt;tech-badge.html&amp;lt;/code&amp;gt;)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকাশনের_ওয়ার্কফ্লো&amp;quot;&amp;gt;প্রকাশনের ওয়ার্কফ্লো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উন্নয়ন_পাইপলাইন&amp;quot;&amp;gt;উন্নয়ন পাইপলাইন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-ee1f878fd837f225e8d65014556d0925.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;386&amp;quot; height=&amp;quot;811&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরিবেশ&amp;quot;&amp;gt;পরিবেশ&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 20%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;পরিবেশ&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ব্যবহার&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;স্বीकৃত স্ট্যাটাস&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্থানীয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডেভেলপমেন্ট এবং প্রিভিউ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রলিপি, প্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মঞ্চন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রি‑উৎপাদন যাচাই&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধুমাত্র প্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উৎপাদন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জনসাধারণের সাইট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শুধু প্রকাশিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রসারযোগ্যতা&amp;quot;&amp;gt;প্রসারযোগ্যতা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নতুন_বৈশিষ্ট্যের_যোগ&amp;quot;&amp;gt;নতুন বৈশিষ্ট্যের যোগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেটা মডেলকে সমৃদ্ধ করতে, শুধুমাত্র নতুন প্রিফিক্সযুক্ত বৈশিষ্ট্য যোগ করুন।&amp;lt;code&amp;gt;project-*&amp;lt;/code&amp;gt; :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`project-awards&amp;amp;#8217;: পুরস্কার ও স্বীকৃতি&amp;#39;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;project-testimonial&amp;lt;/code&amp;gt;: গ্রাহক উদ্ধৃতি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`project-team-size`টিমের আকার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;project-budget-range&amp;lt;/code&amp;gt;: বাজেট রেঞ্জ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বৈশিষ্ট্যগুলি স্বয়ংক্রিয়ভাবে টেমপ্লেটে উপলব্ধ হয়, JBake ইঞ্জিনে কোনো পরিবর্তন ছাড়া।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উন্নত_শ্রেণীবিন্যাস&amp;quot;&amp;gt;উন্নত শ্রেণীবিন্যাস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/diag-plantuml-md5-e0988a87920ca358f122fb0f6f83c5a2.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;561&amp;quot; height=&amp;quot;259&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভালো_অনুশীলন&amp;quot;&amp;gt;ভালো অনুশীলন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফাইল_সংগঠন&amp;quot;&amp;gt;ফাইল সংগঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি ফাইল = একটি প্রকল্প&amp;lt;/strong&amp;gt; : একাধিক প্রকল্প মিশ্রণ এড়াতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিশেষ ফোল্ডারের ছবি&amp;lt;/strong&amp;gt; :`assets/img/portfolio/nom-projet/`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নomenclature সমন্বিত&amp;lt;/strong&amp;gt;: অনুসন্ধান ও রক্ষণাবেক্ষণ সহজ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Versioning Git&amp;lt;/strong&amp;gt; : পরিবর্তন들의 সম্পূর্ণ ট্র্যাকিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিষয়বস্তু_পরিচালনা&amp;quot;&amp;gt;বিষয়বস্তু পরিচালনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ড্রাফট ডিফল্ট স্ট্যাটাস&amp;lt;/strong&amp;gt; : শুধুমাত্র তখন প্রকাশ কর যখন প্রস্তুত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রকাশ-পূর্ব সমীক্ষা&amp;lt;/strong&amp;gt;: গুণমান এবং গোপনীয়তা যাচাই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্পূর্ণ মেটাডেটা&amp;lt;/strong&amp;gt; : সব প্রাসঙ্গিক ক্ষেত্র পূর্ণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ধনী নারেটিভ কনটেন্ট&amp;lt;/strong&amp;gt; : মেটাডেটায় শুধু আটকে থাকবেন না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কর্মক্ষমতা&amp;quot;&amp;gt;কর্মক্ষমতা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ছবি অপ্টিমাইজেশন&amp;lt;/strong&amp;gt;: প্রি-কমিট কম্প্রেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্যাগিনেশন যদি প্রয়োজন হয়&amp;lt;/strong&amp;gt; : যদি ২০টির বেশি প্রকল্প&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Lazy loading&amp;lt;/strong&amp;gt; : চাহিদা অনুযায়ী লোড করা গ্যালেরি ছবিগুলো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্রাউজার ক্যাশ&amp;lt;/strong&amp;gt; : উপযুক্ত হেডারস এসেটসের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্কিটেকচারটি অনুমতি দেয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সহজ ব্যবহার&amp;lt;/strong&amp;gt; : একটি প্রকল্প যোগ করুন = একটি টেক্সট ফাইল তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফ্লেক্সিবিলিটি&amp;lt;/strong&amp;gt; : নতুন বৈশিষ্ট্য দিয়ে প্রসারনযোগ্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বক্ষণযোগ্যতা&amp;lt;/strong&amp;gt; : বিষয়বস্তু/প্রস্তুতি বিভাজন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অনুসন্ধানযোগ্যতা&amp;lt;/strong&amp;gt; : সম্পূর্ণ Git versioning&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অটোমেশন&amp;lt;/strong&amp;gt; : বিল্ড ও ধ্রুবিক বিন্যাস সম্ভব&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc নির্বাচন করে সাইটের বাকি অংশের সাথে সামঞ্জস্য বজায় রাখে এবং এছাড়া একটি পেশাদার পোর্টফোলিওর জন্য প্রয়োজনীয় মেটাডেটার সমৃদ্ধি প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>হাইব্রিড আর্কিটেকচার : দুজনের শ্রেষ্ঠ Supabase এবং Spring Boot</title>
            <link >https://cheroliv.com//blog/2026/0100_jbake_supabase_springboot_hybride_post.html</link>
            <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2026/0100_jbake_supabase_springboot_hybride_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;পঠনের সময় : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Supabase‑এর সহজতা এবং Spring Boot‑এর শক্তি মাঝে বাচাল করার পরিবর্তে, উভয়কে একত্রিত করে কেন না? প্রতিটি প্রযুক্তির শ্রেষ্ঠাংশ ব্যবহার করে একটি হাইব্রিড আর্কিটেকচার খুঁজে বের করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আধুনিক_staticapatyer_er_মিথ্যা_দ্বিধা&amp;quot;&amp;gt;আধুনিক.staticapatyer er মিথ্যা দ্বিধা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আধুনিক একটি স্ট্যাটিক ফ্রন্টএন্ডের সাথে অ্যাপ্লিকেশন তৈরি করার সময়, আমরা প্রায়ই দুটি বিকল্পের মধ্যে একটি বেছে নেওয়ার সম্মুখীন পেয়ে উঠি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যাকএন্ড-অ্যাস-এ-সার্ভিস সমাধানে সম্পূর্ণরূপে নির্ভর করা&amp;lt;/strong&amp;gt;(Supabase, Firebase) - সিম্পল কিন্তু সীমিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি সম্পূর্ণ ব্যাকএন্ড নির্মাণ করা&amp;lt;/strong&amp;gt;(Spring Boot, Node.js) - শক্তিমান কিন্তু জটিল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বেছে নেওয়া একটি মিথ্যা দুর্বিধা। হাইব্রেড আর্কিটেকচার তৃতীয় পথের সুযোগ দেয়: &amp;lt;strong&amp;gt;প্রযুক্তিগুলিকে যেখানে তারা শ্রেষ্ঠভাবে কাজ করে, সেখানে ব্যবহার করা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাস্তু_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;বাস্তু দৃষ্টিভঙ্গি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রায়োগিক_আর্কিটেকচার_একখণ্ড&amp;quot;&amp;gt;প্রায়োগিক আর্কিটেকচার : একখণ্ড&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;traditional-architecture.svg&amp;quot; alt=&amp;quot;traditional architecture&amp;quot; width=&amp;quot;1744&amp;quot; height=&amp;quot;5664&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিতে, সবচেয়ে সহজ অপারেশনগুলোও (একটি নিবন্ধ পড়া, একটি মন্তব্য তৈরি করা) আপনার ব্যাকএন্ডের মাধ্যমে যেতে হবে। আপনি প্রথম দিন থেকেই জটিলতর খরচে আসবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_baas_আর্কিটেকচার_প্রত্যেক_প্রতিনিধি&amp;quot;&amp;gt;BaaS আর্কিটেকচার : প্রত্যেক প্রতিনিধি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;baas-architecture.svg&amp;quot; alt=&amp;quot;baas architecture&amp;quot; width=&amp;quot;1738&amp;quot; height=&amp;quot;5640&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিপরিতভাবে, একটি BaaS‑কে সমস্ত কাজ দায়িত্ব দেওয়া প্রথমে আকর্ষণীয় মনে হয়, কিন্তু ব্যবসায়িক লজিক জটিল হওয়ার সাথে সাথে তা তাড়াতাড়ি সীমাবদ্ধ দেখায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_হাইব্রিড_আর্কিটেকচার_দায়িত্বের_পৃথককরণ&amp;quot;&amp;gt;হাইব্রিড আর্কিটেকচার: দায়িত্বের পৃথককরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;hybrid-overview.svg&amp;quot; alt=&amp;quot;hybrid overview&amp;quot; width=&amp;quot;1761&amp;quot; height=&amp;quot;5784&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হাইব্রিড আর্কিটেকচার জটিলতা এবং অপারেশনের প্রকৃতি অনুসারে দায়িত্বগুলো স্পষ্টভাবে পৃথক করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডিজাইন_নীতিমালা&amp;quot;&amp;gt;ডিজাইন নীতিমালা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিয়ম_১_সহজে_শুরু_করুন_বুদ্ধিমত্তার_সাথে_বিকাশ_করুন&amp;quot;&amp;gt;নিয়ম ১ : সহজে শুরু করুন, বুদ্ধিমত্তার সাথে বিকাশ করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 14) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ফেজ ১ : MVP&amp;quot; #LightGreen {
  component &amp;quot;JBake + Supabase&amp;quot; as mvp
  note right
    ✓ Développement en jours
    ✓ Coût : 0€
    ✓ Validation concept
  end note
}

rectangle &amp;quot;ফেজ ২ : বৃদ্ধি&amp;quot; #LightYellow {
  component &amp;quot;JBake + Supabase
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ফেজ ১ : MVP&amp;quot; #LightGreen {
  component &amp;quot;JBake + Supabase&amp;quot; as mvp
  note right
    ✓ Développement en jours
    ✓ Coût : 0€
    ✓ Validation concept
  end note
}

rectangle &amp;quot;ফেজ ২ : বৃদ্ধি&amp;quot; #LightYellow {
  component &amp;quot;JBake + Supabase
+ Spring Boot (ঐচ্ছিক)&amp;quot; as growth
  note right
    ✓ Logique métier émerge
    ✓ Premiers jobs planifiés
    ✓ Intégrations tierces
  end note
}

rectangle &amp;quot;পর্ব 3 : স্কেল&amp;quot; #LightCoral {
  component &amp;quot;সম্পূর্ণ আর্কিটেকচার&amp;quot; as scale
  note right
    ✓ Orchestration complexe
    ✓ Performances optimisées
    ✓ Cache distribué
  end note
}

mvp -down-&amp;amp;gt; growth : Quand la complexité\nle justifie
growth -down-&amp;amp;gt; scale : Optimisation\ncontinue
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;যদি আপনার দরকার না হয়, তাহলে Spring Boot তৈরি করবেন না।&amp;lt;/strong&amp;gt;Supabase দিয়ে শুরু করুন, জটিলতা জুস্তিফাই করলে Spring Boot যোগ করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিদ্ধান্ত_2_অপারেশনের_প্রকৃতি_অনুযায়ী_পৃথকীকরণ&amp;quot;&amp;gt;সিদ্ধান্ত 2 : অপারেশনের প্রকৃতি অনুযায়ী পৃথকীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;operation-types.svg&amp;quot; alt=&amp;quot;operation types&amp;quot; width=&amp;quot;1266&amp;quot; height=&amp;quot;241&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিয়ম_৩_একক_সত্যের_উৎস&amp;quot;&amp;gt;নিয়ম ৩ : একক সত্যের উৎস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;single-source-truth.svg&amp;quot; alt=&amp;quot;single source truth&amp;quot; width=&amp;quot;1758&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একই PostgreSQL উদাহরণ শেয়ার করলে, Supabase এবং Spring Boot জটিল সিঙ্ক্রোনাইজেশনের প্রয়োজন ছাড়াই একই ডেটার উপর কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফ্লো_অর্কেস্ট্রেশন&amp;quot;&amp;gt;ফ্লো অর্কেস্ট্রেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_flux_1_কেন্দ্রায়িত_প্রমাণীকরণ&amp;quot;&amp;gt;Flux 1 : কেন্দ্রায়িত প্রমাণীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;auth-orchestration.svg&amp;quot; alt=&amp;quot;auth orchestration&amp;quot; width=&amp;quot;1139&amp;quot; height=&amp;quot;950&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গুরুত্বপূর্ণ বিন্দু&amp;lt;/strong&amp;gt;: একটি প্রমাণীকরণ প্রক্রিয়া, একটি JWT, যেটা সব জায়গায় ব্যবহার করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_flux_2_একটি_জটিল_ব্যবসা_প্রক্রিয়ার_অর্কেস্ট্রেশন&amp;quot;&amp;gt;Flux 2 : একটি জটিল ব্যবসা প্রক্রিয়ার অর্কেস্ট্রেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;business-orchestration.svg&amp;quot; alt=&amp;quot;business orchestration&amp;quot; width=&amp;quot;1110&amp;quot; height=&amp;quot;990&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্প্রিং বুট যা আনে&amp;lt;/strong&amp;gt;: বিশ্বাসযোগ্য জটিল প্রক্রিয়ার ওয়ার্কফ্লো, যা একাধিক সিস্টেমে জড়িত এবং লেনদেন গ্যারান্টি প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রবাহ_৩_পরিকল্পিত_কাজ_এবং_সিঙ্ক্রোনাইজেশন&amp;quot;&amp;gt;প্রবাহ ৩ : পরিকল্পিত কাজ এবং সিঙ্ক্রোনাইজেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 4) ]

@startuml
skinparam backgroundColor #FEFEFE

participant &amp;quot;Scheduler
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

participant &amp;quot;Scheduler
(Spring Boot)&amp;quot; as scheduler
participant &amp;quot;রিপোর্ট সার্ভিস&amp;quot; as report
participant &amp;quot;পোস্টgresql&amp;quot; as db
participant &amp;quot;বাহ্যিক API&amp;quot; as api
participant &amp;quot;ইমেইল সেবা&amp;quot; as email
participant &amp;quot;Supabase স্টোরেজ&amp;quot; as storage

== Job Quotidien : 2h00 ==
activate scheduler
scheduler -&amp;amp;gt; report : Déclenche génération rapport

activate report
report -&amp;amp;gt; db : Récupère données\ndes dernières 24h
db -&amp;amp;gt; report : Dataset

report -&amp;amp;gt; report : Calculs &amp;amp;amp; Agrégations
report -&amp;amp;gt; report : Génération PDF

report -&amp;amp;gt; storage : Upload PDF
storage -&amp;amp;gt; report : URL publique

report -&amp;amp;gt; email : Envoie aux admins\navec lien PDF
deactivate report

== Job Hebdomadaire : Dimanche 3h00 ==
scheduler -&amp;amp;gt; report : Synchronisation externe

activate report
report -&amp;amp;gt; api : Fetch données externes
api -&amp;amp;gt; report : Nouvelles données

report -&amp;amp;gt; db : Mise à jour tables
report -&amp;amp;gt; db : Nettoyage données obsolètes
deactivate report

== Job Mensuel : 1er du mois ==
scheduler -&amp;amp;gt; report : Facturation

activate report
report -&amp;amp;gt; db : Liste clients actifs
report -&amp;amp;gt; report : Calcul montants
report -&amp;amp;gt; api : Génération factures (Stripe)
report -&amp;amp;gt; email : Envoi factures
deactivate report

deactivate scheduler

note right of scheduler
  **Impossible avec Supabase seul**
  Edge Functions non adaptées
  pour jobs longs et récurrents
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;যা স্প্রিং বুট আনে&amp;lt;/strong&amp;gt;নির্ভরযোগ্য পরিকল্পিত কাজের সাথে state‑management, স্বয়ংক্রিয় রিট্রাই এবং নিশ্চিত এক্সিকিউশন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সিদ্ধান্ত_মেট্রিক্স&amp;quot;&amp;gt;সিদ্ধান্ত মেট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_supabase_কখন_ব্যবহার_করা_উচিত&amp;quot;&amp;gt;Supabase কখন ব্যবহার করা উচিত?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;supabase-decision.svg&amp;quot; alt=&amp;quot;supabase decision&amp;quot; width=&amp;quot;1030&amp;quot; height=&amp;quot;445&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_spring_boot_ব্যবহার_করবেন_কখন&amp;quot;&amp;gt;Spring Boot ব্যবহার করবেন কখন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;springboot-decision.svg&amp;quot; alt=&amp;quot;springboot decision&amp;quot; width=&amp;quot;1142&amp;quot; height=&amp;quot;485&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকল্পের_ধরনের_অনুযায়ী_আর্কিটেকচারের_উদাহরণ&amp;quot;&amp;gt;প্রকল্পের ধরনের অনুযায়ী আর্কিটেকচারের উদাহরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্লগ_পোর্টফোলিও&amp;quot;&amp;gt;ব্লগ / পোর্টফোলিও&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;blog-architecture.svg&amp;quot; alt=&amp;quot;blog architecture&amp;quot; width=&amp;quot;1752&amp;quot; height=&amp;quot;5700&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিচার&amp;lt;/strong&amp;gt;: 100% Supabase যথেষ্ট.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_saas_অ্যাপ্লিকেশন&amp;quot;&amp;gt;SaaS অ্যাপ্লিকেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;saas-architecture.svg&amp;quot; alt=&amp;quot;saas architecture&amp;quot; width=&amp;quot;1826&amp;quot; height=&amp;quot;5760&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিচার&amp;lt;/strong&amp;gt;: হাইব্রিড আর্কিটেকচার প্রয়োজন। Supabase মূল অংশের জন্য, Spring Boot গুরুত্বপূর্ণ অংশ (শুল্ক, বিলিং) এর জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ই_কমার্স&amp;quot;&amp;gt;ই-কমার্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;ecommerce-architecture.svg&amp;quot; alt=&amp;quot;ecommerce architecture&amp;quot; width=&amp;quot;1739&amp;quot; height=&amp;quot;5760&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিচার&amp;lt;/strong&amp;gt;Spring Boot অপরিহার্য। Supabase শুধুমাত্র প্রমাণীকরণ এবং ক্যাটালগের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রগ্রেসিভ_মাইগ্রেশন_কৌশল&amp;quot;&amp;gt;প্রগ্রেসিভ মাইগ্রেশন কৌশল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;migration-strategy.svg&amp;quot; alt=&amp;quot;migration strategy&amp;quot; width=&amp;quot;2050&amp;quot; height=&amp;quot;954&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_খরচ_ও_অপারেশনাল_বিবেচনা&amp;quot;&amp;gt;খরচ ও অপারেশনাল বিবেচনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_খরচের_গঠন&amp;quot;&amp;gt;খরচের গঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;অনুমানিক মাসিক খরচ&amp;quot; {

  rectangle &amp;quot;ফেজ MVP
(0-1000 ব্যবহারকারী)&amp;quot; #LightGreen {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;অনুমানিক মাসিক খরচ&amp;quot; {

  rectangle &amp;quot;ফেজ MVP
(0-1000 ব্যবহারকারী)&amp;quot; #LightGreen {
    [JBake (GitHub Pages): 0€]
    [Supabase: 0€]
    [Spring Boot: N/A]
    note bottom: **Total: 0€/mois**
  }

  rectangle &amp;quot;বৃদ্ধি পর্ব
(1k-10k ব্যাবহারকারী)&amp;quot; #LightYellow {
    [JBake (GitHub Pages): 0€]
    [Supabase: 0€]
    [Spring Boot (Cloud Run): 20-50€]
    [PostgreSQL (si séparé): 0-30€]
    note bottom: **Total: 20-80€/mois**
  }

  rectangle &amp;quot;ফেজ স্কেল
(10k-100k ব্যবহারকারী)&amp;quot; #LightCoral {
    [JBake (Netlify Pro): 19€]
    [Supabase Pro: 25€]
    [Spring Boot (instances multiples): 100-300€]
    [Redis Cache: 20-50€]
    [Monitoring: 20€]
    note bottom: **Total: 184-414€/mois**
  }
}

note right of &amp;quot;ফেজ স্কেল
(10k-100k ব্যবহারকারী)&amp;quot;
  À ce stade, les revenus
  justifient largement les coûts
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অপারেশনাল_দায়িত্ব&amp;quot;&amp;gt;অপারেশনাল দায়িত্ব&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;operational-responsibilities.svg&amp;quot; alt=&amp;quot;operational responsibilities&amp;quot; width=&amp;quot;1746&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসযহার_সম্পূর্ণ_ভারসাম্য&amp;quot;&amp;gt;উপসযহার : সম্পূর্ণ ভারসাম্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Supabase + Spring Boot হাইব্রিড আর্কিটেকচার একটি কম্প্রোমাইস নয়, এটি একটি&amp;lt;strong&amp;gt;সামঞ্জস্য&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মনে_রাখতে_হবে_নীতিগুলো&amp;quot;&amp;gt;মনে রাখতে হবে নীতিগুলো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;key-principles.svg&amp;quot; alt=&amp;quot;key principles&amp;quot; width=&amp;quot;581&amp;quot; height=&amp;quot;316&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এই_আর্কিটেকচার_কখন_বেছে_নিতে_হবে&amp;quot;&amp;gt;এই আর্কিটেকচার কখন বেছে নিতে হবে?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;✅ এই আর্কিটেকচার উপযুক্ত হলে :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;তুমি দ্রুত MVP শুরু করতে চাও (একে দিনে, মাসে না)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ব্যবসায়িক জটিলতার বৃদ্ধি পূর্বাভাস দেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি প্রারম্ভিক খরচ কমাতে চান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি PostgreSQL কে পছন্দ করেন এবং আপনি সত্যের একক উৎস চান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ব্যবসায়িক কোডের জন্য Kotlin এবং কোরুটাইন পছন্দ করেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি পূর্ণ বেন্ডার লক-ইন থেকে পরihar করতে চান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�❌ এই আর্কিটেকচারটি PAS উপযোগী নয় যদি :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনার প্রকল্পটি সহজ এবং তা সহজই থাকবে (ব্যক্তিগত ব্লগ → ১০০% Supabase যথেষ্ট)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ইতিমধ্যে একটি প্রতিষ্ঠিত ব্যাকএন্ড স্ট্যাক আছেন যা আপনি আয়ত্ত করেছেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি প্রাচীন মোনোলিথ পছন্দ করেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনাকে .NET, Python, বা অন্য কোনো ব্যাকএন্ড ভাষার প্রয়োজন হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শেষ_ওভারভিউ&amp;quot;&amp;gt;শেষ ওভারভিউ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 35) ]

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;সম্পূর্ণ হাইব্রিড আর্কিটেকচার&amp;quot; {

  actor &amp;quot;ব্যবহারকারী&amp;quot; as users

  rectangle &amp;quot;Frontend (স্থির)&amp;quot; #SkyBlue {
    [JBake / GitHub Pages]
    note right: Gratuit, CDN global
  }

  rectangle &amp;quot;ব্যাকএন্ড সহজ (Supabase)&amp;quot; #LightGreen {
    [Auth OAuth2]
    [CRUD APIs]
    [Storage]
    [Realtime]
    note right
      Gratuit jusqu&amp;#39;à 50k users
      Zéro configuration serveur
    end note
  }

  rectangle &amp;quot;ব্যাকএন্ড মেটিয়ার (Spring Boot)&amp;quot; #Coral {
    [Orchestration]
    [Jobs Planifiés]
    [Intégrations]
    [Transactions]
    note right
      Activé uniquement
      si nécessaire
    end note
  }

  database &amp;quot;PostgreSQL
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;সম্পূর্ণ হাইব্রিড আর্কিটেকচার&amp;quot; {

  actor &amp;quot;ব্যবহারকারী&amp;quot; as users

  rectangle &amp;quot;Frontend (স্থির)&amp;quot; #SkyBlue {
    [JBake / GitHub Pages]
    note right: Gratuit, CDN global
  }

  rectangle &amp;quot;ব্যাকএন্ড সহজ (Supabase)&amp;quot; #LightGreen {
    [Auth OAuth2]
    [CRUD APIs]
    [Storage]
    [Realtime]
    note right
      Gratuit jusqu&amp;#39;à 50k users
      Zéro configuration serveur
    end note
  }

  rectangle &amp;quot;ব্যাকএন্ড মেটিয়ার (Spring Boot)&amp;quot; #Coral {
    [Orchestration]
    [Jobs Planifiés]
    [Intégrations]
    [Transactions]
    note right
      Activé uniquement
      si nécessaire
    end note
  }

  database &amp;quot;PostgreSQL
একমাত্র সত্যেরৎস&amp;quot; as db #LightGray

  users --&amp;amp;gt; [JBake / GitHub Pages]

  [JBake / GitHub Pages] --&amp;amp;gt; [Auth OAuth2]
  [JBake / GitHub Pages] --&amp;amp;gt; [CRUD APIs]
  [JBake / GitHub Pages] --&amp;amp;gt; [Storage]
  [JBake / GitHub Pages] --&amp;amp;gt; [Realtime]
  [JBake / GitHub Pages] --&amp;amp;gt; [Orchestration]

  [Auth OAuth2] --&amp;amp;gt; db
  [CRUD APIs] --&amp;amp;gt; db
  [Orchestration] --&amp;amp;gt; db
  [Jobs Planifiés] --&amp;amp;gt; db
  [Intégrations] --&amp;amp;gt; db
}

note bottom of db
  **Une seule base, deux consommateurs**
  • Supabase pour le simple
  • Spring Boot pour le complexe
  • Aucune synchronisation requise
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_দুইজনের_সেরা&amp;quot;&amp;gt;দুইজনের সেরা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্কিটেকচার আপনatoren দেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�🚀 সুপাবেসের গতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ঘন্টায় শুরু, সপ্তাহে না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;OAuth2 প্রমাণীকরণ কেবল কয়েকটি ক্লকে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্বয়ংক্রিয়ভাবে উত্পন্ন APIs REST&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সার্ভারের শূন্য কনফিগারেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;💪 স্প্রিং বুটের শক্তি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইলিগেন্ট অ্যাসিঙ্ক্রোনাস কোডের জন্য কোটলিন ও কোরুটিনস&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জটিল ব্যবসা প্রক্রিয়ার অর্কেস্ট্রেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিশ্বাসযোগ্য সময়সূচি করা জবস&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;লেনদেন ACID গ্যারান্টীকৃত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ Spring ইকোসিস্টেম&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�💰 প্রগ্রেসিভ অর্থনীতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;0€ শুরু করতে এবং যাচাই করতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বৃদ্ধির সাথে অনুসরণ করা খরচ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অপ্রয়োজনীয় অতিরিক্ত ইঞ্জিনিয়ারিং না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;🎯 স্থাপত্য লচিলতা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পুনর্গঠন ছাড়া প্রগ্রেসিভ مایগ্রেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শুধুমাত্র প্রয়োজন হলে Spring Boot যোগ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ ভেন্ডার লক-ইন নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিকাশশীল আর্কিটেকচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আगे_যেতে&amp;quot;&amp;gt;আगे যেতে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রযুক্তিগত_সম্পদ&amp;quot;&amp;gt;প্রযুক্তিগত সম্পদ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সুপারবেজ ডকুমেন্টেশন:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/auth&amp;quot;&amp;gt;প্রমাণীকরণ গাইড&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/database/postgres/row-level-security&amp;quot;&amp;gt;সারি-স্তর নিরাপত্তা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/api&amp;quot;&amp;gt;স্বয়ংক্রিয়ভাবে তৈরি API&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডকুমেন্টেশন Spring Boot :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://spring.io/guides/tutorials/spring-boot-kotlin/&amp;quot;&amp;gt;Spring Boot ও Kotlin&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://spring.io/blog/2019/04/12/going-reactive-with-spring-coroutines-and-kotlin-flow&amp;quot;&amp;gt;Coroutines এবং Spring&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html&amp;quot;&amp;gt;JWT সম্পদ সার্ভার&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পূরক নিবন্ধ:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JWT দিয়ে APIs নিরাপদ করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;PostgreSQL কর্মক্ষমতা অপ্টিমাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রগতিশীল স্থানান্তরের প্যাটার্ন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিতরিত আর্কিটেকচারে ত্রুটি ব্যবস্থাপনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তব_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;বাস্তব ব্যবহারের ক্ষেত্র&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই হাইব্রিড আর্কিটেকচারটি সফলভাবে এইতে ব্যবহার করা হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SaaS B2B&amp;lt;/strong&amp;gt;: প্রমাণীকরণ Supabase, বিলিং Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বাজারগুলো&amp;lt;/strong&amp;gt;: ক্যাটালগ Supabase, লেনদেন Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিষয়বস্তু প্ল্যাটফর্ম&amp;lt;/strong&amp;gt;Supabase নিবন্ধ, Spring Boot বিশ্লেষণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অভ্যন্তরীণ সরঞ্জাম&amp;lt;/strong&amp;gt;: CRUD Supabase, কর্মপ্রবাহ Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টার্ট_চেকলিস্ট&amp;quot;&amp;gt;স্টার্ট চেকলিস্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ ১ - ভিত্তি (সপ্তাহ ১)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; Supabase অ্যাকাউন্ট তৈরি করুন - [ ] PostgreSQL প্রকল্প কনফিগার করুন - [ ] Auth সক্রিয় করুন (Google, GitHub) - [ ] প্রারম্ভিক স্কিমা সংজ্ঞায়িত করুন - [ ] Row Level Security কনফিগার করুন - [ ] JBake থেকে APIs পরীক্ষা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Phase 2 - MVP (সপ্তাহ 2-3)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; প্রধান পাতা বাস্তবায়ন করুন - [ ] OAuth2 প্রমাণীকরণ ইন্টিগ্রেট করুন - [ ] CRUD ফর্ম তৈরি করুন - [ ] ফাইল들의 জন্য স্টোরেজ কনফিগার করুন - [ ] গিটহাব পেজে স্থাপন করুন - [ ] বাস্তবিক অবস্থায় পরীক্ষা করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ 3 - বিকাশ (প্রয়োজন অনুসারে)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; জটিল লজিকের দরকার চিহ্নিত করুন - [ ] Spring Boot প্রকল্প তৈরি করুন যদি প্রয়োজন হলে - [ ] Supabase JWT যাচাই কনফিগার করুন - [ ] PostgreSQL Supabase-এ সংযোগ করুন - [ ] জটিল বৈশিষ্ট্য মাইগ্রেট করা - [ ] নিশ্চিত সময়ের কাজ বাস্তবায়ন করা - [ ] স্প্রিং বুট ডিপ্লয় করা (Cloud Run, etc.)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরিহার্য_বিরোধী_প্রতিরূপ&amp;quot;&amp;gt;পরিহার্য বিরোধী প্রতিরূপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;❌ করবেন না :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase এবং Spring Boot এর মধ্যে ডেটা ডুপ্লিকেট করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;দুটি পৃথক PostgreSQL ডেটাবেস তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি নিজে প্রমাণীকরণ কোড করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সাধারন CRUDের জন্য Spring Boot ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রারంభে অতিরিক্ত আর্কিটেকচার করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase এর Row Level Security উপেক্ষা করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;✅ ভালোভাবে করুন:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি PostgreSQL ডেটাবেস শেয়ার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase কে প্রমাণীকরণ পরিচালনা করতে দিন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Spring Boot কেবল জটিলতার জন্য ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শুরু সহজে, ধীরে ধীরে উন্নয়ন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রযুক্তির প্রতিটি শক্তি ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডাটাবেস স্তরে RLS দিয়ে সুরক্ষিত করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উন্নয়নের_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;উন্নয়নের দৃষ্টিভঙ্গি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নতুন_ক্ষমতা_যোগ&amp;quot;&amp;gt;নতুন ক্ষমতা যোগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;future-capabilities.svg&amp;quot; alt=&amp;quot;future capabilities&amp;quot; width=&amp;quot;1783&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্কেলিং_অনুভূমিক&amp;quot;&amp;gt;স্কেলিং অনুভূমিক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার অ্যাপ্লিকেশন যখন বাড়ে, হাইব্রিড আর্কিটেকচার স্বাভাবিকভাবে স্কেল হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Supabase :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্বয়ংক্রিয়ভাবে মিলিয়ন অপারেশন পর্যন্ত স্কেল করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পড়ার প্রতিলিপি পড়ার কর্মক্ষমতার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নিরাপত্তার জন্য পয়েন্ট-ইন-টাইম রিকভারি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Spring Boot :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বেকলোড ব্যালেন্সারের পিছনে একাধিক ইনস্ট্যান্স&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্টেটলেস ডিজাইন হরিজোন্টাল স্কেলিংকে সহজ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Kubernetes অর্কেসট্রেশনের জন্য যদি প্রয়োজন হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;PostgreSQL :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বড় টেবিলের জন্য পার্টিশনিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সংযোগ সংগ্রহ (PgBouncer)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শার্ডিং সত্যিই প্রয়োজনীয় (দুর্দান্ত)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_স্থাপত্য_সাক্ষ্য&amp;quot;&amp;gt;স্থাপত্য সাক্ষ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টার্টআপ_saas_50k_ব্যবহারকারী&amp;quot;&amp;gt;স্টার্টআপ SaaS (50k ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ আমরা 100% Supabase দিয়ে শুরু করেছিলাম। 5k ব্যবহারকারীর জন্য, আমরা শুধুমাত্র Stripe বিলিং ও মাসিক রিপোর্টের জন্য Spring Boot যোগ করেছি। এক বছর পরে, আমাদের অপারেশনের 80% এখনও Supabase-এর মাধ্যমে চলছে। Spring Boot শুধু গুরুত্বপূর্ণ অংশটি পরিচালনা করে। এই বিচ্ছেদ আমাদেরকে রিফ্যাক্টরিং ছাড়াই স্কেল করতে সহায়তা করেছে। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ই_লার্নিং_প্ল্যাটফর্ম_10k_ব্যবহারকারী&amp;quot;&amp;gt;ই-লার্নিং প্ল্যাটফর্ম (10k ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ সুপabase‑এর OAuth2 প্রমাণীকরণ আমাদেরকে ৩ সপ্তাহ উন্নয়ন সময় বাঁচিয়েছে। স্বয়ংক্রিয়ভাবে তৈরি API‑গুলো আমাদের পূর্ণ কোর্স ক্যাটালগ পরিচালনা করে। Spring Boot শুধু PDF সার্টিফিকেট এবং প্রগতি ইমেইলের জন্য ব্যবহৃত হয়। সহজ, বজায় রাখা যায় এবং প্রসারনযোগ্য আর্কিটেকচার। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_b2b_মার্কেটপ্লেস_3k_ব্যবহারকারী&amp;quot;&amp;gt;B2B মার্কেটপ্লেস (3k ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ Spring Boot ক্রেতা এবং বিক্রেতাদের মধ্যে লেনদেন পরিচালনা করে (গুরুত্বপূর্ণ)। Supabase বাকি সবকিছু পরিচালনা করে : প্রোফাইল, বাস্তব সময়ের মেসেজিং, ডকুমেন্ট। ত্যাঁদের একই PostgreSQL ডাটাবেস শেয়ার করার কারণে আমাদের জটিল সিঙ্ক্রোনাইজেশনের প্রয়োজন থেকে বাঁচায়। এটি আমাদের করা সবচেয়ে ভাল আর্কিটেকচারেল বেছে নেওয়া। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারাংশ_একটি_আধুনিক_স্থাপত্য_পরিদর্শন&amp;quot;&amp;gt;সারাংশ: একটি আধুনিক স্থাপত্য পরিদর্শন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Supabase + Spring Boot হাইব্রিড আর্কিটেকচার একটি নতুন প্যারাডিগম নির্দেশ করে:&amp;lt;strong&amp;gt;বাস্তুশিল্প বিশেষায়ন&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 20) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;প্রাচীন প্যাডিগম&amp;quot; #LightCoral {
  card &amp;quot;ব্যাকএন্ডে সব কিছু&amp;quot; {
    [Auth]
    [CRUD]
    [Logique Métier]
    [Jobs]
    [Storage]
    [Realtime]
  }
  note bottom
    Complexité maximale
    dès le jour 1
  end note
}

rectangle &amp;quot;নতুন প�্যারाडিমে&amp;quot; #LightGreen {
  card &amp;quot;Supabase
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;প্রাচীন প্যাডিগম&amp;quot; #LightCoral {
  card &amp;quot;ব্যাকএন্ডে সব কিছু&amp;quot; {
    [Auth]
    [CRUD]
    [Logique Métier]
    [Jobs]
    [Storage]
    [Realtime]
  }
  note bottom
    Complexité maximale
    dès le jour 1
  end note
}

rectangle &amp;quot;নতুন প�্যারाडিমে&amp;quot; #LightGreen {
  card &amp;quot;Supabase
(সুবিধা)&amp;quot; {
    [Auth]
    [CRUD Simple]
    [Storage]
    [Realtime]
  }

  card &amp;quot;Spring Boot
(বিচেদন)&amp;quot; {
    [Logique Métier]
    [Jobs]
    [Intégrations]
  }

  note bottom
    Complexité progressive
    ajoutée seulement si nécessaire
  end note
}

[Ancien Paradigme] -right-&amp;amp;gt; [Nouveau Paradigme] : Évolution

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;মৌলিক নীতি:&amp;lt;/strong&amp;gt;বিদ্যমান পরিষেবা হিসেবে কোনো কিছু তৈরি করবেন না। আপনার অ্যাপ্লিকেশনকে আলাদা করে তোলে এমন দিকগুলোকে ফোকাস করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_৮০২০_নিয়ম&amp;quot;&amp;gt;৮০/২০ নিয়ম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অধিকাংশ অ্যাপ্লিকেশনে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;৮০% অপারেশন&amp;lt;/strong&amp;gt;এগুলো স্ট্যান্ডার্ড CRUD → Supabase&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;20% অপারেশন&amp;lt;/strong&amp;gt;ব্যবসায়িক লজিক প্রয়োজন → Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্রকৃতিশীল নিয়মটি হাইব্রিড আর্কিটেকচারকে যুক্তিসঙ্গত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;8020-rule.svg&amp;quot; alt=&amp;quot;8020 rule&amp;quot; width=&amp;quot;1749&amp;quot; height=&amp;quot;5664&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষ_নিষ্কর্ষ&amp;quot;&amp;gt;শেষ নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হাইব্রিড আর্কিটেকচার একটি টেকনিক্যাল কম্প্রিজ নয়, তা একটি&amp;lt;strong&amp;gt;রণনীতিমূলক সিদ্ধান্ত&amp;lt;/strong&amp;gt;।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি আপনাকে অনুমতি দেয়:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✅ একটি ফাংশনাল এমভিপি দিয়ে দ্রুত শুরু করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ কোনো বড় বিনিয়োগ ছাড়াই আপনার বাজার যাচাই করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জটিলতা প্রয়োজন হলে ধীরে ধীরে উন্নতি লাভ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✅ প্রতিটি ধাপে আপনার খर्चকে নিয়ন্ত্রণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রযুক্তির প্রতিটি থেকে সেরা ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ প্রারম্ভিক অতিরিক্ত প্রকৌশলীকরণ এড়িয়ে চলা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✅ নমনীয়তা বজায় রাখুন ভবিষ্যৎ জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি প্রতিনিধিত্ব করে :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�🎯&amp;lt;strong&amp;gt;প্রাগ্মাটিজম&amp;lt;/strong&amp;gt;: যে প্রযুক্তি যেখানে সে দক্ষ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�🚀&amp;lt;strong&amp;gt;বেগ&amp;lt;/strong&amp;gt;: ন্যূনতম বাজারের সময়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�💰&amp;lt;strong&amp;gt;অর্থনীতি&amp;lt;/strong&amp;gt;: মূল্যের সাথে সামঞ্জস্যপূর্ণ هزینه&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;🔮&amp;lt;strong&amp;gt;স্কেলেবিলিটি&amp;lt;/strong&amp;gt;: আপনার সাথে বাড়ে যাওয়া আর্কিটেকচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;🛡️&amp;lt;strong&amp;gt;দৃঢ়তা&amp;lt;/strong&amp;gt;: প্রমাণিত এবং বিশ্বাসযোগ্য সেবা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আপনার_পরবর্তী_ধাপ&amp;quot;&amp;gt;আপনার পরবর্তী ধাপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি এই আর্কিটেকচার আপনার সাথে কথা বলে, এখানে শুরু করার জায়গা হলো:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সুপাবেজ অ্যাকাউন্ট তৈরি করুন&amp;lt;/strong&amp;gt;(বিনা মূল্যে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার ন্যূনতম ডেটা স্কিমা নির্ধারণ করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;OAuth2 প্রমাণীকরণ কনফিগার করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার প্রথম JBake পৃষ্ঠা তৈরি করুন যা API ব্যবহার করে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গিটহাব পেজে স্থাপন করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি কার্যকর MVP থাকবেন&amp;lt;strong&amp;gt;কুচে দিন&amp;lt;/strong&amp;gt;।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Spring Boot স্বাভাবিকভাবে আসবে, যখন আপনার প্রয়োজন হবে। আগে নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;হাইব্রিড আর্কিটেকচার হলো সঠিক সময়ে সঠিক জিনিস তৈরি করার কला।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুভ উন্নয়ন! 🚀&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;এই लेखটা শেয়ার করুন যদি আপনি মনে করেন যে এটি অন্যান্য ডেভেলপারদের সঠিক আর্কিটেকচারাল পছন্দ বেছে নেওয়ার সাহায্য করতে পারে।&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>হাইব্রিড আর্কিটেকচার : সুপাবেজ ও স্প্রিং বুটের সঙ্গে দুইজনের সবচেয়ে ভাল</title>
            <link >https://cheroliv.com//blog/pilot-batch/0100_jbake_supabase_springboot_hybride_post.html</link>
            <pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/pilot-batch/0100_jbake_supabase_springboot_hybride_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;pôraṛ samaya : 12 minutes&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আপনি Supabase-র সরলতা এবং Spring Boot-র শক্তির মধ্যে বাছাই করার পরিবর্তে, কেন দুটোকে একত্রিত না করা? একটি হাইব্রিড আর্কিটেক্টrafে প্রতিটি প্রযুক্তির সর্বোত্তম ব্যবহার করে অন্বেষণ করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;টিক&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;[]&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আধুনিক_স্থাপত্যের_মিথ্যা_দ্বন্দ্ব&amp;quot;&amp;gt;আধুনিক স্থাপত্যের মিথ্যা দ্বন্দ্ব&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি আধুনিক অ্যাপ্লিকেশন তৈরি করার সময়, একটি স্ট্যাটিক ফ্রন্টএন্ড সহ, আমরা প্রায়শই একটি দ্বি বিকল্পের মুখোমুখি পৌঁছাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Backend-as-a-Service সমাধানকে সবকিছু বিনিয়োগ করা&amp;lt;/strong&amp;gt;(Supabase, Firebase) - সহজ কিন্তু সীমিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি সম্পূর্ণ ব্যাকএন্ড তৈরি করুন&amp;lt;/strong&amp;gt;(Spring Boot, Node.js) - শক্তিশালী কিন্তু জটিল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি ভুল দ্বন্দ্ব। হাইব্রিড আর্কিটেকচার একটি তৃতীয় পথ প্রস্তাব করে: &amp;lt;strong&amp;gt;প্রতিটি প্রযুক্তি ব্যবহার করা যেখানে এটি উত্তমভাবে কাজ করে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আর্কিটেকচারাল_দৃষ্টি&amp;quot;&amp;gt;আর্কিটেকচারাল দৃষ্টি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রাচীন_স্থাপত্য_মোনোলিথিক&amp;quot;&amp;gt;প্রাচীন স্থাপত্য : মোনোলিথিক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;traditional-architecture.svg&amp;quot; alt=&amp;quot;traditional architecture&amp;quot; width=&amp;quot;1756&amp;quot; height=&amp;quot;5664&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিতে, সবচেয়ে সহজ অপারেশনগুলো — একটি পড়ালেখ পড়া, একটি মন্তব্য তৈরি —ও আপনার ব্যাকএন্ড-এ যেতে হবে। আপনি প্রথম দিন থেকেই জটিলতাইর খরচ দেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_baas_আর্কিটেকচার_সব_প্রতিনিধি&amp;quot;&amp;gt;BaaS আর্কিটেকচার : সব প্রতিনিধি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;baas-architecture.svg&amp;quot; alt=&amp;quot;baas architecture&amp;quot; width=&amp;quot;1773&amp;quot; height=&amp;quot;5640&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অন্যদিকে, ব্যাকেএএস‑এ সব কিছু দায়িত্ব দেওয়া শুরুতে আকর্ষণীয় মনে হয়, কিন্তু ব্যবসায়িক লজিক জটিল হওয়ার সাথে সঙ্গে দ্রুত তার সীমাবদ্ধতা প্রকাশিত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_হাইব্রিড_আর্কিটেকচার_দায়িত্বের_পৃথকীকরণ&amp;quot;&amp;gt;হাইব্রিড আর্কিটেকচার : দায়িত্বের পৃথকীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;hybrid-overview.svg&amp;quot; alt=&amp;quot;hybrid overview&amp;quot; width=&amp;quot;1751&amp;quot; height=&amp;quot;5784&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হাইব্রিড আর্কিটেকচার জটিলতা এবং অপারেশনগুলোর প্রকৃতির অনুযায়ী দায়িত্বগুলো স্পষ্টভাবে পৃথক করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডিজাইনের_নীতিগুলো&amp;quot;&amp;gt;ডিজাইনের নীতিগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিয়ম_১_সহজে_শুরু_করুন_বুদ্ধিমত্তাপूर्वক_বিকাশ_করুন&amp;quot;&amp;gt;নিয়ম ১ : সহজে শুরু করুন, বুদ্ধিমত্তাপूर्वক বিকাশ করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 14) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ফেজ ১ : MVP&amp;quot; #LightGreen {
  component &amp;quot;JBake + Supabase&amp;quot; as mvp
  note right
    ✓ Développement en jours
    ✓ Coût : 0€
    ✓ Validation concept
  end note
}

rectangle &amp;quot;ফেজ ২ : বৃদ্ধি&amp;quot; #LightYellow {
  component &amp;quot;JBake + Supabase
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;ফেজ ১ : MVP&amp;quot; #LightGreen {
  component &amp;quot;JBake + Supabase&amp;quot; as mvp
  note right
    ✓ Développement en jours
    ✓ Coût : 0€
    ✓ Validation concept
  end note
}

rectangle &amp;quot;ফেজ ২ : বৃদ্ধি&amp;quot; #LightYellow {
  component &amp;quot;JBake + Supabase
+ Spring Boot (ঐচ্ছিক)&amp;quot; as growth
  note right
    ✓ Logique métier émerge
    ✓ Premiers jobs planifiés
    ✓ Intégrations tierces
  end note
}

rectangle &amp;quot;**ফেজ ৩ : স্কেল**&amp;quot; #LightCoral {
  component &amp;quot;সম্পূর্ণ আর্কিটেকচার&amp;quot; as scale
  note right
    ✓ Orchestration complexe
    ✓ Performances optimisées
    ✓ Cache distribué
  end note
}

mvp -down-&amp;amp;gt; growth : Quand la complexité\nle justifie
growth -down-&amp;amp;gt; scale : Optimisation\ncontinue
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনি যদি Spring Boot‑এর প্রয়োজন না হন তবে তা তৈরি করবেন না।&amp;lt;/strong&amp;gt;Supabase দিয়ে শুরু করুন, জটিলতা প্রয়োজন হয়লে Spring Boot যোগ করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সীদ্ধান্ত_২_অপারেশনের_প্রকৃতির_ভিত্তিতে_পৃথকীকরণ&amp;quot;&amp;gt;সীদ্ধান্ত ২ : অপারেশনের প্রকৃতির ভিত্তিতে পৃথকীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;operation-types.svg&amp;quot; alt=&amp;quot;operation types&amp;quot; width=&amp;quot;1266&amp;quot; height=&amp;quot;241&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিয়ম_৩_একটি_একক_সত্যের_উৎস&amp;quot;&amp;gt;নিয়ম ৩ : একটি একক সত্যের উৎস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;single-source-truth.svg&amp;quot; alt=&amp;quot;single source truth&amp;quot; width=&amp;quot;1738&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একই PostgreSQL ইন্সট্যান্স শেয়ার করে, Supabase এবং Spring Boot জটিল সিঙ্ক্রোনাইজেশন ছাড়াই একই ডেটা নিয়ে কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রবাহের_অর্কেস্ট্রেশন&amp;quot;&amp;gt;প্রবাহের অর্কেস্ট্রেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রবাহ_১_কেন্দ্রীয়_প্রমাণীকরণ&amp;quot;&amp;gt;প্রবাহ ১ : কেন্দ্রীয় প্রমাণীকরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;auth-orchestration.svg&amp;quot; alt=&amp;quot;auth orchestration&amp;quot; width=&amp;quot;1098&amp;quot; height=&amp;quot;950&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গুরুত্বপূর্ণ বিন্দু&amp;lt;/strong&amp;gt;একটি প্রমাণীকরণ প্রক্রিয়া, একটি JWT, যেকোনো জায়গায় ব্যবহারযোগ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রবাহ_২_একটি_জটিল_ব্যবসার_প্রক্রিয়ার_অর্কেস্ট্রেশন&amp;quot;&amp;gt;প্রবাহ ২ : একটি জটিল ব্যবসার প্রক্রিয়ার অর্কেস্ট্রেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;business-orchestration.svg&amp;quot; alt=&amp;quot;business orchestration&amp;quot; width=&amp;quot;1089&amp;quot; height=&amp;quot;990&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্প্রিং বুট যে কি আনবায়&amp;lt;/strong&amp;gt;বিশ্বাসযোগ্য অর্কেস্ট্রেশন জটিল প্রক্রিয়ার, বহু সিস্টেমের জড়িত, ট্রান্জেকশন গ্যারান্টি সহ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_flux_3_পরিকল্পিত_কাজ_এবং_সমন্বয়&amp;quot;&amp;gt;Flux 3 : পরিকল্পিত কাজ এবং সমন্বয়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 4) ]

@startuml
skinparam backgroundColor #FEFEFE

participant &amp;quot;Scheduler
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
skinparam backgroundColor #FEFEFE

participant &amp;quot;Scheduler
(Spring Boot)&amp;quot; as scheduler
participant &amp;quot;রিপোর্ট সার্ভিস&amp;quot; as report
participant &amp;quot;PostgreSQL&amp;quot; as db
participant &amp;quot;বাহ্যিক API&amp;quot; as api
participant &amp;quot;ইমেইল সেবা&amp;quot; as email
participant &amp;quot;Supabase স্টোরেজ&amp;quot; as storage

== Job Quotidien : 2h00 ==
activate scheduler
scheduler -&amp;amp;gt; report : Déclenche génération rapport

activate report
report -&amp;amp;gt; db : Récupère données\ndes dernières 24h
db -&amp;amp;gt; report : Dataset

report -&amp;amp;gt; report : Calculs &amp;amp;amp; Agrégations
report -&amp;amp;gt; report : Génération PDF

report -&amp;amp;gt; storage : Upload PDF
storage -&amp;amp;gt; report : URL publique

report -&amp;amp;gt; email : Envoie aux admins\navec lien PDF
deactivate report

== Job Hebdomadaire : Dimanche 3h00 ==
scheduler -&amp;amp;gt; report : Synchronisation externe

activate report
report -&amp;amp;gt; api : Fetch données externes
api -&amp;amp;gt; report : Nouvelles données

report -&amp;amp;gt; db : Mise à jour tables
report -&amp;amp;gt; db : Nettoyage données obsolètes
deactivate report

== Job Mensuel : 1er du mois ==
scheduler -&amp;amp;gt; report : Facturation

activate report
report -&amp;amp;gt; db : Liste clients actifs
report -&amp;amp;gt; report : Calcul montants
report -&amp;amp;gt; api : Génération factures (Stripe)
report -&amp;amp;gt; email : Envoi factures
deactivate report

deactivate scheduler

note right of scheduler
  **Impossible avec Supabase seul**
  Edge Functions non adaptées
  pour jobs longs et récurrents
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Spring Boot কি আনে&amp;lt;/strong&amp;gt;নির্ভরযোগ্য পরিকল্পিত কাজ, অবস্থা ব্যবস্থাপনা, স্বয়ংক্রিয়া পুনরায় চেষ্টা এবং নিশ্চিত এক্সিকিউশন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সিদ্ধান্ত_মেট্রিক্স&amp;quot;&amp;gt;সিদ্ধান্ত মেট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_supabase_কখন_ব্যবহার_করা_উচিত&amp;quot;&amp;gt;Supabase কখন ব্যবহার করা উচিত?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;supabase-decision.svg&amp;quot; alt=&amp;quot;supabase decision&amp;quot; width=&amp;quot;1030&amp;quot; height=&amp;quot;445&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্প্রিং_বুট_কখন_ব্যবহার_করা_উচিত&amp;quot;&amp;gt;স্প্রিং বুট কখন ব্যবহার করা উচিত?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;springboot-decision.svg&amp;quot; alt=&amp;quot;springboot decision&amp;quot; width=&amp;quot;1142&amp;quot; height=&amp;quot;485&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকল্পের_প্রকার_অনুযায়ী_স্থাপত্যের_উদাহরণ&amp;quot;&amp;gt;প্রকল্পের প্রকার অনুযায়ী স্থাপত্যের উদাহরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_blog_পোর্টফোলিও&amp;quot;&amp;gt;Blog / পোর্টফোলিও&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;blog-architecture.svg&amp;quot; alt=&amp;quot;blog architecture&amp;quot; width=&amp;quot;1751&amp;quot; height=&amp;quot;5700&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিচারের ফ্যাসলা&amp;lt;/strong&amp;gt;: ১০০% Supabase অতি পর্যাপ্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_saas_অ্যাপ্লিকেশন&amp;quot;&amp;gt;SaaS অ্যাপ্লিকেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;saas-architecture.svg&amp;quot; alt=&amp;quot;saas architecture&amp;quot; width=&amp;quot;1758&amp;quot; height=&amp;quot;5760&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অবিচার&amp;lt;/strong&amp;gt;: হাইব্রিড আর্কিটেকচার প্রয়োজন। Supabase ESSENTIAL-এ, Spring Boot CRITICAL অংশে (পেমেন্ট, বিলিং).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ই_কমার্স&amp;quot;&amp;gt;ই-কমার্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;ecommerce-architecture.svg&amp;quot; alt=&amp;quot;ecommerce architecture&amp;quot; width=&amp;quot;1738&amp;quot; height=&amp;quot;5760&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;তদ্বির্ণয়&amp;lt;/strong&amp;gt;: Spring Boot অপরিহার্য। Supabase শুধুমাত্র প্রমাণীকরণ এবং ক্যাটালগের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রগতিশীল_মাইগ্রেশন_রণনীতি&amp;quot;&amp;gt;প্রগতিশীল মাইগ্রেশন রণনীতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;migration-strategy.svg&amp;quot; alt=&amp;quot;migration strategy&amp;quot; width=&amp;quot;2050&amp;quot; height=&amp;quot;954&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_খরচ_ও_অপারেশনাল_বিবেচনা&amp;quot;&amp;gt;খরচ ও অপারেশনাল বিবেচনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_খরচের_গঠন&amp;quot;&amp;gt;খরচের গঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 7) ]

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;প্রতিমাসিক অনুমানিক খরচ&amp;quot; {

  rectangle &amp;quot;এমভিপি পর্যায়
(0-1000 ব্যবহারকারী)&amp;quot; #LightGreen {
^^^^^
 Syntax Error? (Assumed diagram type: activity)

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;প্রতিমাসিক অনুমানিক খরচ&amp;quot; {

  rectangle &amp;quot;এমভিপি পর্যায়
(0-1000 ব্যবহারকারী)&amp;quot; #LightGreen {
    [JBake (GitHub Pages): 0€]
    [Supabase: 0€]
    [Spring Boot: N/A]
    note bottom: **Total: 0€/mois**
  }

  rectangle &amp;quot;বৃদ্ধি পর্যায়
(1k-10k users)&amp;quot; #LightYellow {
    [JBake (GitHub Pages): 0€]
    [Supabase: 0€]
    [Spring Boot (Cloud Run): 20-50€]
    [PostgreSQL (si séparé): 0-30€]
    note bottom: **Total: 20-80€/mois**
  }

  rectangle &amp;quot;পর্যায় স্কেল
(১০k-১০০k ব্যবহারকারী)&amp;quot; #LightCoral {
    [JBake (Netlify Pro): 19€]
    [Supabase Pro: 25€]
    [Spring Boot (instances multiples): 100-300€]
    [Redis Cache: 20-50€]
    [Monitoring: 20€]
    note bottom: **Total: 184-414€/mois**
  }
}

note right of &amp;quot;পর্যায় স্কেল
(১০k-১০০k ব্যবহারকারী)&amp;quot;
  À ce stade, les revenus
  justifient largement les coûts
end note
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অপারেশনাল_দায়িত্ব&amp;quot;&amp;gt;অপারেশনাল দায়িত্ব&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;operational-responsibilities.svg&amp;quot; alt=&amp;quot;operational responsibilities&amp;quot; width=&amp;quot;1736&amp;quot; height=&amp;quot;5688&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ_সম্পূর্ণ_সাম্য&amp;quot;&amp;gt;নিষ্কর্ষ : সম্পূর্ণ সাম্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Supabase + Spring Boot হাইব্রিড আর্কিটেকচার একটি সমঝোতা নয়, এটি একটি&amp;lt;strong&amp;gt;সাইনার্জি&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মনে_রাখতে_হবে_নীতিগুলো&amp;quot;&amp;gt;মনে রাখতে হবে নীতিগুলো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;key-principles.svg&amp;quot; alt=&amp;quot;key principles&amp;quot; width=&amp;quot;581&amp;quot; height=&amp;quot;316&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কचान_এই_আর্কিটেকচার_বেছে_নিতে_উচিত&amp;quot;&amp;gt;কचान এই আর্কিটেকচার বেছে নিতে উচিত ?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�✅ এই আর্কিটেকচারটি আপনার জন্য ایدهাল, যদি :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি দ্রুত শুরু করতে চান (MVP দিনে, মাসে না)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ব্যাবসায়িক জটিলতা বৃদ্ধি অনুমান করছেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি প্রাথমিক খরচ কমাতে চান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি PostgreSQL-কে পছন্দ করেন এবং একটি একক সত্যের উৎস চান।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ব্যবসা কোডের জন্য Kotlin এবং Coroutines কে পছন্দ করেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি মোট বেন্ডার লক-ইন এড়াতে চান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�❌ এই আর্কিটেকচারটি পাস উপযোগ্য নয় যদি :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনার প্রকল্পটি সহজ এবং এভাবে থাকবে (ব্যক্তিগত ব্লগ → ১০০% Supabase যথেষ্ট)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি ইতিমধ্যে একটি স্থিতিশীল ব্যাকএন্ড স্ট্যাক আছে যা আপনি আয়ত্ত করেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি ঐতিহ্যবাহী মোনোলিথ পছন্দ করেন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনাকে .NET, Python, অথবা অন্য কোনো ব্যাকএন্ড ভাষা দরকার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শেষ_একত্রিত_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;শেষ একত্রিত দৃষ্টিভঙ্গি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 35) ]

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;সম্পূর্ণ হাইব্রিড আর্কিটেকচার&amp;quot; {

  actor &amp;quot;ব্যবহারকারী&amp;quot; as users

  rectangle &amp;quot;Frontend (স্থির)&amp;quot; #SkyBlue {
    [JBake / GitHub Pages]
    note right: Gratuit, CDN global
  }

  rectangle &amp;quot;সরল Backend(Supabase)&amp;quot; #LightGreen {
    [Auth OAuth2]
    [CRUD APIs]
    [Storage]
    [Realtime]
    note right
      Gratuit jusqu&amp;#39;à 50k users
      Zéro configuration serveur
    end note
  }

  rectangle &amp;quot;ব্যাপার ব্যাকএন্ড (Spring Boot)&amp;quot; #Coral {
    [Orchestration]
    [Jobs Planifiés]
    [Intégrations]
    [Transactions]
    note right
      Activé uniquement
      si nécessaire
    end note
  }

  database &amp;quot;PostgreSQL
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

package &amp;quot;সম্পূর্ণ হাইব্রিড আর্কিটেকচার&amp;quot; {

  actor &amp;quot;ব্যবহারকারী&amp;quot; as users

  rectangle &amp;quot;Frontend (স্থির)&amp;quot; #SkyBlue {
    [JBake / GitHub Pages]
    note right: Gratuit, CDN global
  }

  rectangle &amp;quot;সরল Backend(Supabase)&amp;quot; #LightGreen {
    [Auth OAuth2]
    [CRUD APIs]
    [Storage]
    [Realtime]
    note right
      Gratuit jusqu&amp;#39;à 50k users
      Zéro configuration serveur
    end note
  }

  rectangle &amp;quot;ব্যাপার ব্যাকএন্ড (Spring Boot)&amp;quot; #Coral {
    [Orchestration]
    [Jobs Planifiés]
    [Intégrations]
    [Transactions]
    note right
      Activé uniquement
      si nécessaire
    end note
  }

  database &amp;quot;PostgreSQL
একক সত্যের উৎস&amp;quot; as db #LightGray

  users --&amp;amp;gt; [JBake / GitHub Pages]

  [JBake / GitHub Pages] --&amp;amp;gt; [Auth OAuth2]
  [JBake / GitHub Pages] --&amp;amp;gt; [CRUD APIs]
  [JBake / GitHub Pages] --&amp;amp;gt; [Storage]
  [JBake / GitHub Pages] --&amp;amp;gt; [Realtime]
  [JBake / GitHub Pages] --&amp;amp;gt; [Orchestration]

  [Auth OAuth2] --&amp;amp;gt; db
  [CRUD APIs] --&amp;amp;gt; db
  [Orchestration] --&amp;amp;gt; db
  [Jobs Planifiés] --&amp;amp;gt; db
  [Intégrations] --&amp;amp;gt; db
}

note bottom of db
  **Une seule base, deux consommateurs**
  • Supabase pour le simple
  • Spring Boot pour le complexe
  • Aucune synchronisation requise
end note

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_দুই_জগলের_সেরা&amp;quot;&amp;gt;দুই জগলের সেরা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্কিটেকচার আপনাকে দেয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;🚀 Supabaser গতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ঘন্টায় শুরু, সপ্তাহে না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কতগুলো ক্লকে OAuth2 প্রমাণীকরণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;REST APIs স্বয়ংক্রিয়ভাবে তৈরি করা হয়েছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জিরো সার্ভার কনফিগারেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�💪 Spring Boot-এর শক্তি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Kotlin এবং Coroutines অ্যাসিঙ্ক্রোনাস কোডের জন্য সৌন্দর্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জটিল ব্যবসা প্রক্রিয়ার অর্কেস্ট্রেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পরিকল্পিত বিশ্বাসযোগ্য jobs&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গ্যারান্টీড ACID ট্রান্জেকশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ Spring ইকোসিস্টেম&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�💰 প্রগতিশীল অর্থনীতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;0€ দিয়ে শুরু ও যাচাই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বৃদ্ধির সাথে অনুসরণ করে খরচ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অপ্রয়োজনীয় অতিরিক্ত ইঞ্জিনিয়ারিং না&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;�🎯 আর্কিটেকচারাল নমনীয়তা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রগতিশীল মাইগ্রেশন, পুনর্গঠন ছাড়া&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শুধুমাত্র প্রয়োজনে Spring Boot যোগ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কম্প্লিট ভেন্ডার লক-ইন নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিকাশশীল আর্কিটেকচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রযুক্তিগত_সম্পদ&amp;quot;&amp;gt;প্রযুক্তিগত সম্পদ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;থকথক Supabase :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/auth&amp;quot;&amp;gt;প্রমাণীকরণ গাইড&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/database/postgres/row-level-security&amp;quot;&amp;gt;সারির-স্তর নিরাপত্তা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://supabase.com/docs/guides/api&amp;quot;&amp;gt;স্বয়ংক্রিয়ভাবে তৈরি APIs&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Spring Boot ডকুমেন্টেশন :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://spring.io/guides/tutorials/spring-boot-kotlin/&amp;quot;&amp;gt;Spring Boot Kotlin-এর সাথে&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://spring.io/blog/2019/04/12/going-reactive-with-spring-coroutines-and-kotlin-flow&amp;quot;&amp;gt;কোরুটিন এবং স্প্রিং&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/jwt.html&amp;quot;&amp;gt;JWT সম্পদ সার্ভার&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অতিরিক্ত নিবন্ধ :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JWT-এ API সুরক্ষা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;PostgreSQL পারফরম্যান্স অপ্টিমাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রগতিশীল মাইগ্রেশনের আকৃতি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিতৃত আর্কিটেকচারে ত্রুটি ব্যবস্থাপনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তব_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;বাস্তব ব্যবহারের ক্ষেত্র&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই হাইব্রিড আর্কিটেকচারটি সফলভাবে ব্যবহৃত হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SaaS B2B&amp;lt;/strong&amp;gt;: সুপাবেস প্রমাণীকরণ, Spring Boot বিলিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বাজারগুলো&amp;lt;/strong&amp;gt;: ক্যাটালগ Supabase, ট্রানজেকশন Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কন্টেন্ট প্ল্যাটফর্ম&amp;lt;/strong&amp;gt;: Supabase এর নিবন্ধ, Spring Boot এর বিশ্লেষণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অভ্যন্তরীণ সরঞ্জাম&amp;lt;/strong&amp;gt;: CRUD Supabase, workflows Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টার্টআপ_চেকলিস্ট&amp;quot;&amp;gt;স্টার্টআপ চেকলিস্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ 1 - ভিত্তি (সপ্তাহ 1)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; সুপabase অ্যাকাউন্ট তৈরি করুন - [ ] পোস্টগ্রেসকিউএল প্রকল্প কনফিগার করা - [ ] প্রমাণীকরণ সক্রিয় করুন (Google, GitHub) - [ ] আরম্ভিক স্কিমা নির্ধারণ - [ ] কনফিগার Row Level Security - [ ] JBake থেকে APIs পরীক্ষা করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Phase 2 - MVP (সপ্তাহ 2-3)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; প্রধান পৃষ্ঠাগুলো প্রয়োগ করুন - [ ] OAuth2 প্রমাণীকরণ একীভুক্ত করুন - [ ] CRUD ফর্ম তৈরি করুন - [ ] Storage কনফিগার করুন ফাইলগুলির জন্য - [ ] GitHub Pages-এ প্রসারিত করা - [ ] বাস্তব অবস্থানে পরীক্ষা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ ৩ - অভিবিকাশ (প্রয়োজন অনুযায়ী)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist checklist&amp;quot;&amp;gt;
&amp;lt;ul class=&amp;quot;checklist&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;i class=&amp;quot;fa fa-square-o&amp;quot;&amp;gt;&amp;lt;/i&amp;gt; জটিল লজিকের প্রয়োজনীয়তা চিহ্নিত করুন - [ ] Spring Boot প্রকল্প তৈরি করুন যদি প্রয়োজন হয় - [ ] Supabase JWT যাচাইকরণ কনফিগার করুন - [ ] Supabase PostgreSQL-এ সংযোগ করুন - [ ] জটিল বৈশিষ্ট্য মাইগ্রেট - [ ] যोजना বদ্ধ কাজ বাস্তবায়ন - [ ] স্প্রিং বুট স্থাপন করুন (Cloud Run, এবং অন্যান্য)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_anti_patterns_পরihar্য&amp;quot;&amp;gt;Anti-Patterns পরihar্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;❌ করবেন না:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase এবং Spring Boot মধ্যে ডেটা ডুপ্লিকেট করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;দুটি আলাদা পোস্টগ্রেসকিউএল ডেটাবেস তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;তুমি নিজে প্রমাণীকরণ কোড করো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সহজ CRUDের জন্য Spring Boot ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শুরু থেকেই অতিরিক্ত আর্কিটেক্ট করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase-এর Row Level Security উপেক্ষা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;✅ বদলে করুন:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি PostgreSQL ডেটাবেস শেয়ার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Supabase-কে প্রমাণীকরণ পরিচালনা করান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Spring Boot শুধুমাত্র জটিলতার জন্য ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সরলভাবে শুরু করুন, ধীরে ধীরে উন্নতি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রযুক্তির প্রতিটি শক্তি ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;RLS ব্যবহার করে ডেটাবেস স্তরে নিরাপদ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রগতির_দিকপাতি&amp;quot;&amp;gt;প্রগতির দিকপাতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নতুন_ক্ষमतাগুলো_যোগ&amp;quot;&amp;gt;নতুন ক্ষमतাগুলো যোগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;future-capabilities.svg&amp;quot; alt=&amp;quot;future capabilities&amp;quot; width=&amp;quot;1744&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্কেলিং_হরিজন্টাল&amp;quot;&amp;gt;স্কেলিং হরিজন্টাল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার অ্যাপ্লিকেশন বৃদ্ধি পায়, হাইব্রিড আর্কিটেকচার স্বাভাবিকভাবে স্কেল হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Supabase :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্বয়ংক্রিয়ভাবে কোটি অপারেশন পর্যন্ত স্কেল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Read replicas পারফরম্যান্স পাঠের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিন্দু-সময় পুনরুদ্ধার নিরাপত্তা জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Spring Boot:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Load balancer-কে পিছনে একাধিক উদাহরণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্টেটলেস ডিজাইন অনুভূমিক স্কেলিংকে সহজ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Kubernetes অর্কেস্ট্রেশনের জন্য প্রয়োজন হলে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;PostgreSQL:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বড় টেবিলের জন্য পার্টিশনিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনেকশন পুলিং (PgBouncer)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Sharding যদি thựcে প্রয়োজন হয় (দুর্লভ)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মastukoliyo_সाक्ष্য&amp;quot;&amp;gt;মASTUKOLIYO সाक्ष্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_saas_স্টার্টআপ_৫০_হাজার_ব্যবহারকারী&amp;quot;&amp;gt;SaaS স্টার্টআপ (৫০ হাজার ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ আমরা ১০০% Supabase দিয়ে শুরুしていたাম। ৫ হাজার ব্যবহারকারী সংখ্যা পৌঁছে, আমরা শুধুমাত্র Stripe বিলিং এবং মাসিক রিপোর্টের জন্য Spring Boot যোগ করেছিলাম। এক বছর পরে, আমাদের কাজের ৮০% এখনও Supabase দিয়ে চলছে। Spring Boot শুধুমাত্র ক্রিটিক্যাল অংশকে পরিচালনা করে। এই বিচ্ছেদ 덕분에 আমরা কোনো পুনরা থেকে ডিজাইন না করে স্কেল করতে পেরেছিলাম। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ই_লার্নিং_প্ল্যাটফর্ম_১০ক_ব্যবহারকারী&amp;quot;&amp;gt;ই-লার্নিং প্ল্যাটফর্ম (১০ক ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ Supabase-র OAuth2 প্রমাণীকরণ আমাদেরকে 3 সপ্তাহের উন্নয়ন সময় বাঁচিয়েছে। স্বয়ংক্রিয়ভাবে তৈরি API গুলি আমাদের সমস্ত কোর্স ক্যাটালগ পরিচালনা করে। Spring Boot শুধু PDF সনদ এবং অগ্রগতি ইমেইলের জন্য ব্যবহৃত হয়। সহজ, রক্ষণযোগ্য, প্রসারনযোগ্য আর্কিটেকচার। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_marketplace_b2b_3k_ব্যবহারকারী&amp;quot;&amp;gt;Marketplace B2B (3k ব্যবহারকারী)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;lt;em&amp;gt;_ Spring Boot কেনা-বিক্রয়ের লেনদেন পরিচালনা করে (গুরুত্বপূর্ণ)। Supabase বাকি সবগুলো পরিচালনা করে: প্রোফাইল, বাস্তব-সময় বার্তাবিনিময়, ডকুমেন্ট। তারা একই PostgreSQL ডেটাবেস শেয়ার করার কারণে আমাদের জটিল সিঙ্ক্রোনাইজেশন দরকার হয়নি। এটি আমাদের এখন পর্যন্ত নেওয়া সবচেয়ে ভাল আর্কিটেকচারিক পছন্দ। &amp;lt;/em&amp;gt;_&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারাংশ_আধুনিক_স্থাপত্য_পরিপ্রেক্ষতি&amp;quot;&amp;gt;সারাংশ: আধুনিক স্থাপত্য পরিপ্রেক্ষতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সুপাবেস + স্প্রিং বুটের হাইব্রিড আর্কিটেকচার একটি নতুন প্রতিমানকে উপস্থাপন করে :&amp;lt;strong&amp;gt;স্থাপত্য বিশেষীকরণ&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 27) ]

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;পুরানো প্যারাডিগম&amp;quot; #LightCoral {
  card &amp;quot;ব্যাকএন্ডে সবকিছু&amp;quot; {
    [Auth]
    [CRUD]
    [Logique Métier]
    [Jobs]
    [Storage]
    [Realtime]
  }
  note bottom
    Complexité maximale
    dès le jour 1
  end note
}

rectangle &amp;quot;নতুন প্যারাডিগম&amp;quot; #LightGreen {
  card &amp;quot;Supabase\n(সুবিধা)&amp;quot; {
    [Auth]
    [CRUD Simple]
    [Storage]
    [Realtime]
  }

  card &amp;quot;Spring Boot
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
skinparam backgroundColor #FEFEFE

rectangle &amp;quot;পুরানো প্যারাডিগম&amp;quot; #LightCoral {
  card &amp;quot;ব্যাকএন্ডে সবকিছু&amp;quot; {
    [Auth]
    [CRUD]
    [Logique Métier]
    [Jobs]
    [Storage]
    [Realtime]
  }
  note bottom
    Complexité maximale
    dès le jour 1
  end note
}

rectangle &amp;quot;নতুন প্যারাডিগম&amp;quot; #LightGreen {
  card &amp;quot;Supabase\n(সুবিধা)&amp;quot; {
    [Auth]
    [CRUD Simple]
    [Storage]
    [Realtime]
  }

  card &amp;quot;Spring Boot
(বৈষম্য)&amp;quot; {
    [Logique Métier]
    [Jobs]
    [Intégrations]
  }

  note bottom
    Complexité progressive
    ajoutée seulement si nécessaire
  end note
}

[Ancien Paradigme] -right-&amp;amp;gt; [Nouveau Paradigme] : Évolution

@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;মৌলিক নীতি :&amp;lt;/strong&amp;gt;এখনও বিদ্যমান পরিষেবা হিসেবে তৈরি করবেন না। আপনার অ্যাপ্লিকেশনকে পার্থক্য করে তোলে যে দিকগুলোকে ফোকাস করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_৮০২০_নিয়ম&amp;quot;&amp;gt;৮০/২০ নিয়ম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অधিকাংশ অ্যাপ্লিকেশনগুলো:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অপারেশনের 80%&amp;lt;/strong&amp;gt;মানক CRUD → Supabase&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কর্মকাণ্ডের ২০%&amp;lt;/strong&amp;gt;Bangladeshi? Actually Bengali. Let&amp;amp;#8217;s output exactly:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;quot; ব্যবসায়িক লজিক প্রয়োজন → Spring Boot&amp;quot; with a leading space? I&amp;amp;#8217;ll include a leading space to match original.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Thus: &amp;quot; negocios&amp;quot;? No.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;I&amp;amp;#8217;ll output: &amp;quot; ব্যবসায়িক লজিক প্রয়োজন → Spring Boot&amp;quot;. (with leading space). Ensure no extra characters.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যবসায়িক লজিক প্রয়োজন → Spring Boot&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্বাভাবিক নিয়ম হাইব্রিড আর্কিটেকচারকে বজায়פות করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;8020-rule.svg&amp;quot; alt=&amp;quot;8020 rule&amp;quot; width=&amp;quot;1738&amp;quot; height=&amp;quot;5664&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেষের_উপসংহার&amp;quot;&amp;gt;শেষের উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;হাইব্রিড আর্কিটেকচার একটি টেকনিকাল কম্প্রমাইজ নয়, এটি একটি&amp;lt;strong&amp;gt;রৌপণিক সিদ্ধান্ত&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি আপনাকে অনুমতি দেয় :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ দ্রুত একটি কার্যকর MVP দিয়ে শুরু করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ আপনার বাজার যাচাই করুন ভারী নিবেশ বিনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ জটিলতা প্রয়োজন হলে ধীরে ধীরে উন্নয়ন করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি ধাপে আপনার খরচ নিয়ন্ত্রণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✅ প্রতিটি প্রযুক্তির শ্রেষ্ঠ অংশ ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রাক্তানিক অতিরিক্ত ইঞ্জিনijerিং এড়িয়ে চলুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✅ ভবিষ্যৎের জন্য নমনীয়তা বজায় রাখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটি উপস্থাপন করে:&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;🎯&amp;lt;strong&amp;gt;প্রাগ্মেটিজম&amp;lt;/strong&amp;gt;যে কোনো প্রযুক্তি যেখানে সে চমৎকার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�🚀&amp;lt;strong&amp;gt;বেগ&amp;lt;/strong&amp;gt;সুবিধাজনক বাজারে পৌছার কম সময়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�💰&amp;lt;strong&amp;gt;অর্থনীতি&amp;lt;/strong&amp;gt;: মানের সাথে সামঞ্জস্যপূর্ণ খরচ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�🔮&amp;lt;strong&amp;gt;স্কেলযোগ্যতা&amp;lt;/strong&amp;gt;: আপনার সাথে বৃদ্ধি পাওয়া আর্কিটেকচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;🛡️&amp;lt;strong&amp;gt;দৃঢ়তা&amp;lt;/strong&amp;gt;: প্রমাণিত এবং বিশ্বাসযোগ্য পরিষেবা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আপনার_পরবর্তী_ধাপ&amp;quot;&amp;gt;আপনার পরবর্তী ধাপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি এই আর্কিটেকচার আপনাকে কথা বলে, এখানে শুরু করার জন্য কোথায় দেখবেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি Supabase অ্যাকাউন্ট তৈরি করুন&amp;lt;/strong&amp;gt;(বিনামূল্যে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার ন্যূনতম ডেটা স্কিমা নির্ধারণ করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;OAuth2 প্রমাণীকরণ কনফিগার করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার প্রথম JBake পৃষ্ঠা তৈরি করুন যা API ব্যবহার করে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;GitHub Pages-এ স্থাপন করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি কার্যকর MVP পাবেন&amp;lt;strong&amp;gt;কয়েক দিন&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্প্রিং বুট আপনার প্রয়োজন হওয়ার সময় স্বাভাবিকভাবে আসবে। আগে নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;হাইব্রিড আর্কিটেকচার, সঠিক সময়ে সঠিকভাবে তৈরি করার শিল্প।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;শুভ উন্নয়ন! 🚀&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধটি শেয়ার করুন যদি আপনি মনে করেন যে এটি অন্যান্য ডেভেলপারদের সঠিক আর্কিটেকচারাল সিদ্ধান্ত নিতে সাহায্য করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>প্রি-লোডিংর কala : থিমের &#39;ফ্ল্যাশ&#39; JavaScript এবং CSS ব্যবহার করে অপসারণ করুন</title>
            <link >https://cheroliv.com//blog/2025/0098_preloading_css_variable_post.html</link>
            <pubDate>Sat, 15 Nov 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0098_preloading_css_variable_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সারসংক্ষেপ&amp;quot;&amp;gt;সারসংক্ষেপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_এই_শাপিত_থিম_ফ্লিকার&amp;quot;&amp;gt;সমস্যা : এই শাপিত থিম ফ্লিকার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহারকারী_অভিজ্ঞতার_জন্য_একটি_দুর্নিদ্রা&amp;quot;&amp;gt;ব্যবহারকারী অভিজ্ঞতার জন্য একটি দুর্নিদ্রা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_fouc_পুরানো_ওয়েব_সমস্যা&amp;quot;&amp;gt;FOUC : পুরানো ওয়েব সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গুণমানের_ধারণার_উপর_প্রভাব&amp;quot;&amp;gt;গুণমানের ধারণার উপর প্রভাব&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যার_প্রযুক্তিগত_বিশ্লেষণ&amp;quot;&amp;gt;সমস্যার প্রযুক্তিগত বিশ্লেষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_একটি_ক্লাসিক_স্ক্রিপ্ট_পর্যাপ্ত_নয়&amp;quot;&amp;gt;কেন একটি ক্লাসিক স্ক্রিপ্ট পর্যাপ্ত নয়?&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনুভূতিগমক_পদ্ধতি_কিন্তু_অকার্যকর&amp;quot;&amp;gt;অনুভূতিগমক পদ্ধতি কিন্তু অকার্যকর&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_domcontentloaded_ইভেন্ট_বুঝতে&amp;quot;&amp;gt;DOMContentLoaded ইভেন্ট বুঝতে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রেন্ডার_ব্লকিং_সমস্যা&amp;quot;&amp;gt;রেন্ডার ব্লকিং সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_ভিজ্যুয়ালাইজেশন&amp;quot;&amp;gt;সমস্যা ভিজ্যুয়ালাইজেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অকার্যকর_সমাধান_প্রচেষ্টা&amp;quot;&amp;gt;অকার্যকর সমাধান প্রচেষ্টা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আসল_সমাধান_আমোদর_কর&amp;quot;&amp;gt;আসল সমাধান: আমোদর কর!&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_প্রারম্ভিক_লোডিং_early_loading&amp;quot;&amp;gt;সমাধান : প্রারম্ভিক লোডিং (Early Loading)&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মৌলিক_নীতি&amp;quot;&amp;gt;মৌলিক নীতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_head_হলো_আদর্শ_জায়গা&amp;quot;&amp;gt;কেন &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; হলো আদর্শ জায়গা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তিন_স্তরের_সলিউশন_আর্কিটেকচার&amp;quot;&amp;gt;তিন স্তরের সলিউশন আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_ব্যবহারকারীর_চয়ন_সংরক্ষণ_করুন&amp;quot;&amp;gt;ধাপ ১: ব্যবহারকারীর চয়ন সংরক্ষণ করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_localstorage_আপনার_ধ্রুবক_মেমরি&amp;quot;&amp;gt;localStorage: আপনার ধ্রুবক মেমরি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_থিম_ব্যাকআপের_বাস্তবায়ন&amp;quot;&amp;gt;থিম ব্যাকআপের বাস্তবায়ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_কেসের_ব্যবস্থাপনা&amp;quot;&amp;gt;ত্রুটি কেসের ব্যবস্থাপনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উন্নত_ধৈর্য_কৌশল&amp;quot;&amp;gt;উন্নত ধৈর্য কৌশল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_২_প্রিলোড_স্ক্রিপ্ট_head_এরtool_call&amp;quot;&amp;gt;ধাপ ২ : প্রিলোড স্ক্রিপ্ট &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; এর&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধানের_হৃদয়&amp;quot;&amp;gt;সমাধানের হৃদয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্ক্রিপ্টের_অ্যানাটমি_প্রতিটি_লাইন_গণ্য&amp;quot;&amp;gt;স্ক্রিপ্টের অ্যানাটমি : প্রতিটি লাইন গণ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিস্টেম_পছন্দের_সনাক্তকরণ_বোনাস&amp;quot;&amp;gt;সিস্টেম পছন্দের সনাক্তকরণ (বোনাস)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্ষমতা_এই_স্ক্রিপ্ট_দ্রুত_কেন&amp;quot;&amp;gt;ক্ষমতা: এই স্ক্রিপ্ট দ্রুত কেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অপ্টিমাল_স্থাপন_head_এর_মধ্যে&amp;quot;&amp;gt;অপ্টিমাল স্থাপন &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; এর মধ্যে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৩_css_অট্রিবিউট_সিলেক্টরের_শক্তি&amp;quot;&amp;gt;ধাপ ৩: CSS অট্রিবিউট সিলেক্টরের শক্তি&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বুটস্ট্র্যাপ_5_এর_থিম_সিস্টেম&amp;quot;&amp;gt;বুটস্ট্র্যাপ 5-এর থিম সিস্টেম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_css_কাঠামো_একটি_থিম_সিস্টেমের_জন্য&amp;quot;&amp;gt;CSS কাঠামো একটি থিম সিস্টেমের জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারসংক্ষেপ&amp;quot;&amp;gt;সারসংক্ষেপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গভীর টেকনিক্যাল নিবন্ধে, আমরা কীভাবে (light/dark) থিম সিলেক্টরকে পৃষ্ঠা লোড হওয়ার সময় হওয়া খারাপ জ্বিমকানোর ইফেক্ট ছাড়াই প্রয়োগ করা যায় সেটি পর্যালোচনা করি। আমরা ব্রাউজারের রেন্ডারিং চক্রকে বিস্তারিতভাবে বিশ্লেষণ করি, FOUC (Flash of Unstyled Content) এর গভীর কারণগুলোকে, এবং সিঙ্ক্রোনাস প্রি-লোডিং ভিত্তিক একটি শক্তিশালী সমাধান প্রস্তাব করি। এTrong`&amp;amp;lt;head&amp;amp;gt;`. এই কৌশলটি সুপট এবং পেশাদার ব্যবহারকারী অভিজ্ঞতা নিশ্চিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_এই_শাপিত_থিম_ফ্লিকার&amp;quot;&amp;gt;সমস্যা : এই শাপিত থিম ফ্লিকার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহারকারী_অভিজ্ঞতার_জন্য_একটি_দুর্নিদ্রা&amp;quot;&amp;gt;ব্যবহারকারী অভিজ্ঞতার জন্য একটি দুর্নিদ্রা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দৃশ্য কল্পনা করুন: আপনি আপনার ওয়েব অ্যাপ্লিকেশনের জন্য একটি সুন্দর ডার্ক থিম তৈরি করতে ঘন্টাবده সময় ব্যয় করেছেন। রঙগুলো exactamente সাম্য করা আছে, কনট্রাস্ট অপ্টিমাল, এবং আপনার ব্যবহারকারীরা এই বিকল্পটি খুব পছন্দ করে। কিন্তু একটি অপমানজনক সমস্যা আছে: প্রতিটি পৃষ্ঠা রিলোডের সময়, একটু সময়ের অংশের জন্য, ডিফল্ট লাইট থিম দৃশ্যমান হয় এবং তারপরে ডার্ক থিম দখল করে নেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দৃশ্য &amp;quot;flash&amp;quot; অল্প সময়ের (কখনও ১০০ মিলিসেকেন্ডের কমও), মানুশ চোখে তৎক্ষণিকভাবে প্রাপ্য হয় এবং একটি অসুখদায়ক অভিজ্ঞতা সৃষ্টি করে। দৃশ্য��বিধা অথবা অ্যাক্সেসিবিলিটির কারণে ডার্ক টেমা বেছে নেন ব্যবহারকারীদের জন্য, এই জ্বালানী কখনও কখনও ব্যথাদায়ক হতে পারে, বিশেষত আলো কমা পরিবেশে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_fouc_পুরানো_ওয়েব_সমস্যা&amp;quot;&amp;gt;FOUC : পুরানো ওয়েব সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফোমেনটি &amp;lt;code&amp;gt;Flash of Unstyled Content&amp;lt;/code&amp;gt; (FOUC) নামের কিছুকে একটি ভেরিয়েন্ট যা ওয়েব ডেভেলপমেন্টের একটি ক্লাসিক সমস্যা, যা CSS‑র আওতায় প্রথম দিনগুলো থেকে বিদ্যমান। FOUC তখন ঘটে যখন ব্রাউজার לזمانی HTML কনটেন্টকে তার CSS‑কে প্রয়োগ না করে দেখায়, ফলে অনস্টাইল্ড কনটেন্টের একটি ফ্ল্যাশ তৈরি হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের নির্দিষ্ট ক্ষেত্রে, আমরা সম্পূর্ণরূপে স্টাইল করা হয়নি এমন কোনো বিষয়বস্তু সম্পর্কে বলছি না, বরং একটি&amp;lt;strong&amp;gt;ভুল থিমের ফ্ল্যাশ&amp;lt;/strong&amp;gt;(FOWT) - কন্টেন্টটি স্টাইল করা হয়েছে, কিন্তু ভুল থিমে। এটি খুব বিরক্তিকর, কারণ এটি দেখায় যে আমাদের অ্যাপ্লিকেশনটি &amp;quot;বুলে যায়&amp;quot; ব্যবহারকারীর পছন্দকে প্রতিটি পৃষ্ঠা লোডে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গুণমানের_ধারণার_উপর_প্রভাব&amp;quot;&amp;gt;গুণমানের ধারণার উপর প্রভাব&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যা, যদিও প্রযুক্তিগত, আপনার অ্যাপ্লিকেশনের গুণমানের ধারণায় গুরুত্বপূর্ণ প্রভাব ফেলে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কচাপন&amp;lt;/strong&amp;gt;দমকান একটি অসম্পূর্ণ অথবা খারাপভাবে অপ্টিমাইজ করা প্রোগ্রামের মতো মনে করে দাঁড়ায়। ব্যবহারকারীরা এই ছোট দৃষ্টিগত ত্রুটিগুলোকে সাধারণত সামগ্রিক পেশাদারিত্বের অভাবের সাথে যুক্ত করে Soxen.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একতা ভঙ্গ&amp;lt;/strong&amp;gt;অ্যাপ্লিকেশন মনে হচ্ছে ব্যবহারকারীর পছন্দগুলো ভুলে যাচ্ছে, ইন্টারফেস এবং ব্যবহারকারীর আশের মধ্যে অসমান্বয়ের অনুভূতি তৈর করছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;দৃষ্টি ক্লান্তি&amp;lt;/strong&amp;gt;: আলোকে সংবেদনশীল ব্যবহারকারী বা মাইগ্রেন-affected, এই উজ্জ্বল ফ্ল্যাশ শুধু একটি কসמטিক অসুবিধার চেয়ে বেশি হতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অভijanিত কর্মক্ষমতা&amp;lt;/strong&amp;gt;আরোদ্ভুতভাবে, আপনার সাইট যদিও দ্রুত লোড হয়, এই জ্বালান ধীর বা কম প্রতিক্রিয়াশীল একটি অ্যাপ্লিকেশনের মতো মনে হওয়ার অনুভূতি তৈরি করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমস্যার_প্রযুক্তিগত_বিশ্লেষণ&amp;quot;&amp;gt;সমস্যার প্রযুক্তিগত বিশ্লেষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যা কীভাবে সমাধান করতে হয় তা বুঝতে, প্রথমে বুঝতে হবে যে এটি কেন ঘটে। পৃষ্ঠার বিলিৎ (ব্লিংক) একটি ওয়েব পৃষ্ঠারজীবন চক্রের তিনটি গুরুত্বপূর্ণ ইভেন্ট মধ্যে সময়কালের পার্থক্যের কারণে ঘটে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;HTML‑এর প্রারম্ভিক পার্সিং&amp;lt;/strong&amp;gt;: ব্রাউজার আপনার পৃষ্ঠার গঠন পড়ে এবং বিশ্লেষণ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;CSS শৈলী প্রয়োগ&amp;lt;/strong&amp;gt;ব্রাউজারটি CSS নিয়মগুলো প্রয়োগ করে এবং দৃশ্য রেন্ডারিংের গণনা করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;জাভাস্ক্রিপ্টের কার্যকর্য&amp;lt;/strong&amp;gt;: আপনার থিম পরিবর্তনকারী কোডটি চলছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা ঘটে যখন ইভেন্ট n°3 (জাভাস্ক্রিপ্টের এক্সিকিউশন) ব্রাউজার ইভেন্ট n°2 (স্টাইল প্রয়োগ) শুরু বা শেষ করার পরে আসে। সেই সময়ে, ব্রাউজার কোনো থিম দেখাবে সে সম্পর্কে একটি সিদ্ধান্ত ইতিমধ্যে নেয়া হয়েছে, এবং আপনার কোড প্রথম রেন্ডার থেকে আগে তা প্রভাবিত করতে cukup দেরি করে আসে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_একটি_ক্লাসিক_স্ক্রিপ্ট_পর্যাপ্ত_নয়&amp;quot;&amp;gt;কেন একটি ক্লাসিক স্ক্রিপ্ট পর্যাপ্ত নয়?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অনুভূতিগমক_পদ্ধতি_কিন্তু_অকার্যকর&amp;quot;&amp;gt;অনুভূতিগমক পদ্ধতি কিন্তু অকার্যকর&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এক উন্নয়নকারীকে সবচেয়ে স্বাভাবিক পদ্ধতির অনুসারে একটি স্ক্রিপ্ট আমাদের শেষে রাখা উচিত`&amp;amp;lt;body&amp;amp;gt;`ব্যবহারকারীর পছন্দের থিমটি পরীক্ষা করে এবং প্রয়োগ করে। এই পদ্ধতিটি প্যারম্পারিক ওয়েবের সর্বোত্তম অনুশীলন অনুসরণ করে, যা পৃষ্ঠার শেষে স্ক্রিপ্ট লোড করার সুপারিশ করে যাতে রেন্ডারিং ব্লক না হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;// À la fin de &amp;amp;lt;body&amp;amp;gt; - L&amp;#39;APPROCHE INSUFFISANTE
document.addEventListener(&amp;#39;DOMContentLoaded&amp;#39;, () =&amp;amp;gt; {
  const theme = localStorage.getItem(&amp;#39;preferred-theme&amp;#39;);
  if (theme === &amp;#39;dark&amp;#39;) {
    document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, &amp;#39;dark&amp;#39;);
  }
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি প্রথমদৃষ্টিতে যুক্তিবদ্ধ মনে হয়। আমরা DOM-কে প্রস্তত হওয়ার জন্য অপেক্ষা করি, এবং তারপর থিমটি প্রয়োগ করি। সরল, ঠিক না? দুর্ভাগ্যবশত, এই সহজতাকে একটি মৌলিক ত্রুটি মোদে দেয়, যা ব্রাউজারের রেন্ডার সাইকেলের টাইমিং থেকে জড়িত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_domcontentloaded_ইভেন্ট_বুঝতে&amp;quot;&amp;gt;DOMContentLoaded ইভেন্ট বুঝতে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ঘটনা`DOMContentLoaded`শুরু HTML ডকুমেন্টটি সম্পূর্ণরূপে লোড ও ব্রাউজার द्वारा বিশ্লেষণ করা হলে তা সক্রিয় হয়,&amp;lt;strong&amp;gt;অপেক্ষা না করেই&amp;lt;/strong&amp;gt;শৈলী শীটের, চিত্র ও সাবফ্রেমের লোডিং সমাপ্তি। এটি একটি গুরুত্বপূর্ণ বিন্দু যা বোঝা দরকার।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি ইভেন্টগুলোর স্বাভাবিক অনুক্রম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্রাউজার HTML ডাউনলোড শুরু করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এটি HTML-কে পাওয়ার সাথে সাথে বিশ্লেষণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সে ট্যাগগুলি আবিষ্কার করে`&amp;amp;lt;link&amp;amp;gt;`CSS-_এর জন্য এবং их ডাউনলোড শুরু কর�ে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সে ট্যাগগুলো খুঁজে পায়`&amp;amp;lt;script&amp;amp;gt;`এবং সেগুলোকে (তাদের ধরণ ও বৈশিষ্ট্যানুসারে) এক্সিকিউট করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এটি ডকুমেন্ট অবজেক্ট মডেল (DOM) তৈরি করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ইভেন্ট &amp;lt;code&amp;gt;DOMContentLoaded&amp;lt;/code&amp;gt; ট্রিগার হয়&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সে স্টাইলগুলো প্রয়োগ করছে এবং লেআউট তৈরি করছে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রথম পেইন্ট (প্রদর্শন) হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ঘটনা`load`এটি ট্রিগার হয় যখন সম্পূর্ণ সমস্ত সংস্থান লোড হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা কি? ধাপ 6 (&amp;lt;code&amp;gt;DOMContentLoaded&amp;lt;/code&amp;gt;) এবং ধাপ 8 (&amp;lt;code&amp;gt;premier paint&amp;lt;/code&amp;gt;) এর মধ্যে, ব্রাউজারটি পৃষ্ঠাটি কীভাবে দেখাবে সে সম্পর্কে ইতিমধ্যে সিদ্ধান্ত নেয়েছে। যদি আপনার থিম পরিবর্তন স্ক্রিপ্ট ধাপ 6-এ চালু হয়, তাহলে ডিফল্ট শৈলির সাথে প্রথম প্রদর্শন এড়িয়ে যাওয়া ইতিমধ্যে অতিক্রম করেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রেন্ডার_ব্লকিং_সমস্যা&amp;quot;&amp;gt;রেন্ডার ব্লকিং সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবে, টাইমিং আরও জটিল। আধুনিক ব্রাউজার সুসংলগ্ন অপ্টিমাইজেশন কৌশল ব্যবহার করে অনুভূত কর্মক্ষমতা উন্নত করে। তারা প্রথম পেইন্ট (First Contentful Paint) যত তাড়াতাড়ি সম্ভব করতে চেষ্টা করে, যাতে ব্যবহারকারী স্ক্রীনে কিছু দেখতে পায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;CSS-এ &amp;quot;render-blocking&amp;quot; ডিফল্টরূপে থাকে, যা বোঝায় যে ব্রাউজার প্রথম পেইন্ট করার আগে স্টাইলশিট ডাউনলোড এবং পার্স শেষ করতে অপেক্ষা করে। এটি যুক্তিগত: আমরা অনস্টাইল করা কন্টেন্ট দেখাতে চাই না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে ফাঁসটি হলো: যখন ব্রাউজার প্রথমবার এই CSS স্টাইলগুলি প্রয়োগ করে, তখন তা বর্তমান DOMের অবস্থার ভিত্তিতে করে। যদি বৈশিষ্ট্য`data-bs-theme`ট্যাগে এখনো সেট করা হয়নি`&amp;amp;lt;html&amp;amp;gt;`, ব্রাউজারটি ডিফল্ট স্টাইলে প্রয়োগ করবে (সাধারণত নিষ্ক্রিয়া থিম).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপরে, যখন আপনার স্ক্রিপ্ট চালু হয় এবং এই বৈশিষ্ট্য পরিবর্তন করে, браузе করবে :(No, that is not correct. The correct Bengali phrase for &amp;quot;browser must&amp;quot; is &amp;quot;ব্রাউজারকে করতে হবে&amp;quot;. Let&amp;amp;#8217;s finalize.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Final answer: &amp;quot;তারপরে, যখন আপনার স্ক্রিপ্ট চালু হয় এবং এই বৈশিষ্ট্য পরিবর্তন করে, ব্রাউজারকে করতে হবে :&amp;quot; Actually original French ends with colon. Keep colon at end.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Thus output: &amp;quot;তারপরে, যখন আপনার স্ক্রিপ্ট চলছে এবং এই বৈশিষ্ট্য পরিবর্তন করে, ব্রাউজারকে করতে হবে :&amp;quot;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Check: &amp;quot;s&amp;amp;#8217;exécute&amp;quot; = &amp;quot;runs&amp;quot;, &amp;quot;changing&amp;quot;. &amp;quot;chale&amp;quot; maybe &amp;quot;chole&amp;quot;? &amp;quot;চালু হয়&amp;quot; fine. So final.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপরে, যখন আপনার স্ক্রিপ্ট চালু হয় এবং এই বৈশিষ্ট্য পরিবর্তন করে, ব্রাউজারকে করতে হবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এই পরিবর্তন থেকে প্রভাবিত সব স্টাইলে পুনরগণনা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রয়োজনে লেআউট পুনরায় তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রভাবিত উপাদানগুলো পুন: রেন্জ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পুন গণনা ও পুন রং রঙার প্রক্রিয়া হল যা দৃশ্যমান ঝillation সৃষ্টি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমস্যা_ভিজ্যুয়ালাইজেশন&amp;quot;&amp;gt;সমস্যা ভিজ্যুয়ালাইজেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমাসসংক্রান্ত ক্রমকে ভালোভাবে বুঝতে, একটি বিস্তারিত ক্রম নকশা দেখাইয়া বসাই:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;diag-flux-incorrect&amp;quot; class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 26) ]

@startuml
actor Utilisateur
participant Navigateur
participant &amp;quot;পার্সার HTML&amp;quot; as Parser
participant &amp;quot;CSSOM&amp;quot; as CSS
participant &amp;quot;Script.js (body এর শেষ)&amp;quot; as Script
participant &amp;quot;রেন্ডার ইঞ্জিন&amp;quot; as Render

Utilisateur -&amp;amp;gt; Navigateur: Demande la page
activate Navigateur

Navigateur -&amp;amp;gt; Parser: Parse le HTML
activate Parser
Parser -&amp;amp;gt; CSS: Découvre et charge les CSS
activate CSS
Parser -&amp;amp;gt; Parser: Construit le DOM
Parser -&amp;amp;gt; Navigateur: DOM Ready (DOMContentLoaded)
deactivate Parser

CSS -&amp;amp;gt; CSS: Parse les feuilles de style
CSS -&amp;amp;gt; Render: CSSOM Ready
deactivate CSS

activate Render
Render -&amp;amp;gt; Render: Calcule les styles avec data-bs-theme=&amp;quot;&amp;quot;note right: ডিফল্ট থিম (light)
Render -&amp;amp;gt; নেভিগেটর: Premier Paint (আলো থিম)
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
actor Utilisateur
participant Navigateur
participant &amp;quot;পার্সার HTML&amp;quot; as Parser
participant &amp;quot;CSSOM&amp;quot; as CSS
participant &amp;quot;Script.js (body এর শেষ)&amp;quot; as Script
participant &amp;quot;রেন্ডার ইঞ্জিন&amp;quot; as Render

Utilisateur -&amp;amp;gt; Navigateur: Demande la page
activate Navigateur

Navigateur -&amp;amp;gt; Parser: Parse le HTML
activate Parser
Parser -&amp;amp;gt; CSS: Découvre et charge les CSS
activate CSS
Parser -&amp;amp;gt; Parser: Construit le DOM
Parser -&amp;amp;gt; Navigateur: DOM Ready (DOMContentLoaded)
deactivate Parser

CSS -&amp;amp;gt; CSS: Parse les feuilles de style
CSS -&amp;amp;gt; Render: CSSOM Ready
deactivate CSS

activate Render
Render -&amp;amp;gt; Render: Calcule les styles avec data-bs-theme=&amp;quot;&amp;quot;note right: ডিফল্ট থিম (light)
Render -&amp;amp;gt; নেভিগেটর: Premier Paint (আলো থিম)
note right: ব্যবহারকারীটি আলো থিম দেখে
deactivate Render

নেভিগেটর -&amp;amp;gt; স্ক্রিপ্ট: স্ক্রিপ্ট চালায়
অ্যাক্টিভেট Script
স্ক্রিপ্ট -&amp;amp;gt; স্ক্রিপ্ট: localStorage পড়ে
স্ক্রিপ্ট -&amp;amp;gt; নেভিগেটর: setAttribute(&amp;#39;data-bs-theme&amp;#39;, &amp;#39;dark&amp;#39;)
deactivate Script

অ্যাক্টিভেট Render
Render -&amp;amp;gt; Render: স্টাইলগুলি data-bs-theme= দিয়ে পুনঃগণনা করে&amp;quot;dark&amp;quot;
note right: Thème sombre
Render -&amp;amp;gt; Navigateur: Repaint (Thème Sombre)
note right: Clignotement visible
deactivate Render

deactivate Navigateur
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ডায়াগ্রামটি সমস্যাকে স্পষ্টভাবে দেখায়: প্রথম পেইন্ট আমাদের স্ক্রিপ্টকে সঠিক থিম সেট করার সুযোগ পাওয়ার আগে ঘটে। পরবর্তী রেপেইন্ট দৃশ্যমান জ্বলে উঠার কারণ তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অকার্যকর_সমাধান_প্রচেষ্টা&amp;quot;&amp;gt;অকার্যকর সমাধান প্রচেষ্টা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যার সমাধান করার জন্য বিভিন্ন পদ্ধতি চেষ্টা করা হয়েছে, কিন্তু অধিকাংশের নিজস্ব অসুবিধা আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পদ্ধতি ১ : লোড হওয়া পর্যন্ত বিষয়বস্তুটি লুকান&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;body {
  opacity: 0;
  transition: opacity 0.3s;
}

body.loaded {
  opacity: 1;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি JavaScript সঠিক থিম সেট না করা পর্যন্ত সমস্ত কন্টেন্ট লুকায় দেয়। সমস্যা? এটি কৃত্রিমভাবে কন্টেন্টের প্রদর্শনকে বন্ধ করে তোলে, যা সাইটকে ধীর মনে করায়। আর, যদি JavaScript অক্ষম করা হয়, ব্যবহারকারী কখনো কিছুই দেখে না!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রতিরণ 2: লোডার/স্পিনার ব্যবহার করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উপায় ১-এর মতো, কিন্তু লোডিং সপিনারের সাথে। এটি সমस्यাটিকে ঢাকা দেয়, বাস্তব পারফরম্যান্স উন্নত করে না এবং অপ্রয়োজনীয় অনুভূতবিহীন বিলম্ব যোগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;উপায় 3: সন্ধ্যাবেলা থিমে ডিফল্ট&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কিছু ডেভেলপার CSS-এ ডার্ক থিমটি ডিফল্ট হিসেবে সেট করে। এটি ডার্ক থিম ব্যবহারকারীদের জন্য জ্বালানোর সমস্যা থেকে রক্ষা করে, কিন্তু হালকা থিম ব্যবহারকারীদের জন্য বিপরীত সমস্যা তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটিও এই পদ্ধতিগুলি সন্তোষজনক নয়, কারণ তারা সমস্যার মূল কারণের পরিবর্তে লক্ষণকে মেলে নেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আসল_সমাধান_আমোদর_কর&amp;quot;&amp;gt;আসল সমাধান: আমোদর কর!&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যার সমাধানের কী হলো বুঝতে যে আমাদের এই বৈশিষ্ট্য সংজ্ঞায়িত করতে হবে`data-bs-theme` &amp;lt;strong&amp;gt;আগে&amp;lt;/strong&amp;gt;ব্রাউজার CSS স্টাইল প্রয়োগ শুরু না করলে। এই বোঝায় যে আমাদের স্ক্রিপ্টটিকে পৃষ্ঠার জীবনচক্রের আগে চালাতে হবে, এবং এটি ঠিক সেই বিষয়টিই যা আমরা পরবর্তী বিভাগে অনুসন্ধান করব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_প্রারম্ভিক_লোডিং_early_loading&amp;quot;&amp;gt;সমাধান : প্রারম্ভিক লোডিং (Early Loading)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মৌলিক_নীতি&amp;quot;&amp;gt;মৌলিক নীতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের চকচকে সমস্যার শালী সমাধান একটি সহজ কিন্তু শক্তিশালী নিয়মের ভিত্তিতে আছে :&amp;lt;strong&amp;gt;অ্যাপ্লিকেশনের অবস্থা ব্রাউজারের রেন্ডারিং প্রক্রিয়ার সাথে সিঙ্ক্রোনাইজ করা&amp;lt;/strong&amp;gt;. পেজ লোড হওয়ার অপেক্ষা না করে, থিম (বিষয়) সেট করার পরিবর্তে, আমরা তা সেট করতে হবে।&amp;lt;strong&amp;gt;সময়&amp;lt;/strong&amp;gt;লোডিং, CSS শৈলী প্রয়োগ হওয়ার আগেও&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি উন্নয়ন জার্গনে &amp;#39;Early Loading&amp;#39; বা &amp;#39;Synchronous Preloading&amp;#39; নামে পরিচিত। ধারণাটি হল পৃষ্ঠার জীবনচক্রে যতটা সম্ভব দ্রুত থিম সনাক্তকরণ লজিকটি কার্যকর করা, আদর্শভাবে একটি ট্যাগের মধ্যে।&amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt;, নবিগেটর CSS ফাইলগুলি ডাউনলোড শুরু করার আগেও&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কেন_head_হলো_আদর্শ_জায়গা&amp;quot;&amp;gt;কেন &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; হলো আদর্শ জায়গা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le `&amp;amp;lt;head&amp;amp;gt;`একটি HTML ডকুমেন্ট ব্রাজারের द्वारा 크्रमanusarভাবে শীর্ষ থেকে নীচে প্রক্রিয়াজিত হয়। প্রতিটি উপাদান প্রদর্শিত হওয়ার 크्रमে প্রক্রিয়াজিত হয়। এই বৈশিষ্ট্য আমাদের সমাধানের জন্য গুরুত্বপূর্ণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্রাউজার একটি ট্যাগ পেলে`&amp;amp;lt;script&amp;amp;gt;`এর&amp;amp;lt;/tool_call&amp;amp;gt;`&amp;amp;lt;head&amp;amp;gt;`গুণ বিনা[]&amp;lt;code&amp;gt;async&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;defer&amp;lt;/code&amp;gt;, il :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;HTML পার্সিং বন্ধ কর&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্ক্রিপ্ট ডাউনলোড করুন&amp;lt;/strong&amp;gt;(বাহ্যিক হলে) অথবা বেড (ইনলাইন হলে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অবিলম্বে স্ক্রিপ্টটি চালাও&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এইচটিএমএল পার্সিং পুনরায় চালু করুন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আচরণ, যা কখনো কখনো কর্মক্ষমতার সমস্যা হিসেবে বিবেচিত হয় (এতো কারণে scriptsকে পৃষ্ঠার শেষে রাখার পরামর্শ দেওয়া হয়), এই বিশেষ ক্ষেত্রে আমাদের বন্ধু হয়ে ওঠে। আমাদের থিম সনাক্তকরণ স্ক্রিপ্টকে পৃষ্ঠার শুরুতে`&amp;amp;lt;head&amp;amp;gt;`, আমরা নিশ্চিত করি যে এটি ব্রাউজার ট্যাগগুলো পোস্ট করার আগে চালু হয়`&amp;amp;lt;link&amp;amp;gt;`আমাদের স্টাইল শীটের।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_তিন_স্তরের_সলিউশন_আর্কিটেকচার&amp;quot;&amp;gt;তিন স্তরের সলিউশন আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের সম্পূর্ণ সমাধান তিনটি পরস্পর আশ্রিত স্তরের দ্বারা গঠিত, প্রতিটি একটি নির্দিষ্ট ভূমিকা পালন করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্তর ১: ধারাবাহিকতা (localStorage)&amp;lt;/strong&amp;gt; এই স্তর ব্যবহারকারীর সেশনগুলোর মধ্যে বাছাই সংরক্ষণ ও পুনরুদ্ধারের জন্য দায়িত্বवान।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লেয়ার ২ : দ্রুত সিঙ্ক্রোনাইজেশন (ইনলাইন স্ক্রিপ্ট &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt;)&amp;lt;/strong&amp;gt; এই স্তরটি প্রারম্ভিক রেন্ডারিং এর আগে অ্যাপ্লিকেশনের অবস্থা ডোমের সাথে সমন্বয় করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লেয়ার ৩ : রিস্পন্সিভ স্টাইল (CSS বৈশিষ্ট্য সিলেক্টরসহ)&amp;lt;/strong&amp;gt; এই স্তরটি স্তর ২ দ্বারা সংজ্ঞায়িত অবস্থার ভিত্তিতে দৃশ্য শৈলী সংজ্ঞায়িত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন প্রতিটি স্তরকে বিস্তারিতভাবে খুঁজে নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_১_ব্যবহারকারীর_চয়ন_সংরক্ষণ_করুন&amp;quot;&amp;gt;ধাপ ১: ব্যবহারকারীর চয়ন সংরক্ষণ করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_localstorage_আপনার_ধ্রুবক_মেমরি&amp;quot;&amp;gt;localStorage: আপনার ধ্রুবক মেমরি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Le &amp;lt;code&amp;gt;localStorage`একটি Web Storage API যা কী‑মান জোড়াসমূহকে ব্রাউজারে স্থায়ীভাবে সংরক্ষণ করার সুবিধা দেয়। কুকিজের পরিপ্রেক্ষিতে, ডেটা`localStorage&amp;lt;/code&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(blank)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কখনও না স্বয়ংক্রিয়ভাবে সার্ভারে পাঠানো হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;তাদের একটি বড় স্টোরেজ ক্যাপাসিটি আছে (সাধারণত 5-10MB)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোনো মেয়াদোত্তীর্ণ তারিখ নেই (স্পষ্টভাবে মুছে ফেলা পর্যন্ত স্থায়ী)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রটোকল এবং ডোমেইনে সীমাবদ্ধ (Same-Origin Policy)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের ব্যবহারের ক্ষেত্রে, যে`localStorage`এটা পরিপূর্ণ причине :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমাদের এই তথ্য সার্ভারের সাথে ভাগ করার দরকার নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমরা চাই যে পছন্দটি অব্যাহতভাবে অনন্তকাল ধরে থাকুক।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রয়োজনীয় স্টোরেজের আকার ন্যুনতম (একkaç বাইট)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_থিম_ব্যাকআপের_বাস্তবায়ন&amp;quot;&amp;gt;থিম ব্যাকআপের বাস্তবায়ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে আমরা কীভাবে ব্যবহারকারীর থিম পরিবর্তন করার সময় তাদের পছন্দ সংরক্ষণ করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;// Fonction complète pour changer le thème
function setTheme(newTheme) {
  // Validation de l&amp;#39;entrée
  if (![&amp;#39;light&amp;#39;, &amp;#39;dark&amp;#39;, &amp;#39;auto&amp;#39;].includes(newTheme)) {
    console.error(&amp;#39;Thème invalide:&amp;#39;, newTheme);
    return;
  }

  try {
    // Sauvegarde dans localStorage
    localStorage.setItem(&amp;#39;preferred-theme&amp;#39;, newTheme);

    // Application immédiate dans le DOM
    document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, newTheme);

    // Dispatch d&amp;#39;un événement personnalisé pour notifier d&amp;#39;autres composants
    window.dispatchEvent(new CustomEvent(&amp;#39;theme-changed&amp;#39;, {
      detail: { theme: newTheme }
    }));

    console.log(&amp;#39;Thème changé:&amp;#39;, newTheme);
  } catch (error) {
    console.error(&amp;#39;Erreur lors de la sauvegarde du thème:&amp;#39;, error);
    // Fallback : on applique quand même le thème visuellement
    document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, newTheme);
  }
}

// Exemple d&amp;#39;utilisation avec un bouton
document.getElementById(&amp;#39;theme-toggle&amp;#39;).addEventListener(&amp;#39;click&amp;#39;, () =&amp;amp;gt; {
  const currentTheme = document.documentElement.getAttribute(&amp;#39;data-bs-theme&amp;#39;) || &amp;#39;light&amp;#39;;
  const newTheme = currentTheme === &amp;#39;light&amp;#39; ? &amp;#39;dark&amp;#39; : &amp;#39;light&amp;#39;;
  setTheme(newTheme);
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ত্রুটি_কেসের_ব্যবস্থাপনা&amp;quot;&amp;gt;ত্রুটি কেসের ব্যবস্থাপনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি গুরুত্বপূর্ণ যে কেসগুলোকে পরিচালনা করা যেখানে le`localStorage`উপলব্ধ বা অ্যাক্সেসযোগ্য নয়। অনেক পরিস্থিতি অ্যাক্সেসকে বাধা দিতে পারে`localStorage`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কঠোর গোপন ব্রাউজিং&amp;lt;/strong&amp;gt;: Safari ব্যক্তিগত ব্রাউজিং মোডে একটি অপবাদ উঠে`QuotaExceededError`লেখার চেষ্টা করার সময়`localStorage`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গোপনীয়তা সেটিংস&amp;lt;/strong&amp;gt;: কিছু ব্রাউজার বা গোপনীয়তা এক্সটেনশন অ্যাক্সেস ব্লক করতে পারে`localStorage`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ডোমেন সীমাবদ্ধতা&amp;lt;/strong&amp;gt; : Le `localStorage`প্রোটোকলে অ্যাক্সেসযোগ্য নয়`file://`কিছু ব্রাউজারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্টোরেজ পূর্ণ&amp;lt;/strong&amp;gt;�যদিও অসাধারন, স্টোরেজ জায়গা সম্পূর্ণভাবে ভরা হতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অতএব আমাদের কোড একটি ব্লক ব্যবহার করে`try&amp;amp;#8230;&amp;amp;#8203;catch`এই ক্ষেত্রগুলোকে সৌম্যভাবে পরিচালনা করতে, থিম পরিবর্তন কার্যকারিতা প্রদান চালিয়ে যাওয়া হইলে, যদি স্থায়ী সংরক্ষণ উপলব্ধ না হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উন্নত_ধৈর্য_কৌশল&amp;quot;&amp;gt;উন্নত ধৈর্য কৌশল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আরও জটিল অ্যাপ্লিকেশনের জন্য, আপনি অতিরিক্ত রণনীতিগুলো বিবেচনা করতে পারেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সার্ভার সিঙ্ক্রোনাইজেশন (ঐচ্ছিক)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;async function setTheme(newTheme) {
  // Sauvegarde locale immédiate
  localStorage.setItem(&amp;#39;preferred-theme&amp;#39;, newTheme);
  document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, newTheme);

  // Synchronisation serveur en arrière-plan (si l&amp;#39;utilisateur est connecté)
  if (userIsAuthenticated()) {
    try {
      await fetch(&amp;#39;/api/user/preferences&amp;#39;, {
        method: &amp;#39;POST&amp;#39;,
        headers: { &amp;#39;Content-Type&amp;#39;: &amp;#39;application/json&amp;#39; },
        body: JSON.stringify({ theme: newTheme })
      });
    } catch (error) {
      console.warn(&amp;#39;Échec de la synchronisation serveur:&amp;#39;, error);
      // L&amp;#39;échec n&amp;#39;est pas critique car la préférence est déjà sauvegardée localement
    }
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি সংযুক্ত ব্যবহারকার govের জন্য ডিভাইসgovের মধ্যে পছন্দগুলো সিঙ্ক্‍রোনাইজ করে, তৎক্ষণিক স্থানীয় প্রতিক্রিয়া বজায় রাখে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_২_প্রিলোড_স্ক্রিপ্ট_head_এরtool_call&amp;quot;&amp;gt;ধাপ ২ : প্রিলোড স্ক্রিপ্ট &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; এর&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধানের_হৃদয়&amp;quot;&amp;gt;সমাধানের হৃদয়&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে আসলে জাদু কাজ করে। আমরা একটি ছোট স্ক্রিপ্ট রাখব।&amp;lt;strong&amp;gt;ইনলাইন&amp;lt;/strong&amp;gt;আমাদের মধ্যে সরাসরি`&amp;amp;lt;head&amp;amp;gt;`, আমাদের সব ট্যাগের আগে`&amp;amp;lt;link&amp;amp;gt;`শैलেট। এই স্ক্রিপ্ত ইচ্ছামত মিনিমালিস্ট, স্বতন্ত্র, এবং সবচেয়ে দ্রুত চালাতে পারে এমনভাবে ডিজাইন করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;
&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Mon Site Incroyable&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;!-- ==========================================
         NOTRE SCRIPT MAGIQUE DE PRÉ-CHARGEMENT
         Ce script DOIT être le premier élément
         dans le &amp;amp;lt;head&amp;amp;gt; après les meta tags
         ========================================== --&amp;amp;gt;
    &amp;amp;lt;script&amp;amp;gt;
      // IIFE pour ne pas polluer le scope global
      (function() {
        &amp;#39;use strict&amp;#39;;

        try {
          // Lecture de la préférence sauvegardée
          const savedTheme = localStorage.getItem(&amp;#39;preferred-theme&amp;#39;);

          // Si une préférence existe, on l&amp;#39;applique immédiatement
          if (savedTheme) {
            document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, savedTheme);
          }
          // Optionnel : Détecter la préférence système si aucune sauvegarde
          else if (window.matchMedia &amp;amp;amp;&amp;amp;amp; window.matchMedia(&amp;#39;(prefers-color-scheme: dark)&amp;#39;).matches) {
            document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, &amp;#39;dark&amp;#39;);
          }
          // Sinon, le thème par défaut du CSS sera utilisé (généralement &amp;#39;light&amp;#39;)

        } catch (error) {
          // En cas d&amp;#39;erreur (localStorage bloqué, etc.), on log discrètement
          // et on laisse le thème par défaut s&amp;#39;appliquer
          console.warn(&amp;#39;Impossible de charger la préférence de thème:&amp;#39;, error);
        }
      })();
    &amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;!-- FIN DU SCRIPT MAGIQUE --&amp;amp;gt;

    &amp;amp;lt;!-- Les feuilles de style sont chargées APRÈS le script --&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/bootstrap.min.css&amp;quot;&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;css/styles.css&amp;quot;&amp;amp;gt;

    &amp;amp;lt;!-- Autres ressources du head --&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;favicon.ico&amp;quot;&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;
&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;!-- Contenu de la page --&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্ক্রিপ্টের_অ্যানাটমি_প্রতিটি_লাইন_গণ্য&amp;quot;&amp;gt;স্ক্রিপ্টের অ্যানাটমি : প্রতিটি লাইন গণ্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্ক্রিপ্টকে লাইন-By-লাইন বিশ্লেষণ করি যাতে প্রতিটি ডিজাইন সিদ্ধান্ত বুঝতে পাই :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;IIFE (ইমিডিয়েটলি ইনভোকড ফাংশন এক্সপ্রেশন)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;(function() {
  // ...
})();&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গঠনটি একটি ফাংশন তৈরি করে যা অবিলম্বে কার্যকর হয়। কেন? আমাদের ভেরিয়েবলকে স্থানীয় স্কোপে আলাদা করতে এবং গ্লোবাল স্কোপকে দূষিত না করতে। যদি আমরা শুধুমাত্র ব্যবহার করলেও`const`(যেটি একটি ব্লক স্কোপ আছে), IIFE একটি ভাল অভ্যাস যা আমাদের উদ্দেশ্য স্পষ্ট করে এবং সম্ভাব্য নামের সংঘর্ষ থেকে রক্ষা করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্ট্রিক্ট মোড&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;&amp;#39;use strict&amp;#39;;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নির্দেশিকা জাভাস্ক্রিপ্টের স্ট্রিক্ট মোড সক্রিয় করে, যা : ঘোষিত না করা ভেরিয়েবলের ব্যবহারটি নিষীধ করা হয়। - ঝুঁকিপূর্ণ ক্রিয়াকলাপ들의 জন্য ত্রুটি তৈরি করে কিছু জাভাস্ক্রিপ্ট ইঞ্জিনে কর্মক্ষমতা উন্নয়ন করে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি গুরুত্বপূর্ণ স্ক্রিপ্টের মতো এই ক্ষেত্রে, আমরা সর্বোচ্চ নিরাপত্তা চাই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্লক try&amp;amp;#8230;&amp;amp;#8203;catch&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;try {
  // Code principal
} catch (error) {
  console.warn(&amp;#39;Impossible de charger la préférence de thème:&amp;#39;, error);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ব্লকটি একদম গুরুত্বপূর্ণ। এটি নিশ্চিত করে যে যদি কোনো কিছু ভুলে যায় (localStorage ব্লক করা, সম্ভাব্য নয় সিনট্যাক্স ত্রুটি, ইত্যাদি), তাহলে আমাদের স্ক্রিপ্ট পুরো পৃষ্ঠার লোডিংকে ব্লক করবে না। এकी ব্যবহার`console.warn`বরং`console.error`এটি নির্দেশ করে যে এটি একটি অক্রিটিক্যাল সমস্যা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;localStorage পড়া&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;const savedTheme = localStorage.getItem(&amp;#39;preferred-theme&amp;#39;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই লাইনটি কিছু পরিস্থিতিতে (সাফারি স্ট্রিক্ট প্রাইভেট ব্রাউজিং) একটি ব্যতিক্রম উঠিয়ে দিতে পারে। তাই এটি try&amp;amp;#8230;&amp;amp;#8203;catch ব্লকের ভিতরে রাখা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শর্তযুক্ত অ্যাপ্লিকেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;if (savedTheme) {
  document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, savedTheme);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা শুধুমাত্র একটি সংরক্ষিত থিম পেলে থিম প্রয়োগ করি। অন্যথায়, আমরা CSS-কে নিজের ডিফল্ট thèmes ব্যবহার করতে দিই। এই পদ্ধতিটি জাভাস্ক্রিপ্টে কোড করা ডিফল্ট মান থেকে আরও শক্তিশালী।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিস্টেম_পছন্দের_সনাক্তকরণ_বোনাস&amp;quot;&amp;gt;সিস্টেম পছন্দের সনাক্তকরণ (বোনাস)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ঐচ্ছিক কিন্তু আকর্ষক উন্নয়ন হলো ব্যবহারকারীর অপারেটিং সিস্টেমের থিম পছন্দ সনাক্ত করা, যদি তারা আপনার অ্যাপ্লিকেশনে এখনও কোনো স্পষ্ট পছন্দ বেছে নিয়নি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;else if (window.matchMedia &amp;amp;amp;&amp;amp;amp; window.matchMedia(&amp;#39;(prefers-color-scheme: dark)&amp;#39;).matches) {
  document.documentElement.setAttribute(&amp;#39;data-bs-theme&amp;#39;, &amp;#39;dark&amp;#39;);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফিচারটি Media Query ব্যবহার করে`prefers-color-scheme`সিস্টেমকে প্রশ্ন করতে। macOS, Windows 10+, iOS এবং আধুনিক Android-এ, এই ক্যুরি ব্যবহারকারীর সিস্টেম পছন্দ ফেরত দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সুবিধা :&amp;lt;/strong&amp;gt; প্রথম ভিজিট থেকেই ব্যক্তিগতকৃত অভিজ্ঞতা - ব্যবহারকারীর সিস্টেম পরিবেশের সাথে সামঞ্জস্য - প্রথম ভিজিটের জন্য কোনো স্টোরেজ প্রয়োজন নেই&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিবেচনা :&amp;lt;/strong&amp;gt; - সব ব্রাউজার এই বৈশিষ্ট্য সমর্থন করে না (কিন্তু ২০২০ থেকে সমর্থন অসাধারণ) যাচাই`window.matchMedia`সামঞ্জস্য নিশ্চিত 한다 - ব্যবহারকারী এই বিকল্পকে সর্বদা ওভাররাইড করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্ষমতা_এই_স্ক্রিপ্ট_দ্রুত_কেন&amp;quot;&amp;gt;ক্ষমতা: এই স্ক্রিপ্ট দ্রুত কেন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্রি-লোডিং স্ক্রিপ্টটি অত্যন্ত দ্রুত হওয়ার জন্য ডিজাইন করা হয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্বল্পতম আকার&amp;lt;/strong&amp;gt;: প্রায় ৩০০ বایت নন-মিনিফাইড, ২০০ বাইট মিনিফাইড। এটি কোনো ছবি অথবা জাভাস্ক্রিপ্ট লাইব্রেরির তুলনায় নগণ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সরাসরি&amp;lt;/strong&amp;gt;: কোন অতিরিক্ত HTTP অনুরোধ নেই। স্ক্রিপ্ট HTML-এ আছে, সুতরাং এটি অবিলম্বে উপলব্ধ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সহজ সিঙ্ক্রোনাস অপারেশন&amp;lt;/strong&amp;gt;: localStorage-এ একটি কী পড়া (অতিশই ত্বরিত অপারেশন) এবং একটি DOM thuộcসুচক পরিবর্তন (ব্রাউজারের স্বদেশী অপারেশন).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কোনো নির্ভরতা নেই&amp;lt;/strong&amp;gt;কোনো ফ্রেমওয়ার্ক নেই, কোনো লাইব্রেরি নেই, শুধু ব্যানিলা জাভাস্ক্রিপ্ট। কোনো স্টার্টআপ সময় নেই, কোনো ডিপেন্ডেন্সি পার্সিং নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একমাত্র কার্যকরন&amp;lt;/strong&amp;gt;: এই স্ক্রিপ্টটি লোডে একটিবার চালু হয়। ইভেন্ট লিসনার নেই, লুপ নেই, জটিল গণনা নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তবে, আধুনিক হാർഡওয়েয়ারে, এই স্ক্রিপ্টটি ১ মিলিসেকেন্ডের কম সময়ে চলায়, যা অপেক্ষাযোগ্য সময় যা পৃষ্ঠার লোডিং কর্মক্ষমতায় কোনো প্রভাব ফেলে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অপ্টিমাল_স্থাপন_head_এর_মধ্যে&amp;quot;&amp;gt;অপ্টিমাল স্থাপন &amp;lt;code&amp;gt;&amp;amp;lt;head&amp;amp;gt;&amp;lt;/code&amp;gt; এর মধ্যে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এলিমেন্টগুলোর ক্রমে`&amp;amp;lt;head&amp;amp;gt;`এটি গুরুত্বপূর্ণ। এখানে সুপারিশকৃত ครমিক: actually correct spelling: &amp;quot;ক্রম&amp;quot;. Need correct Bengali characters. Let&amp;amp;#8217;s write properly: &amp;quot;এটি গুরুত্বপূর্ণ। এখানে সুপারিশকৃত ক্রম:&amp;quot;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Check for typo: super-shishokrito? Should be &amp;quot;সুপারিশকৃত&amp;quot;. Yes.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Thus final: &amp;quot;এটি গুরুত্বপূর্ণ। এখানে সুপারিশকৃত ক্রম:&amp;quot; Done.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি গুরুত্বপূর্ণ। এখানে সুপারিশকৃত ক্রম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;!-- 1. Métadonnées critiques --&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot;&amp;amp;gt;

    &amp;amp;lt;!-- 2. Notre script de pré-chargement (IMMÉDIATEMENT après les meta) --&amp;amp;gt;
    &amp;amp;lt;script&amp;amp;gt;
      (function() { /* notre code */ })();
    &amp;amp;lt;/script&amp;amp;gt;

    &amp;amp;lt;!-- 3. Titre de la page --&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Mon Site&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;!-- 4. Feuilles de style --&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;styles.css&amp;quot;&amp;amp;gt;

    &amp;amp;lt;!-- 5. Autres ressources (fonts, favicons, etc.) --&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;preconnect&amp;quot; href=&amp;quot;https://fonts.googleapis.com&amp;quot;&amp;amp;gt;
    &amp;amp;lt;link rel=&amp;quot;icon&amp;quot; href=&amp;quot;favicon.ico&amp;quot;&amp;amp;gt;

    &amp;amp;lt;!-- 6. Autres scripts avec defer ou async --&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;app.js&amp;quot; defer&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আজ্ঞা নিশ্চিত করে যে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;চার্সেট কোনো টেক্সট প্রক্রিয়াকরণের আগে নির্ধারণ করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমাদের স্ক্রিপ্ট CSS লোড হওয়ার আগে চালু হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;CSS গুলি পরে লোড হয় এবং সরাসরি সঠিক থিম প্রয়োগ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অন্যান্য অগুণবিধি সম্পদগুলো শেষে লোড করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_৩_css_অট্রিবিউট_সিলেক্টরের_শক্তি&amp;quot;&amp;gt;ধাপ ৩: CSS অট্রিবিউট সিলেক্টরের শক্তি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বুটস্ট্র্যাপ_5_এর_থিম_সিস্টেম&amp;quot;&amp;gt;বুটস্ট্র্যাপ 5-এর থিম সিস্টেম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Bootstrap 5 একটি শোভন থিম ব্যবস্থাপনার পদ্ধতি প্রস্তুত করেছে, যা CSS কাস্টম প্রোপার্টি (CSS ভেরিয়েবল) এবং অ্যাট্রিবিউট সিলেক্টরের উপর ভিত্তি করে। এই সিস্টেমটি অ্যাট্রিবিউটটি ব্যবহার করে`data-bs-theme`এলিমেন্টে`&amp;amp;lt;html&amp;amp;gt;`রংের ভেরিয়েবলের কোন সেট প্রয়োগ করতে হবে তা নির্ধারণ করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সিস্টেমের সৌন্দর্য তার সহজতায় নিহিত: বহু সংখ্যা এলিমেন্টে ভিন্ন‑ভিন্ন স্টাইলশীট লোড করা বা ক্লাস টগল করার পরিবর্তে, আমরা শুধুমাত্র একটি এলিমেন্টে একটি গুণ পরিবর্তন করি, এবং CSS ক্যাসকেডেরおかゲ বাকি অংশটি স্বয়ংক্রিয়ভাবে করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_css_কাঠামো_একটি_থিম_সিস্টেমের_জন্য&amp;quot;&amp;gt;CSS কাঠামো একটি থিম সিস্টেমের জন্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে একটি সম্পূর্ণ CSS গঠন রয়েছে একটি শক্তিশালী থিম সিস্টেম বাস্তবায়নের জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;/**
 * SYSTÈME DE THÈME COMPLET
 * Utilise les Custom Properties CSS pour une maintenance facile
 */

/* ============================================
   THÈME PAR DÉFAUT (LIGHT)
   Défini sur :root pour être le fallback
   ============================================ */
:root {
  /* Couleurs de base */
  --color-primary: #0d6efd;
  --color-secondary: #6c757d;
  --color-success: #198754;
  --color-danger: #dc3545;
  --color-warning: #ffc107;
  --color-info: #0dcaf0;

  /* Couleurs de fond */
  --bg-primary: #ffffff;
  --bg-secondary: #f8f9fa;
  --bg-tertiary: #e9ecef;

  /* Couleurs de texte */
  --text-primary: #212529;
  --text-secondary: #6c757d;
  --text-tertiary: #adb5bd;

  /* Couleurs de bordure */
  --border-color: #dee2e6;
  --border-color-subtle: #e9ecef;

  /* Couleurs d&amp;#39;ombre */
  --shadow-sm: rgba(0, 0, 0, 0.075);
  --shadow-md: rgba(0, 0, 0, 0.15);
  --shadow-lg: rgba(0, 0, 0, 0.25&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গ্রেডল প্লাগইন ফাংশনাল টেস্টে কার্যকর লগিং</title>
            <link >https://cheroliv.com//blog/2025/0097_gradle_plugin_dev_func_test_logger_post.html</link>
            <pubDate>Fri, 7 Nov 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0097_gradle_plugin_dev_func_test_logger_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_gradlerunner_এ_নির্ভরতা&amp;quot;&amp;gt;সমস্যা : GradleRunner-এ নির্ভরতা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্লাগইন_ডেভেলপমেন্টের_প্রেক্ষিত&amp;quot;&amp;gt;প্লাগইন ডেভেলপমেন্টের প্রেক্ষিত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লগিং_এর_দ্বন্দ্ব&amp;quot;&amp;gt;লগিং-এর দ্বন্দ্ব&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মিথ্যা_ভালো_ধারণা&amp;quot;&amp;gt;মিথ্যা ভালো ধারণা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_স্বাধীন_লগার&amp;quot;&amp;gt;সমাধান: স্বাধীন লগার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রস্তাবিত_আর্কিটেকচার&amp;quot;&amp;gt;প্রস্তাবিত আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্পাদন_প্রবাহ&amp;quot;&amp;gt;নিষ্পাদন প্রবাহ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_বাস্তবায়ন&amp;quot;&amp;gt;সম্পূর্ণ বাস্তবায়ন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গ্রেডেল_ডিপেন্ডেন্সি&amp;quot;&amp;gt;গ্রেডেল ডিপেন্ডেন্সি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_logback_কনফিগারেশন&amp;quot;&amp;gt;Logback কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_টেস্ট_ক্লাস&amp;quot;&amp;gt;সম্পূর্ণ টেস্ট ক্লাস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মাল্টি_লেভেল_লগিং_স্কিমা&amp;quot;&amp;gt;মাল্টি-লেভেল লগিং স্কিমা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভালো_অনুশীলন&amp;quot;&amp;gt;ভালো অনুশীলন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুপারিশ_করা_লগিং_গঠন&amp;quot;&amp;gt;সুপারিশ করা লগিং গঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পঠনযোগ্যতার_জন্য_দৃশ্য_চিহ্ন&amp;quot;&amp;gt;পঠনযোগ্যতার জন্য দৃশ্য চিহ্ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আউটপুট_থেকে_তথ্য_বের_করা&amp;quot;&amp;gt;আউটপুট থেকে তথ্য বের করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পূর্বপরবর্তী_তুলনা&amp;quot;&amp;gt;পূর্ব/পরবর্তী তুলনা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পূর্বে_সমস্যামূলক_পদ্ধতি&amp;quot;&amp;gt;পূর্বে : সমস্যামূলক পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরে_দৃঢ়_পদ্ধতি&amp;quot;&amp;gt;পরে : দৃঢ় পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সারাংশ_ডায়াগ্রাম&amp;quot;&amp;gt;সারাংশ ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিহার্য_পাঁচ&amp;quot;&amp;gt;পরিহার্য পাঁচ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রথম_ভুল_forwardoutput_ভульে_যাওয়া&amp;quot;&amp;gt;প্রথম ভুল: &amp;lt;code&amp;gt;.forwardOutput()&amp;lt;/code&amp;gt; ভульে যাওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাঁস_নম্বর_২_লগার_অইনিশিয়ালাইজ_করা_হয়নি&amp;quot;&amp;gt;❌ ফাঁস নম্বর ২ : লগার অইনিশিয়ালাইজ করা হয়নি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাঁদ_৩_অতি_লগিং&amp;quot;&amp;gt;❌ ফাঁদ ৩ : অতি লগিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফলাফল_এবং_মেট্রিক্স&amp;quot;&amp;gt;ফলাফল এবং মেট্রিক্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আगे_আরও_যাওয়া&amp;quot;&amp;gt;আगे আরও যাওয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্র্যಾಡল প্লাগইন ডেভেলপমেন্টের সময়, ফাংশনাল টেস্টিং প্লাগইন আচরণকে একটি বাস্তব গ্র্যাডেল পরিবেশে যাচাই করার জন্য জরুরি। যাই হোক, একটি গুরুত্বপূর্ণ প্রশ্ন দ্রুত উঠে আসে:&amp;lt;strong&amp;gt;একটি কার্যকর লগিং সিস্টেম কীভাবে তৈরি করবেন যা &amp;lt;code&amp;gt;GradleRunner&amp;lt;/code&amp;gt; সমস্যাপূর্ণ নির্ভরতা তৈরি না করে ?&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে, আমরা অনুসন্ধান করব :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গ্রেডল ফাংশনাল টেস্টে লগিং সমস্যা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;SLF4J ও Logback ব্যবহার করে একটি দৃঢ় সমাধানের আর্কিটেকচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ বাস্তবায়ন বাস্তব উদাহরণসহ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ভালো অনুশীলন ও এড়াতে যে ফাঁস&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_gradlerunner_এ_নির্ভরতা&amp;quot;&amp;gt;সমস্যা : GradleRunner-এ নির্ভরতা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্লাগইন_ডেভেলপমেন্টের_প্রেক্ষিত&amp;quot;&amp;gt;প্লাগইন ডেভেলপমেন্টের প্রেক্ষিত&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি Gradle প্লাগইন উন্নয়ন করার সময়, সাধারণত এটি ব্যবহার করা হয়`GradleRunner`&amp;lt;em&amp;gt;Gradle TestKit&amp;lt;/em&amp;gt;-এর জন্য পরীক্ষা বিল্ড চালানোর জন্য:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `test my plugin`() {
    val result = GradleRunner.create()
        .withProjectDir(projectDir)
        .withArguments(&amp;quot;myTask&amp;quot;)
        .build()

    // Comment logger efficacement ici ?
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লগিং_এর_দ্বন্দ্ব&amp;quot;&amp;gt;লগিং-এর দ্বন্দ্ব&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান সমস্যা হল:&amp;lt;strong&amp;gt;লগিংকে কোনো অবজেক্টের উপর নির্ভর করা উচিত না যেটি আমরািশ্চিত নয় যে এর আরম্ভ হয়েছে&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-4c938d4dcd0d6f2e25497ec128f501a6.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;433&amp;quot; height=&amp;quot;262&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মিথ্যা_ভালো_ধারণা&amp;quot;&amp;gt;মিথ্যা ভালো ধারণা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock warning&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-warning&amp;quot; title=&amp;quot;Warning&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এটা করবেন না :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// ❌ MAUVAIS: Tentative d&amp;#39;obtenir un logger du runner
val runner = GradleRunner.create()
val logger = runner.logger // N&amp;#39;existe pas !
// ❌ MAUVAIS: Logger partagé initialisé tardivement
lateinit var logger: Logger
@BeforeEach
fun setup() {
    logger = LoggerFactory.getLogger(...)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_স্বাধীন_লগার&amp;quot;&amp;gt;সমাধান: স্বাধীন লগার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রস্তাবিত_আর্কিটেকচার&amp;quot;&amp;gt;প্রস্তাবিত আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমাধানটি একটি লগার ব্যবহার করা&amp;lt;strong&amp;gt;সম্পূর্ণভাবে স্বাধীন&amp;lt;/strong&amp;gt; du &amp;lt;code&amp;gt;GradleRunner&amp;lt;/code&amp;gt;, টেস্ট ক্লাসের স্তরে শুরু করা হয়েছে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-5fed31a5ab3af5e57aabec0e55f5e8f9.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;601&amp;quot; height=&amp;quot;448&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিষ্পাদন_প্রবাহ&amp;quot;&amp;gt;নিষ্পাদন প্রবাহ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-b10ae45c0d5354a511a22c9aa62b22c0.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;716&amp;quot; height=&amp;quot;686&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পূর্ণ_বাস্তবায়ন&amp;quot;&amp;gt;সম্পূর্ণ বাস্তবায়ন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গ্রেডেল_ডিপেন্ডেন্সি&amp;quot;&amp;gt;গ্রেডেল ডিপেন্ডেন্সি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার প্রয়োজনীয় নির্ভরতাগুলি যোগ করুন`build.gradle.kts` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;dependencies {
    // Pour les tests fonctionnels
    testImplementation(gradleTestKit())
    testImplementation(&amp;quot;org.junit.jupiter:junit-jupiter:5.10.2&amp;quot;)

    // Pour le logging
    testImplementation(&amp;quot;org.slf4j:slf4j-api:2.0.17&amp;quot;)
    testRuntimeOnly(&amp;quot;ch.qos.logback:logback-classic:1.4.14&amp;quot;)

    // Pour les assertions
    testImplementation(&amp;quot;org.assertj:assertj-core:3.27.6&amp;quot;)
}

tasks.test {
    useJUnitPlatform()
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_logback_কনফিগারেশন&amp;quot;&amp;gt;Logback কনফিগারেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি তৈরি করুন`src/test/resources/logback-test.xml`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xml hljs&amp;quot; data-lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;
&amp;amp;lt;configuration&amp;amp;gt;
    &amp;amp;lt;!-- Appender console avec format lisible --&amp;amp;gt;
    &amp;amp;lt;appender name=&amp;quot;STDOUT&amp;quot; class=&amp;quot;ch.qos.logback.core.ConsoleAppender&amp;quot;&amp;amp;gt;
        &amp;amp;lt;encoder&amp;amp;gt;
            &amp;amp;lt;pattern&amp;amp;gt;%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n&amp;amp;lt;/pattern&amp;amp;gt;
        &amp;amp;lt;/encoder&amp;amp;gt;
    &amp;amp;lt;/appender&amp;amp;gt;

    &amp;amp;lt;!-- Appender fichier pour conservation --&amp;amp;gt;
    &amp;amp;lt;appender name=&amp;quot;FILE&amp;quot; class=&amp;quot;ch.qos.logback.core.FileAppender&amp;quot;&amp;amp;gt;
        &amp;amp;lt;file&amp;amp;gt;build/test-results/functional-tests.log&amp;amp;lt;/file&amp;amp;gt;
        &amp;amp;lt;encoder&amp;amp;gt;
            &amp;amp;lt;pattern&amp;amp;gt;%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n&amp;amp;lt;/pattern&amp;amp;gt;
        &amp;amp;lt;/encoder&amp;amp;gt;
    &amp;amp;lt;/appender&amp;amp;gt;

    &amp;amp;lt;!-- Logger pour vos tests --&amp;amp;gt;
    &amp;amp;lt;logger name=&amp;quot;com.cheroliv.bakery&amp;quot; level=&amp;quot;DEBUG&amp;quot;/&amp;amp;gt;

    &amp;amp;lt;!-- Réduire le bruit de Gradle --&amp;amp;gt;
    &amp;amp;lt;logger name=&amp;quot;org.gradle&amp;quot; level=&amp;quot;WARN&amp;quot;/&amp;amp;gt;

    &amp;amp;lt;!-- Configuration racine --&amp;amp;gt;
    &amp;amp;lt;root level=&amp;quot;INFO&amp;quot;&amp;amp;gt;
        &amp;amp;lt;appender-ref ref=&amp;quot;STDOUT&amp;quot;/&amp;amp;gt;
        &amp;amp;lt;appender-ref ref=&amp;quot;FILE&amp;quot;/&amp;amp;gt;
    &amp;amp;lt;/root&amp;amp;gt;
&amp;amp;lt;/configuration&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্পূর্ণ_টেস্ট_ক্লাস&amp;quot;&amp;gt;সম্পূর্ণ টেস্ট ক্লাস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package com.cheroliv.bakery

import org.gradle.testkit.runner.GradleRunner
import org.gradle.testkit.runner.TaskOutcome
import org.junit.jupiter.api.*
import org.junit.jupiter.api.TestInstance.Lifecycle.PER_CLASS
import org.junit.jupiter.api.io.TempDir
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import java.io.File
import kotlin.test.assertEquals
import kotlin.test.assertTrue

@TestInstance(PER_CLASS)
class BakeryPluginFunctionalTest {

    @field:TempDir
    lateinit var projectDir: File

    private val buildFile by lazy { projectDir.resolve(&amp;quot;build.gradle.kts&amp;quot;) }
    private val settingsFile by lazy { projectDir.resolve(&amp;quot;settings.gradle.kts&amp;quot;) }

    companion object {
        // ✓ Logger indépendant, initialisé au chargement de la classe
        private val logger: Logger = LoggerFactory.getLogger(
            BakeryPluginFunctionalTest::class.java
        )

        @JvmStatic
        @BeforeAll
        fun globalSetup() {
            logger.info(&amp;quot;═&amp;quot;.repeat(60))
            logger.info(&amp;quot;DÉMARRAGE DE LA SUITE DE TESTS FONCTIONNELS&amp;quot;)
            logger.info(&amp;quot;═&amp;quot;.repeat(60))
        }

        @JvmStatic
        @AfterAll
        fun globalTeardown() {
            logger.info(&amp;quot;═&amp;quot;.repeat(60))
            logger.info(&amp;quot;FIN DE LA SUITE DE TESTS&amp;quot;)
            logger.info(&amp;quot;═&amp;quot;.repeat(60))
        }
    }

    @BeforeEach
    fun setup() {
        logger.info(&amp;quot;─&amp;quot;.repeat(60))
        logger.info(&amp;quot;Préparation de l&amp;#39;environnement de test&amp;quot;)
        logger.debug(&amp;quot;Répertoire de test: ${projectDir.absolutePath}&amp;quot;)

        settingsFile.writeText(&amp;quot;&amp;quot;&amp;quot;
            rootProject.name = &amp;quot;test-bakery-project&amp;quot;
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())

        logger.debug(&amp;quot;✓ settings.gradle.kts créé&amp;quot;)
    }

    @AfterEach
    fun teardown(testInfo: TestInfo) {
        logger.info(&amp;quot;✓ Test terminé: ${testInfo.displayName}&amp;quot;)
        logger.info(&amp;quot;─&amp;quot;.repeat(60))
    }

    @Test
    fun `plugin can be applied successfully`() {
        logger.info(&amp;quot;TEST: Application du plugin Bakery&amp;quot;)

        buildFile.writeText(&amp;quot;&amp;quot;&amp;quot;
            plugins {
                id(&amp;quot;com.cheroliv.bakery&amp;quot;)
            }
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())

        logger.debug(&amp;quot;Fichier build.gradle.kts créé&amp;quot;)
        logger.debug(&amp;quot;Lancement du build Gradle...&amp;quot;)

        val startTime = System.currentTimeMillis()

        val result = GradleRunner.create()
            .forwardOutput() // ← Important : capture la sortie
            .withPluginClasspath()
            .withArguments(&amp;quot;tasks&amp;quot;, &amp;quot;--group=bakery&amp;quot;, &amp;quot;--stacktrace&amp;quot;)
            .withProjectDir(projectDir)
            .build()

        val duration = System.currentTimeMillis() - startTime
        logger.info(&amp;quot;Build terminé en ${duration}ms&amp;quot;)

        // Analyse de la sortie
        logger.debug(&amp;quot;Analyse de la sortie Gradle...&amp;quot;)
        val outputLines = result.output.lines()
        logger.debug(&amp;quot;Nombre de lignes capturées: ${outputLines.size}&amp;quot;)

        // Validation
        val expectedTasks = listOf(&amp;quot;bake&amp;quot;, &amp;quot;printConfigPath&amp;quot;, &amp;quot;printJBakeClasspath&amp;quot;)
        logger.info(&amp;quot;Vérification des tâches attendues:&amp;quot;)

        expectedTasks.forEach { task -&amp;amp;gt;
            val found = result.output.contains(task)
            logger.debug(&amp;quot;  ${if (found) &amp;quot;✓&amp;quot; else &amp;quot;✗&amp;quot;} $task&amp;quot;)
            assertTrue(found, &amp;quot;Task &amp;#39;$task&amp;#39; should be available&amp;quot;)
        }

        logger.info(&amp;quot;✓ Plugin appliqué avec succès - ${expectedTasks.size} tâches trouvées&amp;quot;)
    }

    @Test
    fun `bake task executes and prints version`() {
        logger.info(&amp;quot;TEST: Exécution de la tâche &amp;#39;bake&amp;#39;&amp;quot;)

        buildFile.writeText(&amp;quot;&amp;quot;&amp;quot;
            plugins {
                id(&amp;quot;com.cheroliv.bakery&amp;quot;)
            }
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())

        logger.debug(&amp;quot;Exécution de &amp;#39;gradle bake&amp;#39;...&amp;quot;)

        val result = GradleRunner.create()
            .forwardOutput()
            .withPluginClasspath()
            .withArguments(&amp;quot;bake&amp;quot;, &amp;quot;--info&amp;quot;) // --info pour plus de détails
            .withProjectDir(projectDir)
            .build()

        // Extraction d&amp;#39;informations depuis la sortie
        logger.debug(&amp;quot;Recherche du message &amp;#39;Baking site&amp;#39;...&amp;quot;)
        val hasBakingMessage = result.output.contains(&amp;quot;Baking site with Bakery Plugin!&amp;quot;)

        logger.debug(&amp;quot;Recherche de la version JBake...&amp;quot;)
        val hasVersionMessage = result.output.contains(&amp;quot;Using JBake version:&amp;quot;)

        // Extraction de la version (si présente)
        val versionRegex = Regex(&amp;quot;Using JBake version: (.+)&amp;quot;)
        val versionMatch = versionRegex.find(result.output)
        if (versionMatch != null) {
            val version = versionMatch.groupValues[1]
            logger.info(&amp;quot;Version JBake détectée: $version&amp;quot;)
        }

        // Validation
        assertTrue(hasBakingMessage, &amp;quot;Message &amp;#39;Baking site&amp;#39; attendu&amp;quot;)
        assertTrue(hasVersionMessage, &amp;quot;Message de version attendu&amp;quot;)
        assertEquals(TaskOutcome.SUCCESS, result.task(&amp;quot;:bake&amp;quot;)?.outcome)

        logger.info(&amp;quot;✓ Tâche &amp;#39;bake&amp;#39; exécutée avec succès&amp;quot;)
    }

    @Test
    fun `analyze output with structured logging`() {
        logger.info(&amp;quot;TEST: Analyse structurée de la sortie&amp;quot;)

        buildFile.writeText(&amp;quot;&amp;quot;&amp;quot;
            plugins {
                id(&amp;quot;com.cheroliv.bakery&amp;quot;)
            }

            task(&amp;quot;diagnostics&amp;quot;) {
                doLast {
                    println(&amp;quot;[DIAG] Project: ${&amp;#39;$&amp;#39;}{project.name}&amp;quot;)
                    println(&amp;quot;[DIAG] Build dir: ${&amp;#39;$&amp;#39;}{project.buildDir}&amp;quot;)
                    println(&amp;quot;[DIAG] Plugin applied: true&amp;quot;)

                    val config = configurations.findByName(&amp;quot;jbakeRuntime&amp;quot;)
                    println(&amp;quot;[DIAG] JBake config exists: ${&amp;#39;$&amp;#39;}{config != null}&amp;quot;)

                    if (config != null) {
                        println(&amp;quot;[DIAG] Dependencies count: ${&amp;#39;$&amp;#39;}{config.dependencies.size}&amp;quot;)
                    }
                }
            }
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())

        logger.debug(&amp;quot;Exécution de la tâche diagnostics...&amp;quot;)

        val result = GradleRunner.create()
            .forwardOutput()
            .withPluginClasspath()
            .withArguments(&amp;quot;diagnostics&amp;quot;, &amp;quot;--quiet&amp;quot;)
            .withProjectDir(projectDir)
            .build()

        // Analyse structurée
        logger.info(&amp;quot;Extraction des informations de diagnostic:&amp;quot;)

        val diagLines = result.output.lines()
            .filter { it.startsWith(&amp;quot;[DIAG]&amp;quot;) }

        logger.debug(&amp;quot;Nombre de lignes de diagnostic: ${diagLines.size}&amp;quot;)

        diagLines.forEach { line -&amp;amp;gt;
            logger.info(&amp;quot;  $line&amp;quot;)

            // Analyse spécifique par type de ligne
            when {
                line.contains(&amp;quot;Project:&amp;quot;) -&amp;amp;gt; {
                    val projectName = line.substringAfter(&amp;quot;Project:&amp;quot;).trim()
                    logger.debug(&amp;quot;    → Nom du projet extrait: &amp;#39;$projectName&amp;#39;&amp;quot;)
                }
                line.contains(&amp;quot;Dependencies count:&amp;quot;) -&amp;amp;gt; {
                    val count = line.substringAfter(&amp;quot;count:&amp;quot;).trim()
                    logger.debug(&amp;quot;    → Nombre de dépendances: $count&amp;quot;)
                }
            }
        }

        assertTrue(diagLines.isNotEmpty(), &amp;quot;Des lignes de diagnostic devraient être présentes&amp;quot;)
        logger.info(&amp;quot;✓ Analyse structurée terminée - ${diagLines.size} lignes analysées&amp;quot;)
    }

    @Test
    fun `test with error handling`() {
        logger.info(&amp;quot;TEST: Gestion d&amp;#39;erreurs avec logging&amp;quot;)

        buildFile.writeText(&amp;quot;&amp;quot;&amp;quot;
            plugins {
                id(&amp;quot;com.cheroliv.bakery&amp;quot;)
            }
        &amp;quot;&amp;quot;&amp;quot;.trimIndent())

        try {
            logger.debug(&amp;quot;Tentative d&amp;#39;exécution...&amp;quot;)

            val result = GradleRunner.create()
                .forwardOutput()
                .withPluginClasspath()
                .withArguments(&amp;quot;printJBakeClasspath&amp;quot;)
                .withProjectDir(projectDir)
                .build()

            val outcome = result.task(&amp;quot;:printJBakeClasspath&amp;quot;)?.outcome
            logger.info(&amp;quot;Outcome: $outcome&amp;quot;)

            if (outcome == TaskOutcome.SUCCESS) {
                logger.info(&amp;quot;✓ Exécution réussie&amp;quot;)
            } else {
                logger.warn(&amp;quot;⚠ Outcome inattendu: $outcome&amp;quot;)
            }

            assertEquals(TaskOutcome.SUCCESS, outcome)

        } catch (e: Exception) {
            logger.error(&amp;quot;✗ Échec du test&amp;quot;, e)
            logger.error(&amp;quot;Type d&amp;#39;exception: ${e.javaClass.simpleName}&amp;quot;)
            logger.error(&amp;quot;Message: ${e.message}&amp;quot;)

            // Log de la stack trace si nécessaire
            if (logger.isDebugEnabled) {
                logger.debug(&amp;quot;Stack trace complète:&amp;quot;, e)
            }

            throw e
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মাল্টি_লেভেল_লগিং_স্কিমা&amp;quot;&amp;gt;মাল্টি-লেভেল লগিং স্কিমা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-8ba8b8a0071c1b5c6be9063eeda49f79.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;314&amp;quot; height=&amp;quot;911&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভালো_অনুশীলন&amp;quot;&amp;gt;ভালো অনুশীলন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সুপারিশ_করা_লগিং_গঠন&amp;quot;&amp;gt;সুপারিশ করা লগিং গঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `mon test`() {
    // 1. LOG: Début du test
    logger.info(&amp;quot;TEST: Description du test&amp;quot;)

    // 2. LOG: Préparation
    logger.debug(&amp;quot;Préparation des fichiers...&amp;quot;)
    buildFile.writeText(&amp;quot;...&amp;quot;)
    logger.debug(&amp;quot;✓ Fichiers préparés&amp;quot;)

    // 3. LOG: Exécution
    logger.debug(&amp;quot;Lancement du build...&amp;quot;)
    val startTime = System.currentTimeMillis()

    val result = GradleRunner.create()
        .forwardOutput()
        .withArguments(&amp;quot;task&amp;quot;)
        .build()

    val duration = System.currentTimeMillis() - startTime
    logger.info(&amp;quot;Build terminé en ${duration}ms&amp;quot;)

    // 4. LOG: Analyse
    logger.debug(&amp;quot;Analyse des résultats...&amp;quot;)
    // ... validations ...

    // 5. LOG: Conclusion
    logger.info(&amp;quot;✓ Test réussi&amp;quot;)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পঠনযোগ্যতার_জন্য_দৃশ্য_চিহ্ন&amp;quot;&amp;gt;পঠনযোগ্যতার জন্য দৃশ্য চিহ্ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লগের পাঠযোগ্যতা উন্নত করার জন্য ইউনিকোড সিম্বল ব্যবহার করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;logger.info(&amp;quot;✓ Succès&amp;quot;)
logger.info(&amp;quot;✗ Échec&amp;quot;)
logger.info(&amp;quot;⚠ Attention&amp;quot;)
logger.info(&amp;quot;→ Étape suivante&amp;quot;)
logger.info(&amp;quot;═&amp;quot;.repeat(60)) // Séparateur principal
logger.info(&amp;quot;─&amp;quot;.repeat(60)) // Séparateur secondaire&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_আউটপুট_থেকে_তথ্য_বের_করা&amp;quot;&amp;gt;আউটপুট থেকে তথ্য বের করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// Recherche simple
val hasMessage = result.output.contains(&amp;quot;Expected message&amp;quot;)

// Extraction avec regex
val versionRegex = Regex(&amp;quot;Version: (.+)&amp;quot;)
val version = versionRegex.find(result.output)?.groupValues?.get(1)

// Filtrage de lignes
val errorLines = result.output.lines()
    .filter { it.contains(&amp;quot;ERROR&amp;quot;) }

errorLines.forEach { logger.error(&amp;quot;Gradle error: $it&amp;quot;) }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পূর্বপরবর্তী_তুলনা&amp;quot;&amp;gt;পূর্ব/পরবর্তী তুলনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পূর্বে_সমস্যামূলক_পদ্ধতি&amp;quot;&amp;gt;পূর্বে : সমস্যামূলক পদ্ধতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class MyTest {
    lateinit var logger: Logger // ❌ Initialisé tardivement

    @BeforeEach
    fun setup() {
        logger = LoggerFactory.getLogger(...) // ❌ Dépendance
    }

    @Test
    fun test() {
        val runner = GradleRunner.create()
        logger.info(&amp;quot;Testing...&amp;quot;) // ⚠ Peut échouer
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরে_দৃঢ়_পদ্ধতি&amp;quot;&amp;gt;পরে : দৃঢ় পদ্ধতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class MyTest {
    companion object {
        private val logger = LoggerFactory.getLogger(...) // ✓ Indépendant
    }

    @Test
    fun test() {
        logger.info(&amp;quot;TEST: Starting...&amp;quot;) // ✓ Toujours disponible

        val result = GradleRunner.create()
            .forwardOutput() // ✓ Capture la sortie
            .build()

        logger.debug(&amp;quot;Output: ${result.output}&amp;quot;) // ✓ Analyse
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সারাংশ_ডায়াগ্রাম&amp;quot;&amp;gt;সারাংশ ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-3fae1641889c4d9cab054b17f10cdded.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;979&amp;quot; height=&amp;quot;1345&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পরিহার্য_পাঁচ&amp;quot;&amp;gt;পরিহার্য পাঁচ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রথম_ভুল_forwardoutput_ভульে_যাওয়া&amp;quot;&amp;gt;প্রথম ভুল: &amp;lt;code&amp;gt;.forwardOutput()&amp;lt;/code&amp;gt; ভульে যাওয়া&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// MAUVAIS: La sortie Gradle n&amp;#39;est pas capturée
val result = GradleRunner.create()
    .withArguments(&amp;quot;task&amp;quot;)
    .build()

// result.output sera vide !&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// BON: La sortie est capturée
val result = GradleRunner.create()
    .forwardOutput() // ✓
    .withArguments(&amp;quot;task&amp;quot;)
    .build()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফাঁস_নম্বর_২_লগার_অইনিশিয়ালাইজ_করা_হয়নি&amp;quot;&amp;gt;❌ ফাঁস নম্বর ২ : লগার অইনিশিয়ালাইজ করা হয়নি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// MAUVAIS
class Test {
    lateinit var logger: Logger // Peut ne pas être initialisé
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// BON
class Test {
    companion object {
        private val logger = LoggerFactory.getLogger(...) // Toujours initialisé
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফাঁদ_৩_অতি_লগিং&amp;quot;&amp;gt;❌ ফাঁদ ৩ : অতি লগিং&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// MAUVAIS: Trop de logs DEBUG en production
logger.debug(&amp;quot;Variable a = $a&amp;quot;)
logger.debug(&amp;quot;Variable b = $b&amp;quot;)
logger.debug(&amp;quot;Variable c = $c&amp;quot;)
// ... 100 lignes de logs&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// BON: Logging ciblé
logger.info(&amp;quot;Traitement de ${items.size} éléments&amp;quot;)
logger.debug(&amp;quot;Détails: ${items.take(5)}...&amp;quot;) // Échantillon seulement&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফলাফল_এবং_মেট্রিক্স&amp;quot;&amp;gt;ফলাফল এবং মেট্রিক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতির মাধ্যমে, আপনি পাবেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5714%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 42.8571%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 28.5715%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মেট্রিক&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;আগে&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;পরে&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কোডের লাইন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;~50 লাইন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রায় ৮০ লাইন (+৬০%)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ডিবাগিং সময়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;~30 মিনিট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রায় ৫ মিনিট (-83%)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সনাক্ত ত্রুটি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মৌলিক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বिस्तারিত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সমরক্ষণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কষ্টকর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সহজ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্বাধীনতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�❌ যুক্ত&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;✓ স্বাধীন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্র্যাডল প্লাগইনের ফাংশনাল টেস্টে একটি শক্তিশালী লগিং সিস্টেমের স্থাপন একটি সহজ নীতির ভিত্তি করে:&amp;lt;strong&amp;gt;স্বাধীনতা&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মূল পয়েন্টগুলো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্বতন্ত্র লগার&amp;lt;/strong&amp;gt;: একটি প্রারম্ভিত`companion object`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SLF4J এবং Logback&amp;lt;/strong&amp;gt;প্রমাণিত এবং কনফিগারযোগ্য স্ট্যাক&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;.forwardOutput()&amp;lt;/strong&amp;gt;Gradle আউটপুট ক্যাপচার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্ট্রাকচার্ড লগিং&amp;lt;/strong&amp;gt;: INFO ধাপের জন্য, DEBUG বিস্তারিতের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আউটপুট বিশ্লেষণ&amp;lt;/strong&amp;gt;তথ্য নিষ্কাশন থেকে`result.output`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি পরীক্ষা নিশ্চিত করে&amp;lt;strong&amp;gt;বজায় রাখা যায়&amp;lt;/strong&amp;gt;, &amp;lt;strong&amp;gt;ডিবাগযোগ্য&amp;lt;/strong&amp;gt; et &amp;lt;strong&amp;gt;শক্তিশালী&amp;lt;/strong&amp;gt;, গाढ় ডিজাইন নীতিগুলোকে মেনে চলা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/test_kit.html&amp;quot;&amp;gt;Gradle TestKit ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.slf4j.org/manual.html&amp;quot;&amp;gt;SLF4J নির্দেশিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://logback.qos.ch/manual/configuration.html&amp;quot;&amp;gt;Logback কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/gradle/gradle/tree/master/subprojects/test-kit&amp;quot;&amp;gt;Gradle TestKit সোর্স কোড&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আगे_আরও_যাওয়া&amp;quot;&amp;gt;আगे আরও যাওয়া&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি আগামী নিবন্ধে, আমরা অনুসন্ধান করব:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সতত ইন্টিগ্রেশন সঙ্গে সংগঠিত লগিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এম্বেডেড লগস সহ HTML পরীক্ষা প্রতিবেদন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JVM.attach সহ উন্নত ডিবাগিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;লগিংয়ের কর্মক্ষমতা এবং অপ্টিমাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;এই অনুচ্ছেদটি &amp;quot;Gradle প্ল্যাগইন উন্নয়ন&amp;quot; সিরিজের অংশ আমার টেকনিক্যাল ব্লগে.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>AsciiDoc-এ রঙিন চৌরসের দেখানো: প্র্যাকটিক্যাল গাইড</title>
            <link >https://cheroliv.com//blog/2025/0096_afficher-couleurs-asciidoc_post.html</link>
            <pubDate>Sat, 1 Nov 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0096_afficher-couleurs-asciidoc_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা&amp;quot;&amp;gt;সমস্যা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহারের_প্রেক্ষাপট&amp;quot;&amp;gt;ব্যবহারের প্রেক্ষাপট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্ভাব্য_পদ্ধতিগুলো&amp;quot;&amp;gt;সম্ভাব্য পদ্ধতিগুলো&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অপশন_১_ইউনিকোড_অক্ষর&amp;quot;&amp;gt;অপশন ১ : ইউনিকোড অক্ষর&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্প_২_বাহ্যিক_ছবি&amp;quot;&amp;gt;বিকল্প ২ : বাহ্যিক ছবি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিকল্প_৩_কাস্টম_css_ভূমিকা&amp;quot;&amp;gt;বিকল্প ৩: কাস্টম CSS ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_option_4_html_ইনজেকশন_নির্বাচিত_সমাধান&amp;quot;&amp;gt;Option 4: HTML ইনজেকশন (নির্বাচিত সমাধান)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_html_ইনজেকশন_দিয়ে&amp;quot;&amp;gt;সমাধান: HTML ইনজেকশন  দিয়ে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কাজের_নীতি&amp;quot;&amp;gt;কাজের নীতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তবায়ন&amp;quot;&amp;gt;বাস্তবায়ন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_css_বৈশিষ্ট্যগুলো_ব্যাখ্যা&amp;quot;&amp;gt;CSS বৈশিষ্ট্যগুলো ব্যাখ্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_উদাহরণ&amp;quot;&amp;gt;সম্পূর্ণ উদাহরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অপ্টিমাইজেশন_এবং_ভালো_অনুশীলন&amp;quot;&amp;gt;অপ্টিমাইজেশন এবং ভালো অনুশীলন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_হালকা_রঙ_পরিচালনা&amp;quot;&amp;gt;হালকা রঙ পরিচালনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বর্গের_আকার_সামঞ্জস্য_করুন&amp;quot;&amp;gt;বর্গের আকার সামঞ্জস্য করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভেরিয়েন্ট_তৈরি_করা&amp;quot;&amp;gt;ভেরিয়েন্ট তৈরি করা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রঙিন_বৃত্ত&amp;quot;&amp;gt;রঙিন বৃত্ত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রঙযুক্ত_বর্ডার_والা_বর্গ&amp;quot;&amp;gt;রঙযুক্ত বর্ডার والা বর্গ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধানের_আর্কিটেকচার&amp;quot;&amp;gt;সমাধানের আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুবিধা_ও_সীমাবদ্ধতা&amp;quot;&amp;gt;সুবিধা ও সীমাবদ্ধতা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুবিধা&amp;quot;&amp;gt;সুবিধা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সীমাবদ্ধতাগুলি&amp;quot;&amp;gt;সীমাবদ্ধতাগুলি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অ্যাক্সেসযোগ্যতার_উন্নয়ন&amp;quot;&amp;gt;অ্যাক্সেসযোগ্যতার উন্নয়ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তব_উদাহরণ_থিম_ডকুমেন্টেশন&amp;quot;&amp;gt;বাস্তব উদাহরণ: থিম ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রযুক্তিগত ডকুমেন্টেশন রচনার সময়, বিশেষ করে স্টাইল গাইড বা ব্যবহারকারী ইন্টারফেস স্পেসিফিকেশন জন্য, রঙের প্যালেট প্রদর্শন করতে হয় — இது স্বাভাবিক। AsciiDoc, যদিও ডকুমেন্টেশনের জন্য খুবই শক্তিশালী, রঙের নমুনা প্রদর্শনের জন্য কোনো নেটিভ সিনট্যাক্স প্রদান করে না। এই নিবন্ধটি এই সমস্যা খোঁজা বের করে এবং HTML ইনজেকশন ভিত্তিক একটি শৌল্যোদ্ভব সমাধান প্রস্তাব করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা&amp;quot;&amp;gt;সমস্যা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহারের_প্রেক্ষাপট&amp;quot;&amp;gt;ব্যবহারের প্রেক্ষাপট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কল্পনা করুন আপনি একটি ওয়েব অ্যাপ্লিকেশন থিমের CSS ভ্যারিয়েবলগুলো টিপস দিচ্ছেন। আপনার প্রয়োজন হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;হেক্সাডেসিমাল রঙের কোড তালিকা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি রঙের দৃশ্য প্রাকদর্শন দেখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সোর্স ডকুমেন্টের পঠনযোগ্যতা বজায় রাখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্ট্যাটিক সাইট জেনারেটরের মতো JBake-এর সাথে সামঞ্জস্য নিশ্চিত করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;use-case-diagram.svg&amp;quot; alt=&amp;quot;use case diagram&amp;quot; width=&amp;quot;1797&amp;quot; height=&amp;quot;5652&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্ভাব্য_পদ্ধতিগুলো&amp;quot;&amp;gt;সম্ভাব্য পদ্ধতিগুলো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি AsciiDoc ডকুমেন্টে রং দেখানোর জন্য নানা সমাধান বিবেচনা করা যেতে পারে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;component-diagram.svg&amp;quot; alt=&amp;quot;component diagram&amp;quot; width=&amp;quot;1770&amp;quot; height=&amp;quot;5712&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অপশন_১_ইউনিকোড_অক্ষর&amp;quot;&amp;gt;অপশন ১ : ইউনিকোড অক্ষর&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অপশন ১ : ইউনিকোড অক্ষর&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ইউনিকোড অক্ষরের ব্যবহারে`&amp;amp;#9632;`(■) সরল কিন্তু সীমিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* ■ --accent-color: #7952b3 (violet Bootstrap)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সীমাবদ্ধতা&amp;lt;/strong&amp;gt; : রঙে কোনো নিয়ন্ত্রণ নেই, সিস্টেম ফন্টে নির্ভর করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_বিকল্প_২_বাহ্যিক_ছবি&amp;quot;&amp;gt;বিকল্প ২ : বাহ্যিক ছবি&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি রংের জন্য PNG یا SVG চিত্র তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* image:colors/violet.svg[width=16] --accent-color: #7952b3&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Limitations&amp;lt;/strong&amp;gt; : ভারী রক্ষণাবেক্ষণ, ফাইল সংখ্যা বাড়ে, অটোমেটিক সিঙ্ক্রোনাইজেশন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_বিকল্প_৩_কাস্টম_css_ভূমিকা&amp;quot;&amp;gt;বিকল্প ৩: কাস্টম CSS ভূমিকা&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;CSS ক্লাস সেট করুন এবং AsciiDoc ভূমিকা ব্যবহার করে প্রয়োগ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* [.color-violet]##■## --accent-color: #7952b3&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সীমাবদ্ধতা&amp;lt;/strong&amp;gt; : একটি বাহ্যিক শৈলী শীট প্রয়োজন, সমস্ত সম্ভাব্য রঙের পূর্বনির্ধারিত সংজ্ঞা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_option_4_html_ইনজেকশন_নির্বাচিত_সমাধান&amp;quot;&amp;gt;Option 4: HTML ইনজেকশন (নির্বাচিত সমাধান)&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ম্যাক্রো ব্যবহার করুন``pour HTML-এ inline style দিয়ে ইনজেক্ট করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;
background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;]
--accent-color: #7952b3 (violet Bootstrap)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_html_ইনজেকশন_দিয়ে&amp;quot;&amp;gt;সমাধান: HTML ইনজেকশন  দিয়ে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কাজের_নীতি&amp;quot;&amp;gt;কাজের নীতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ম্যাক্রো``AsciiDoc-এ raw কন্টেন্ট ইন্সার্ট করা যায়, যা AsciiDoc প্রসেসরে ব্যাখ্যা করা হবে না। এটি আমাদেরকে HTML-কে ইনলাইন CSS স্টাইলের সাথে সরাসরি ইনজেক্ট করতে দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 2) ]

@startuml
participant &amp;quot;দস্তাবেজ
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
participant &amp;quot;দস্তাবেজ
AsciiDoc&amp;quot; as doc
participant &amp;quot;প্রসেসর
AsciiDoc&amp;quot; as processor
participant &amp;quot;pass:[] macro&amp;quot; as pass
participant &amp;quot;HTML
অন্তিম&amp;quot; as html

doc -&amp;amp;gt; processor : Analyse document
processor -&amp;amp;gt; pass : Détecte pass:[]
pass -&amp;amp;gt; processor : Retourne HTML brut
processor -&amp;amp;gt; html : Insère sans transformation
html -&amp;amp;gt; html : Navigateur applique styles
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তবায়ন&amp;quot;&amp;gt;বাস্তবায়ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে ইনজেক্ট করার জন্য HTML কাঠামো :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;span style=&amp;quot;display:inline-block;
             width:1em;
             height:1em;
             background:#7952b3;
             vertical-align:middle;
             margin-right:0.5em&amp;quot;&amp;amp;gt;
&amp;amp;lt;/span&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_css_বৈশিষ্ট্যগুলো_ব্যাখ্যা&amp;quot;&amp;gt;CSS বৈশিষ্ট্যগুলো ব্যাখ্যা&amp;lt;/h4&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 75%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সম্পত্তি&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ফাংশন&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;display:inline-block&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি width/height সংজ্ঞায়িত করার অনুমতি দেয়, ইনলাইন প্রবাহে থাকা অবস্থা বজায় রেখে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;width:1em; height:1em&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফন্টের আপেক্ষিক বর্গের আকার (প্রতিক্রিয়াশীল)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;background:#7952b3&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রদর্শনের রং (প্রয়োজনে পরিবর্তনযোগ্য)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;vertical-align:middle&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্গটি পাশের পাঠ্য সঙ্গে Samsajjyo kor&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;margin-right:0.5em&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্গ এবং পাঠ্যের মধ্যে দূরত্ব&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সম্পূর্ণ_উদাহরণ&amp;quot;&amp;gt;সম্পূর্ণ উদাহরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে থিম প্যালেটকে document করার একটি উদাহরণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;== Thème Clair

* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --text-primary: `#212529` (noir très foncé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --accent-color: `#7952b3` (violet Bootstrap)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#61428f;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --accent-hover: `#61428f` (violet plus foncé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --card-bg: `#ffffff` (blanc)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যে নিম্নলিখিত রেন্ডার তৈরি করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;হালকা থিম&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; --bg-primary:`#f8f9fa`(অফ-ওয়াইট)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; --text-primary:`#212529`(অতিশয় গহ্বর কালো)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; --accent-color:`#7952b3`(বাইওলেট Bootstrap)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#61428f;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; --accent-hover:`#61428f`(অधিক গভীর বেগুনি)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; --card-bg:`#ffffff`(সাদা)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অপ্টিমাইজেশন_এবং_ভালো_অনুশীলন&amp;quot;&amp;gt;অপ্টিমাইজেশন এবং ভালো অনুশীলন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_হালকা_রঙ_পরিচালনা&amp;quot;&amp;gt;হালকা রঙ পরিচালনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;খুবই হালকা রঙ (সাদা, খুবই হালকা ধূসর) জন্য, সাদা ব্যাকগ্রাউন্ডে দৃশ্য রাখতে একটি বর্ডার যোগ করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;
background:#ffffff;border:1px solid #ccc;
vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ধূসর বর্ডার (&amp;lt;code&amp;gt;border:1px solid #ccc&amp;lt;/code&amp;gt;) সাদা বর্গের সীমা আঁকা সাদা পৃষ্ঠভূমির উপর অনুমতি দেয়.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বর্গের_আকার_সামঞ্জস্য_করুন&amp;quot;&amp;gt;বর্গের আকার সামঞ্জস্য করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আপনার প্রয়োজন অনুযায়ী বর্গের আকার সামঞ্জস্য করতে পারেন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1.5em;height:1.5em;background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] Grand carré
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:0.8em;height:0.8em;background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] Petit carré&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একক ব্যবহার`em`এটা নিশ্চিত করে যে বর্গগুলো ফন্টের আকারের সাথে সামঞ্জস্যপূর্ণ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ভেরিয়েন্ট_তৈরি_করা&amp;quot;&amp;gt;ভেরিয়েন্ট তৈরি করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিশেষ প্রয়োজনসমূহের জন্য, আপনি বিভিন্ন আকৃতি তৈরি করতে পারেন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_রঙিন_বৃত্ত&amp;quot;&amp;gt;রঙিন বৃত্ত&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#7952b3;border-radius:50%;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] Cercle violet&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_রঙযুক্ত_বর্ডার_والা_বর্গ&amp;quot;&amp;gt;রঙযুক্ত বর্ডার والা বর্গ&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#ffffff;border:3px solid #7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] Bordure violette&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধানের_আর্কিটেকচার&amp;quot;&amp;gt;সমাধানের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;architecture-diagram.svg&amp;quot; alt=&amp;quot;architecture diagram&amp;quot; width=&amp;quot;1747&amp;quot; height=&amp;quot;5444&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সুবিধা_ও_সীমাবদ্ধতা&amp;quot;&amp;gt;সুবিধা ও সীমাবদ্ধতা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সুবিধা&amp;quot;&amp;gt;সুবিধা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✓ &amp;lt;strong&amp;gt;স্বায়ত্ত&amp;lt;/strong&amp;gt; : বাহ্য ফাইলের কোনো নির্ভরতা নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✓ &amp;lt;strong&amp;gt;পোর্টেবিলিটি&amp;lt;/strong&amp;gt; : AsciiDoc সমস্ত প্রসেসরের সাথে কাজ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✓ &amp;lt;strong&amp;gt;সমন্বয়&amp;lt;/strong&amp;gt; : এই রঙের কোড সরাসরি HTML‑এ আছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✓ &amp;lt;strong&amp;gt;প্রত্যাশনশীলতা&amp;lt;/strong&amp;gt; : শৈলীর সম্পূর্ণ কাস্টমাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;✓ &amp;lt;strong&amp;gt;Maintenance&amp;lt;/strong&amp;gt; : হেক্সাডেসিমাল কোডের সহজ পরিবর্তন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✓ &amp;lt;strong&amp;gt;JBake সামঞ্জস্য&amp;lt;/strong&amp;gt; : স্ট্যাটিক সাইট জেনারেটরদের সাথে সঠিকভাবে কাজ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সীমাবদ্ধতাগুলি&amp;quot;&amp;gt;সীমাবদ্ধতাগুলি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শব্দব্যাপ&amp;lt;/strong&amp;gt; : AsciiDoc সোর্সে পুনরাবৃত্তি HTML কোড&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;�✗ &amp;lt;strong&amp;gt;উৎসের পঠনযোগ্যতা&amp;lt;/strong&amp;gt; : উৎসের নথি কম স্পষ্ট&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রবেশযোগ্যতা&amp;lt;/strong&amp;gt; : কোনো স্বভাবিক বিকল্প টেক্সট নেই (ম্যানুয়ালি যোগ করতে হবে)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অ্যাক্সেসযোগ্যতার_উন্নয়ন&amp;quot;&amp;gt;অ্যাক্সেসযোগ্যতার উন্নয়ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্ক্রীন রিডারদের জন্য বর্গগুলোকে অ্যাক্সেসযোগ্য করার জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* pass:[&amp;amp;lt;span role=&amp;quot;img&amp;quot; aria-label=&amp;quot;Couleur violet Bootstrap&amp;quot;
style=&amp;quot;display:inline-block;width:1em;height:1em;background:#7952b3;
vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;]
--accent-color: `#7952b3` (violet Bootstrap)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;గुणাবలీ`role=&amp;quot;img&amp;quot;` et `aria-label`সাহায্য প্রযুক্তিগুলিকে দৃশ্য বিষয়বস্তু বুঝতে এবং বর্ণনা করতে সক্ষম করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাস্তব_উদাহরণ_থিম_ডকুমেন্টেশন&amp;quot;&amp;gt;বাস্তব উদাহরণ: থিম ডকুমেন্টেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে বিভিন্ন বিষয়কে ডকুমেন্ট করার একটি সম্পূর্ণ উদাহরণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Guide des couleurs de l&amp;#39;application

== Thème Clair (`:root`)

* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#f8f9fa;border:1px solid #ccc;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --bg-primary: `#f8f9fa` (blanc cassé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --text-primary: `#212529` (noir très foncé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#7952b3;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --accent-color: `#7952b3` (violet Bootstrap)

== Thème Sombre (`[data-bs-theme=&amp;quot;dark&amp;quot;]`)

* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#212529;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --bg-primary: `#212529` (noir très foncé)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #999;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --text-primary: `#ffffff` (blanc)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#0d6efd;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --accent-color: `#0d6efd` (bleu Bootstrap)

== Thème Contraste Élevé (`[data-bs-theme=&amp;quot;high-contrast&amp;quot;]`)

* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#000000;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --bg-primary: `#000000` (noir)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#ffffff;border:1px solid #000;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --text-primary: `#ffffff` (blanc)
* pass:[&amp;amp;lt;span style=&amp;quot;display:inline-block;width:1em;height:1em;background:#00ff00;vertical-align:middle;margin-right:0.5em&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;] --accent-color: `#00ff00` (vert vif)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;L&amp;amp;#8217;injection HTML via la macro ``d&amp;amp;#8217;AsciiDoc টেকনিকাল ডকুমেন্টেশনে রঙের নমুনা দেখাতে একটি সুন্দর ও ব্যাবহারিক সমাধান প্রদান করে। যদিও এটি কিছুটা শব্দবহুল, তবে এই পদ্ধতি সর্বোত্তম পোর্টেবিলিটি এবং সহজ রক্ষণাবেক্ষণ নিশ্চিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি কোনো বাহ্যিক কনফিগারেশনের প্রয়োজন হয় না এবং কোনো অতিরিক্ট স্টাইলশীটের প্রয়োজন হয় না; এটি জেবেক এবং সমস্ত স্ট্যান্ডার্ড ASCII doc প্রসেসরের সাথে তাত্ক্ষণিকভাবে কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একবার আপনি আপনার প্রথম রঙিন বর্গ তৈরি করলে, আপনাকে শুধু HTML কোডটি কপি-পেস্ট করতে হবে এবং হেক্সাডেসিমাল কোড পরিবর্তন করে দ্রুত একটি সম্পূর্ণ প্যালেট তৈরি করতে পারবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কৌশলটি কাস্টমাইজড দৃশ্য রেন্ডারিং প্রয়োজনীয় অন্য ব্যবহার ক্ষেত্রে প্রসারিত করা যেতে পারে: আইকন, বেজ, সিম্পল গ্রাফ, অথবা যেকোনো দৃশ্য উপাদান যেখানে শৈলীর সঠিক নিয়ন্ত্রণ প্রয়োজন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.asciidoctor.org/asciidoc/latest/pass/pass-macro/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;AsciiDoc ডকুমেন্টেশন: পাস ম্যাকরো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://jbake.org/docs/2.6.7/&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;JBake ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://developer.mozilla.org/fr/docs/Web/CSS/color_value&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;MDN : CSS রঙের মান&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;প্রকাশিত নিবন্ধ 2025-11-01&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Thymeleaf-সহ একটি স্ট্যাটিক JBake সাইটের আন্তর্জাতিককরণ</title>
            <link >https://cheroliv.com//blog/2025/0095_i18n-site-statique-jbake-thymeleaf_post.html</link>
            <pubDate>Mon, 20 Oct 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0095_i18n-site-statique-jbake-thymeleaf_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহারের_ক্ষেত্রের_ডায়াগ্রাম_use_case&amp;quot;&amp;gt;ব্যবহারের ক্ষেত্রের ডায়াগ্রাম (Use Case)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আন্তর্জাতিকীকরণের_আর্কিটেকচার&amp;quot;&amp;gt;আন্তর্জাতিকীকরণের আর্কিটেকচার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সंরচনা_চিত্র_ফাইল_সংগঠন&amp;quot;&amp;gt;সंরচনা চিত্র (ফাইল সংগঠন)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_পদ্ধতি_কেন&amp;quot;&amp;gt;এই পদ্ধতি কেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কম্পোনেন্ট_ডায়াগ্রাম&amp;quot;&amp;gt;কম্পোনেন্ট ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_থাইমলীফ_ব্যবহার_করে_টেমপ্লেটিংয়ের_i18n&amp;quot;&amp;gt;থাইমলীফ ব্যবহার করে টেমপ্লেটিংয়ের I18n&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বার্তা_ফাইলের_গঠন&amp;quot;&amp;gt;বার্তা ফাইলের গঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বার্তা_ফাইলগুলোর_বিষয়বস্তু&amp;quot;&amp;gt;বার্তা ফাইলগুলোর বিষয়বস্তু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টেমপ্লেটে_ব্যবহার&amp;quot;&amp;gt;টেমপ্লেটে ব্যবহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিকোয়েন্স_ডায়াগ্রাম_i18n_সমাধান&amp;quot;&amp;gt;সিকোয়েন্স ডায়াগ্রাম - i18N সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jbake_এ_লোকেল_কনফিগারেশন&amp;quot;&amp;gt;JBake-এ লোকেল কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_i18n_দাস্তব্য_ফোল্ডার_অনুযায়ী_সংগঠন&amp;quot;&amp;gt;I18n দাস্তব্য : ফোল্ডার অনুযায়ী সংগঠন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রবাহ_ডায়াগ্রাম_flow_উত্পাদন&amp;quot;&amp;gt;প্রবাহ ডায়াগ্রাম (Flow) - উত্পাদন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফোল্ডার_গঠন&amp;quot;&amp;gt;ফোল্ডার গঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_পদ্ধতির_সুবিধা&amp;quot;&amp;gt;এই পদ্ধতির সুবিধা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লেখের_মেটাডেটা&amp;quot;&amp;gt;লেখের মেটাডেটা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_url_কনফিগারেশন&amp;quot;&amp;gt;URL কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বহুভাষিক_প্রদর্শনের_জন্য_টেমপ্লেটস&amp;quot;&amp;gt;বহুভাষিক প্রদর্শনের জন্য টেমপ্লেটস&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিবন্ধ_টেমপ্লেট_ভাষা_নির্বাচকের_সাথে&amp;quot;&amp;gt;নিবন্ধ টেমপ্লেট ভাষা নির্বাচকের সাথে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাষা_অনুযায়ী_ফিল্টারকৃত_সূচক&amp;quot;&amp;gt;ভাষা অনুযায়ী ফিল্টারকৃত সূচক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাষার_মধ্যে_নেভিগেশন&amp;quot;&amp;gt;ভাষার মধ্যে নেভিগেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিশ্বীয়_ভাষা_সিলেক্টর&amp;quot;&amp;gt;বিশ্বীয় ভাষা সিলেক্টর&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রবাহ_ডাইএগ্রাম_ব্যবহারকারী_পাঠ&amp;quot;&amp;gt;প্রবাহ ডাইএগ্রাম - ব্যবহারকারী পাঠ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিলেক্টরের_জন্য_css_শৈলী&amp;quot;&amp;gt;সিলেক্টরের জন্য CSS শৈলী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাষানুসারে_rss_ফিড&amp;quot;&amp;gt;ভাষানুসারে RSS ফিড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাল_অনুশীলন_এবং_টিপস&amp;quot;&amp;gt;ভাল অনুশীলন এবং টিপস&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_1_আর্টিকেল_আইডেন্টিফায়ারের_সামঞ্জস্য&amp;quot;&amp;gt;1. আর্টিকেল আইডেন্টিফায়ারের সামঞ্জস্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_সামঞ্জস্যপূর্ণ_তারিখ&amp;quot;&amp;gt;2. সামঞ্জস্যপূর্ণ তারিখ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_বহুভাষিক_ট্যাগ&amp;quot;&amp;gt;3. বহুভাষিক ট্যাগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_অনুবাদ_না_ਹੋয়া_লেখের_ব্যবস্থাপানা&amp;quot;&amp;gt;4. অনুবাদ না ਹੋয়া লেখের ব্যবস্থাপানা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_5_বহুভাষিক_সাইটম্যাপ&amp;quot;&amp;gt;5. বহুভাষিক সাইটম্যাপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রসারণ_চিত্র&amp;quot;&amp;gt;প্রসারণ চিত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি স্ট্যাটিক সাইটের আন্তর্জাতিকীকরণ (i18n) প্রথমে জটিল মনে হতে পারে, কিন্তু JBake Thymeleaf সহ সংযুক্ত করলে বহুভাষিক সাইট তৈরি করতে সুগম সমাধান প্রদান করে। এই পোস্টে, আমি আপনাকে দেখাব কিভাবে আমি আমার ব্লগে i18n প্রয়োগ করেছি, টেমপ্লেটিং এবং বিভিন্ন ভাষায় পোস্ট পরিচালনা উভয় দিকটি কভার করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহারের_ক্ষেত্রের_ডায়াগ্রাম_use_case&amp;quot;&amp;gt;ব্যবহারের ক্ষেত্রের ডায়াগ্রাম (Use Case)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-7ce7a84d6b45244a13c97c4ae2f73e0c.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;665&amp;quot; height=&amp;quot;462&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আন্তর্জাতিকীকরণের_আর্কিটেকচার&amp;quot;&amp;gt;আন্তর্জাতিকীকরণের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের পদ্ধতি দুটি স্তম্ভের ভিত্তিতে আধারিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;টেমপ্লেটিংয়ের i18n&amp;lt;/strong&amp;gt;: Thymeleaf বার্তা ফাইল ব্যবহার করে ইন্টারফেস উপাদান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিষয়বস্তুর আন্তর্জাতীकरण&amp;lt;/strong&amp;gt;ভাষা অনুযায়ী আর্টিকেলগুলোকে একটি বিশেষ ফোল্ডার গঠনে সংগঠিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সंরচনা_চিত্র_ফাইল_সংগঠন&amp;quot;&amp;gt;সंরচনা চিত্র (ফাইল সংগঠন)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-2f100fc3ec2ec37f9556818cdc246602.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;188&amp;quot; height=&amp;quot;513&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এই_পদ্ধতি_কেন&amp;quot;&amp;gt;এই পদ্ধতি কেন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বিভাজনটি অনুমতি দেয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ভাষার নির্বিশেষে ইন্টারফেসে সামঞ্জস্য বজায় রাখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কন্টেন্ট ও অর্টিকেলের অনুবাদগুলোকে স্বতন্ত্রভাবে পরিচালনা করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নতুন ভাষা যোগকরণকে সহজ করা, কোনো গুরুত্বপূর্ণ রিফ্যাক্টরিং ছাড়াই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কিছু ভাষায় শুধুমাত্র উপলব্ধ নিবন্ধ অনুমতি দেওয়া&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কম্পোনেন্ট_ডায়াগ্রাম&amp;quot;&amp;gt;কম্পোনেন্ট ডায়াগ্রাম&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-a56540821dc46b6393dd7373ffda486b.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;1771&amp;quot; height=&amp;quot;477&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_থাইমলীফ_ব্যবহার_করে_টেমপ্লেটিংয়ের_i18n&amp;quot;&amp;gt;থাইমলীফ ব্যবহার করে টেমপ্লেটিংয়ের I18n&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বার্তা_ফাইলের_গঠন&amp;quot;&amp;gt;বার্তা ফাইলের গঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম ধাপ হল প্রতিটি সমর্থিত ভাষার জন্য প্রপার্টি ফাইলগুলো তৈরি করা:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;src/jbake/templates/
├── messages.properties        # Fallback par défaut
├── messages_fr.properties     # Français
├── messages_en.properties     # Anglais
└── messages_de.properties     # Allemand&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বার্তা_ফাইলগুলোর_বিষয়বস্তু&amp;quot;&amp;gt;বার্তা ফাইলগুলোর বিষয়বস্তু&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে একটি ফাইলের উদাহরণ`messages_fr.properties`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;# Navigation
nav.home=Accueil
nav.blog=Blog
nav.about=À propos
nav.contact=Contact

# Articles
article.readmore=Lire la suite
article.published=Publié le
article.tags=Étiquettes
article.also.available=Également disponible en

# Interface
site.title=Mon Blog Technique
site.description=Partage de connaissances et expériences
footer.copyright=© 2025 Tous droits réservés
search.placeholder=Rechercher un article...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং এর ইংরেজি সমতুল্য`messages_en.properties` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;# Navigation
nav.home=Home
nav.blog=Blog
nav.about=About
nav.contact=Contact

# Articles
article.readmore=Read more
article.published=Published on
article.tags=Tags
article.also.available=Also available in

# Interface
site.title=My Tech Blog
site.description=Sharing knowledge and experiences
footer.copyright=© 2025 All rights reserved
search.placeholder=Search articles...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_টেমপ্লেটে_ব্যবহার&amp;quot;&amp;gt;টেমপ্লেটে ব্যবহার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার Thymeleaf টেমপ্লেটগুলো, সিনট্যাক্সটি ব্যবহার করুন`#{}`বার্তা অ্যাক্সেস করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;title th:text=&amp;quot;#{site.title}&amp;quot;&amp;amp;gt;Mon Blog&amp;amp;lt;/title&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;description&amp;quot; th:content=&amp;quot;#{site.description}&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;
&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;nav&amp;amp;gt;
        &amp;amp;lt;a th:href=&amp;quot;@{/}&amp;quot; th:text=&amp;quot;#{nav.home}&amp;quot;&amp;amp;gt;Accueil&amp;amp;lt;/a&amp;amp;gt;
        &amp;amp;lt;a th:href=&amp;quot;@{/blog/}&amp;quot; th:text=&amp;quot;#{nav.blog}&amp;quot;&amp;amp;gt;Blog&amp;amp;lt;/a&amp;amp;gt;
        &amp;amp;lt;a th:href=&amp;quot;@{/about.html}&amp;quot; th:text=&amp;quot;#{nav.about}&amp;quot;&amp;amp;gt;À propos&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;/nav&amp;amp;gt;

    &amp;amp;lt;footer&amp;amp;gt;
        &amp;amp;lt;p th:text=&amp;quot;#{footer.copyright}&amp;quot;&amp;amp;gt;Copyright&amp;amp;lt;/p&amp;amp;gt;
    &amp;amp;lt;/footer&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিকোয়েন্স_ডায়াগ্রাম_i18n_সমাধান&amp;quot;&amp;gt;সিকোয়েন্স ডায়াগ্রাম - i18N সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 5) ]

@startuml
actor Auteur
participant JBake
participant &amp;quot;AsciiDoc\nParser&amp;quot; as parser
participant &amp;quot;Thymeleaf
^^^^^
 Syntax Error? (Assumed diagram type: sequence)

@startuml
actor Auteur
participant JBake
participant &amp;quot;AsciiDoc\nParser&amp;quot; as parser
participant &amp;quot;Thymeleaf
ইঞ্জিন&amp;quot; as thymeleaf
participant &amp;quot;I18n
সমাধানকারী&amp;quot; as i18n
database &amp;quot;messages_*.properties&amp;quot; as messages

Auteur -&amp;amp;gt; JBake: jbake -b
activate JBake

JBake -&amp;amp;gt; parser: Lire article.fr.adoc
activate parser
parser --&amp;amp;gt; JBake: Contenu + métadonnées\n(lang=fr, article-id=xyz)
deactivate parser

JBake -&amp;amp;gt; parser: Lire article.en.adoc
activate parser
parser --&amp;amp;gt; JBake: Contenu + métadonnées\n(lang=en, article-id=xyz)
deactivate parser

JBake -&amp;amp;gt; thymeleaf: Générer page FR
activate thymeleaf

thymeleaf -&amp;amp;gt; i18n: Résoudre #{nav.home}
activate i18n
i18n -&amp;amp;gt; messages: Lire messages_fr.properties
messages --&amp;amp;gt; i18n: &amp;quot;স্বাগত&amp;quot;
i18n --&amp;amp;gt; thymeleaf: &amp;quot;স্বাগত&amp;quot;
deactivate i18n

thymeleaf -&amp;amp;gt; JBake: Rechercher traductions\n(article-id=xyz, lang!=fr)
JBake --&amp;amp;gt; thymeleaf: article.en.html trouvé

thymeleaf --&amp;amp;gt; JBake: /fr/blog/article.html
deactivate thymeleaf

JBake -&amp;amp;gt; thymeleaf: Générer page EN
activate thymeleaf

thymeleaf -&amp;amp;gt; i18n: Résoudre #{nav.home}
activate i18n
i18n -&amp;amp;gt; messages: Lire messages_en.properties
messages --&amp;amp;gt; i18n: &amp;quot;বাড়ি&amp;quot;
i18n --&amp;amp;gt; thymeleaf: &amp;quot;বাড়ি&amp;quot;
deactivate i18n

thymeleaf -&amp;amp;gt; JBake: Rechercher traductions\n(article-id=xyz, lang!=en)
JBake --&amp;amp;gt; thymeleaf: article.fr.html trouvé

thymeleaf --&amp;amp;gt; JBake: /en/blog/article.html
deactivate thymeleaf

JBake --&amp;amp;gt; Auteur: Site généré
deactivate JBake
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_jbake_এ_লোকেল_কনফিগারেশন&amp;quot;&amp;gt;JBake-এ লোকেল কনফিগারেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার ফাইলে`jbake.properties`, ডিফল্ট লোকাল সেট করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;# Locale par défaut
thymeleaf.locale=fr

# Encodage
template.encoding=UTF-8&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_i18n_দাস্তব্য_ফোল্ডার_অনুযায়ী_সংগঠন&amp;quot;&amp;gt;I18n দাস্তব্য : ফোল্ডার অনুযায়ী সংগঠন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রবাহ_ডায়াগ্রাম_flow_উত্পাদন&amp;quot;&amp;gt;প্রবাহ ডায়াগ্রাম (Flow) - উত্পাদন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-e551e46b096efcd0cd177c17bf5a0dfe.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;285&amp;quot; height=&amp;quot;1034&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফোল্ডার_গঠন&amp;quot;&amp;gt;ফোল্ডার গঠন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলের নামে উপসর্গ ব্যবহার করার পরিবর্তে, আমি ফোল্ডার-ভিত্তিক সংগঠন বেছে নিয়েছি, যা আরও স্পষ্ট এবং রক্ষণযোগ্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;content/blog/
├── 2024/
│   ├── fr/
│   │   ├── introduction-jbake.adoc
│   │   ├── guide-thymeleaf.adoc
│   │   └── astuces-asciidoc.adoc
│   └── en/
│       ├── introduction-jbake.adoc
│       ├── thymeleaf-guide.adoc
│       └── asciidoc-tips.adoc
└── 2025/
    ├── fr/
    │   └── internationalisation-jbake.adoc
    └── en/
        └── jbake-internationalization.adoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এই_পদ্ধতির_সুবিধা&amp;quot;&amp;gt;এই পদ্ধতির সুবিধা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই গঠনে कई সুবিধা আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্পষ্ট বিচ্ছেদ&amp;lt;/strong&amp;gt;: প্রতিটি ভাষার নিজস্ব স্থান আছে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নমনীয় নামকরণ&amp;lt;/strong&amp;gt;: ফাইলগুলো ভাষার অনুযায়ী বিভিন্ন নাম থাকতে পারে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্কেলেবিলিটি&amp;lt;/strong&amp;gt;একটি নতুন ভাষা যোগ করা সহজ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রাকৃতিক সংগঠন&amp;lt;/strong&amp;gt;: JBake-কে সময়তালিক যুক্তি অনুসরণ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লেখের_মেটাডেটা&amp;quot;&amp;gt;লেখের মেটাডেটা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি নিবন্ধে মেটাডেটা থাকতে হবে যাতে অনুবাদগুলির মধ্যে লিঙ্ক তৈরি করা যায়। এখানে একটি উদাহরণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফরাসি সংস্করণ&amp;lt;/strong&amp;gt;(Note: I output nothing because no source text was provided.)&amp;lt;code&amp;gt;2025/fr/internationalisation-jbake.adoc&amp;lt;/code&amp;gt;) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Internationalisation d&amp;#39;un site statique JBake
:jbake-type: post
:jbake-status: published
:jbake-date: 2025-10-20
:jbake-lang: fr
:jbake-article-id: jbake-i18n-thymeleaf
:jbake-tags: jbake, thymeleaf, i18n
:jbake-description: Guide pour mettre en place l&amp;#39;i18n avec JBake&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ইংরেজি সংস্করণ&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;2025/en/jbake-internationalization.adoc&amp;lt;/code&amp;gt;) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Internationalizing a JBake Static Site
:jbake-type: post
:jbake-status: published
:jbake-date: 2025-10-20
:jbake-lang: en
:jbake-article-id: jbake-i18n-thymeleaf
:jbake-tags: jbake, thymeleaf, i18n
:jbake-description: Guide to implement i18n with JBake&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নোট: বৈশিষ্ট্য`:jbake-article-id:`গুরুত্বপূর্ণ : এটি একই নিবেদের বিভিন্ন অনুবাদকে যুক্ত করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_url_কনফিগারেশন&amp;quot;&amp;gt;URL কনফিগারেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মধ্যে`jbake.properties`, URL প্যাটার্নকে ভাষা অন্তর্ভুক্ত করতে কনফিগার করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;# Pattern d&amp;#39;URL avec langue
post.permalink.pattern=:lang/blog/:year/:name.html

# Langue par défaut
site.default.lang=fr&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি টাইপের URL তৈরি করবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;/fr/blog/2025/internationalisation-jbake.html&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;/en/blog/2025/jbake-internationalization.html&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বহুভাষিক_প্রদর্শনের_জন্য_টেমপ্লেটস&amp;quot;&amp;gt;বহুভাষিক প্রদর্শনের জন্য টেমপ্লেটস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিবন্ধ_টেমপ্লেট_ভাষা_নির্বাচকের_সাথে&amp;quot;&amp;gt;নিবন্ধ টেমপ্লেট ভাষা নির্বাচকের সাথে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি টেমপ্লেট তৈরি করুন`post.html`উপলব্ধ অনুবাদগুলো দেখায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;title th:text=&amp;quot;${content.title}&amp;quot;&amp;amp;gt;Article&amp;amp;lt;/title&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;
&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;article&amp;amp;gt;
        &amp;amp;lt;header&amp;amp;gt;
            &amp;amp;lt;h1 th:text=&amp;quot;${content.title}&amp;quot;&amp;amp;gt;Titre&amp;amp;lt;/h1&amp;amp;gt;

            &amp;amp;lt;div class=&amp;quot;article-meta&amp;quot;&amp;amp;gt;
                &amp;amp;lt;time th:text=&amp;quot;${#dates.format(content.date, &amp;#39;dd MMMM yyyy&amp;#39;)}&amp;quot;
                      th:attr=&amp;quot;datetime=${#dates.format(content.date, &amp;#39;yyyy-MM-dd&amp;#39;)}&amp;quot;&amp;amp;gt;
                    Date
                &amp;amp;lt;/time&amp;amp;gt;

                &amp;amp;lt;!-- Sélecteur de traductions --&amp;amp;gt;
                &amp;amp;lt;div class=&amp;quot;translations&amp;quot; th:if=&amp;quot;${content[&amp;#39;article-id&amp;#39;]}&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;span th:text=&amp;quot;#{article.also.available}&amp;quot;&amp;amp;gt;Aussi disponible en :&amp;amp;lt;/span&amp;amp;gt;
                    &amp;amp;lt;ul class=&amp;quot;language-list&amp;quot;&amp;amp;gt;
                        &amp;amp;lt;li th:each=&amp;quot;post : ${published_posts}&amp;quot;
                            th:if=&amp;quot;${post[&amp;#39;article-id&amp;#39;] == content[&amp;#39;article-id&amp;#39;] and post.lang != content.lang}&amp;quot;&amp;amp;gt;
                            &amp;amp;lt;a th:href=&amp;quot;${post.uri}&amp;quot;
                               th:text=&amp;quot;${post.lang.toUpperCase()}&amp;quot;&amp;amp;gt;
                                LANG
                            &amp;amp;lt;/a&amp;amp;gt;
                        &amp;amp;lt;/li&amp;amp;gt;
                    &amp;amp;lt;/ul&amp;amp;gt;
                &amp;amp;lt;/div&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/header&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;content&amp;quot; th:utext=&amp;quot;${content.body}&amp;quot;&amp;amp;gt;
            Contenu de l&amp;#39;article
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;footer class=&amp;quot;article-footer&amp;quot;&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;tags&amp;quot; th:if=&amp;quot;${content.tags}&amp;quot;&amp;amp;gt;
                &amp;amp;lt;span th:text=&amp;quot;#{article.tags}&amp;quot;&amp;amp;gt;Étiquettes :&amp;amp;lt;/span&amp;amp;gt;
                &amp;amp;lt;span th:each=&amp;quot;tag : ${content.tags}&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;a th:href=&amp;quot;@{/tags/{tag}.html(tag=${tag})}&amp;quot;
                       th:text=&amp;quot;${tag}&amp;quot;&amp;amp;gt;tag&amp;amp;lt;/a&amp;amp;gt;
                &amp;amp;lt;/span&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/footer&amp;amp;gt;
    &amp;amp;lt;/article&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ভাষা_অনুযায়ী_ফিল্টারকৃত_সূচক&amp;quot;&amp;gt;ভাষা অনুযায়ী ফিল্টারকৃত সূচক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি ভাষার জন্য ইন্ডেক্স টেমপ্লেট তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;index.html&amp;lt;/strong&amp;gt;(ফরাসি সূচী) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;title th:text=&amp;quot;#{site.title}&amp;quot;&amp;amp;gt;Mon Blog&amp;amp;lt;/title&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;
&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;main&amp;amp;gt;
        &amp;amp;lt;h1 th:text=&amp;quot;#{nav.blog}&amp;quot;&amp;amp;gt;Blog&amp;amp;lt;/h1&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;articles-list&amp;quot;&amp;amp;gt;
            &amp;amp;lt;article th:each=&amp;quot;post : ${published_posts}&amp;quot;
                     th:if=&amp;quot;${post.lang == &amp;#39;fr&amp;#39;}&amp;quot;&amp;amp;gt;
                &amp;amp;lt;h2&amp;amp;gt;
                    &amp;amp;lt;a th:href=&amp;quot;${post.uri}&amp;quot; th:text=&amp;quot;${post.title}&amp;quot;&amp;amp;gt;Titre&amp;amp;lt;/a&amp;amp;gt;
                &amp;amp;lt;/h2&amp;amp;gt;
                &amp;amp;lt;time th:text=&amp;quot;${#dates.format(post.date, &amp;#39;dd MMMM yyyy&amp;#39;)}&amp;quot;&amp;amp;gt;
                    Date
                &amp;amp;lt;/time&amp;amp;gt;
                &amp;amp;lt;p th:text=&amp;quot;${post.description}&amp;quot;&amp;amp;gt;Description&amp;amp;lt;/p&amp;amp;gt;
                &amp;amp;lt;a th:href=&amp;quot;${post.uri}&amp;quot; th:text=&amp;quot;#{article.readmore}&amp;quot;&amp;amp;gt;
                    Lire la suite
                &amp;amp;lt;/a&amp;amp;gt;
            &amp;amp;lt;/article&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;index_en.html&amp;lt;/strong&amp;gt;(ইंग्लিশ ইন্ডেক্স) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;title th:text=&amp;quot;#{site.title}&amp;quot;&amp;amp;gt;My Blog&amp;amp;lt;/title&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;
&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;main&amp;amp;gt;
        &amp;amp;lt;h1 th:text=&amp;quot;#{nav.blog}&amp;quot;&amp;amp;gt;Blog&amp;amp;lt;/h1&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;articles-list&amp;quot;&amp;amp;gt;
            &amp;amp;lt;article th:each=&amp;quot;post : ${published_posts}&amp;quot;
                     th:if=&amp;quot;${post.lang == &amp;#39;en&amp;#39;}&amp;quot;&amp;amp;gt;
                &amp;amp;lt;h2&amp;amp;gt;
                    &amp;amp;lt;a th:href=&amp;quot;${post.uri}&amp;quot; th:text=&amp;quot;${post.title}&amp;quot;&amp;amp;gt;Title&amp;amp;lt;/a&amp;amp;gt;
                &amp;amp;lt;/h2&amp;amp;gt;
                &amp;amp;lt;time th:text=&amp;quot;${#dates.format(post.date, &amp;#39;dd MMMM yyyy&amp;#39;)}&amp;quot;&amp;amp;gt;
                    Date
                &amp;amp;lt;/time&amp;amp;gt;
                &amp;amp;lt;p th:text=&amp;quot;${post.description}&amp;quot;&amp;amp;gt;Description&amp;amp;lt;/p&amp;amp;gt;
                &amp;amp;lt;a th:href=&amp;quot;${post.uri}&amp;quot; th:text=&amp;quot;#{article.readmore}&amp;quot;&amp;amp;gt;
                    Read more
                &amp;amp;lt;/a&amp;amp;gt;
            &amp;amp;lt;/article&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভাষার_মধ্যে_নেভিগেশন&amp;quot;&amp;gt;ভাষার মধ্যে নেভিগেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশ্বীয়_ভাষা_সিলেক্টর&amp;quot;&amp;gt;বিশ্বীয় ভাষা সিলেক্টর&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রবাহ_ডাইএগ্রাম_ব্যবহারকারী_পাঠ&amp;quot;&amp;gt;প্রবাহ ডাইএগ্রাম - ব্যবহারকারী পাঠ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-35c457cfbd1b9be0156f6bbbfb2925d1.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;494&amp;quot; height=&amp;quot;761&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার মূল টেমপ্লেটে একটি ভাষা নির্বাচক যোগ করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;nav class=&amp;quot;language-switcher&amp;quot;&amp;amp;gt;
    &amp;amp;lt;a href=&amp;quot;/index.html&amp;quot;
       th:classappend=&amp;quot;${content.lang == &amp;#39;fr&amp;#39;} ? &amp;#39;active&amp;#39;&amp;quot;
       title=&amp;quot;Français&amp;quot;&amp;amp;gt;
        🇫🇷 FR
    &amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;a href=&amp;quot;/en/index.html&amp;quot;
       th:classappend=&amp;quot;${content.lang == &amp;#39;en&amp;#39;} ? &amp;#39;active&amp;#39;&amp;quot;
       title=&amp;quot;English&amp;quot;&amp;amp;gt;
        🇬🇧 EN
    &amp;amp;lt;/a&amp;amp;gt;
&amp;amp;lt;/nav&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিলেক্টরের_জন্য_css_শৈলী&amp;quot;&amp;gt;সিলেক্টরের জন্য CSS শৈলী&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;.language-switcher {
    display: flex;
    gap: 1rem;
    padding: 0.5rem;
    background: #f5f5f5;
    border-radius: 4px;
}

.language-switcher a {
    padding: 0.5rem 1rem;
    text-decoration: none;
    color: #333;
    border-radius: 4px;
    transition: background 0.2s;
}

.language-switcher a:hover {
    background: #e0e0e0;
}

.language-switcher a.active {
    background: #007bff;
    color: white;
}

.translations {
    margin: 1rem 0;
    padding: 1rem;
    background: #f8f9fa;
    border-left: 4px solid #007bff;
}

.language-list {
    display: inline-flex;
    gap: 0.5rem;
    list-style: none;
    padding: 0;
    margin: 0;
}

.language-list li::after {
    content: &amp;quot;•&amp;quot;;
    margin-left: 0.5rem;
}

.language-list li:last-child::after {
    content: &amp;quot;&amp;quot;;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভাষানুসারে_rss_ফিড&amp;quot;&amp;gt;ভাষানুসারে RSS ফিড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ভাষাভিত্তিকভাবে আলাদা-আলাদা RSS ফিড পেতে, আলাদা টেমপ্লেট তৈরি করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;feed.xml&amp;lt;/strong&amp;gt;(ফ্রাঞ্চ প্রবাহ) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xml hljs&amp;quot; data-lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;
&amp;amp;lt;rss version=&amp;quot;2.0&amp;quot; xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
    &amp;amp;lt;channel&amp;amp;gt;
        &amp;amp;lt;title th:text=&amp;quot;#{site.title}&amp;quot;&amp;amp;gt;Mon Blog&amp;amp;lt;/title&amp;amp;gt;
        &amp;amp;lt;link th:text=&amp;quot;${config.site_host}&amp;quot;&amp;amp;gt;http://example.com&amp;amp;lt;/link&amp;amp;gt;
        &amp;amp;lt;description th:text=&amp;quot;#{site.description}&amp;quot;&amp;amp;gt;Description&amp;amp;lt;/description&amp;amp;gt;
        &amp;amp;lt;language&amp;amp;gt;fr&amp;amp;lt;/language&amp;amp;gt;

        &amp;amp;lt;item th:each=&amp;quot;post : ${published_posts}&amp;quot;
              th:if=&amp;quot;${post.lang == &amp;#39;fr&amp;#39;}&amp;quot;&amp;amp;gt;
            &amp;amp;lt;title th:text=&amp;quot;${post.title}&amp;quot;&amp;amp;gt;Titre&amp;amp;lt;/title&amp;amp;gt;
            &amp;amp;lt;link th:text=&amp;quot;${config.site_host + post.uri}&amp;quot;&amp;amp;gt;Lien&amp;amp;lt;/link&amp;amp;gt;
            &amp;amp;lt;pubDate th:text=&amp;quot;${#dates.format(post.date, &amp;#39;EEE, dd MMM yyyy HH:mm:ss Z&amp;#39;)}&amp;quot;&amp;amp;gt;
                Date
            &amp;amp;lt;/pubDate&amp;amp;gt;
            &amp;amp;lt;description th:text=&amp;quot;${post.description}&amp;quot;&amp;amp;gt;Description&amp;amp;lt;/description&amp;amp;gt;
        &amp;amp;lt;/item&amp;amp;gt;
    &amp;amp;lt;/channel&amp;amp;gt;
&amp;amp;lt;/rss&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভাল_অনুশীলন_এবং_টিপস&amp;quot;&amp;gt;ভাল অনুশীলন এবং টিপস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_1_আর্টিকেল_আইডেন্টিফায়ারের_সামঞ্জস্য&amp;quot;&amp;gt;1. আর্টিকেল আইডেন্টিফায়ারের সামঞ্জস্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিশ্চিত করুন যে`:jbake-article-id:`একই নিবন্ধের সকল অনুবাদেই একই। একই ফরম্যাট ব্যবহার করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিশ্বব্যাপীকরণের জন্য ইংরেজি শনাক্তকারী ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শব্দগুলোকে আলাদা করতে হাইফেন ব্যবহার করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিশেষ অক্ষর এড়িয়ে চলুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_সামঞ্জস্যপূর্ণ_তারিখ&amp;quot;&amp;gt;2. সামঞ্জস্যপূর্ণ তারিখ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি নিবন্ধের সমস্ত অনুবাদকে একই প্রকাশের তারিখ রাখতে হবে।&amp;lt;code&amp;gt;:jbake-date:&amp;lt;/code&amp;gt;) এইটি সাজানুক্রমে ও কালানুক্রমিক প্রদর্শনকে সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_3_বহুভাষিক_ট্যাগ&amp;quot;&amp;gt;3. বহুভাষিক ট্যাগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ট্যাগের জন্য, আপনার দুটি বিকল্প আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিকল্প ১: সার্বজনীন ট্যাগ ইংরেজিতে&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;:jbake-tags: java, spring-boot, microservices&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অপশন ২ : ম্যাপিং ব্যবহার করে অনুবাদিত ট্যাগ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;# Version française
:jbake-tags: java, spring-boot, microservices

# Version anglaise
:jbake-tags: java, spring-boot, microservices&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_4_অনুবাদ_না_ਹੋয়া_লেখের_ব্যবস্থাপানা&amp;quot;&amp;gt;4. অনুবাদ না ਹੋয়া লেখের ব্যবস্থাপানা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সব लेख অনুবাদ করা বাধ্যতামূলক নয়। যদি কোনো लेख শুধুমাত্র কোনো একটি ভাষায় থাকে, তাহলে সে শুধু অন্য ভাষার তালিকায় দেখাবে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_5_বহুভাষিক_সাইটম্যাপ&amp;quot;&amp;gt;5. বহুভাষিক সাইটম্যাপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সব ভাষা অন্তর্ভুক্ত একটি সাইটম্যাপ তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-xml hljs&amp;quot; data-lang=&amp;quot;xml&amp;quot;&amp;gt;&amp;amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;amp;gt;
&amp;amp;lt;urlset xmlns=&amp;quot;http://www.sitemaps.org/schemas/sitemap/0.9&amp;quot;
        xmlns:xhtml=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;
        xmlns:th=&amp;quot;http://www.thymeleaf.org&amp;quot;&amp;amp;gt;
    &amp;amp;lt;url th:each=&amp;quot;post : ${published_posts}&amp;quot;&amp;amp;gt;
        &amp;amp;lt;loc th:text=&amp;quot;${config.site_host + post.uri}&amp;quot;&amp;amp;gt;URL&amp;amp;lt;/loc&amp;amp;gt;
        &amp;amp;lt;lastmod th:text=&amp;quot;${#dates.format(post.date, &amp;#39;yyyy-MM-dd&amp;#39;)}&amp;quot;&amp;amp;gt;Date&amp;amp;lt;/lastmod&amp;amp;gt;

        &amp;amp;lt;!-- Liens alternatifs pour les traductions --&amp;amp;gt;
        &amp;amp;lt;xhtml:link th:each=&amp;quot;translation : ${published_posts}&amp;quot;
                    th:if=&amp;quot;${translation[&amp;#39;article-id&amp;#39;] == post[&amp;#39;article-id&amp;#39;] and translation.lang != post.lang}&amp;quot;
                    rel=&amp;quot;alternate&amp;quot;
                    th:attr=&amp;quot;hreflang=${translation.lang},href=${config.site_host + translation.uri}&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;/url&amp;amp;gt;
&amp;amp;lt;/urlset&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি JBake সাইটকে Thymeleaf দিয়ে আন্তর্জাতিকীকরণ একটি মজবুদ و রক্ষণযোগ্য পদ্ধতি। টেমপ্লেটিং থেকে আই১৮এনকে (বার্তা ফাইল ব্যবহার করে) বিচ্ছिन्न করে এবং বিষয়বস্তু سے আই১৮এনকে (ফোল্ডার সংগঠন ব্যবহার করে) বিচ্ছিন্ন করে, আপনি একটি নমনীয় সিস্টেম পাবেন যা সহজে বিকশিত হতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মনে রাখার জন্য গুরুত্বপূর্ণ পয়েন্টগুলো:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বার্তা ফাইলগুলো Thymeleaf&amp;lt;/strong&amp;gt;ব্যবহারকারী ইন্টারফেসের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফোল্ডার অনুযায়ী সংগঠন&amp;lt;/strong&amp;gt;(বছর/ভাষা) নিবন্ধের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অর্টিকেল আইডি&amp;lt;/strong&amp;gt;অনুবাদগুলি সংযুক্ত করতে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নির্ধারিত টেমপ্লেট&amp;lt;/strong&amp;gt;প্রত্যেক ভাষার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্পষ্ট URL&amp;lt;/strong&amp;gt;ভাষা কোড অন্তর্ভুক্ত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রসারণ_চিত্র&amp;quot;&amp;gt;প্রসারণ চিত্র&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;Failed to generate image: PlantUML preprocessing failed: [From &amp;amp;lt;input&amp;amp;gt; (line 14) ]

@startuml
node &amp;quot;বিকাশ মেশিন&amp;quot; {
  artifact &amp;quot;উৎসগুলো&amp;quot; {
    folder &amp;quot;বিষয়/&amp;quot;
    folder &amp;quot;টেমপ্লেটস/&amp;quot;
    folder &amp;quot;সম্পদ/&amp;quot;
  }

  component &amp;quot;JBake CLI&amp;quot; as jbake

  Sources --&amp;amp;gt; jbake : jbake -b
}

node &amp;quot;বিল্ড সার্ভার
^^^^^
 Syntax Error? (Assumed diagram type: component)

@startuml
node &amp;quot;বিকাশ মেশিন&amp;quot; {
  artifact &amp;quot;উৎসগুলো&amp;quot; {
    folder &amp;quot;বিষয়/&amp;quot;
    folder &amp;quot;টেমপ্লেটস/&amp;quot;
    folder &amp;quot;সম্পদ/&amp;quot;
  }

  component &amp;quot;JBake CLI&amp;quot; as jbake

  Sources --&amp;amp;gt; jbake : jbake -b
}

node &amp;quot;বিল্ড সার্ভার
(CI/CD)&amp;quot; {
  component &amp;quot;GitHub Actions\nঅথবা GitLab CI&amp;quot; as ci

  jbake --&amp;amp;gt; ci : push
}

cloud &amp;quot;CDN / হোস্টিং&amp;quot; {
  node &amp;quot;স্থির ওয়েব সার্ভার&amp;quot; {
    artifact &amp;quot;তৈরারকৃত সাইট&amp;quot; {
      folder &amp;quot;/fr/blog/&amp;quot;
      folder &amp;quot;/en/blog/&amp;quot;
      folder &amp;quot;/assets/&amp;quot;
    }
  }
}

ci --&amp;amp;gt; &amp;quot;তৈরারকৃত সাইট&amp;quot; : déploiement

actor &amp;quot;পাঠকরা&amp;quot; as users

users --&amp;amp;gt; &amp;quot;স্থির ওয়েব সার্ভার&amp;quot; : HTTPS
@enduml&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্কিটেকচার আপনাকে সহজে দুটি ভাষা দিয়ে শুরু করতে দেয় এবং কোনো প্রধান রিফ্যাক্টরিং ছাড়াই আরও ভাষা যোগ করতে দেয়। সম্পূর্ণরূপে স্ট্যাটিক এবং পারফরম্যান্সবান, JBake দার্শনিক নকশাকে অনুসরণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ভালো বহুভাষিক উন্নয়ন ! 🌍&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Tor Browserインস্টল করুন এবং যাচাই করুন উবুন্টু-এ</title>
            <link >https://cheroliv.com//blog/2025/0094_tor_browser_install_post.html</link>
            <pubDate>Sun, 5 Oct 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0094_tor_browser_install_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টর_ও_তার_সিগনেচার_ডাউনলোড&amp;quot;&amp;gt;টর ও তার সিগনেচার ডাউনলোড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাইনিংয়ের_কৃপ্টোগ্রাফিক_যাচাই&amp;quot;&amp;gt;সাইনিংয়ের কৃপ্টোগ্রাফিক যাচাই&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টর_প্রজেক্টের_পাবলিক_কী_ইম্পোর্ট_করুন&amp;quot;&amp;gt;টর প্রজেক্টের পাবলিক কী ইম্পোর্ট করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_স্বাক্ষর_যাচাই_করুন&amp;quot;&amp;gt;2. স্বাক্ষর যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তব_উদাহরণ_বৈধ_স্বাক্ষর_কিন্তু_অসংযোজিত_কী&amp;quot;&amp;gt;বাস্তব উদাহরণ : বৈধ স্বাক্ষর কিন্তু অসংযোজিত কী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কেন_হস্তাক্ষর_যাচাই_করা_উচিত&amp;quot;&amp;gt;কেন হস্তাক্ষর যাচাই করা উচিত?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_tor_browser_এর_নিষ্কাশন_ও_চালু&amp;quot;&amp;gt;Tor Browser-এর নিষ্কাশন ও চালু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উবুন্টু_ডেস্কটপে_একীকরণ&amp;quot;&amp;gt;উবুন্টু ডেস্কটপে একীকরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_tor_দিয়ে_শিক্ষামূলক_সংস্থান_অন্বেষণ_করুন&amp;quot;&amp;gt;Tor দিয়ে শিক্ষামূলক সংস্থান অন্বেষণ করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টোর_ব্রাউজার_আপডেট&amp;quot;&amp;gt;টোর ব্রাউজার আপডেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সন্দर्भ&amp;quot;&amp;gt;সন্দर्भ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি বিশ্বে যেখানে ডিজিটাল গোপনীয়তা দিন দিন বেশি হুমকির মুখে পড়ছে, &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; একজন জরুরী সরঞ্জাম যা আপনার অজ্ঞাততা এবং তথ্য স্বাধীনতা বজায় রাখতে সহায়ক। তবু, কোনো ডাউনলোড করা সফটওয়্যারকে যাচাই না করেই চালাওয়া অত্যন্ত গুরুত্বপূর্ণ নয়&amp;lt;strong&amp;gt;তার সত্যতা যাচাইকৃত&amp;lt;/strong&amp;gt;. এই নিবন্ধটি একটি সম্পূর্ণ পদ্ধতি উপস্থাপন করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডাউনলোড &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; এবং এর স্বাক্ষর`.asc`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডাউনলোড করা ফাইলের বৈধতা যাচাই করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইনস্টল করুন এবং &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; চালু করুন উবুন্টু-এ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এটিকে ডeskটপ মেনুতে যোগ করুন দৈনন্দিন ব্যবহারের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শিক্ষামূলক সংস্থান ও নৈতিক OSINT টর এর মাধ্যমে অন্বেষণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টর_ও_তার_সিগনেচার_ডাউনলোড&amp;quot;&amp;gt;টর ও তার সিগনেচার ডাউনলোড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টর ব্রাউজার জন্য একটি বিশেষ ফোল্ডার তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/workspace/tipiak/tor
cd ~/workspace/tipiak/tor&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপর টর ব্রাউজারের আর্কাইভ এবং এর স্বাক্ষর ডাউনলোড করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;wget https://www.torproject.org/dist/torbrowser/14.5.7/tor-browser-linux-x86_64-14.5.7.tar.xz
wget https://www.torproject.org/dist/torbrowser/14.5.7/tor-browser-linux-x86_64-14.5.7.tar.xz.asc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাইনিংয়ের_কৃপ্টোগ্রাফিক_যাচাই&amp;quot;&amp;gt;সাইনিংয়ের কৃপ্টোগ্রাফিক যাচাই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ধাপটি&amp;lt;strong&amp;gt;অপরিহার্য&amp;lt;/strong&amp;gt;ডাউনলোড করা ফাইলটি &amp;lt;strong&amp;gt;Tor Project&amp;lt;/strong&amp;gt; থেকে আসছে এবং পরিবর্তিত না হয়েছে তা নিশ্চিত করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_টর_প্রজেক্টের_পাবলিক_কী_ইম্পোর্ট_করুন&amp;quot;&amp;gt;টর প্রজেক্টের পাবলিক কী ইম্পোর্ট করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;gpg --auto-key-locate nodefault,wkd --locate-keys torbrowser@torproject.org&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিশ্চিত করুন যে কীটি সঠিকভাবে আমদানি করা হয়েছে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;gpg --list-keys torbrowser@torproject.org&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_স্বাক্ষর_যাচাই_করুন&amp;quot;&amp;gt;2. স্বাক্ষর যাচাই করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;gpg --verify tor-browser-linux-x86_64-14.5.7.tar.xz.asc tor-browser-linux-x86_64-14.5.7.tar.xz&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদি সব কিছু ঠিক থাকে, তাহলে নিম্নলিখিত বার্তাটি প্রদর্শিত হবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;gpg: Good signature from &amp;quot;Tor Browser Developers (signing key)&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অপ্রমাণিত কীর সতর্কতায়, এটি শুধুই মানে যে আপনি এখনও টর প্রকল্পের বিশ্বাসনীয় কীটি স্বাক্ষর করেননি, কিন্তু স্বাক্ষরটি এখনও বৈধ থাকে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাস্তব_উদাহরণ_বৈধ_স্বাক্ষর_কিন্তু_অসংযোজিত_কী&amp;quot;&amp;gt;বাস্তব উদাহরণ : বৈধ স্বাক্ষর কিন্তু অসংযোজিত কী&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই যাচাইয়ের সময় এই ধরনের বার্তা পেলে স্বাভাবিক:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;gpg --verify tor-browser-linux-x86_64-14.5.7.tar.xz.asc tor-browser-linux-x86_64-14.5.7.tar.xz
gpg: Signature faite le mar. 16 sept. 2025 14:26:26 CEST
gpg:                avec la clef RSA CAAE408AEBE2288E96FC5D5E157432CF78A65729
gpg: Bonne signature de « Tor Browser Developers (signing key) &amp;amp;lt;torbrowser@torproject.org&amp;amp;gt; » [inconnu]
gpg: Attention : cette clef n&amp;#39;est pas certifiée avec une signature de confiance.
gpg:          Rien n&amp;#39;indique que la signature appartient à son propriétaire.
Empreinte de clef principale : EF6E 286D DA85 EA2A 4BA7  DE68 4E2C 6E87 9329 8290
     Empreinte de la sous-clef : CAAE 408A EBE2 288E 96FC  5D5E 1574 32CF 78A6 5729&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বার্তা নির্দেশ করে যে স্বাক্ষরটি প্রযুক্তিগতভাবে &amp;quot;সঠিক&amp;quot; (ফাইলটি পরিবর্তিত হয়নি), কিন্তু আপনার GPG সিস্টেম &amp;lt;strong&amp;gt;প্রমাণিত করা বিশ্বাস&amp;lt;/strong&amp;gt; করতে পারে না কী নিজেই। এই শঙ্কা দূর করতে, মূল কী-এর ফিঙ্গারপ্রিন্ট তুলনা করা অপরিহার্য। (&amp;lt;code&amp;gt;EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290&amp;lt;/code&amp;gt;) টর প্রকল্পের অফিসিয়াল ওয়েবসাইটে প্রকাশিতটির সাথে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সরকারী সাইট অনুযায়ী, প্রত্যাশিত ফুটপ্রিন্ট :`EF6E286DDA85EA2A4BA7DE684E2C6E8793298290`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যেহেতু প্রদর্শিত চাপ`gpg`যদি ফিং প্রিন্ট অফিসিয়াল সাইটের সাথে সঠিকভাবে মেলে, আপনি নিশ্চয় হতে পারেন যে কীটি বৈধ এবং ফাইলটি নিরাপদ। &amp;quot;অনিপন্নকৃত কী&amp;quot; cảnhব্য তখন আপনার স্থানীয় GPG কনফিগারেশনের তথ্য, স্বাক্ষরের বৈধতা বা ফাইলের প্রামাণিকতার নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কেন_হস্তাক্ষর_যাচাই_করা_উচিত&amp;quot;&amp;gt;কেন হস্তাক্ষর যাচাই করা উচিত?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GPG সাইন যাচাইকরণ ডিজিটাল নিরাপত্তার একটি মৌলিক কর্ম। অনুমতি দেয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গারান্টি দেওয়া&amp;lt;strong&amp;gt;প্রামাণিকতা&amp;lt;/strong&amp;gt;ডাউনলোড করা সফটওয়্যারের&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি ক্ষতিগ্রস্ত ফাইলের ইনস্টলেশন প্রতিরোধ করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অংশগ্রহণ করা&amp;lt;strong&amp;gt;ডিজিটাল সোভারিগনিটি&amp;lt;/strong&amp;gt;ব্যক্তিগত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;দায়ী এবং নৈতিক ডিজিটাল সংস্কৃতিকে উন্নয়ন করা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;usecase-tor-verification.svg&amp;quot; alt=&amp;quot;usecase tor verification&amp;quot; width=&amp;quot;443&amp;quot; height=&amp;quot;265&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_tor_browser_এর_নিষ্কাশন_ও_চালু&amp;quot;&amp;gt;Tor Browser-এর নিষ্কাশন ও চালু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডাউনলোড করা আর্কাইবটি বিস্তার করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;tar -xvf tor-browser-linux-x86_64-14.5.7.tar.xz
cd tor-browser&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তারপর ব্রাউজার চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./start-tor-browser.desktop&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম চালু করার সময়, Tor নেটওয়ার্কের সাথে সংযোগ স্থাপনের জন্য একটি কনফিগারেশন উইন্ডো খুলবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উবুন্টু_ডেস্কটপে_একীকরণ&amp;quot;&amp;gt;উবুন্টু ডেস্কটপে একীকরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অ্যাপ্লিকেশন মেনুতে &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; যোগ করার জন্য:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./start-tor-browser.desktop --register-app&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি তারপর :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অ্যাপ্লিকেশন মেনু থেকে &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; চালু করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডকে পছন্দের তালিকায় যোগ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;যদি চান তবে একটি কীবোর্ড শর্টকাট তৈরি করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;activity-tor-installation.svg&amp;quot; alt=&amp;quot;activity tor installation&amp;quot; width=&amp;quot;457&amp;quot; height=&amp;quot;470&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_tor_দিয়ে_শিক্ষামূলক_সংস্থান_অন্বেষণ_করুন&amp;quot;&amp;gt;Tor দিয়ে শিক্ষামূলক সংস্থান অন্বেষণ করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Tor শুধুমাত্র একটি গোপনীয়তা সরঞ্জাম নয়। এটি শিক্ষা ও গবেষণা সম্পদের একটি প্রবেশদ্বার, বিশেষত নিম্নলিখিত ক্ষেত্রে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;OSINT (খোলা উত্স গুপ্তিমার)&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://inteltechniques.com&amp;quot;&amp;gt;https://inteltechniques.com&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://osintframework.com&amp;quot;&amp;gt;https://osintframework.com&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;শিক্ষামূলক ও ওপেন সোর্স ভাগ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://archive.org&amp;quot;&amp;gt;https://archive.org&amp;lt;/a&amp;gt;(Tor-এর মাধ্যমে অ্যাক্সেস, আরও গোপনীয়তার জন্য)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/&amp;quot;&amp;gt;https://github.com/&amp;lt;/a&amp;gt;(টোরের মাধ্যমে পরামর্শযোগ্য)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://librarygenesis.pro&amp;quot;&amp;gt;https://librarygenesis.pro&amp;lt;/a&amp;gt;(মুক্ত বৈজ্ঞানিক সাহিত্যের অ্যাক্সেস)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;জ্ঞানের প্রচার এবং ডিজিটাল সমাজে মানব বোঝাপড়া&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডিজিটাল সংস্কৃতি, আবীক্ষার স্বাধীনতা এবং জ্ঞান অ্যাক্সেসের বিষয়ে সম্পদ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সাইবার নিরাপত্তা ও প্রযুক্তির নৈতিকতার বিষয়ে মুক্ত দস্তনেজ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টোর_ব্রাউজার_আপডেট&amp;quot;&amp;gt;টোর ব্রাউজার আপডেট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সর্বোত্তম নিরাপত্তা নিশ্চিত করতে, &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt;-কে আপডেট রাখা অতি গুরুত্বপূর্ণ। ব্রাউজারে একটি স্বয়ংক্রিয় আপডেট মেকানিজম অন্তর্ভুক্ত রয়েছে যা কমান্ড লাইন থেকে ট্রিগার করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Tor Browser এর ইনস্টলেশন ডিরেক্টরি থেকে, শুধুমাত্র স্টার্ট স্ক্রিপ্টটি পুনরায় চালু করলেই হবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;cd ~/workspace/tipiak/tor/tor-browser
./start-tor-browser.desktop&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুরু করার সময়, &amp;lt;strong&amp;gt;Tor Browser&amp;lt;/strong&amp;gt; স্বয়ংক্রিয়ভাবে নতুন সংস্করণ আছে কি না তা পরীক্ষা করবে। যদি নতুন সংস্করণ থাকে, তাহলে এটি আপনার জন্য স্বয়ংক্রিয়ভাবে ডাউনলোড এবং ইনস্টল করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সরল পদ্ধতি নিশ্চিত করে যে আপনি সর্বদা সর্বনতুন নিরাপত্তা প্যাচ এবং সর্বশেষ উন্নয়ন পান, যা নিরাপদ ব্রাউজিংয়ের জন্য অপরিহার্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডাউনলোডগুলি যাচাই করা কোনো নিরাপদ ডিজিটাল পরিবেশে উন্নত হতে চাওয়া যে কোনো ব্যক্তির জন্য একটি জরুরি প্রতিক্রিয়া। Tor-কে যাচাইকৃতভাবে ইনস্টল করা, এটি&amp;lt;strong&amp;gt;তার ডিজিটাল অখণ্ডতা রক্ষা করা&amp;lt;/strong&amp;gt;, &amp;lt;strong&amp;gt;মুক্ত সফটওয়ারে বিশ্বাস সংরক্ষণ করা&amp;lt;/strong&amp;gt;, et &amp;lt;strong&amp;gt;তার তথ্য স্বায়ত্তশক্তি বাড়ানো&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিজিটাল নিরাপত্তা একটি বোধের আচরণ, প্যারানোয়িয়া নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;summary-diagram.svg&amp;quot; alt=&amp;quot;summary diagram&amp;quot; width=&amp;quot;1618&amp;quot; height=&amp;quot;5396&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সন্দर्भ&amp;quot;&amp;gt;সন্দर्भ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;টর প্রকল্পের অফিশিয়াল সাইট :https://www.torproject.org/download/[&amp;lt;a href=&amp;quot;https://www.torproject.org/download/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://www.torproject.org/download/&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সিগনিচার যাচাইয়ের ডকুমেন্টেশন :https://support.torproject.org/tbb/how-to-verify-signature/[&amp;lt;a href=&amp;quot;https://support.torproject.org/tbb/how-to-verify-signature/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://support.torproject.org/tbb/how-to-verify-signature/&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ডকুমেন্টেশন Ubuntu :https://ubuntu.com[&amp;lt;a href=&amp;quot;https://ubuntu.com&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://ubuntu.com&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শিক্ষামূলক আর্কাইভ :https://archive.org/details/opensource[&amp;lt;a href=&amp;quot;https://archive.org/details/opensource&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://archive.org/details/opensource&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধটি &amp;lt;strong&amp;gt;সুরক্ষা এবং ডিজিটাল সচেতনতা&amp;lt;/strong&amp;gt; সিরির অংশ, ব্যবহারশীল ও শিক্ষামূলক পদ্ধতিগুলো প্রোৎসাহিত করা লক্ষ্যে মুক্ত টুলসের পাশে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অনুচ্ছেদ ৫ : শেয়ারড লাইবস.ভারশনস.টমলের এডভেঞ্চার</title>
            <link >https://cheroliv.com//blog/2025/0093_gradle_plugin_toml_composite_build_post.html</link>
            <pubDate>Sat, 27 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0093_gradle_plugin_toml_composite_build_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভার্সন_ক্যাটালগ_libs_versions_toml_একটি_স্মরণ&amp;quot;&amp;gt;ভার্সন ক্যাটালগ (&amp;lt;code&amp;gt;libs.versions.toml&amp;lt;/code&amp;gt;) : একটি স্মরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_সমস্যা_একটি_কম্পোজিট_বিল্ড_এবং_দুটি_পৃথক_বিশ্ব&amp;quot;&amp;gt;2. সমস্যা: একটি কম্পোজিট বিল্ড এবং দুটি পৃথক বিশ্ব&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_সমাধান_অপbорności_সমাধানের_বিতরণ&amp;quot;&amp;gt;3. সমাধান : অপbорności সমাধানের বিতরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_নিষ্কর্ষ_ভালোভাবে_পরিচালিত_কম্পোজিট_বিল্ডের_শক্তি&amp;quot;&amp;gt;4. নিষ্কর্ষ: ভালোভাবে পরিচালিত কম্পোজিট বিল্ডের শক্তি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;পড়ার সময় :&amp;lt;/em&amp;gt; 15 মিনিট.&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;লক্ষ্যীয় পাঠক : গ্রেডল ডেভেলপাররা মাল্টি-বিল্ড প্রকল্পে নির্ভরতা ব্যবস্থাপনার চ্যালেঞ্জের সম্মুখীন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্লাগইন তৈরি করার মিশনে`site-baker`, আমরা পরিষ্কার ও কেন্দ্রীয় কোড বেস বজায় রাখার প্রচেষ্তা করেছি। আধুনিক Gradle ইকোসিস্টেমের সবচেয়ে ভালো অনুশীলনগুলির মধ্যে একটি হল এর ব্যবহার দে&amp;lt;strong&amp;gt;সংস্করণের ক্যাটালগ&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;libs.versions.toml&amp;lt;/code&amp;gt;) নির্ভরতা পরিচালনা করতে. কিন্তু আপনার প্রকল্প আরও জটিল হয়, তখন কী হয়, যেমন একটি&amp;lt;strong&amp;gt;নির্মাণ কম্পোজিট&amp;lt;/strong&amp;gt;একটি স্বতন্ত্র বিল্ড (আমাদের প্লাগইন)কে অন্য একটি বিল্ডের অন্তর্ভুক্ত করা উচিত ?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে আমাদের অভিযান একটি অপ্রত্যাশিত মোড় নিয়েছিল। আমরা চাইতাম যে আমাদের প্লাগইন`site-baker`, যা নিজেই একটি Gradle প্রকল্প, আমাদের প্রধান প্রকল্পের মতোই সংস্করণ ক্যাটালগ ব্যবহার করে। এই লেখা, আমাদের সিরির পঞ্চমটি, কীভাবে আমরা এই চ্যালেঞ্জটি সমাধান করেছি তা বলছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভার্সন_ক্যাটালগ_libs_versions_toml_একটি_স্মরণ&amp;quot;&amp;gt;ভার্সন ক্যাটালগ (&amp;lt;code&amp;gt;libs.versions.toml&amp;lt;/code&amp;gt;) : একটি স্মরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইল`gradle/libs.versions.toml`এটি Gradle-এর একটি বৈশিষ্ট্য যা আপনার প্রজেক্টের নির্ভরতাগুলির সংস্করণ ও স্থানাঙ্ককে কেন্দ্রিককরণ করার অনুমতি দেয়। এটি সাধারণত চারটি বিভাগে গঠিত:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;[versions]&amp;lt;/code&amp;gt;: নির্ধারণ করে অ্যালাসগুলো সংস্করণের নম্বরগুলির জন্য (উদাহরণ:`kotlin = &amp;quot;1.9.20&amp;quot;`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;[libraries]&amp;lt;/code&amp;gt;: অ্যালিয়াসগুলো সংজ্ঞায়িত করে_complete নির্ভরতাগুলোর জন্য, উপরে সংজ্ঞায়িত সংস্করণগুলো ব্যবহার করে (উদাহরণ:`kotlin-stdlib = { module = &amp;quot;org.jetbrains.kotlin:kotlin-stdlib&amp;quot;, version.ref = &amp;quot;kotlin&amp;quot; }`)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;[bundles]`একাধিক লাইব্রের리를 একটি অ্যালিয়াসের অধীনে একত্র করে (উদাহরণ:`jackson = [&amp;quot;jackson-core&amp;quot;, &amp;quot;jackson-databind&amp;quot;]&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`[plugins]`Gradle প্লাগনের জন্য এলিয়াস সেট করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একবার সংজ্ঞায়িত হলে, Gradle স্বয়ংক্রিয়ভাবে টাইপকৃত অ্যাক্সেসর তৈরি করে, যা আপনার`build.gradle.kts`বেশ বেশি পঠনযোগ্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;dependencies {
    // Au lieu de : implementation(&amp;quot;org.jetbrains.kotlin:kotlin-stdlib:1.9.20&amp;quot;)
    implementation(libs.kotlin.stdlib)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;toml-flow.svg&amp;quot; alt=&amp;quot;toml flow&amp;quot; width=&amp;quot;512&amp;quot; height=&amp;quot;252&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. সংস্করণ ক্যাটালগের ডেটা ফ্লো&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_2_সমস্যা_একটি_কম্পোজিট_বিল্ড_এবং_দুটি_পৃথক_বিশ্ব&amp;quot;&amp;gt;2. সমস্যা: একটি কম্পোজিট বিল্ড এবং দুটি পৃথক বিশ্ব&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্রকল্পের কাঠামো একটি&amp;lt;strong&amp;gt;সম্পলিত নির্মাণ&amp;lt;/strong&amp;gt;. প্রধান প্রকল্প (&amp;lt;code&amp;gt;thymeleaf.cheroliv.com&amp;lt;/code&amp;gt;) প্লাগইন প্রকল্পটি অন্তর্ভুক্ত করে (&amp;lt;code&amp;gt;site-baker&amp;lt;/code&amp;gt;) কমান্ডের মাধ্যমে`includeBuild(&amp;quot;site-baker&amp;quot;)&amp;lt;code&amp;gt;ফাইলে`settings.gradle.kts&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;composite-build.svg&amp;quot; alt=&amp;quot;composite build&amp;quot; width=&amp;quot;1573&amp;quot; height=&amp;quot;5720&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 2. কম্পোজিট বিল্ডের গঠন&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা হল যে, ডিফল্টভাবে, একটি অন্তর্ভুক্ত বিল্ড একটি&amp;lt;strong&amp;gt;বিশ্ব বিচ্ছিন্ন&amp;lt;/strong&amp;gt;. এইটির নিজস্ব কনফিগারেশন, এর নিজস্ব জীবনচক্র, এবং এটি ফাইলটি দেখে না`libs.versions.toml`প্রধান বিল্ডের। আমাদের`plugin/build.gradle.kts`ব্যবহার করার চেষ্টা করছিল`libs.plugins.kotlin.jvm`, কিন্তু বস্তু`libs`এটি সঠিক টমএল ফাইল exports na howar karone, bilder̥ṭi ghoṭloe&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_3_সমাধান_অপbорności_সমাধানের_বিতরণ&amp;quot;&amp;gt;3. সমাধান : অপbорności সমাধানের বিতরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বহুতো গবেষণা করার পর, সমাধানটি একটি Gradle বৈশিষ্ট্য হয়ে উঠেছে যা এই ক্ষেত্রের জন্য সঠিকভাবে ডিজাইন করা হয়েছে।&amp;lt;code&amp;gt;dependencyResolutionManagement&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলে`settings.gradle.kts` du &amp;lt;strong&amp;gt;অন্তর্ভুক্ত নির্মাণ&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;site-baker/settings.gradle.kts&amp;lt;/code&amp;gt;), আমরা Gradle-কে বলতে পারি যে সংস্করণ ক্যাটালগটি ব্যবহার করার জন্য খুঁজে বের করতে কোথায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি হলো আমাদের যোগ করা কনফিগারেশন`site-baker/settings.gradle.kts` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// site-baker/settings.gradle.kts

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        gradlePluginPortal()
        mavenCentral()
    }
    versionCatalogs {
        create(&amp;quot;libs&amp;quot;) {
            from(files(&amp;quot;../gradle/libs.versions.toml&amp;quot;))
        }
    }
}

rootProject.name = &amp;quot;site-baker&amp;quot;
include(&amp;quot;plugin&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিশ্লেষণ করি গুরুত্বপূর্ণ অংশটি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;versionCatalogs {
    create(&amp;quot;libs&amp;quot;) { // Crée un catalogue nommé &amp;#39;libs&amp;#39;
        from(files(&amp;quot;../gradle/libs.versions.toml&amp;quot;)) // En utilisant ce fichier
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;create(&amp;quot;libs&amp;quot;)`আমরা একটি সংস্করণ ক্যাটালগ ঘোষণা করি যা অ্যালিয়াসের মাধ্যমে অ্যাক্সেসযোগ্য হবে`libs&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;from(files(&amp;quot;../gradle/libs.versions.toml&amp;quot;))`এটি জাদু। আমরা গ্রেডলকে বলি যে এই ক্যাটালগের উৎসটি ডিরেক্টরিতে অবস্থিত TOML ফাইল।`gradle&amp;lt;/code&amp;gt; du &amp;lt;strong&amp;gt;পিতামাতা প্রকল্প&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;../&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কনফিগারেশনের সাথে, বিল্ড`site-baker`এখন জানে যে মূল প্রকল্পের সংস্করণ ক্যাটালগ ব্যবহার করতে হবে। বস্তু`libs`সঠিকভাবে তৈরি করা হয়েছে, এবং নির্ভরতাগুলি প্রত্যাশিত মতো সমাধান করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_4_নিষ্কর্ষ_ভালোভাবে_পরিচালিত_কম্পোজিট_বিল্ডের_শক্তি&amp;quot;&amp;gt;4. নিষ্কর্ষ: ভালোভাবে পরিচালিত কম্পোজিট বিল্ডের শক্তি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনुभবটি শিক্ষামূলক ছিল। সংস্করণের ক্যাটালগ একটি দৃঢ়তাবদ্ধ রক্ষণযোগ্যতার জন্য একটি ফ্যানটাস্টিক টুল, কিন্তু কম্পোজিট বিল্ডের সিনেরিয়োতে এর আচরণ সর্বদা সহজ নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কীটি হল মনে রাখতে হচ্ছে যে একটি অন্তর্ভুক্ত বিল্ড হলেও একটি স্বতন্ত্র বিল্ড। ভার্সন ক্যাটালগের মতো কনফিগারেশন শেয়ার করতে, আপনাকে Gradle द्वारा সরবরাহকৃত একস্পষ্ট মেকানিজম ব্যবহার করতে হবে, যেমন ব্লক।`dependencyResolutionManagement`midpoint? Actually I wrote &amp;quot; midline&amp;quot;? Let&amp;amp;#8217;s ensure correct: &amp;quot;মধ্যে&amp;quot;. So result: &amp;quot; মধ্যে&amp;quot;. That includes a leading space then the Bengali word.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Return that.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মধ্যে`settings.gradle.kts`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যাটি সমাধান করে, আমরা শুধুমাত্র আমাদের বিল্ডকে পরিষ্কার করলাম না, বরং আমাদের প্রকলের সামঞ্জস্যকে বাড়িয়ালাম; আমরা নিশ্চিত করে যে প্লাগইন এবং প্রধান প্রকল্প একক সত্যের উৎস শেয়ার করে তাদের নির্ভরতাগুলির জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আসন্ন নিবন্ধে, আমরা আমাদের প্লগইনকে আরও জটিল কাজ যোগ করে সমৃদ্ধ করবো, যেহেতু আমাদের নির্ভরশীলতা ব্যবস্থা দৃঢ় ও কেন্দ্রীয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গ্র্যাডেল কনফিগারেশন ক্যাশের জাল</title>
            <link >https://cheroliv.com//blog/2025/0092_gradle_configuration_cache_post.html</link>
            <pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0092_gradle_configuration_cache_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লক্ষণ_ফ্যান্টম_বিল্ড&amp;quot;&amp;gt;লক্ষণ : ফ্যান্টম বিল্ড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনুসন্ধান_কনফিগারেশন_ক্যাশ_কি&amp;quot;&amp;gt;অনুসন্ধান : কনফিগারেশন ক্যাশ কি ?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রশ্নের_কারণ_একটি_অমেলানযোগ্য_প্লাগইন&amp;quot;&amp;gt;প্রশ্নের কারণ: একটি অমেলানযোগ্য প্লাগইন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অস্থায়ী_সমাধান_ক্যাশ_নিষ্ক্রিয়_করুন&amp;quot;&amp;gt;অস্থায়ী সমাধান: ক্যাশ নিষ্ক্রিয় করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সত্যি_সমাধান_প্লাগইনকে_সামঞ্জস্যপূর্ণ_করা&amp;quot;&amp;gt;সত্যি সমাধান : প্লাগইনকে সামঞ্জস্যপূর্ণ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;quot;লক্ষ্যীয় পাঠক : Gradle ডেভেলপাররা যারা ইতিমধ্যে &amp;#39;magiques&amp;#39; বা অপ্রত্যাশিত বিল্ড আচরণ মোকাবেলা করে এসেছেন।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্লাগইন তৈরি করার অ্যাভেন্টুয়া`site-baker`, আমরা একটি কঠোর TDD পদ্ধতি অনুসরণ ছিলাম। প্রতিটি ফিচার পরীক্ষিত, যাচাইকৃত, এবং আমরা বিশ্বাসের সাথে অগ্রসর হইতাম। এবং একটি দিন, অপ্রত্যাশিত ঘটনা ঘটেছিল। বিল্ডগুলি অসংগতভাবে আচরণ করা শুরু করল। প্লাগইন লজিক বা কনফিগারেশন ফাইলে পরিবর্তনগুলি উপেক্ষা করা হচ্ছে মনে হত, এবং আমাদের ফাংশনাল টেস্টগুলো, আগে নির্ভরযোগ্য ছিল, কোনোকারণ না দেখায় ব্যর্থ হত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এ ধরনের সমস্যা অবিশ্বাস্যরূপে চিড়নাকর হতে পারে। এটি টুলের নির্ভরযোগ্যতা এবং আমাদের কোডের বৈধতার প্রশ্ন উঠায়। একটি شدتপূর্ণ ডিবাগিং সেশনের पश्चাত, দুষ্টকে সনাক্ত করা হয়েছে :&amp;lt;strong&amp;gt;Gradle কনফিগারেশন ক্যাশ&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লক্ষণ_ফ্যান্টম_বিল্ড&amp;quot;&amp;gt;লক্ষণ : ফ্যান্টম বিল্ড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা বহু উপায়ে প্রকাশিত হচ্ছিল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমি একটি টাস্কে একটি অক্ষর সিরিজ পরিবর্তন করছিলাম`println`, কিন্তু পুরানো চেইনটি এক্সিকিউশনের সময় দেখায় পড়ত ছিল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আমি আমার ফাইলে একটি মান পরিবর্তন করছিলাম`managed-jbake-context.yml`, কিন্তু প্লাগইন কাজ করতো যেন ফাইলটি পরিবর্তিত হয়নি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফাংশনাল টেস্টগুলি, যারা উড়ান পরীক্ষা প্রকল্প তৈরি করে, ব্যর্থ হচ্ছিল কারণ প্লাগইনটি তাজা-তাজা তৈরি করা কনফিগারেশন ফাইলগুলো নোতান করতে পারছিল না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবকিছু হচ্ছে যেন Gradle আমাদের বিল্ডের একটি &amp;quot;ভূতীয় সংস্করণ&amp;quot; চালাচ্ছে, আমাদের সবচেয়ে নতুন পরিবর্তনগুলোকে উপেক্ষা করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অনুসন্ধান_কনফিগারেশন_ক্যাশ_কি&amp;quot;&amp;gt;অনুসন্ধান : কনফিগারেশন ক্যাশ কি ?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশন ক্যাশ হল Gradle-এ আপেক্ষিকভাবে আধুনিক এবং খুবই শক্তিশালী একটি বৈশিষ্ট্য, নতুন সংস্করণlarda ডিফল্টরূপে সক্রিয়। এর লক্ষ্য হল বিল্ডকে দ্রুত করা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;সীদান্তটি ساده :&amp;lt;/div&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রথম রানিং চলাকালীন, Gradle পর্যায়টি কার্যকর করে&amp;lt;strong&amp;gt;কনফিগারেশন&amp;lt;/strong&amp;gt;(পাঠের`build.gradle.kts`, টাস্ক তৈরি, অনুশ্রেণী সমাধান) এবং একটি টাস্ক গ্রাফ তৈরি করে.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এই পর্যায়ের শেষে, Gradle&amp;lt;strong&amp;gt;এই কাজের গ্রাফটি সিরিয়ালাইজ কর&amp;lt;/strong&amp;gt;এবং এটি ক্যাশে রাখে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পরবর্তী চালানোর সময়, যদি কিছু পরিবর্তন করা না হয় (বিল্ড স্ক্রিপ্ট,&amp;lt;code&amp;gt;gradle.properties&amp;lt;/code&amp;gt;, etc.), Gradle&amp;lt;strong&amp;gt;কনফিগারেশন পর্যায়টি সম্পূর্ণরূপে আটকে দেয়&amp;lt;/strong&amp;gt;এবং ক্যাশে থাকা কাজের গ্রাফটি পুনর্ব্যবহার করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বড় প্রকল্পগুলিতে সময় সংরক্ষণ অসাধারণ। কিন্তু, এই কর্মক্ষমত에는 একটি খরচ আছে: এটি প্লাগইন কীভাবে লেখা উচিত সেই বিষয়ে কঠোর নিয়ম প্রয়োগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;config-cache-lifecycle.svg&amp;quot; alt=&amp;quot;config cache lifecycle&amp;quot; width=&amp;quot;661&amp;quot; height=&amp;quot;709&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. কনফিগারেশন ক্যাশের জীবন চক্র&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রশ্নের_কারণ_একটি_অমেলানযোগ্য_প্লাগইন&amp;quot;&amp;gt;প্রশ্নের কারণ: একটি অমেলানযোগ্য প্লাগইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্লাগইন`site-baker`অজ্ঞাতভাবে কনফিগারেশন ক্যাশের অনেক নিয়ম লঙ্ঘিত করছিল। একটি কাজ গ্রাফ সিরিয়ালাইজযোগ্য হলে, কাজগুলোকে জটিল অবজেক্টের রেফারেন্স ধারণ করা উচিত নয়, যেমন এই বস্তু।`Project`অথবা ফাইলগুলোকে বিয়োগত পড়া যায় এক্সিকিউশন পর্যায়ে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের মূল ভুল ছিল YAML ফাইলের কন্টেন্টকে সরাসরি কাজের লজিকের ভিতরে পড়া, আমাদের এক্সটেনশনে সংরক্ষিত পথের রেফারেন্স ব্যবহার করে। এই পদ্ধতিটি ক্যাশের সাথে অসংস্পত, কারণ Gradle বুঝতে পারে না ফাইলের কন্টেন্ট পরিবর্তিত হয়েছে কি না যদি এই পড়াকে একটি olarak মডেল করা না হয়।&amp;lt;strong&amp;gt;কার্য প্রবেশ&amp;lt;/strong&amp;gt;(টাস্ক ইনপুট)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অস্থায়ী_সমাধান_ক্যাশ_নিষ্ক্রিয়_করুন&amp;quot;&amp;gt;অস্থায়ী সমাধান: ক্যাশ নিষ্ক্রিয় করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের ব্লক খুলে একটি পূর্বাভাসযোগ্য বিল্ড আচরণ ফিরে পেতে, সবচেয়ে দ্রুত সমাধানটি কনফিগারেশন ক্যাশ অক্ষম করা ছিল। ফাইলে নিম্নলিখিত লাইন যোগ করলে যথেষ্ট।&amp;lt;code&amp;gt;gradle.properties`প্লাগইন ব্যবহার করে প্রজেক্টের (আমাদের_CASEে, টেস্ট প্রজেক্ট)`site-baker&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-properties hljs&amp;quot; data-lang=&amp;quot;properties&amp;quot;&amp;gt;# site-baker/gradle.properties
org.gradle.configuration-cache=false&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তৎক্ষণে, বিল্ডগুলো তাদের স্বাভাবিক আচরণ ফেরে পেল। প্রতিটি কার্যকরায় কনফিগারেশন পর্বটি পুনরাুই চালু হতো এবং আমাদের পরিবর্তনগুলো বিবেচনায় নেওয়া হতো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তবে, এটি একটি চুক্তি সমাধান, একটি স্থায়ী সমাধান নয়। এটি কর্মক্ষমতা ত্যাগ করে এবং আমাদের প্লাগইনের মৌলিক সমস্যা সমাধান করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সত্যি_সমাধান_প্লাগইনকে_সামঞ্জস্যপূর্ণ_করা&amp;quot;&amp;gt;সত্যি সমাধান : প্লাগইনকে সামঞ্জস্যপূর্ণ করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি প্লাগইন আধুনিক গ্রেডল ইকোসিস্টেমের একজন ভালো নাগরিক হতে, এটি কনফিগারেশন ক্যাশের সাথে সামঞ্জস্যপূর্ণ হতে হবে। এটি আমাদের কাজগুলোকে ডেটা কীভাবে প্রবাহিত হয় সেটি পুনর্বিবেচনা করার প্রয়োজন হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কী হল ব্যবহার করা&amp;lt;strong&amp;gt;প্রোভাইডার এপিআই&amp;lt;/strong&amp;gt;Gradle-কে। বরং সরাসরি মান পাস না করে (যেমন একটি`String` ou un &amp;lt;code&amp;gt;File&amp;lt;/code&amp;gt;) আমাদের কাজের জন্য, আমাদের কিছু সময় বিতরণ করতে হবে`Property&amp;amp;lt;T&amp;amp;gt;`বা কয়েক`Provider&amp;amp;lt;T&amp;amp;gt;`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে রিফ্যাক্টরিং পরিকল্পনা:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;টাস্কের এন্ট্রি ঘোষণা :&amp;lt;/strong&amp;gt;যে টাস্কটি YAML ফাইলটি পার্স করে, সেটাকে ফাইলটি ইনপুট হিসেবে ঘোষণা করতে হবে। এই উদ্দেশ্যে আমরা টীকা ব্যবহার করি।&amp;lt;code&amp;gt;@InputFile&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;[source,kotlin] ---- @get:InputFile অবস্ট্রেক্ট বাল configFile: RegularFileProperty ----&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অনুচ্ছেদ ৩: Jackson-এর YAML পার্সিংয়ের জন্য TDD সহ একটি Gradle প্লাগইনে সংহতকরণ</title>
            <link >https://cheroliv.com//blog/2025/0091_jackson_yaml_tdd_post.html</link>
            <pubDate>Thu, 25 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0091_jackson_yaml_tdd_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রексиাপট_আমাদের_প্লাগইন_site_baker&amp;quot;&amp;gt;প্রексиাপট: আমাদের প্লাগইন `site-baker&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_কোটলিনে_কনফিগারেশন_মডেলিং&amp;quot;&amp;gt;2. কোটলিনে কনফিগারেশন মডেলিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_build_gradle_kts_এ_jackson_এর_ইন্টিগ্রেশন&amp;quot;&amp;gt;3. &amp;lt;code&amp;gt;build.gradle.kts&amp;lt;/code&amp;gt;-এ Jackson-এর ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_tdd_পদ্ধতি_yaml_পার্সিং_টেস্টিং&amp;quot;&amp;gt;4. TDD পদ্ধতি: YAML পার্সিং টেস্টিং&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_1_ইউনিট_টেস্ট_yaml_কে_kotlin_অবজেক্টে_ম্যাপ_করা&amp;quot;&amp;gt;4.1. ইউনিট টেস্ট : YAML কে Kotlin অবজেক্টে ম্যাপ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_2_ফাংশনাল_টেস্ট_কনফিগারেশন_ফাইল_পড়া_যাচাই_করুন&amp;quot;&amp;gt;4.2. ফাংশনাল টেস্ট: কনফিগারেশন ফাইল পড়া যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_5_পার্সিং_ফ্লো_ভিজ্যুয়ালাইজেশন&amp;quot;&amp;gt;5. পার্সিং ফ্লো ভিজ্যুয়ালাইজেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;পাঠনের সময় :&amp;lt;/em&amp;gt; 12 মিনিট.&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;লক্ষ্য গোষ্ঠী : মধ্যম স্তরের Gradle ডেভেলপারদের জন্য যারা জটিল কনফিগারেশন পরিচালনা করতে ইচ্ছুক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্রেডল প্লাগইনের ডেভেলপমেন্টে, জটিল কনফিগারেশন ম্যানেজমেন্ট একটি সাধারণ কাজ। DSL-কে সোতক গুণধর্ম দিয়ে অতিক্রম করার বদলে, কনফিগারেশনকে বাহ্যিক ফাইলে—যেমন YAML—এ সংজ্ঞায়িত করা প্রায়শই পরিষ্কার এবং রক্ষণবেক্ষনযোগ্য। এই আর্টিকেলটি আপনাকে Jackson লাইব্রেরির মাধ্যমে YAML ফাইলকে Kotlin অবজেক্টে পার্স করার একীकरण পথে গাইড করে, একটি কঠোর TDD পদ্ধতির মাধ্যমে আমাদের প্লাগইনের দৃঢ়তা নিশ্চিত করা হয়েছে।&amp;lt;code&amp;gt;site-baker&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রексиাপট_আমাদের_প্লাগইন_site_baker&amp;quot;&amp;gt;প্রексиাপট: আমাদের প্লাগইন `site-baker&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্লাগইন`site-baker`est conçu pour automatiser la génération et le déploiement d&amp;amp;#8217;un site statique. Il a besoin de lire un fichier de configuration YAML (&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Bengali translation with preserved spacing and no backticks:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি স্ট্যাটিক সাইটের তৈরি ও বিনিয়োগকে স্বয়ংক্রিয় করতে ডিজাইন করা হয়েছে। এটি একটি YAML কনফিগারেশন ফাইল পড়তে দরকার دارد (&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;est conçu pour automatiser la génération et le déploiement d&amp;amp;#8217;un site statique. Il a besoin de lire un fichier de configuration YAML (&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Bengali translation with preserved spacing and no backticks:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি স্ট্যাটিক সাইটের তৈরি ও বিনিয়োগকে স্বয়ংক্রিয় করতে ডিজাইন করা হয়েছে। এটি একটি YAML কনফিগারেশন ফাইল পড়তে দরকার دارد (&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Output only the translated text: est conçu pour automatiser la génération et le déploiement d&amp;amp;#8217;un site statique. Il a besoin de lire un fichier de configuration YAML ( এটি একটি স্ট্যাটিক সাইটের তৈরি ও বিনিয়োগকে স্বয়ংক্রিয় করতে ডিজাইন করা হয়েছে। এটি একটি YAML কনফিগারেশন ফাইল পড়তে দরকার دارد (&amp;lt;code&amp;gt;managed-jbake-context.yml&amp;lt;/code&amp;gt;) উৎস পথ, স্থাপন গন্তব্য, এবং গিট শংসাপত্রের মতো তথ্য পেতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা পার্স করতে চান এমন YAML কনফিগারেশন এইরূপ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-yaml hljs&amp;quot; data-lang=&amp;quot;yaml&amp;quot;&amp;gt;bake:
  srcPath: &amp;quot;./site/jbake&amp;quot;
  destDirPath: &amp;quot;bake&amp;quot;
  cname: &amp;quot;cheroliv.com&amp;quot;
pushPage:
  from: &amp;quot;bake&amp;quot;
  to: &amp;quot;cvs&amp;quot;
  repo:
    name: &amp;quot;trainings&amp;quot;
    repository: &amp;quot;https://github.com/pages-content/pages-content.github.io.git&amp;quot;
    credentials:
      username: &amp;quot;USERNAME&amp;quot;
      password: &amp;quot;SECRET_TOKEN&amp;quot;
  branch: &amp;quot;main&amp;quot;
  message: &amp;quot;cheroliv.com&amp;quot;
# ... autres configurations (pushMaquette, supabase, etc.)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_2_কোটলিনে_কনফিগারেশন_মডেলিং&amp;quot;&amp;gt;2. কোটলিনে কনফিগারেশন মডেলিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পার্স করার আগে, আমাদের কটলিনে আমাদের ডেটার গঠন নির্ধারণ করতে হবে। Jackson এই ক্লাসগুলো ব্যবহার করে YAML কনটেন্টকে স্বয়ংক্রিয়ভাবে ম্যাপ করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// plugin/src/main/kotlin/com/cheroliv/site/baker/data/SiteConfiguration.kt
package com.cheroliv.site.baker.data

import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory
import com.fasterxml.jackson.module.kotlin.readValue
import com.fasterxml.jackson.module.kotlin.registerKotlinModule

fun parseSiteConfiguration(yaml: String): SiteConfiguration {
    val mapper = ObjectMapper(YAMLFactory()).registerKotlinModule()
    return mapper.readValue(yaml)
}

data class GitPushConfiguration(
    val from: String = &amp;quot;&amp;quot;,
    val to: String = &amp;quot;&amp;quot;,
    val repo: RepositoryConfiguration = RepositoryConfiguration(),
    val branch: String = &amp;quot;&amp;quot;,
    val message: String = &amp;quot;&amp;quot;,
)

data class RepositoryConfiguration(
    val name: String = &amp;quot;&amp;quot;,
    val repository: String = &amp;quot;&amp;quot;,
    val credentials: RepositoryCredentials = RepositoryCredentials(),
) {
    companion object {
        const val ORIGIN = &amp;quot;origin&amp;quot;
        const val CNAME = &amp;quot;CNAME&amp;quot;
        const val REMOTE = &amp;quot;remote&amp;quot;
    }
}

data class RepositoryCredentials(val username: String = &amp;quot;&amp;quot;, val password: String = &amp;quot;&amp;quot;)

data class SiteConfiguration(
    val bake: BakeConfiguration = BakeConfiguration(),
    val pushPage: GitPushConfiguration = GitPushConfiguration(),
    val pushMaquette: GitPushConfiguration = GitPushConfiguration(),
    val pushSource: GitPushConfiguration? = null,
    val pushTemplate: GitPushConfiguration? = null,
    val supabase: SupabaseContactFormConfig? = null
)

data class BakeConfiguration(
    val srcPath: String = &amp;quot;&amp;quot;,
    val destDirPath: String = &amp;quot;&amp;quot;,
    val cname: String? = null,
)

// ... (autres data classes pour Supabase, si nécessaire)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`parseSiteConfiguration`আমাদের ডেসিরিয়ালাইজেশনের প্রবেশ পয়েন্ট। এটি ব্যবহার করে`ObjectMapper`জ্যাকসনের, কনফিগার করা হয়েছে`YAMLFactory`YAML ফরম্যাটের জন্য এবং`registerKotlinModule()`Kotlin এর বিশেষতাগুলোর সমর্থনের জন্য (যেমন প্রপার্টির ডিফল্ট মান).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_3_build_gradle_kts_এ_jackson_এর_ইন্টিগ্রেশন&amp;quot;&amp;gt;3. &amp;lt;code&amp;gt;build.gradle.kts&amp;lt;/code&amp;gt;-এ Jackson-এর ইন্টিগ্রেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Jackson ব্যবহার করতে, আমাদের প্রয়োজনীয় নির্ভরতা যোগ করতে হবে`build.gradle.kts`আমাদের মডিউলের`plugin`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// plugin/build.gradle.kts
dependencies {
    // Jackson for YAML parsing
    implementation(&amp;quot;com.fasterxml.jackson.module:jackson-module-kotlin:2.18.3&amp;quot;)
    implementation(&amp;quot;com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:2.18.3&amp;quot;)

    // ... autres dépendances
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা ব্যবহার করি`jackson-module-kotlin`কোটলিন সমর্থন এবং`jackson-dataformat-yaml`YAML ফরম্যাটের مدیریتের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_4_tdd_পদ্ধতি_yaml_পার্সিং_টেস্টিং&amp;quot;&amp;gt;4. TDD পদ্ধতি: YAML পার্সিং টেস্টিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন, আমরা টিডিডি প্রয়োগ করে আমাদের পার্সিং লজিকের বৈধতা যাচাই করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_4_1_ইউনিট_টেস্ট_yaml_কে_kotlin_অবজেক্টে_ম্যাপ_করা&amp;quot;&amp;gt;4.1. ইউনিট টেস্ট : YAML কে Kotlin অবজেক্টে ম্যাপ করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা একটি ইউনিট টেস্ট দিয়ে শুরু করি`SiteBakerPluginTest.kt`ফাংশনটি যাচাই করতে`parseSiteConfiguration`এটি সঠিকভাবে YAML স্ট্রিংকে একটি অবজেক্টে রূপান্তর করতে পারে।&amp;lt;code&amp;gt;SiteConfiguration&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// plugin/src/test/kotlin/com/cheroliv/site/baker/SiteBakerPluginTest.kt
@Test
fun `can map configuration text to SiteConfiguration object`() {
    val yamlString = &amp;quot;../../managed-jbake-context.yml&amp;quot;
        .run(::File)
        .readText()
        .trimIndent()

    val config: SiteConfiguration = parseSiteConfiguration(yamlString)

    assertEquals(&amp;quot;cheroliv.com&amp;quot;, config.bake.cname)
    assertEquals(&amp;quot;main&amp;quot;, config.pushPage.branch)
    assertEquals(&amp;quot;https://github.com/pages-content/pages-content.github.io.git&amp;quot;, config.pushPage.repo.repository)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই টেস্টটি ফাইলের বিষয়বস্তু পড়ে`managed-jbake-context.yml`(যাকে পরীক্ষাটি বৈধ হওয়ার জন্য অস্তিত্ব থাকতে হবে) এবং অবজেক্টে অ্যাসার্টিভ্য করে`SiteConfiguration`ফলাফল। এটি যাচাই করে যে YAML-এর কী মানগুলো সঠিকভাবে মানচিত্রিত করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_4_2_ফাংশনাল_টেস্ট_কনফিগারেশন_ফাইল_পড়া_যাচাই_করুন&amp;quot;&amp;gt;4.2. ফাংশনাল টেস্ট: কনফিগারেশন ফাইল পড়া যাচাই করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগিন তার DSL-এর মাধ্যমে কনফিগারেশন ফাইল পড়তে সক্ষম এবং একটি বাস্তব Gradle পরিবেশে পার্সিং কাজ করছে তা নিশ্চিত করতে, আমরা একটি ফাংশনাল টেস্ট যোগ করি`SiteBakerPluginFunctionalTest.kt`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই টেস্টটি গুরুত্বপূর্ণ কারণ এটি একটি প্রকৃত প্রকল্পে প্লাগইন চালানোর অনুকরণ করে। এটি হওয়া উচিত&amp;lt;strong&amp;gt;বাতাসবন্ধনীয়&amp;lt;/strong&amp;gt;, অর্থাৎ, তার নিজেই ফাইলটি তৈরি করতে হবে`managed-jbake-context.yml`নিয়ন্ত্রিত সামগ্রী দিয়ে, পরীক্ষার পুনরাবৃত্তি ও পৃথকতাকে নিশ্চিত করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// plugin/src/functionalTest/kotlin/com/cheroliv/site/baker/SiteBakerPluginFunctionalTest.kt
@Test
fun `config file contains good data`(){
    val configContent = configFile.readText(UTF_8)
    // Vérifications comme dans vos commentaires
    assertTrue(configContent.contains(&amp;quot;bake&amp;quot;))
    assertTrue(configContent.contains(&amp;quot;pushPage&amp;quot;))
    assertTrue(configContent.contains(&amp;quot;repository&amp;quot;))
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ফাংশনাল টেস্টটি যাচাই করে যে পরীক্ষার অস্থায়ী ডিরেক্টরিতে কপি করা কনফিগারেশন ফাইলটি আশাপ্রাপ্ত ডেটা ধারণ করে। যদিও এই টেস্টটি YAML-কে Kotlin অবজেক্টে সরাসরি পার্স না করে, এটি ফাইল এবং এর বিষয়বস্তু উপস্থিতির যাচাই করে, যা প্লাগইন tarafından পার্সের জন্য একটি অপরিহার্য পূর্বশর্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_5_পার্সিং_ফ্লো_ভিজ্যুয়ালাইজেশন&amp;quot;&amp;gt;5. পার্সিং ফ্লো ভিজ্যুয়ালাইজেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত আলোচিত্র ডেটা প্রবাহ এবং ইন্টার্যাকশন YAML কনফিগারেশনের পার্সিংের সময় দেখায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-096719d5547cc459a0ec4bc52588941c.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;1553&amp;quot; height=&amp;quot;472&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি টিডিডি (TDD) পদ্ধতি অনুসরণ করে, আমরা সফলভাবে Jackson লাইব্রেরিকে Gradle প্লাগইনের মধ্যে YAML কনফিগারেশন ফাইলগুলোকে Kotlin অবজেক্টে পার্স করার জন্য একীভূত করেছি। এই পদ্ধতির ফলে আমরা সক্ষম হলাম :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্পষ্টভাবে মডেল তৈরি করা&amp;lt;/strong&amp;gt;আমাদের কনফিগারেশন Kotlin ডেটা ক্লাসের সাথে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পার্সিং লজিক যাচাই করুন&amp;lt;/strong&amp;gt;টার্গেটেড ইউনিট পরীক্ষা।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একীকরণ নিশ্চিত করুন&amp;lt;/strong&amp;gt;একটি বাস্তব Gradle পরিবেশে, হেরমেটিক ফাংশনাল টেস্টের মাধ্যমে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই দৃঢ় ভিত্তি আমাদেরকে আমাদের প্লাগইনকে এই কনফিগারেশনের উপর ভিত্তি করে ফাংশনালিটি যোগ করে বিস্তার করার জন্য বড়ো বিশ্বাস প্রদান করে, এবং কোডের মেইনটেনেবিলিটি এবং দৃঢ়তা নিশ্চিত করে। YAML পার্সিং এখন আমাদের প্লাগইন-এর একটি বিশ্বস্ত ও পরীক্ষিত ফাংশনালিটি।&amp;lt;code&amp;gt;site-baker&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অর্টিকেল ২ : টিডি-ডি পদ্ধতিতে গ্রেডল প্লাগইন তৈরি করুন</title>
            <link >https://cheroliv.com//blog/2025/0090_TDD_gradle_plugin_post.html</link>
            <pubDate>Wed, 24 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0090_TDD_gradle_plugin_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকল্পের_প্রারম্ভণ&amp;quot;&amp;gt;প্রকল্পের প্রারম্ভণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_আমাদের_প্রথম_tdd_চক্র_একটি_কাজ_রেকর্ড_করা&amp;quot;&amp;gt;2. আমাদের প্রথম TDD চক্র: একটি কাজ রেকর্ড করা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_1_প্রথম_পরীক্ষা_ব্যর্থ_হওয়া_পরীক্ষা&amp;quot;&amp;gt;2.1. প্রথম পরীক্ষা (ব্যর্থ হওয়া পরীক্ষা)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_2_কোড_পরবর্তী_টেস্ট_পাস_করা&amp;quot;&amp;gt;2.2. কোড পরবর্তী (টেস্ট পাস করা)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_দ্বিতীয়_সাইকেল_tdd_একটি_dsl_এক্সটেনশন_যোগ_করুন&amp;quot;&amp;gt;3. দ্বিতীয় সাইকেল TDD : একটি DSL এক্সটেনশন যোগ করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_1_প্রথম_টেস্ট&amp;quot;&amp;gt;3.1. প্রথম টেস্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_2_কোড_পরবর্তী&amp;quot;&amp;gt;3.2. কোড পরবর্তী&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_ফাংশনাল_টেস্ট_অন্তর্ভুক্তি_যাচাই_করা&amp;quot;&amp;gt;4. ফাংশনাল টেস্ট : অন্তর্ভুক্তি যাচাই করা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_৪_১_একীভূত_পরীক্ষা_নিয়ন্ত্রিত_পরিবেশ_তৈরি_করুন&amp;quot;&amp;gt;৪.১. একীভূত পরীক্ষা : নিয়ন্ত্রিত পরিবেশ তৈরি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_2_লজিককে_শেষ_করা&amp;quot;&amp;gt;4.2. লজিককে শেষ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে, আমরা কীভাবে একটি Gradle প্লাগইনের জন্য শক্তিশালী ভিত্তি তৈরি করবেন টেস্ট-ড্রিভেন ডেভেলপমেন্ট (TDD - টেস্ট-ড্রিভেন ডেভেলপমেন্ট) পদ্ধতির মাধ্যমে দেখব। এই পদ্ধতিটি নিশ্চিত করে যে আমাদের কোড দৃঢ়, রক্ষণযোগ্য এবং শুরু থেকেই প্রয়োজনীয়তাগুলোকে সঠিকভাবে পূরণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকল্পের_প্রারম্ভণ&amp;quot;&amp;gt;প্রকল্পের প্রারম্ভণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle কমান্ডের সাহায্যে একটি নতুন প্লাগইন তৈরি খুবই সহজ করে।&amp;lt;code&amp;gt;gradle init&amp;lt;/code&amp;gt;. কোটলিন দিয়ে একটি &amp;quot;Gradle Plugin&amp;quot; তৈরি করলে, আমরা একটি প্রস্তুত ব্যবহারযোগ্য প্রকল্পের গঠন পাই, যা দুটি গুরুত্বপূর্ণ ধরনের পরীক্ষা অন্তর্ভুক্ত করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একক পরীক্ষা :&amp;lt;/strong&amp;gt;অবস্থিত`src/test`, তারা আমাদের প্লাগ인의 পৃথক উপাদানগুলো যাচাই করতে সক্ষম করে, যেমন একটি টাস্কের ভিতরের লজিক বা একটি এক্সটেনশন কনফিগারেশন। তারা দ্রুত এবং সম্পূর্ণ Gradle চালানোর প্রয়োজন নেই।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফাংশনাল পরীক্ষা :&amp;lt;/strong&amp;gt;বসিত`src/functionalTest`, তারা ব্যবহার করে`GradleRunner`একটি পূর্ণ Gradle বিল্ড চালু করার জন্য একটি অস্থায়ী টেস্ট প্রকল্পে। এটি আমাদেরকে একটি নিয়ন্ত্রিত পরিবেশে প্লাগইনের বাস্তব আচরণ যাচাই করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_2_আমাদের_প্রথম_tdd_চক্র_একটি_কাজ_রেকর্ড_করা&amp;quot;&amp;gt;2. আমাদের প্রথম TDD চক্র: একটি কাজ রেকর্ড করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের প্রথম প্রয়োজনীয়তা হলো সহজ: প্লাগইনটিকে একটি নামযুক্ত কাজ নথিভুক্ত করতে হবে।&amp;lt;code&amp;gt;printSiteConfig&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_1_প্রথম_পরীক্ষা_ব্যর্থ_হওয়া_পরীক্ষা&amp;quot;&amp;gt;2.1. প্রথম পরীক্ষা (ব্যর্থ হওয়া পরীক্ষা)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;TDD অনুযায়ী, আমরা প্রথমে একটি পরীক্ষা লিখি যা এই কাজের বিদ্যমানতা যাচাই করে। মধ্যে`SiteBakerPluginTest.kt`(আমাদের ইউনিট টেস্ট ফাইল), আমরা যোগ করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `plugin registers task`() {
    // Créer un projet de test en mémoire
    val project = ProjectBuilder.builder().build()
    project.plugins.apply(&amp;quot;com.cheroliv.site-baker&amp;quot;)

    // Vérifier que la tâche a bien été enregistrée
    assertNotNull(project.tasks.findByName(&amp;quot;printSiteConfig&amp;quot;))
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই টেস্ট ব্যর্থ হয়, কারণ আমরা এখনও আমাদের প্লাগইনে কোনো কোড লিখিনি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_2_কোড_পরবর্তী_টেস্ট_পাস_করা&amp;quot;&amp;gt;2.2. কোড পরবর্তী (টেস্ট পাস করা)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন, আমরা প্রয়োজনীয় কোডের পরিমাণ কমতম লিখছি মাঝে`SiteBakerPlugin.kt`পরীক্ষাটি পাস হওয়ার জন্য:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class SiteBakerPlugin: Plugin&amp;amp;lt;Project&amp;amp;gt; {
    override fun apply(project: Project) {
        // Enregistrer une tâche simple
        project.tasks.register(&amp;quot;printSiteConfig&amp;quot;) { task -&amp;amp;gt;
            // ... la logique de la tâche viendra plus tard
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা পরীক্ষা পুনরায় চালু করছি, এবং তারা সফল হয়। আমাদের প্রথম কার্যকারিতা যাচাইকৃত হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_3_দ্বিতীয়_সাইকেল_tdd_একটি_dsl_এক্সটেনশন_যোগ_করুন&amp;quot;&amp;gt;3. দ্বিতীয় সাইকেল TDD : একটি DSL এক্সটেনশন যোগ করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরের_required হল ব্যবহারকারীদেরকে আমাদের প্লাগইন একটি DSL ব্লক ব্যবহার করে তাদের মধ্যে কনফিগারারের অনুমতি দেওয়া।&amp;lt;code&amp;gt;build.gradle.kts&amp;lt;/code&amp;gt;. আমরা একটি ব্লক চাই`site { &amp;amp;#8230;&amp;amp;#8203; }`যেখানে কনফিগারেশন পথ নির্দিষ্ট করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_3_1_প্রথম_টেস্ট&amp;quot;&amp;gt;3.1. প্রথম টেস্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা এক্সটেনশনটি যাচাই করার জন্য একটি পরীক্ষা যোগ করছি`site`ভালভাবে নিবন্ধিত হয়েছে এবং সেখানে একটি মান নির্ধারণ করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `plugin registers extension`() {
    val project = ProjectBuilder.builder().build()
    project.plugins.apply(&amp;quot;com.cheroliv.site-baker&amp;quot;)

    // Récupérer l&amp;#39;extension et lui affecter une valeur
    project.extensions
        .findByType(SiteExtension::class.java)!!
        .configPath
        .set(&amp;quot;config.yml&amp;quot;)

    // Vérifier que la valeur a bien été prise en compte
    assertEquals(
        &amp;quot;config.yml&amp;quot;,
        project.extensions.findByType(SiteExtension::class.java)?.configPath?.get()
    )
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পরীক্ষা ব্যর্থ হয় কারণ কোনো ক্লাস নয়`SiteExtension`এক্সটেনশন রেজিস্ট্রেশনও বিদ্যমান নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_3_2_কোড_পরবর্তী&amp;quot;&amp;gt;3.2. কোড পরবর্তী&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা ক্লাস তৈরি করি`SiteBakerExtension.kt`এবং আপডেট করি`SiteBakerPlugin.kt`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// SiteBakerExtension.kt
open class SiteExtension @Inject constructor(objects: ObjectFactory) {
    val configPath: Property&amp;amp;lt;String&amp;amp;gt; = objects.property(String::class.java)
}

// SiteBakerPlugin.kt
class SiteBakerPlugin: Plugin&amp;amp;lt;Project&amp;amp;gt; {
    override fun apply(project: Project) {
        // Enregistrer l&amp;#39;extension
        val extension = project.extensions.create(&amp;quot;site&amp;quot;, SiteExtension::class.java)

        project.tasks.register(&amp;quot;printSiteConfig&amp;quot;) { task -&amp;amp;gt;
            task.doLast {
                // On utilisera l&amp;#39;extension plus tard
            }
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টেস্টগুলো আবার পাস হচ্ছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_4_ফাংশনাল_টেস্ট_অন্তর্ভুক্তি_যাচাই_করা&amp;quot;&amp;gt;4. ফাংশনাল টেস্ট : অন্তর্ভুক্তি যাচাই করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন ইউনিটগুলি পরীক্ষিত হয়েছে, আমাদের নিশ্চিত করতে হবে যে সবকিছু একসাথে একটি প্রকৃত বিল্ডে কাজ করে। এটি ফাংশনাল টেস্টিং-এর ভূমিকা এতে`SiteBakerPluginFunctionalTest.kt`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_৪_১_একীভূত_পরীক্ষা_নিয়ন্ত্রিত_পরিবেশ_তৈরি_করুন&amp;quot;&amp;gt;৪.১. একীভূত পরীক্ষা : নিয়ন্ত্রিত পরিবেশ তৈরি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই টেস্টটি আমাদের প্লাগইন ব্যবহার করে একটি প্রকৃত প্রকল্পকে অনুকরণ করবে। যোতে এটি বিশ্বাসনীয় হয়, তা হতে হবে&amp;lt;strong&amp;gt;অব্যাহতি&amp;lt;/strong&amp;gt;, অর্থাৎ, এটি সিস্টেমে বিদ্যমান ফাইলগুলের উপর নির্ভর করতে হবে না। এটি নিজেই তার নিষ্পাদনের জন্য প্রয়োজনীয় সব শর্ত তৈরি করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি পরীক্ষা তাহলে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি তৈরি করুন`build.gradle.kts`টেস্টের যা আমাদের প্লাগইন এবং এর DSL ব্যবহার করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কনফিগারেশন ফাইল তৈরি করুন&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;managed-jbake-context.yml&amp;lt;/code&amp;gt;) যে প্লাগইনটি পড়তে উচিত। এইটি পরীক্ষার দৃঢ়তারের জন্য একটি গুরুত্বপূর্ণ ধাপ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কাজটি চালান`printSiteConfig`মাধ్యমে`GradleRunner`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নিশ্চিত করুন যে বিল্ড আউটপুটটি সঠিক।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি চালানোর সময় এই কনফিগারেশন ফাইলটি কপি করে বা তৈরি করে, আমরা নিশ্চিত হইয়া যাই যে পরীক্ষাটি&amp;lt;strong&amp;gt;পুনরুত্পাদনযোগ্য&amp;lt;/strong&amp;gt;এবং এটি বহির্ভুক্ত অবস্থা থেকে নির্ভর করে না। এটি আমাদের পরীক্ষাগুলিকে ফাইল পড়ার কারণে ঘটতে পারে এমন রিগ্রেশন থেকে নিরাপদ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test fun `can run task with DSL`() {
    // 1. Créer un build.gradle.kts de test
    buildFile.writeText(&amp;quot;&amp;quot;&amp;quot;
        plugins { id(&amp;quot;com.cheroliv.site-baker&amp;quot;) }
        site { configPath = &amp;quot;managed-jbake-context.yml&amp;quot; }
    &amp;quot;&amp;quot;&amp;quot;.trimIndent())

    // 2. Créer le fichier de configuration pour un test contrôlé
    val configFile = File(projectDir, &amp;quot;managed-jbake-context.yml&amp;quot;)
    configFile.writeText(&amp;quot;site: { title: &amp;#39;Mon Site de Test&amp;#39; }&amp;quot;) // Contenu YAML simple

    // 3. Exécuter la build
    val runner = GradleRunner.create()
    runner.withPluginClasspath()
    runner.withArguments(&amp;quot;printSiteConfig&amp;quot;)
    runner.withProjectDir(projectDir) // Spécifier le répertoire du projet de test
    val result = runner.build()

    // 4. Vérifier la sortie
    assertTrue(result.output.contains(&amp;quot;Site config path: managed-jbake-context.yml&amp;quot;))
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই টেস্টটি ব্যর্থ হবে যতক্ষণ কাজটি চলছে`printSiteConfig`এটি বাস্তবে এক্সটেনশনের মানটি ব্যবহার করবে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_4_2_লজিককে_শেষ_করা&amp;quot;&amp;gt;4.2. লজিককে শেষ করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা কাজটি আপডেট করছি`SiteBakerPlugin.kt`যাতে এটি কনফিগার করা মানটি দেখায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;project.tasks.register(&amp;quot;printSiteConfig&amp;quot;) { task -&amp;amp;gt;
    task.doLast {
        println(&amp;quot;Site config path: ${extension.configPath.get()}&amp;quot;)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন থেকে সব পরীক্ষা, একক এবং কার্যকরী, পাস হচ্ছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;TDD পদ্ধতির মাধ্যমে, আমরা ধীরে ধীরে এবং নিরাপদে একটি প্লাগইন তৈরি করেছি। প্রতিটি ছোট ফিচারটি অবিলম্বে একটি টেস্ট দিয়ে যাচাই করা হয়—দ্রুত ইউনিট টেস্ট থেকে শুরু করে, পুরো সিস্টেমের ইন্টিগ্রেশন যাচাই করার জন্য ফাংশনাল টেস্ট পর্যন্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের পরীক্ষাগুলো ফাংশনাল করতে যথেষ্ট সতর্কতা বরতেও&amp;lt;strong&amp;gt;বন্ধ&amp;lt;/strong&amp;gt;— বিশেষত প্রয়োজনীয় কনফিগারেশন ফাইলগুলো প্রোগ্রাম্যাটিকভাবে তৈরি করে — আমরা খুবই মজবूत নিরাপত্তার জাল তৈরি করি। এই শৃঙ্খলা আমাকে রিগ্রেশনকে কারगरভাবে রোধ করতে সক্ষম করে এবং পরবর্তীতে YAML কনফিগারেশন ফাইলের পার্সিংের মতো জটিল কার্যকারিতা যোগ করার জন্য আমাকে গরবময় বিশ্বাস দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই দৃঢ় পরীক্ষার ভিত্তি প্লাগইনকে বজায় রাখা ও ভবিষ্যতে উন্নয়নের জন্য সবচেয়ে মূল্যবান সম্পদ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অনুচ্ছেদ ১ : A থেকে Z পর্যন্ত গ্রেডেল প্লাগইন তৈরি করুন gradle init কমান্ড ব্যবহার করে</title>
            <link >https://cheroliv.com//blog/2025/0089_creation_projet_plugin_gradle_post.html</link>
            <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0089_creation_projet_plugin_gradle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_প্রকল্প_সহায়ক_চালু&amp;quot;&amp;gt;ধাপ ১ : প্রকল্প সহায়ক চালু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_2_উৎপন্ন_গঠন_বোঝা&amp;quot;&amp;gt;ধাপ 2: উৎপন্ন গঠন বোঝা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রধান_ফাইল_এবং_ফোল্ডার&amp;quot;&amp;gt;প্রধান ফাইল এবং ফোল্ডার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;লক্ষ্য পাঠক : Gradle দিয়ে প্রারম্ভিক থেকে মধ্যম স্তরের ডেভেলপার.&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;একটি নতুন Gradle প্লাগইন প্রকল্প শুরু করা ভয়ঙ্কর মনে হতে পারে। শুভavasti, Gradle একটি শক্তিশালী ইন্টারেক্টিভ সহায়ক সরবরাহ করে, টাস্ক`init`, যে একটি সম্পূর্ণ, পরিষ্কার এবং ব্যবহারের জন্য প্রস্তুত প্রকল্প গঠন তৈরি করে। এই গাইড আপনাকে দেখাবে কীভাবে এই টুলটি ব্যবহার করে একটি স্বস্ত প্লাগইন ভিত্তি তৈরি করতে, এর কাঠামো ব্যাখ্যা করে এবং প্রথম বিল্ড কাজগুলো চালু করার উপায় দেখাবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_১_প্রকল্প_সহায়ক_চালু&amp;quot;&amp;gt;ধাপ ১ : প্রকল্প সহায়ক চালু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আদেশ`gradle init`হল প্রারম্ভিক বিন্দু। এটি একটি কমান্ড-লাইন সহায়ক চালায় যা আপনাকে প্রকল্পটি কনফিগার করতে একটি সিরিজ প্রশ্ন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;খালি ফোল্ডারে আপনার টার্মিনাল খুলুন এবং চালু দিন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;gradle init&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অসিস্টেন্ট আপনাকে নির্দেশ করবে। নিম্নলিখিত বেছে নেওয়ার বিকল্পগুলো হল একটি কোটলিন-লিখিত গ্রেডল প্লাগইন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;জেনারেট করতে প্রকল্পের প্রকার নির্বাচন করুন:&amp;lt;/strong&amp;gt;বাছুন`Gradle plugin`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বাস্তবায়ন ভাষা নির্বাচন করুন:&amp;lt;/strong&amp;gt;বেছে নিন`Kotlin`।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিল্ড স্ক্রিপ্ট DSL নির্বাচন করুন:&amp;lt;/strong&amp;gt;বাছাই করুন`Kotlin`.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রজেক্টের নাম:&amp;lt;/strong&amp;gt;আপনার প্রকল্পের জন্য নাম দিন(উদাহরণ:`site-baker`).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্লাগইন আইডি:&amp;lt;/strong&amp;gt;আপনার প্লাগইনকে একটি অনন্য শনাক্তকারী দিন (উদাহরণ:`com.cheroliv.site-baker`).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্লাগিন ক্লাস:&amp;lt;/strong&amp;gt;বাস্তবায়ন ক্লাসের নাম নির্দিষ্ট করুন (উদাহরণ:`com.cheroliv.SiteBakerPlugin`).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(Note: The output includes a closing parenthesis, a backtick, and a trailing space exactly as in the input.)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শেষ হয়ে গেলে, Gradle একটি সম্পূর্ণ ফাইল ট্রি তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;init-gradle.svg&amp;quot; alt=&amp;quot;init gradle&amp;quot; width=&amp;quot;195&amp;quot; height=&amp;quot;406&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. প্রারম্ভ প্রক্রিয়ার ডায়াগ্রাম&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_2_উৎপন্ন_গঠন_বোঝা&amp;quot;&amp;gt;ধাপ 2: উৎপন্ন গঠন বোঝা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাহায্যকারী একটি মাল্টি-মডিউল প্রকল্প গঠন তৈরি করে, মূল প্রকল্পকে প্লাগিনের উৎস কোড থেকে আলাদা করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;.
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── plugin/
│   ├── build.gradle.kts
│   └── src/
│       ├── main/
│       │   └── kotlin/
│       │       └── com/cheroliv/SiteBakerPlugin.kt
│       ├── test/
│       │   └── kotlin/
│       │       └── com/cheroliv/SiteBakerPluginTest.kt
│       └── functionalTest/
│           └── kotlin/
│               └── com/cheroliv/SiteBakerPluginFunctionalTest.kt
└── settings.gradle.kts&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রধান_ফাইল_এবং_ফোল্ডার&amp;quot;&amp;gt;প্রধান ফাইল এবং ফোল্ডার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;settings.gradle.kts`এই ফাইলটি রুটে বিল্ডে অন্তর্ভুক্ত মডিউলগুলো নির্ধারণ করে। এখানে, এটি সাব-প্রজেক্টটি অন্তর্ভুক্ত করে।`plugin&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;[source,kotlin] &amp;amp;lt;/think&amp;amp;gt; rootProject.name = &amp;quot;site-baker include(&amp;quot;plugin&amp;quot;) ----&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অনুচ্ছেদ ০ : গ্রেডল প্লাগইন তৈরি করার জন্য পরিবেশ সেটআপ</title>
            <link >https://cheroliv.com//blog/2025/0088_environnement_plugin_gradle_post.html</link>
            <pubDate>Mon, 22 Sep 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0088_environnement_plugin_gradle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_1_jdk_gradle_ইর_ইঞ্জিন&amp;quot;&amp;gt;1. JDK: Gradle-ইর ইঞ্জিন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কোন_সংস্করণ_বেছে_নিবেন&amp;quot;&amp;gt;কোন সংস্করণ বেছে নিবেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sdkman_এর_মাধ্যমে_ইনস্টলেশন_প্রস্তাবিত&amp;quot;&amp;gt;SDKMAN! এর মাধ্যমে ইনস্টলেশন (প্রস্তাবিত)&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টল_sdkman&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ইনস্টল SDKMAN!&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jdk_এর_একটি_সংস্করণ_ইনস্টল_করুন&amp;quot;&amp;gt;JDK-এর একটি সংস্করণ ইনস্টল করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন_যাচাই_করুন&amp;quot;&amp;gt;ইনস্টলেশন যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_আইডিই_intellij_idea&amp;quot;&amp;gt;2. আইডিই : IntelliJ IDEA&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_gradle_বিল্ড_টুল&amp;quot;&amp;gt;3. Gradle : বিল্ড টুল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sdkman_er_মাধ্যমে_ingresos&amp;quot;&amp;gt;SDKMAN-er মাধ্যমে ingresos!&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_gradle_ইনস্টল_করুন&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Gradle ইনস্টল করুন&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন_যাচাই_করুন_2&amp;quot;&amp;gt;ইনস্টলেশন যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_jbake_স্ট্যাটিক_সাইট_জেনারেটর&amp;quot;&amp;gt;4. JBake : স্ট্যাটিক সাইট জেনারেটর&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sdkmanএর_মধ্যে_ইনস্টলেশন&amp;quot;&amp;gt;SDKMAN!এর মধ্যে ইনস্টলেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jbake_ইনস্টল_করুন&amp;quot;&amp;gt;JBake ইনস্টল করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইনস্টলেশন_যাচাই&amp;quot;&amp;gt;ইনস্টলেশন যাচাই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_5_গ্রেডল_র্যাপার_পরিপূর্ণ_ভালো_প্র্যাকটিস&amp;quot;&amp;gt;5. গ্রেডল র‍্যাপার: পরিপূর্ণ ভালো প্র্যাকটিস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_6_ডকার_ও_পোর্টাইনার_পুনরুৎপাদনযোগ্য_বিল্ড_ঐচ্ছিক&amp;quot;&amp;gt;6. ডকার ও পোর্টাইনার : পুনরুৎপাদনযোগ্য বিল্ড (ঐচ্ছিক)&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডকার_ইঞ্জিনের_ইনস্টলেশন&amp;quot;&amp;gt;ডকার ইঞ্জিনের ইনস্টলেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অফিশিয়াল_স্ক্রিপ্টের_মাধ্যমে_docker_ইনস্টল_করুন&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অফিশিয়াল স্ক্রিপ্টের মাধ্যমে Docker ইনস্টল করুন :&amp;lt;/strong&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_dockerকে_sudo_ছাড়া_ব্যবহার_করুন_সুপারিশ_করা_হয়েছে&amp;quot;&amp;gt;**Dockerকে &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; ছাড়া ব্যবহার করুন (সুপারিশ করা হয়েছে) :&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পোর্টেইনার_gui_ব্যবহার_করে_docker_পরিচালনা_করুন&amp;quot;&amp;gt;পোর্টেইনার (GUI) ব্যবহার করে Docker পরিচালনা করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ভলিউম_তৈরি_করুন_পোর্টেইনারের_ডেটা_জোন诺&amp;quot;&amp;gt;একটি ভলিউম তৈরি করুন পোর্টেইনারের ডেটা জোন诺 :&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_portainer_কনটেইনার_চালু_করุ่น&amp;quot;&amp;gt;Portainer কনটেইনার চালু করุ่น:&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;quot;.লক্ষ্য দর্শক : Gradle প্লাগিন তৈরি করা শুরু করতে ইচ্ছুক ডেভেলপাররা।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Gradle প্লাগাইন দক্ষতার সাথে উন্নয়ন করতে, একটি ভালভাবে কনফিগার করা উন্নয়ন পরিবেশ অপরিহার্য। একটি ভাল সেটআপ আপনার সময় বাঁচাবে, বিরক্তি কমবে এবং আপনার বিল্ডদের সততা নিশ্চিত করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এই গাইড চারটি মৌলিক স্তম্ভের ও在乎&amp;lt;/div&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Le &amp;lt;strong&amp;gt;JDK&amp;lt;/strong&amp;gt;(Java Development Kit), কারণ Gradle এবং JBake JVM-এ চালু হয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Un &amp;lt;strong&amp;gt;IDE&amp;lt;/strong&amp;gt;আধুনিক (IntelliJ IDEA) কোটলিন ও Gradle-কে ভালো সমর্থন দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Gradle&amp;lt;/strong&amp;gt;ত নিজেই, প্রকল্পগুলো শুরু করার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;JBake&amp;lt;/strong&amp;gt;, আমাদের স্ট্যাটিক সাইটের ইঞ্জিন.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/gradle-env.svg&amp;quot; alt=&amp;quot;gradle env&amp;quot; width=&amp;quot;1590&amp;quot; height=&amp;quot;5708&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. &amp;quot;.বিকাশ পরিবেশের উপকরণ&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_1_jdk_gradle_ইর_ইঞ্জিন&amp;quot;&amp;gt;1. JDK: Gradle-ইর ইঞ্জিন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle একটি অ্যাপ্লিকেশন যা Java ভায়ারচুয়াল মেশিন (JVM)-এ চলায়। সুতরাং, একটি JDK ইনস্টল করা একটি অপরিহার্য পূর্বশর্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কোন_সংস্করণ_বেছে_নিবেন&amp;quot;&amp;gt;কোন সংস্করণ বেছে নিবেন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Java-এ একটি LTS (Long-Term Support) সংস্করণ ব্যবহার করা পরামর্শ দেওয়া হয়। এখন,&amp;lt;strong&amp;gt;JDK ১৭&amp;lt;/strong&amp;gt; ou &amp;lt;strong&amp;gt;JDK ২১&amp;lt;/strong&amp;gt;চমৎকার পছন্দ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_sdkman_এর_মাধ্যমে_ইনস্টলেশন_প্রস্তাবিত&amp;quot;&amp;gt;SDKMAN! এর মাধ্যমে ইনস্টলেশন (প্রস্তাবিত)&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;SDKMAN! একটি অসাধারণ টুল যাতে অনেক SDK-এর সংস্করণ ব্যবস্থাপনা করা যায়, যার মধ্যে Java এবং Gradle অন্তর্ভুক্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_ইনস্টল_sdkman&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ইনস্টল SDKMAN!&amp;lt;/strong&amp;gt;&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;curl -s &amp;quot;https://get.sdkman.io&amp;quot; | bash source &amp;quot;$HOME/.sdkman/bin/sdkman-init.sh&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_jdk_এর_একটি_সংস্করণ_ইনস্টল_করুন&amp;quot;&amp;gt;JDK-এর একটি সংস্করণ ইনস্টল করুন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Pour lister les versions de Java disponibles sdk list java

# Pour installer Java 17 (par exemple, la distribution Temurin)
sdk install java 17.0.8-tem&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_ইনস্টলেশন_যাচাই_করুন&amp;quot;&amp;gt;ইনস্টলেশন যাচাই করুন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;java -version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যে সংস্করণটি আপনি এখন ইনস্টল করেছেন তা দেখতে পাবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_2_আইডিই_intellij_idea&amp;quot;&amp;gt;2. আইডিই : IntelliJ IDEA&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle প্লাগইন ডেভেলপমেন্টের জন্য Kotlin DSL এর সাথে,&amp;lt;strong&amp;gt;IntelliJ IDEA&amp;lt;/strong&amp;gt;এটি পছন্দের সরঞ্জাম। এর Gradle এবং Kotlin সঙ্গে একীকরণ অপারম্পর।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্প্রদায় সংস্করণ :&amp;lt;/strong&amp;gt;বিনামূল্যে এবং শুরু করার জন্য খুব পর্যাপ্ত.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অ্যালটিমেট এডিশন :&amp;lt;/strong&amp;gt;প্রিমিয়াম, এটি ওয়েব ডেভেলপমেন্ট এবং ডেটাবেসের জন্য উন্নত ফিচার প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার জন্য উপযুক্ত সংস্করণটি JetBrains ওয়েবসাইট থেকে ডাউনলোড করুন: &amp;lt;a href=&amp;quot;https://www.jetbrains.com/idea/download/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://www.jetbrains.com/idea/download/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;IDE স্বয়ংক্রিয়ভাবে আপনার ফাইলগুলো সনাক্ত করবে`build.gradle.kts` et &amp;lt;code&amp;gt;settings.gradle.kts&amp;lt;/code&amp;gt;, আপনাকে শক্তিশালী অটো-কম্প্লিটেশন, কোড নেভিগেশন এবং ইন্টিগ্রেটেড ডিবাগিং টুলস প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_3_gradle_বিল্ড_টুল&amp;quot;&amp;gt;3. Gradle : বিল্ড টুল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যদিও প্রতিটি প্রকল্প Gradle Wrapper‑এর মাধ্যমে Gradle‑এর নিজস্ব সংস্করণ ব্যবহার করবে, গ্লোবাল Gradle ইনস্টল করা নতুন প্রকল্পের আরম্ভের মতো কাজের জন্য উপকারী (&amp;lt;code&amp;gt;gradle init&amp;lt;/code&amp;gt;).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_sdkman_er_মাধ্যমে_ingresos&amp;quot;&amp;gt;SDKMAN-er মাধ্যমে ingresos!&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জেডিকেজের মতোই, SDKMAN! গ্রেডলের ইনস্টলেশনকে সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_gradle_ইনস্টল_করুন&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Gradle ইনস্টল করুন&amp;lt;/strong&amp;gt;&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sdk install gradle&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_ইনস্টলেশন_যাচাই_করুন_2&amp;quot;&amp;gt;ইনস্টলেশন যাচাই করুন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;gradle -v&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কমান্ডটি Gradle, Kotlin, Groovy এবং JDK-এর ব্যবহৃত সংস্করণগুলো দেখাবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_4_jbake_স্ট্যাটিক_সাইট_জেনারেটর&amp;quot;&amp;gt;4. JBake : স্ট্যাটিক সাইট জেনারেটর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;JBake হল আমরা যে টুলটি ব্যবহার করবো আমাদের সোর্স ফাইলগুলোকে (যেমন এইটি) স্ট্যাটিক ওয়েবসাইটে রূপান্তর করতে। একটি স্থানীয় ইনস্টলেশন থাকা পরিবর্তerin সুবিধাজনক.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_sdkmanএর_মধ্যে_ইনস্টলেশন&amp;quot;&amp;gt;SDKMAN!এর মধ্যে ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;SDKMAN! সবচেয়ে সহজ পদ্ধতি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_jbake_ইনস্টল_করুন&amp;quot;&amp;gt;JBake ইনস্টল করুন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sdk install jbake&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_ইনস্টলেশন_যাচাই&amp;quot;&amp;gt;ইনস্টলেশন যাচাই&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;jbake -v&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি কমান্ডটি JBake এর সংস্করণ এবং তা যে Java পরিবেশ ব্যবহার করে তা সম্পর্কিত তথ্য প্রদর্শন করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_5_গ্রেডল_র্যাপার_পরিপূর্ণ_ভালো_প্র্যাকটিস&amp;quot;&amp;gt;5. গ্রেডল র‍্যাপার: পরিপূর্ণ ভালো প্র্যাকটিস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একবার আপনার প্রকল্পটি তৈরি হয়ে গেলে (যা আমরা পরবর্তী নিবন্ধে দেখব), আপনি আর globals কমান্ডটি ব্যবহার করা উচিত না।&amp;lt;code&amp;gt;gradle&amp;lt;/code&amp;gt;. দিকে, আপনি এটি ব্যবহার করবেন&amp;lt;strong&amp;gt;গ্র্যেডল ওয়ার্যাপার&amp;lt;/strong&amp;gt;(&amp;lt;code&amp;gt;./gradlew&amp;lt;/code&amp;gt;), আপনার প্রকল্পে অন্তর্ভুক্ত একটি স্ক্রিপ্ট.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কেন?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পুনরুৎপাদনযোগ্যতা :&amp;lt;/strong&amp;gt;এই র‍্যাপার নিশ্চিত করে যে প্রকল্পে কাজ করছে প্রত্যেকো ব্যক্তি (আপনার CI/CD সার্ভার সহ) ঠিকভাবে ব্যবহার করে&amp;lt;strong&amp;gt;একই সংস্করণের গ্র্যাডল&amp;lt;/strong&amp;gt;, এভাবে বিভিন্ন পরিবেশের কারণে বিল্ড ত্রুটি দূর করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সরলতা :&amp;lt;/strong&amp;gt;একটি প্রকল্পে অবদান রাখতে ম্যানুয়ালি Gradle ইনস্টল করার দরকার নেই।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুধু সংগ্রহস্থলটি ক্লোন করুন এবং চালু করুন`./gradlew`।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি স্বাভাবিক কমান্ড এইভাবে দেখাবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Ne pas faire : gradle build
# À faire :
./gradlew build&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_6_ডকার_ও_পোর্টাইনার_পুনরুৎপাদনযোগ্য_বিল্ড_ঐচ্ছিক&amp;quot;&amp;gt;6. ডকার ও পোর্টাইনার : পুনরুৎপাদনযোগ্য বিল্ড (ঐচ্ছিক)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি প্লাগইন লিখতে সঠিকভাবে প্রয়োজন হলেও না, Docker এবং Portainer আধুনিক DevOps সরঞ্জাম, যা reproducible বিল্ড তৈরি এবং আপনার পরিবেশের ব্যবস্থাপনাকে খুব সহজ করে তোলে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডকার_ইঞ্জিনের_ইনস্টলেশন&amp;quot;&amp;gt;ডকার ইঞ্জিনের ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Docker আপনাকে আপনার অ্যাপ্লিকেশন এবং এর নির্ভরশীলতাগুলি একটি কন্টেইনারে প্যাক করতে দেয়.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অফিশিয়াল_স্ক্রিপ্টের_মাধ্যমে_docker_ইনস্টল_করুন&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অফিশিয়াল স্ক্রিপ্টের মাধ্যমে Docker ইনস্টল করুন :&amp;lt;/strong&amp;gt;&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_dockerকে_sudo_ছাড়া_ব্যবহার_করুন_সুপারিশ_করা_হয়েছে&amp;quot;&amp;gt;**Dockerকে &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; ছাড়া ব্যবহার করুন (সুপারিশ করা হয়েছে) :&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার ব্যবহারকারীকে গোষ্ঠiere যোগ করুন`docker`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo usod -aG docker $USER&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;Important&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;

&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;docker run hello-world&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পোর্টেইনার_gui_ব্যবহার_করে_docker_পরিচালনা_করুন&amp;quot;&amp;gt;পোর্টেইনার (GUI) ব্যবহার করে Docker পরিচালনা করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Portainer হল একটি হালকা ওয়েব ইন্টারফেস যা আপনার ডকার কনটেইনার পরিচালনা করতে ব্যবহৃত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_একটি_ভলিউম_তৈরি_করুন_পোর্টেইনারের_ডেটা_জোন诺&amp;quot;&amp;gt;একটি ভলিউম তৈরি করুন পোর্টেইনারের ডেটা জোন诺 :&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;docker volume create portainer_data&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_portainer_কনটেইনার_চালু_করุ่น&amp;quot;&amp;gt;Portainer কনটেইনার চালু করุ่น:&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি এখন পোর্টায়েনার ইন্টারফেসটি উপরে অ্যাক্সেস করতে পারেন`https://localhost:9443`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার পরিবেশ এখন প্রস্তুত! আপনার কাছে একটি JDK, সবচেয়ে উপযুক্ত IDE, Gradle এবং JBake আছে। ডকার যোগড়া করলে, আপনিও কনটেইনারাইজড এবং পুনরুৎপাদনযোগ্য বিল্ডগুলো তৈরি করতে প্রস্তুত। এই দৃঢ় ভিত্তি আপনাকে মৌলিক দিকগুলিতে—শক্তিশালী ও উপযোগী প্লাগইন উন্নয়নে— ফোকাস করতে সাহায্য করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আসন্ন নিবন্ধে, আমরা কমান্ডটি ব্যবহার করব।`gradle init`আমাদের প্রথম প্লাগইন প্রকল্পের গঠন তৈরি করার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>CI/CD Python – অংশ ৩: PoeTry, Docker ও উন্নত প্রকাশের সাথে আরও অগ্রসর হইয়া</title>
            <link >https://cheroliv.com//blog/2025/0087_pypi_cicd_part_3_post.html</link>
            <pubDate>Sat, 19 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0087_pypi_cicd_part_3_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_poetry_এর_সাথে_একীকরণ&amp;quot;&amp;gt;Poetry-এর সাথে একীকরণ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_poetry_ইন্সটলেশন&amp;quot;&amp;gt;Poetry ইন্সটলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকল্পের_শুরু&amp;quot;&amp;gt;প্রকল্পের শুরু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নির্ভরতা_যোগ_ও_ইনস্টলেশন&amp;quot;&amp;gt;নির্ভরতা যোগ ও ইনস্টলেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকাশ_poetry_এর_সাথে&amp;quot;&amp;gt;প্রকাশ Poetry-এর সাথে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডকার_দিয়ে_পুনরুত্পাদনযোগ্য_বিল্ড&amp;quot;&amp;gt;ডকার দিয়ে পুনরুত্পাদনযোগ্য বিল্ড&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_dockerfile_উদাহরণ&amp;quot;&amp;gt;Dockerfile উদাহরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_github_actions_এ_ইন্টিগ্রেশন&amp;quot;&amp;gt;GitHub Actions-এ ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শর্তাধীন_প্রকাশ&amp;quot;&amp;gt;শর্তাধীন প্রকাশ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_renovate_এবং_dependabot_দিয়ে_নির্ভরতা_অটোমেশন&amp;quot;&amp;gt;Renovate এবং Dependabot দিয়ে নির্ভরতা অটোমেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_dependabot&amp;quot;&amp;gt;Dependabot&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নবীকরণ_করা&amp;quot;&amp;gt;নবীকরণ করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_plantuml_ডায়াগ্রাম&amp;quot;&amp;gt;PlantUML ডায়াগ্রাম&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহার_কেস_উন্নত_cicd&amp;quot;&amp;gt;ব্যবহার কেস – উন্নত CI/CD&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্রম_শর্তাধীন_প্রকাশনা&amp;quot;&amp;gt;ক্রম – শর্তাধীন প্রকাশনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রাজ্য_পাইপলাইন_cicd&amp;quot;&amp;gt;রাজ্য – পাইপলাইন CI/CD&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডিপ্লয়মেন্ট_cicd_আর্কিটেকচার&amp;quot;&amp;gt;ডিপ্লয়মেন্ট – CI/CD আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সিরিজের πρώτο দুটি অংশে, আমরা : - একটি কার্যকর CI/CD পাইপলাইন স্থাপন করা হয়েছে একটি পাইথন অ্যাপ্লিকেশনের জন্য GitHub Actions এবং PyPI ব্যবহার করে। - এই পাইপলাইনটি মাল্টি-ভার্সন টেস্ট, টেস্ট পিপিআই এর মাধ্যমে ক্রমবর্ধমান প্রকাশ এবং গুণগত ও নিরাপত্তা সরঞ্জাম সহ উন্নত করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তৃতীয় অংশে, আমরা যাব&amp;lt;strong&amp;gt;PyPI-এ সহজ প্রকাশের চেয়ে বেশি&amp;lt;/strong&amp;gt;একটি পুরো, মজবুত ও পেশাদার CI/CD পাইপলাইন তৈরি করতে : - &amp;lt;strong&amp;gt;কবিতা&amp;lt;/strong&amp;gt;একটি আধুনিক প্যাকেজিংয়ের জন্য এবং একটি অপ্টিমাইজড নির্ভরতা ব্যবস্থাপনার জন্য. - &amp;lt;strong&amp;gt;Docker&amp;lt;/strong&amp;gt;পুনরাবৃত্তি যোগ্য এবং মাল্টি-প্ল্যাটফর্ম বিল্ড তৈরি করতে - &amp;lt;strong&amp;gt;শর্তীয় প্রকাশ&amp;lt;/strong&amp;gt;rilিজ ক্যান্ডिडেটদের মতো সzenারリオ পরিচালনা করার জন্য। - &amp;lt;strong&amp;gt;স্বয়ংক্রিয়করণ সরঞ্জাম&amp;lt;/strong&amp;gt;(Renovate, Dependabot) পাইপলাইনকে আপ-টু-ডেট রাখে কোনো প্রচেষ্টা ছাড়াই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_poetry_এর_সাথে_একীকরণ&amp;quot;&amp;gt;Poetry-এর সাথে একীকরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Poetry (setup.py, requirements.txt) প্রাচীন প্যাকেজিং টুলগুলোকে প্রতিস্থাপন করে, নির্ভরশীলতা ও বিল্ড ব্যবস্থাপনাকে কেন্দ্রিক করে, মধ্যে`pyproject.toml`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_poetry_ইন্সটলেশন&amp;quot;&amp;gt;Poetry ইন্সটলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;shell&amp;quot;&amp;gt;# Installer Poetry
curl -sSL https://install.python-poetry.org | python3 -
# Vérifier la version
poetry --version&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রকল্পের_শুরু&amp;quot;&amp;gt;প্রকল্পের শুরু&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;shell&amp;quot;&amp;gt;# Initialiser un nouveau projet avec Poetry
poetry init
# Suivre l&amp;#39;assistant pour renseigner : nom, version, description, licence, dépendances.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি ফাইল তৈরি করে`pyproject.toml`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;toml&amp;quot;&amp;gt;[tool.poetry]
name = &amp;quot;playlist-downloader&amp;quot;
version = &amp;quot;0.1.0&amp;quot;
description = &amp;quot;CLI tool for managing YouTube playlists&amp;quot;
authors = [&amp;quot;Christophe Hérolivier &amp;amp;lt;cheroliv@example.com&amp;amp;gt;&amp;quot;]

[tool.poetry.dependencies]
python = &amp;quot;&amp;amp;gt;=3.8&amp;quot;
typer = &amp;quot;^0.9.0&amp;quot;
yt-dlp = &amp;quot;^2023.7.6&amp;quot;
google-api-python-client = &amp;quot;^2.0.0&amp;quot;
google-auth-oauthlib = &amp;quot;^1.0.0&amp;quot;

[tool.poetry.group.dev.dependencies]
pytest = &amp;quot;^7.0&amp;quot;
mypy = &amp;quot;^1.0&amp;quot;
bandit = &amp;quot;^1.7&amp;quot;
safety = &amp;quot;^2.3&amp;quot;
black = &amp;quot;^23.0&amp;quot;
ruff = &amp;quot;^0.1&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নির্ভরতা_যোগ_ও_ইনস্টলেশন&amp;quot;&amp;gt;নির্ভরতা যোগ ও ইনস্টলেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;shell&amp;quot;&amp;gt;poetry add typer yt-dlp google-api-python-client google-auth-oauthlib
poetry add --group dev pytest mypy black bandit safety ruff&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রকাশ_poetry_এর_সাথে&amp;quot;&amp;gt;প্রকাশ Poetry-এর সাথে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Poetry প্রকাশনাটি নেটিভভাবে পরিচালনা করতে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;shell&amp;quot;&amp;gt;# Publication sur Test PyPI
poetry publish --build --repository test-pypi

# Publication sur PyPI
poetry publish --build&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কমান্ডটি স্বয়ংক্রিয়ভাবে উপস্থিত তথ্য ব্যবহার করে`pyproject.toml`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডকার_দিয়ে_পুনরুত্পাদনযোগ্য_বিল্ড&amp;quot;&amp;gt;ডকার দিয়ে পুনরুত্পাদনযোগ্য বিল্ড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিকাশ, CI/CD এবং উৎপাদনে একই চালান নিশ্চিত করতে, Docker সম্পূর্ণরূপে Poetry-এর সাথে একীভূত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_dockerfile_উদাহরণ&amp;quot;&amp;gt;Dockerfile উদাহরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;dockerfile&amp;quot;&amp;gt;FROM python:3.11-slim

WORKDIR /app
COPY pyproject.toml poetry.lock ./
RUN pip install poetry
RUN poetry install --no-root --only main

COPY . .

CMD [&amp;quot;poetry&amp;quot;, &amp;quot;run&amp;quot;, &amp;quot;python&amp;quot;, &amp;quot;cli.py&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি নিশ্চিত করে : - একটি ফ্রোজেন Python পরিবেশ। - বন্ধ করা নির্ভরতা মাধ্যমে`poetry.lock`. - ডকার সমর্থিত সিস্টেমে চলার জন্য উপযোগী একটি ছবি.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_github_actions_এ_ইন্টিগ্রেশন&amp;quot;&amp;gt;GitHub Actions-এ ইন্টিগ্রেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;name: Docker Build

on:
  push:
    branches: [main]

jobs:
  build-docker:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Build Docker image
        run: docker build -t ghcr.io/${{ github.repository }}:latest .
      - name: Push Docker image
        run: docker push ghcr.io/${{ github.repository }}:latest&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শর্তাধীন_প্রকাশ&amp;quot;&amp;gt;শর্তাধীন প্রকাশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Dans un pipeline professionnel, il faut pouvoir publier uniquement dans certains cas :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি পেশাগত পাইপলাইনে, কেবল কিছু ক্ষেত্রে প্রকাশ করতে হ&amp;amp;#8217;ব : - রিলিজ ক্যান্ডিডেটস Test PyPI-এর জন্য - স্থির সংস্করণ PyPI-এ - Builds ডককার শুধুমাত্র ট্রিগার করা`main`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;- name: Publish to Test PyPI
  if: contains(github.ref, &amp;#39;-rc&amp;#39;)
  run: poetry publish --build --repository test-pypi

- name: Publish to PyPI
  if: startsWith(github.ref, &amp;#39;refs/tags/v&amp;#39;)
  run: poetry publish --build&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি আকস্মিক প্রকাশনাগুলি এড়িয়ে যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_renovate_এবং_dependabot_দিয়ে_নির্ভরতা_অটোমেশন&amp;quot;&amp;gt;Renovate এবং Dependabot দিয়ে নির্ভরতা অটোমেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার নির্ভরতাগুলি প্রাচীন না হওয়া থেকে বিরত রাখুন, স্বয়ংক্রিয় আপডেটের সরঞ্জামগুলোকে অন্তর্ভুক্ত করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_dependabot&amp;quot;&amp;gt;Dependabot&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;version: 2
updates:
  - package-ecosystem: &amp;quot;pip&amp;quot;
    directory: &amp;quot;/&amp;quot;
    schedule:
      interval: &amp;quot;weekly&amp;quot;
  - package-ecosystem: &amp;quot;github-actions&amp;quot;
    directory: &amp;quot;/&amp;quot;
    schedule:
      interval: &amp;quot;weekly&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Dependabot প্রতিসপ্তাহ PR খুলে Python এবং GitHub Actions এর নির্ভরতা আপডেট করার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নবীকরণ_করা&amp;quot;&amp;gt;নবীকরণ করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  &amp;quot;extends&amp;quot;: [&amp;quot;config:base&amp;quot;],
  &amp;quot;packageRules&amp;quot;: [
    {
      &amp;quot;matchManagers&amp;quot;: [&amp;quot;pip&amp;quot;],
      &amp;quot;groupName&amp;quot;: &amp;quot;python-dependencies&amp;quot;,
      &amp;quot;schedule&amp;quot;: [&amp;quot;before 6am on monday&amp;quot;]
    }
  ]
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Renovate আরও সূক্ষ্ম নিয়ন্ত্রণের অনুমতি দেয়: নির্ভরতাগুলোর গোষ্ঠীভুক্তি, পরিকল্পনা এবং উন্নত বিধি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_plantuml_ডায়াগ্রাম&amp;quot;&amp;gt;PlantUML ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহার_কেস_উন্নত_cicd&amp;quot;&amp;gt;ব্যবহার কেস – উন্নত CI/CD&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/usecase-cicd.svg&amp;quot; alt=&amp;quot;usecase cicd&amp;quot; width=&amp;quot;821&amp;quot; height=&amp;quot;317&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্রম_শর্তাধীন_প্রকাশনা&amp;quot;&amp;gt;ক্রম – শর্তাধীন প্রকাশনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/sequence-cicd.svg&amp;quot; alt=&amp;quot;sequence cicd&amp;quot; width=&amp;quot;275&amp;quot; height=&amp;quot;571&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রাজ্য_পাইপলাইন_cicd&amp;quot;&amp;gt;রাজ্য – পাইপলাইন CI/CD&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/states-cicd.svg&amp;quot; alt=&amp;quot;states cicd&amp;quot; width=&amp;quot;284&amp;quot; height=&amp;quot;608&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডিপ্লয়মেন্ট_cicd_আর্কিটেকচার&amp;quot;&amp;gt;ডিপ্লয়মেন্ট – CI/CD আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/deployment-cicd.svg&amp;quot; alt=&amp;quot;deployment cicd&amp;quot; width=&amp;quot;1582&amp;quot; height=&amp;quot;5640&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই তৃতীয় অংশে, আমরা দেখেছি কিভাবে : কবিতাকে ব্যবহার করে পাইথন প্যাকেজিং আধুনিকীকরণ করুন। - ডকারের মাধ্যমে পুনরুত্পাদনযোগ্য বিল্ড নিশ্চিত করুন। - একটি শর্তাধীন প্রকাশন স্থাপন করা। - ডিপেন্ডেন্সি আপডেট স্বয়ংক্রিয়করণ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি এখন একটি CI/CD পাইপলাইন পেয়েছেন।&amp;lt;strong&amp;gt;সম্পূর্ণ, উদ্যোগীকৃত এবং নিরাপদ&amp;lt;/strong&amp;gt;, আপনার প্রকল্পগুলোকে উন্নয়ন করতে প্রস্তুত.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অংশ 2 : শিল্পায়ত করা এবং নিরাপদ করা উন্নত পাইথন CI/CD পাই্পলাইন</title>
            <link >https://cheroliv.com//blog/2025/0086_pypi_cicd_part_2_post.html</link>
            <pubDate>Fri, 18 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0086_pypi_cicd_part_2_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_cicd_পাইপলাইনের_আর্কিটেকচার&amp;quot;&amp;gt;CI/CD পাইপলাইনের আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রকল্পের_গঠন&amp;quot;&amp;gt;প্রকল্পের গঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_pyproject_toml_ব্যবহার_করে_প্যাকেজ_কনফিগারেশন&amp;quot;&amp;gt;pyproject.toml ব্যবহার করে প্যাকেজ কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_cicd_ওয়ার্কফ্লো_পরীক্ষা_এবং_গুণমান&amp;quot;&amp;gt;CI/CD ওয়ার্কফ্লো - পরীক্ষা এবং গুণমান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রিলিজ_ও_স্থাপন_ওয়ার্কফ্লো&amp;quot;&amp;gt;রিলিজ ও স্থাপন ওয়ার্কফ্লো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আর্কিটেকচার_ডায়াগ্রাম&amp;quot;&amp;gt;আর্কিটেকচার ডায়াগ্রাম&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সিকোয়েন্স_ডায়াগ্রাম_রিলিজ_প্রক্রিয়া&amp;quot;&amp;gt;সিকোয়েন্স ডায়াগ্রাম - রিলিজ প্রক্রিয়া&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্টেট_ডায়াগ্রাম_প্যাকেজের_জীবন_চক্র&amp;quot;&amp;gt;স্টেট ডায়াগ্রাম - প্যাকেজের জীবন চক্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রসারন_ডায়াগ্রাম_cicd_অবকাঠামো&amp;quot;&amp;gt;প্রসারন ডায়াগ্রাম - CI/CD অবকাঠামো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইনের_অবজেক্ট_ও_মডেল&amp;quot;&amp;gt;পাইপলাইনের অবজেক্ট ও মডেল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শ্রেণি_ডায়াগ্রাম_cicd_টেমপ্লেট&amp;quot;&amp;gt;শ্রেণি ডায়াগ্রাম - CI/CD টেমপ্লেট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রহস্যের_কনফিগারেশন&amp;quot;&amp;gt;রহস্যের কনফিগারেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গোপনীয়_github_actions&amp;quot;&amp;gt;গোপনীয় GitHub Actions&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_pypi_টোকেনের_উৎপাদন&amp;quot;&amp;gt;PyPI টোকেনের উৎপাদন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্থানীয়_উন্নয়ন_স্ক্রিপ্ট&amp;quot;&amp;gt;স্থানীয় উন্নয়ন স্ক্রিপ্ট&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মেকফাইল&amp;quot;&amp;gt;মেকফাইল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সংস্করণ_স্ক্রিপ্ট&amp;quot;&amp;gt;সংস্করণ স্ক্রিপ্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেরা_অনুশীলন_এবং_সুপারিশ&amp;quot;&amp;gt;সেরা অনুশীলন এবং সুপারিশ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সেমান্টিক_সংস্করণ&amp;quot;&amp;gt;সেমান্টিক সংস্করণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্রাঞ্চিং_কৌশল&amp;quot;&amp;gt;ব্রাঞ্চিং কৌশল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টেস্ট_ও_কভারেজ&amp;quot;&amp;gt;টেস্ট ও কভারেজ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সুরক্ষা&amp;quot;&amp;gt;সুরক্ষা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিরীক্ষণ_ও_অবলক্ষ্য&amp;quot;&amp;gt;নিরীক্ষণ ও অবলক্ষ্য&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইন_মেট্রিক্স&amp;quot;&amp;gt;পাইপলাইন মেট্রিক্স&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিজ্ঞপ্তিগুলি&amp;quot;&amp;gt;বিজ্ঞপ্তিগুলি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পূরক_সম্পদ&amp;quot;&amp;gt;পূরক সম্পদ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;লক্ষ্য : একটি সাধারণ পাইপলাইনকে একটি শক্তিশালী উদ্যোগগত পাইপলাইন এ রূপান্তরিত করে, প্যাকেজিং ও সফটওয়্যার প্রকৌশলের আধুনিক মানকগুলোকে অনুসরণ করে।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;এই সিরিজের প্রথম অংশে, আমরা PyPI-এ একটি Python প্যাকেজের পরীক্ষা ও প্রকাশকে স্বয়ংক্রিয় করতে একটি সহজ কিন্তু কার্যকর CI/CD পাইপলাইন নির্মাণ করেছি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন এই পাইপলাইনটিকে পেশাদারীকরণ করার সময়। এই দ্বিতীয় অংশে, আমরা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আধুনিক pyproject.toml স্ট্যান্ডার্ডে মাইগ্রেট করুন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গুণমান এবং নিরাপত্তা সরঞ্জাম যোগ করুন (Black, Mypy, Bandit, Safety),&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বহু-সংস্করণ পরীক্ষা সেট আপ করুন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Test PyPI-এর মাধ্যমে একটি পর্যায়ক্রমিক বাস্তবায়নকে একত্রিত করুন,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বেরশনিং অটোমেটেড করুন এবং পাইপলাইন নিরীক্ষণ উন্নত করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি কার্যকর পাইপলাইন থেকে একটি পেশাদার CI/CD অবকাঠামোতে যাওয়ার জন্য প্রস্তুত হন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;PyPI-এ একটি Python অ্যাপ্লিকেশন স্থাপন করতে দৃঢ় CI/CD পাইপলাইন প্রয়োজন যা টেস্ট, বিল্ড এবং প্যাকেজ প্রকাশকে স্বয়ংক্রিয় করে। এই নিবন্ধটি GitHub Actions ব্যবহার করে একটি পাইথন CLI অ্যাপ্লিকেশনের জন্য একটি সম্পূর্ণ পাইপলাইন স্থাপনের বিস্তারিত পদ্ধতি বর্ণনা করে, আধুনিক পাইথন ইকোসিস্টেমের ভাল অনুশীলনগুলো অনুসরণ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_cicd_পাইপলাইনের_আর্কিটেকচার&amp;quot;&amp;gt;CI/CD পাইপলাইনের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা যে পাইপলাইন তৈরি করব, তা একাধিক ধাপে পদ্ধতি অনুসরণ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/diag-plantuml-md5-1a0da1bd60df0b291963625d51b0133e.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;951&amp;quot; height=&amp;quot;604&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রকল্পের_গঠন&amp;quot;&amp;gt;প্রকল্পের গঠন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিতরণের জন্য প্রস্তুত একটি পাইথন CLI অ্যাপ্লিকেশন একটি স্ট্যান্ডার্ডকৃত গঠন অনুসরণ করতে হবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;text&amp;quot;&amp;gt;playlist-downloader/
├── .github/
│   └── workflows/
│       ├── ci.yml
│       ├── release.yml
│       └── security.yml
├── src/
│   └── playlist_downloader/
│       ├── __init__.py
│       ├── cli.py
│       ├── core/
│       └── adapters/
├── tests/
│   ├── unit/
│   ├── integration/
│   └── conftest.py
├── docs/
├── pyproject.toml
├── requirements.txt
├── requirements-dev.txt
├── MANIFEST.in
├── README.md
├── LICENSE
└── CHANGELOG.md&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_pyproject_toml_ব্যবহার_করে_প্যাকেজ_কনফিগারেশন&amp;quot;&amp;gt;pyproject.toml ব্যবহার করে প্যাকেজ কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাইলটি`pyproject.toml`এটি পাইথন প্যাকেজ কনফিগার করার আধুনিক স্ট্যান্ডার্ড:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;toml&amp;quot;&amp;gt;[build-system]
requires = [&amp;quot;setuptools&amp;amp;gt;=45&amp;quot;, &amp;quot;wheel&amp;quot;, &amp;quot;setuptools_scm&amp;amp;gt;=6.2&amp;quot;]
build-backend = &amp;quot;setuptools.build_meta&amp;quot;

[project]
name = &amp;quot;playlist-downloader&amp;quot;
authors = [
    {name = &amp;quot;Christophe Hérolivier&amp;quot;, email = &amp;quot;cheroliv@example.com&amp;quot;},
]
description = &amp;quot;CLI tool for YouTube playlist management&amp;quot;
readme = &amp;quot;README.md&amp;quot;
requires-python = &amp;quot;&amp;amp;gt;=3.8&amp;quot;
keywords = [&amp;quot;youtube&amp;quot;, &amp;quot;playlist&amp;quot;, &amp;quot;cli&amp;quot;, &amp;quot;downloader&amp;quot;]
license = {text = &amp;quot;MIT&amp;quot;}
classifiers = [
    &amp;quot;Development Status :: 4 - Beta&amp;quot;,
    &amp;quot;Environment :: Console&amp;quot;,
    &amp;quot;Intended Audience :: End Users/Desktop&amp;quot;,
    &amp;quot;License :: OSI Approved :: MIT License&amp;quot;,
    &amp;quot;Operating System :: OS Independent&amp;quot;,
    &amp;quot;Programming Language :: Python :: 3&amp;quot;,
    &amp;quot;Programming Language :: Python :: 3.8&amp;quot;,
    &amp;quot;Programming Language :: Python :: 3.9&amp;quot;,
    &amp;quot;Programming Language :: Python :: 3.10&amp;quot;,
    &amp;quot;Programming Language :: Python :: 3.11&amp;quot;,
    &amp;quot;Topic :: Multimedia :: Sound/Audio&amp;quot;,
    &amp;quot;Topic :: Utilities&amp;quot;,
]
dependencies = [
    &amp;quot;typer&amp;amp;gt;=0.9.0&amp;quot;,
    &amp;quot;yt-dlp&amp;amp;gt;=2023.7.6&amp;quot;,
    &amp;quot;google-api-python-client&amp;amp;gt;=2.0.0&amp;quot;,
    &amp;quot;google-auth-oauthlib&amp;amp;gt;=1.0.0&amp;quot;,
    &amp;quot;pyyaml&amp;amp;gt;=6.0&amp;quot;,
    &amp;quot;rich&amp;amp;gt;=13.0.0&amp;quot;,
]
dynamic = [&amp;quot;version&amp;quot;]

[project.optional-dependencies]
dev = [
    &amp;quot;pytest&amp;amp;gt;=7.0.0&amp;quot;,
    &amp;quot;pytest-cov&amp;amp;gt;=4.0.0&amp;quot;,
    &amp;quot;pytest-mock&amp;amp;gt;=3.10.0&amp;quot;,
    &amp;quot;black&amp;amp;gt;=23.0.0&amp;quot;,
    &amp;quot;flake8&amp;amp;gt;=6.0.0&amp;quot;,
    &amp;quot;mypy&amp;amp;gt;=1.0.0&amp;quot;,
    &amp;quot;pre-commit&amp;amp;gt;=3.0.0&amp;quot;,
    &amp;quot;tox&amp;amp;gt;=4.0.0&amp;quot;,
]
test = [
    &amp;quot;pytest&amp;amp;gt;=7.0.0&amp;quot;,
    &amp;quot;pytest-cov&amp;amp;gt;=4.0.0&amp;quot;,
    &amp;quot;pytest-mock&amp;amp;gt;=3.10.0&amp;quot;,
]

[project.urls]
Homepage = &amp;quot;https://github.com/cheroliv/playlist-downloader&amp;quot;
Documentation = &amp;quot;https://github.com/cheroliv/playlist-downloader#readme&amp;quot;
Repository = &amp;quot;https://github.com/cheroliv/playlist-downloader.git&amp;quot;
&amp;quot;Bug Tracker&amp;quot; = &amp;quot;https://github.com/cheroliv/playlist-downloader/issues&amp;quot;

[project.scripts]
playlist-downloader = &amp;quot;playlist_downloader.cli:main&amp;quot;

[tool.setuptools_scm]
write_to = &amp;quot;src/playlist_downloader/_version.py&amp;quot;

[tool.setuptools.packages.find]
where = [&amp;quot;src&amp;quot;]

[tool.pytest.ini_options]
testpaths = [&amp;quot;tests&amp;quot;]
python_files = [&amp;quot;test_*.py&amp;quot;]
python_classes = [&amp;quot;Test*&amp;quot;]
python_functions = [&amp;quot;test_*&amp;quot;]
addopts = [
    &amp;quot;--cov=src/playlist_downloader&amp;quot;,
    &amp;quot;--cov-report=html&amp;quot;,
    &amp;quot;--cov-report=term-missing&amp;quot;,
    &amp;quot;--cov-fail-under=85&amp;quot;,
]

[tool.black]
line-length = 88
target-version = [&amp;#39;py38&amp;#39;]
include = &amp;#39;\.pyi?$&amp;#39;
extend-exclude = &amp;#39;&amp;#39;&amp;#39;
/(
  \.eggs
  | \.git
  | \.hg
  | \.mypy_cache
  | \.tox
  | \.venv
  | _build
  | buck-out
  | build
  | dist
)/
&amp;#39;&amp;#39;&amp;#39;

[tool.mypy]
python_version = &amp;quot;3.8&amp;quot;
warn_return_any = true
warn_unused_configs = true
disallow_untyped_defs = true
disallow_incomplete_defs = true
check_untyped_defs = true
disallow_untyped_decorators = true
no_implicit_optional = true
warn_redundant_casts = true
warn_unused_ignores = true
warn_no_return = true
warn_unreachable = true
strict_equality = true

[[tool.mypy.overrides]]
module = [
    &amp;quot;yt_dlp.*&amp;quot;,
    &amp;quot;googleapiclient.*&amp;quot;,
    &amp;quot;google_auth_oauthlib.*&amp;quot;,
]
ignore_missing_imports = true&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_cicd_ওয়ার্কফ্লো_পরীক্ষা_এবং_গুণমান&amp;quot;&amp;gt;CI/CD ওয়ার্কফ্লো - পরীক্ষা এবং গুণমান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রধান ওয়ার্কফ্লো`ci.yml`) একাধিক পাইথন সংস্করণে পরীক্ষা চালায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;name: CI

on:
  push:
    branches: [ main, develop ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: [&amp;quot;3.8&amp;quot;, &amp;quot;3.9&amp;quot;, &amp;quot;3.10&amp;quot;, &amp;quot;3.11&amp;quot;]

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v4
      with:
        python-version: ${{ matrix.python-version }}

    - name: Cache dependencies
      uses: actions/cache@v3
      with:
        path: |
          ~/.cache/pip
          ~/.cache/pre-commit
        key: ${{ runner.os }}-pip-${{ hashFiles(&amp;#39;**/requirements*.txt&amp;#39;) }}
        restore-keys: |
          ${{ runner.os }}-pip-

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -e &amp;quot;.[dev]&amp;quot;

    - name: Lint with flake8
      run: |
        flake8 src tests --count --select=E9,F63,F7,F82 --show-source --statistics
        flake8 src tests --count --exit-zero --max-complexity=10 --max-line-length=88 --statistics

    - name: Check code formatting with Black
      run: black --check src tests

    - name: Type checking with mypy
      run: mypy src

    - name: Run tests with pytest
      run: |
        pytest tests/ -v --cov=src/playlist_downloader \
          --cov-report=xml --cov-report=term-missing

    - name: Upload coverage to Codecov
      uses: codecov/codecov-action@v3
      if: matrix.python-version == &amp;#39;3.11&amp;#39;
      with:
        file: ./coverage.xml
        flags: unittests
        name: codecov-umbrella

  security:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: &amp;quot;3.11&amp;quot;

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install bandit[toml] safety

    - name: Run security checks with bandit
      run: bandit -r src/ -f json -o bandit-report.json

    - name: Check dependencies with safety
      run: safety check --json --output safety-report.json

    - name: Upload security reports
      uses: actions/upload-artifact@v3
      if: always()
      with:
        name: security-reports
        path: |
          bandit-report.json
          safety-report.json

  build:
    needs: [test, security]
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: &amp;quot;3.11&amp;quot;

    - name: Install build dependencies
      run: |
        python -m pip install --upgrade pip
        pip install build twine

    - name: Build package
      run: python -m build

    - name: Check package with twine
      run: twine check dist/*

    - name: Upload build artifacts
      uses: actions/upload-artifact@v3
      with:
        name: dist
        path: dist/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রিলিজ_ও_স্থাপন_ওয়ার্কফ্লো&amp;quot;&amp;gt;রিলিজ ও স্থাপন ওয়ার্কফ্লো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রিলিজের ওয়ার্কফ্লো (&amp;lt;code&amp;gt;release.yml&amp;lt;/code&amp;gt;) পরিচালনা করে PyPI‑এ স্বয়ংক্রিয় প্রকাশন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;name: Release

on:
  push:
    tags:
      - &amp;#39;v*.*.*&amp;#39;
  workflow_dispatch:
    inputs:
      environment:
        description: &amp;#39;Deployment environment&amp;#39;
        required: true
        default: &amp;#39;test&amp;#39;
        type: choice
        options:
        - test
        - production

env:
  PYTHON_VERSION: &amp;quot;3.11&amp;quot;

jobs:
  release:
    runs-on: ubuntu-latest
    environment:
      name: ${{ github.event.inputs.environment || (startsWith(github.ref, &amp;#39;refs/tags/&amp;#39;) &amp;amp;amp;&amp;amp;amp; &amp;#39;production&amp;#39; || &amp;#39;test&amp;#39;) }}

    steps:
    - uses: actions/checkout@v4
      with:
        fetch-depth: 0

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ env.PYTHON_VERSION }}

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install build twine

    - name: Build package
      run: python -m build

    - name: Check package
      run: twine check dist/*

    - name: Publish to Test PyPI
      if: github.event.inputs.environment == &amp;#39;test&amp;#39; || (startsWith(github.ref, &amp;#39;refs/tags/&amp;#39;) &amp;amp;amp;&amp;amp;amp; contains(github.ref, &amp;#39;rc&amp;#39;))
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.TEST_PYPI_API_TOKEN }}
      run: |
        twine upload --repository testpypi dist/*

    - name: Publish to PyPI
      if: github.event.inputs.environment == &amp;#39;production&amp;#39; || (startsWith(github.ref, &amp;#39;refs/tags/&amp;#39;) &amp;amp;amp;&amp;amp;amp; !contains(github.ref, &amp;#39;rc&amp;#39;))
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
      run: |
        twine upload dist/*

    - name: Create GitHub Release
      if: startsWith(github.ref, &amp;#39;refs/tags/&amp;#39;)
      uses: actions/create-release@v1
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      with:
        tag_name: ${{ github.ref }}
        release_name: Release ${{ github.ref }}
        draft: false
        prerelease: ${{ contains(github.ref, &amp;#39;rc&amp;#39;) }}

  post-release:
    needs: release
    runs-on: ubuntu-latest
    if: startsWith(github.ref, &amp;#39;refs/tags/&amp;#39;)

    steps:
    - uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: ${{ env.PYTHON_VERSION }}

    - name: Test installation from PyPI
      run: |
        sleep 60  # Attendre la propagation sur PyPI
        pip install playlist-downloader
        playlist-downloader --version

    - name: Update documentation
      run: |
        # Script pour mettre à jour la documentation
        echo &amp;quot;Documentation updated for version ${GITHUB_REF#refs/tags/}&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আর্কিটেকচার_ডায়াগ্রাম&amp;quot;&amp;gt;আর্কিটেকচার ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিকোয়েন্স_ডায়াগ্রাম_রিলিজ_প্রক্রিয়া&amp;quot;&amp;gt;সিকোয়েন্স ডায়াগ্রাম - রিলিজ প্রক্রিয়া&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/diag-plantuml-md5-9a53ecbcc6e1facf1e5bb831d6c636eb.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;983&amp;quot; height=&amp;quot;832&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টেট_ডায়াগ্রাম_প্যাকেজের_জীবন_চক্র&amp;quot;&amp;gt;স্টেট ডায়াগ্রাম - প্যাকেজের জীবন চক্র&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/diag-plantuml-md5-0df1090259475f3a578bf0a28e340144.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;525&amp;quot; height=&amp;quot;740&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রসারন_ডায়াগ্রাম_cicd_অবকাঠামো&amp;quot;&amp;gt;প্রসারন ডায়াগ্রাম - CI/CD অবকাঠামো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/diag-plantuml-md5-07105efd50503ac8666c6495e392e3af.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;676&amp;quot; height=&amp;quot;604&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইপলাইনের_অবজেক্ট_ও_মডেল&amp;quot;&amp;gt;পাইপলাইনের অবজেক্ট ও মডেল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শ্রেণি_ডায়াগ্রাম_cicd_টেমপ্লেট&amp;quot;&amp;gt;শ্রেণি ডায়াগ্রাম - CI/CD টেমপ্লেট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/diag-plantuml-md5-6f8f20bca99a14661f12d2809ad63178.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;814&amp;quot; height=&amp;quot;635&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রহস্যের_কনফিগারেশন&amp;quot;&amp;gt;রহস্যের কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পাইপলাইন কাজ করতে সক্ষম করতে, আপনাকে GitHub-এ নিম্নলিখিত গোপনীয়তাগুলি কনফিগার করতে হবে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গোপনীয়_github_actions&amp;quot;&amp;gt;গোপনীয় GitHub Actions&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Dans Settings &amp;amp;gt; Secrets and variables &amp;amp;gt; Actions

# Token PyPI pour la production
PYPI_API_TOKEN=pypi-...

# Token Test PyPI pour les pré-releases
TEST_PYPI_API_TOKEN=pypi-...

# Token GitHub pour créer les releases
GITHUB_TOKEN=(automatiquement fourni)

# Token Codecov (optionnel)
CODECOV_TOKEN=...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_pypi_টোকেনের_উৎপাদন&amp;quot;&amp;gt;PyPI টোকেনের উৎপাদন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;bash&amp;quot;&amp;gt;# 1. Créer un compte sur PyPI et Test PyPI
# 2. Aller dans Account Settings &amp;amp;gt; API tokens
# 3. Créer un token avec scope &amp;quot;Entire account&amp;quot; ou spécifique au projet
# 4. Format du token : pypi-AgEIcHlwaS5vcmc...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_স্থানীয়_উন্নয়ন_স্ক্রিপ্ট&amp;quot;&amp;gt;স্থানীয় উন্নয়ন স্ক্রিপ্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিকাশকে সহজ করার জন্য, ব্যবহারযোগ্য স্ক্রিপ্ট তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মেকফাইল&amp;quot;&amp;gt;মেকফাইল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;makefile&amp;quot;&amp;gt;.PHONY: install test lint format security build clean release-test release-prod

install:
	pip install -e &amp;quot;.[dev]&amp;quot;

test:
	pytest tests/ -v --cov=src/playlist_downloader

lint:
	flake8 src tests
	mypy src

format:
	black src tests

security:
	bandit -r src/
	safety check

build:
	python -m build
	twine check dist/*

clean:
	rm -rf build/ dist/ *.egg-info/
	find . -type d -name __pycache__ -delete
	find . -name &amp;quot;*.pyc&amp;quot; -delete

release-test: clean build
	twine upload --repository testpypi dist/*

release-prod: clean build
	twine upload dist/*

pre-commit: format lint test security
	@echo &amp;quot;✅ Prêt pour commit&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সংস্করণ_স্ক্রিপ্ট&amp;quot;&amp;gt;সংস্করণ স্ক্রিপ্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;python&amp;quot;&amp;gt;#!/usr/bin/env python3
&amp;quot;&amp;quot;&amp;quot;Script pour gérer les versions du projet.&amp;quot;&amp;quot;&amp;quot;

import sys
import subprocess
from pathlib import Path

def get_current_version():
    &amp;quot;&amp;quot;&amp;quot;Récupère la version actuelle depuis git.&amp;quot;&amp;quot;&amp;quot;
    try:
        result = subprocess.run(
            [&amp;quot;git&amp;quot;, &amp;quot;describe&amp;quot;, &amp;quot;--tags&amp;quot;, &amp;quot;--abbrev=0&amp;quot;],
            capture_output=True,
            text=True,
            check=True
        )
        return result.stdout.strip()
    except subprocess.CalledProcessError:
        return &amp;quot;0.0.0&amp;quot;

def create_version_tag(version, message=None):
    &amp;quot;&amp;quot;&amp;quot;Crée un tag de version.&amp;quot;&amp;quot;&amp;quot;
    if not version.startswith(&amp;#39;v&amp;#39;):
        version = f&amp;#39;v{version}&amp;#39;

    tag_message = message or f&amp;quot;Release {version}&amp;quot;

    subprocess.run([&amp;quot;git&amp;quot;, &amp;quot;tag&amp;quot;, &amp;quot;-a&amp;quot;, version, &amp;quot;-m&amp;quot;, tag_message], check=True)
    print(f&amp;quot;✅ Tag {version} créé&amp;quot;)

    # Push le tag
    subprocess.run([&amp;quot;git&amp;quot;, &amp;quot;push&amp;quot;, &amp;quot;origin&amp;quot;, version], check=True)
    print(f&amp;quot;✅ Tag {version} poussé vers origin&amp;quot;)

if __name__ == &amp;quot;__main__&amp;quot;:
    if len(sys.argv) &amp;amp;lt; 2:
        current = get_current_version()
        print(f&amp;quot;Version actuelle: {current}&amp;quot;)
        print(&amp;quot;Usage: python version.py &amp;amp;lt;new_version&amp;amp;gt; [message]&amp;quot;)
        sys.exit(1)

    new_version = sys.argv[1]
    message = sys.argv[2] if len(sys.argv) &amp;amp;gt; 2 else None

    create_version_tag(new_version, message)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেরা_অনুশীলন_এবং_সুপারিশ&amp;quot;&amp;gt;সেরা অনুশীলন এবং সুপারিশ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সেমান্টিক_সংস্করণ&amp;quot;&amp;gt;সেমান্টিক সংস্করণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;семানটিক ভার্জনিং (SemVer) :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;MAJOR.MINOR.PATCH&amp;lt;/code&amp;gt; (ex: 1.2.3)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`MAJOR`অসংগত পরিবর্তন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;`MINOR`নতুন সামঞ্জস্যপূর্ণ বৈশিষ্ট্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;PATCH&amp;lt;/code&amp;gt;: Samsanjogyapun bug songsodhon&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্রাঞ্চিং_কৌশল&amp;quot;&amp;gt;ব্রাঞ্চিং কৌশল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;text&amp;quot;&amp;gt;main          ──●──●──●──●──●────●── (releases stables)
               /       /          /
develop    ──●──●──●──●──●──●──●──●── (développement)
            /     /        /
feature/xxx  ●──●──●──●──●──/ (fonctionnalités)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_টেস্ট_ও_কভারেজ&amp;quot;&amp;gt;টেস্ট ও কভারেজ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ন্যূন্যিক কোড কভারেজ : 85%&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্যবসা যুক্তির জন্য ইউনিট পরীক্ষা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একীভূত পরীক্ষা 아답্টারদের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;CLI-এর জন্য এন্ড‑টু‑এন্ড পরীক্ষা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সুরক্ষা&amp;quot;&amp;gt;সুরক্ষা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অটোমেটিক ডিপেন্ডেন্সি স্ক্যান (নিরাপত্তা)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোডের স্ট্যাটিক বিশ্লেষণ (Bandit)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কোডে কখনও সিক্রেট নেই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বিশেষ PyPI টোকেনের ব্যবহার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিরীক্ষণ_ও_অবলক্ষ্য&amp;quot;&amp;gt;নিরীক্ষণ ও অবলক্ষ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাইপলাইন_মেট্রিক্স&amp;quot;&amp;gt;পাইপলাইন মেট্রিক্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;# .github/workflows/metrics.yml
name: Pipeline Metrics

on:
  workflow_run:
    workflows: [&amp;quot;CI&amp;quot;, &amp;quot;Release&amp;quot;]
    types: [completed]

jobs:
  metrics:
    runs-on: ubuntu-latest
    steps:
    - name: Collect metrics
      run: |
        echo &amp;quot;Pipeline: ${{ github.event.workflow_run.name }}&amp;quot;
        echo &amp;quot;Status: ${{ github.event.workflow_run.conclusion }}&amp;quot;
        echo &amp;quot;Duration: ${{ github.event.workflow_run.updated_at - github.event.workflow_run.created_at }}&amp;quot;
        # Envoyer vers système de monitoring&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিজ্ঞপ্তিগুলি&amp;quot;&amp;gt;বিজ্ঞপ্তিগুলি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;# Ajout dans les workflows pour notifications
- name: Notify on failure
  if: failure()
  uses: 8398a7/action-slack@v3
  with:
    status: failure
    text: &amp;quot;❌ Pipeline failed for ${{ github.repository }}&amp;quot;
  env:
    SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই_complete_CI/CD_pipeline_for_Python : Provides :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্পূর্ণ অটোমেশন&amp;lt;/strong&amp;gt;: কোড যাচাইকরণ থেকে প্রকাশ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নিরাপত্তা&amp;lt;/strong&amp;gt;: অটোমেটেড স্ক্যান এবং গোপন তথ্য নিরাপদ পরিচালনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গুণমান&amp;lt;/strong&amp;gt;: বহু সংস্করণ পরীক্ষা, লিনটিং এবং কোড কভারেজ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বিশ্বস্ততা&amp;lt;/strong&amp;gt;: প্রগ্রেসিভ ডিপ্লয়মেন্ট via Test PyPI&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ট্রেসেবিলিটি&amp;lt;/strong&amp;gt;: আর্কটিফাক্টস, প্রতিবেদন এবং রিলিজস GitHub&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই অনুশীলনগুলো গ্রহণ করার ফলে আপনার Python CLI অ্যাপ্লিকেশনগুলির জন্য একটি দৃঢ় ও পেশাদার বিতরণ প্রক্রিয়া নিশ্চিত হয়, যা দীর্ঘমেয়াদে আপনার প্রকল্প들의 রক্ষণাবেক্ষণ এবং উন্নয়নকে সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পূরক_সম্পদ&amp;quot;&amp;gt;পূরক সম্পদ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://packaging.python.org/&amp;quot;&amp;gt;Python প্যাকেজিং ব্যবহারকারী নির্দেশিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.github.com/en/actions&amp;quot;&amp;gt;GitHub Actions ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://pypi.org/help/&amp;quot;&amp;gt;PyPI সহায়তা ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://semver.org/&amp;quot;&amp;gt;অর্থবোধক সংস্করণনিয়ম স্পেসিফিকেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://keepachangelog.com/&amp;quot;&amp;gt;একটি changelog রাখুন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>অংশ ১ : Python এবং PyPI এর জন্য একটি সহজ CI/CD পাইপলাইন সেট আপ করা</title>
            <link >https://cheroliv.com//blog/2025/0085_pypi_cicd_part_1_post.html</link>
            <pubDate>Thu, 17 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0085_pypi_cicd_part_1_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইপলাইন_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইন আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সত্যাগামী_একীভূতকরণ_ci_পাইপলাইনের_কনফিগারেশন&amp;quot;&amp;gt;সত্যাগামী একীভূতকরণ (CI) পাইপলাইনের কনফিগারেশন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ci_ওয়ার্কফ্লোর_কাঠামো&amp;quot;&amp;gt;CI ওয়ার্কফ্লোর কাঠামো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ci_ধাপের_বিশ্লেষণ&amp;quot;&amp;gt;CI ধাপের বিশ্লেষণ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রেরক_on&amp;quot;&amp;gt;প্রেরক (&amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Objectif : পাঠকে একটি মিনিমালিস্ট কিন্তু কার্যকর CI/CD পাইপলাইন সেটআপ করতে সহায়তা করা, একটি পাইথন অ্যাপ্লিকেশনের জন্য, PyPI-এ স্বয়ংক্রিয় স্থাপনের সাথে।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;বিকাশ প্রক্রিয়ার অটোমেশন আধুনিক প্রকল্পগুলিতে অপরিহার্য হয়ে গেছে। একটি ভালভাবে ডিজাইন করা CI/CD পাইপলাইন শুধুমাত্র ডেভেলপমেন্ট চক্রের আরম্ভে রিগ্রেশন সনাক্ত করতে পারে, বরং পুরোপুরি ডিপ্লোইমেন্ট প্রক্রিয়াকে অটোমেট করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে আমরা দেখব কীভাবে GitHub Actions দিয়ে একটি পাইথন অ্যাপ্লিকেশনের জন্য সম্পূর্ণ CI/CD পাইপলাইন (সতত ইন্টিগ্রেশন থেকে সতত বিতরণ পর্যন্ত) সেট আপ করা যায় PyPI-তে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইপলাইন_আর্কিটেকচার&amp;quot;&amp;gt;পাইপলাইন আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের পাইপলাইন দুটি আলাদা ওয়ার্কফ্লো থেকে গঠিত:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;CI পাইপলাইন&amp;lt;/strong&amp;gt;: প্রতিটি push এবং pull requestে চালু&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সিডি পাইপলাইন&amp;lt;/strong&amp;gt;: শুধুমাত্র গিটহ্যাব রিলিজের সময় ট্রিগার করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;images/ci-cd-overview.svg&amp;quot; alt=&amp;quot;ci cd overview&amp;quot; width=&amp;quot;1578&amp;quot; height=&amp;quot;5132&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সত্যাগামী_একীভূতকরণ_ci_পাইপলাইনের_কনফিগারেশন&amp;quot;&amp;gt;সত্যাগামী একীভূতকরণ (CI) পাইপলাইনের কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ci_ওয়ার্কফ্লোর_কাঠামো&amp;quot;&amp;gt;CI ওয়ার্কফ্লোর কাঠামো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;CI ওয়ার্কফ্লো কোডে প্রতিটি অবদান যাচাই করার জন্য ডিজাইন করা হয়েছে। এর সম্পূর্ণ কনফিগারেশন এখানে দেওয়া হল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;name: CI/CD Pipeline

on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: &amp;#39;3.x&amp;#39;

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        pip install ruff pytest pytest-mock

    - name: Run Linting (Ruff)
      run: ruff check .

    - name: Run Tests (Pytest)
      run: pytest&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ci_ধাপের_বিশ্লেষণ&amp;quot;&amp;gt;CI ধাপের বিশ্লেষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_প্রেরক_on&amp;quot;&amp;gt;প্রেরক (&amp;lt;code&amp;gt;on&amp;lt;/code&amp;gt;)&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;pygments highlight&amp;quot;&amp;gt;&amp;lt;code data-lang=&amp;quot;yaml&amp;quot;&amp;gt;----
----
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main
----

পাইপলাইন ট্রিগার হয় : - প্রতিটি পুশ ব্রাঞ্চে`main` প্রতিটি pull request প্রতি`main`

এই পদ্ধতি নিশ্চিত করে যে মূল কোড স্থিতিশীল থাকে এবং যে কোনও অবদান একত্রিত করার আগে যাচাই করা হয়।

==== 2. রানটাইম পরিবেশ

----

runs-on: ubuntu-latest

Ubuntu Latest বেশিরভাগ Python প্রকল্পের জন্য কর্মক্ষমতা, খরচ এবং সামঞ্জস্যতার মধ্যে ভাল বিনিময় প্রদান করে।

==== 3. কোড চেকআউট

```yaml
----
----
- name: Checkout code
  uses: actions/checkout@v4
----

কর্ম`checkout@v4`রিপোজিটরের সোর্স কোড আনে। v4 সংস্করণ কর্মক্ষমতা এবং নিরাপত্তার উন্নতি আনে।

==== 4. কনফিগারেশন Python

----

- name: Set up Python uses: actions/setup-python@v5 with: python-version: &amp;#39;3.x&amp;#39;

ব্যবহারের`&amp;#39;3.x&amp;#39;`এটি স্বয়ংক্রিয়ভাবে Python 3-টির সর্বশেষ স্থিতিশীল সংস্করণ ব্যবহার করতে সক্ষম করে, রক্ষণাবেক্ষণকে সহজ করে।

==== 5. ডিপেন্ডেন্সি ইনস্টলেশন

```yaml
----
----
- name: Install dependencies
  run: |
    python -m pip install --upgrade pip
    pip install -r requirements.txt
    pip install ruff pytest pytest-mock
----

এই ধাপ : - পিপকে آخرین সংস্করণে আপডেট করুন - প্রজেক্টের নির্ভরতাগুলো ইনস্টল কর - উন্নয়ন সরঞ্জামগুলো যোগ করুন (লিন্টিং এবং পরীক্ষা)

==== 6. Ruff-এ লিংটিং

----

- name: Run Linting (Ruff) run: ruff check .

**রাফ**এটি একটি অত্যশীঘ্র পাইথন লিন্টার যা রস্টে লেখা হয়েছে। এটি Flake8, Black, isort মতো различни টুলের বৈশিষ্ট্য একত্র করে একটি একক উচ্চ-কর্মক্ষম টুলকে গঠন করে।

==== 7. পরীক্ষাগুলোর নিষ্পাদন

```yaml
----
----
- name: Run Tests (Pytest)
  run: pytest
----

Pytest সম্পূর্ণ পরীক্ষা স্যুটটি চালায়, নিশ্চিত করে যে কোনো পরিবর্তন রিগ্রেশন তৈরি না করে।

== ডিপ্লপমেন্ট পাইপলাইন কনফিগারেশন (CD)

=== Workflow CD এর গঠন

সিডি ওয়ার্কফ্লো শুধুমাত্র গিটহাব রিলিজের সময় ট্রিগার হয় এবং পাইপাই-এ প্রকাশনায় স্বয়ংক্রিয়ভাবে করে।

[source,yaml]
----
name: Publish to PyPI

on:
  release:
    types:
      - published

jobs:
  deploy:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Python
      uses: actions/setup-python@v5
      with:
        python-version: &amp;#39;3.x&amp;#39;

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install setuptools wheel twine

    - name: Build and publish
      env:
        TWINE_USERNAME: __token__
        TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}
      run: |
        python setup.py sdist bdist_wheel
        twine upload dist/*
----

=== CD ধাপের বিশ্লেষণ

==== ট্রিগার রিলিজ

----

on: release: types: - published

CD পাইপলাইনটি শুধুমাত্র গিটহাব রিলিজ প্রকাশিত হওয়ার সময়ই ট্রিগার হয়। এই পদ্ধতিটি ডিপ্লায়মেন্টগুলির সুনির্দিষ্ট নিয়ন্ত্রণ নিশ্চিত করে।

==== 2. বিল্ড টুলস ইনস্টলেশন

```yaml
----
----
pip install setuptools wheel twine
----

- **সেটআপটুলস**Python প্যাকেজিং সরঞ্জাম - **চাকা**: আধুনিক পাইথন বিতরণের ফর্ম্যাট - **সুতা**: PyPI-এ আপলোড করার জন্য নিরাপদ সরঞ্জাম

==== 3. প্রমাণীকরণের কনফিগারেশন

----

env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.PYPI_API_TOKEN }}

প্রমাণীকরণ একটি PyPI API টোকেন ব্যবহার করে যা গিটহাব রহস্যা হিসেবে সংরক্ষিত রয়েছে, যা মৌলিক শংবেদনাগারিকতাগুলোর চেয়ে নিরাপদ।

==== 4. বিল্ড এবং প্রকাশনা

```yaml
----
----
run: |
  python setup.py sdist bdist_wheel
  twine upload dist/*
----

- `sdist`একটি উৎস বিতরণ তৈরি কর - `bdist_wheel`: একটি wheel তৈরি কর (বাইনারি বিতরণ) - `twine upload`: PyPI-এ বিতরণ প্রকাশ করে

== পাইথন প্যাকেজ কনফিগারেশন

=== setup.py-এর গঠন

পাইপলাইন কাজ করতে, আপনার প্রকল্পে একটি ফাইল অন্তর্ভুক্ত করতে হবে`setup.py` :

[source,python]
----
from setuptools import setup, find_packages

with open(&amp;quot;README.adoc&amp;quot;, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fh:
    long_description = fh.read()

setup(
    name=&amp;quot;playlist-downloader&amp;quot;,
    version=&amp;quot;1.0.0&amp;quot;,
    author=&amp;quot;Votre Nom&amp;quot;,
    author_email=&amp;quot;votre.email@example.com&amp;quot;,
    description=&amp;quot;CLI tool for managing YouTube playlists&amp;quot;,
    long_description=long_description,
    long_description_content_type=&amp;quot;text/plain&amp;quot;,
    url=&amp;quot;https://github.com/cheroliv/playlist-downloader&amp;quot;,
    packages=find_packages(),
    classifiers=[
        &amp;quot;Development Status :: 4 - Beta&amp;quot;,
        &amp;quot;Intended Audience :: Developers&amp;quot;,
        &amp;quot;License :: OSI Approved :: MIT License&amp;quot;,
        &amp;quot;Operating System :: OS Independent&amp;quot;,
        &amp;quot;Programming Language :: Python :: 3&amp;quot;,
        &amp;quot;Programming Language :: Python :: 3.8&amp;quot;,
        &amp;quot;Programming Language :: Python :: 3.9&amp;quot;,
        &amp;quot;Programming Language :: Python :: 3.10&amp;quot;,
        &amp;quot;Programming Language :: Python :: 3.11&amp;quot;,
    ],
    python_requires=&amp;quot;&amp;amp;gt;=3.8&amp;quot;,
    install_requires=[
        &amp;quot;typer&amp;amp;gt;=0.9.0&amp;quot;,
        &amp;quot;yt-dlp&amp;amp;gt;=2023.1.6&amp;quot;,
        &amp;quot;google-api-python-client&amp;amp;gt;=2.70.0&amp;quot;,
        &amp;quot;google-auth-oauthlib&amp;amp;gt;=0.7.1&amp;quot;,
        &amp;quot;pymonad&amp;amp;gt;=2.4.0&amp;quot;,
        &amp;quot;pyyaml&amp;amp;gt;=6.0&amp;quot;,
    ],
    entry_points={
        &amp;quot;console_scripts&amp;quot;: [
            &amp;quot;playlist-downloader=cli:app&amp;quot;,
        ],
    },
)
----

=== setup.py এর গুরুত্বপূর্ণ বিষয়

1. **মেটাডেটা**নাম, সংস্করণ, লেখক, বিবরণ
2. **নির্ভরতা**প্রয়োজনীয় প্যাকেজের তালিকা
3. **প্রবেশের বিন্দু**: CLI কমান্ডগুলো প্রকাশিত
4. **বিভাজক**: PyPI-এর মেটাডেটা

== GitHub Secrets-এর মাধ্যমে নিরাপত্তা

=== PyPI টোকেন কনফিগারেশন

1. **PyPI-এ একটি API টোকেন তৈরি করুন**:

- PyPI-এ সাইন ইন করুন - যান Account Settings &amp;amp;gt; API tokens - উপযুক্ত অনুমতির সাথে একটি নতুন টোকেন তৈরি করুন

1. **GitHub-এ গোপনীয়তা যোগ করুন**&amp;amp;lt;/think&amp;amp;gt;
(empty)

- রেপোজিটরি সেটিংস &amp;amp;gt; গোপনীয়তা এবং ভেরিয়েবল &amp;amp;gt; একশনস - একটি নতুন গোপনীয়তা তৈরি করুন যার নাম`PYPI_API_TOKEN` আপনার PyPI টোকেনটি পেস্ট করুন

[plantuml, secrets-flow, svg]
----
@startuml
!theme plain

actor Developer as dev
participant &amp;quot;GitHub সংগ্রহস্থল&amp;quot; as repo
participant &amp;quot;GitHub Actions&amp;quot; as actions
participant PyPI

dev -&amp;amp;gt; repo : Configure PYPI_API_TOKEN secret
repo -&amp;amp;gt; actions : Trigger CD pipeline on release
actions -&amp;amp;gt; actions : Access secret securely
actions -&amp;amp;gt; PyPI : Authenticate with token
PyPI -&amp;amp;gt; PyPI : Validate and publish package

note over actions, PyPI
  Token never exposed in logs
  Automatic rotation possible
end note

@enduml
----

== সম্পূর্ণ তैनাতি কর্মপ্রবাহ

=== ডিপ্লয়মেন্ট সিকোয়েন্স

[plantuml, deployment-sequence, svg]
----
@startuml
!theme plain

actor Developer as dev
participant &amp;quot;স্থানীয় Git&amp;quot; as git
participant &amp;quot;GitHub&amp;quot; as github
participant &amp;quot;গিটহাব অ্যাকশন&amp;quot; as actions
participant PyPI
participant &amp;quot;প্রব্যবহারকারীরা&amp;quot; as users

dev -&amp;amp;gt; git : git tag v1.0.0
dev -&amp;amp;gt; git : git push origin v1.0.0
git -&amp;amp;gt; github : Push tag
dev -&amp;amp;gt; github : Create release from tag
github -&amp;amp;gt; actions : Trigger CD pipeline
actions -&amp;amp;gt; actions : Checkout code
actions -&amp;amp;gt; actions : Setup Python environment
actions -&amp;amp;gt; actions : Install build tools
actions -&amp;amp;gt; actions : Build distributions (sdist + wheel)
actions -&amp;amp;gt; PyPI : Upload to PyPI with token
PyPI -&amp;amp;gt; PyPI : Validate and publish
users -&amp;amp;gt; PyPI : pip install playlist-downloader

note over dev, github
  Release creation can be automated
  or done manually through GitHub UI
end note

@enduml
----

=== পাইপলাইনের অবস্থাসমূহ

[plantuml, pipeline-states, svg]
----
@startuml
!theme plain

[*] --&amp;amp;gt; Idle

Idle --&amp;amp;gt; CI_Running : Push/PR created
CI_Running --&amp;amp;gt; CI_Success : All checks pass
CI_Running --&amp;amp;gt; CI_Failed : Linting/Tests fail
CI_Success --&amp;amp;gt; Idle : Merge completed
CI_Failed --&amp;amp;gt; Idle : Fix and retry

Idle --&amp;amp;gt; CD_Running : Release published
CD_Running --&amp;amp;gt; CD_Success : Package published
CD_Running --&amp;amp;gt; CD_Failed : Build/Upload error
CD_Success --&amp;amp;gt; Idle : Package available on PyPI
CD_Failed --&amp;amp;gt; Idle : Fix and retry release

note on link #red : Blocks merge
note on link #green : Allows deployment

@enduml
----

== শ্রেষ্ঠ অনুশীলন এবং অপ্টিমাইজেশন

=== সংস্করণ ব্যবস্থাপনা

ব্যবহার করুন সিম্যানটিক Git ট্যাগ

----

git tag -a v1.2.3 -m &amp;quot;Release version 1.2.3&amp;quot; git push origin v1.2.3

=== 2. মেট্রিক্স পরীক্ষা

একাধিক পাইথন সংস্করণে পরীক্ষা করতে :

```yaml
----
----
strategy:
  matrix:
    python-version: [3.8, 3.9, &amp;quot;3.10&amp;quot;, &amp;quot;3.11&amp;quot;]
----

=== 3. নির্ভরতা ক্যাশ

ক্যাশ দিয়ে বিল্ড গতিশীল করুন:

----

- name: Cache pip dependencies uses: actions/cache@v3 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles(&amp;#39;**/requirements.txt&amp;#39;) }}

=== 4. স্থাপন পরিবেশ

GitHub পরিবেশগুলো ব্যবহার করে নিয়ন্ত্রিত স্থাপন করুন:

```yaml
----
----
jobs:
  deploy:
    environment: production
    runs-on: ubuntu-latest
----

== ব্যবহারের ক্ষেত্র এবং আর্কিটেকচার

=== ইউজ কেস ডায়াগ্রাম

[plantuml, use-cases, svg]
----
@startuml
!theme plain

left to right direction

actor &amp;quot;ডেভেলপার&amp;quot; as dev
actor &amp;quot;GitHub Actions&amp;quot; as ga
actor &amp;quot;অंतিম ব্যবহারকারী&amp;quot; as user

package &amp;quot;CI/CD সিস্টেম&amp;quot; {
  usecase &amp;quot;Run Linting&amp;quot; as lint
  usecase &amp;quot;পরীক্ষা চলানো&amp;quot; as test
  usecase &amp;quot;বিল্ড প্যাকেজ&amp;quot; as build
  usecase &amp;quot;PyPI-এ প্রকাশ করুন&amp;quot; as publish
  usecase &amp;quot;রিলিজ তৈরি করুন&amp;quot; as release
}

dev --&amp;amp;gt; lint : Pushes code
dev --&amp;amp;gt; test : Pushes code
dev --&amp;amp;gt; release : Creates release
ga --&amp;amp;gt; build : On release trigger
ga --&amp;amp;gt; publish : After successful build
user --&amp;amp;gt; publish : Downloads package

lint .&amp;amp;gt; test : triggers
test .&amp;amp;gt; build : on success
build .&amp;amp;gt; publish : on success

@enduml
----

=== প্রসারবস্থানের আর্কিটেকচার

[plantuml, deployment-architecture, svg]
----
@startuml
!theme plain

cloud &amp;quot;GitHub&amp;quot; {
  [Source Repository]
  [GitHub Actions]
  [Secrets Store]
}

cloud &amp;quot;PyPI&amp;quot; {
  [Package Registry]
  [Distribution Files]
}

node &amp;quot;CI/CD পাইপলাইন&amp;quot; {
  [Linting]
  [Testing]
  [Building]
  [Publishing]
}

[Source Repository] --&amp;amp;gt; [GitHub Actions] : Triggers
[GitHub Actions] --&amp;amp;gt; [Linting]
[Linting] --&amp;amp;gt; [Testing]
[Testing] --&amp;amp;gt; [Building]
[Building] --&amp;amp;gt; [Publishing]
[Publishing] --&amp;amp;gt; [Package Registry] : Uploads
[Secrets Store] --&amp;amp;gt; [Publishing] : Provides token

note as N1
  Secure token-based
  authentication
end note

[Secrets Store] .. N1

@enduml
----

== নিগরানি এবং ডিবাগিং

=== লগ এবং মনিটরিং

GitHub Actions প্রতিটি ধাপে বিস্তারিত লগ প্রদান করে। ডিবাগ করতে :

1. **লগগুলো পরীক্ষা করুন**প্রত্যেকটি ধাপের
2. **ডিবাগ সক্রিয় করুন**Sathe`ACTIONS_STEP_DEBUG`
3. **আর্টিফ্যাক্ট ব্যবহার করুন**বिल্ড ফাইলগুলো সংরক্ষণের জন্য

----

- name: Upload build artifacts uses: actions/upload-artifact@v3 if: failure() with: name: build-logs path: build/

=== বিজ্ঞপ্তি

Slack বা ইমেল বিজ্ঞপ্তি যোগ করুন :

```yaml
----
----
- name: Notify on failure
  if: failure()
  uses: 8398a7/action-slack@v3
  with:
    status: ${{ job.status }}
    webhook_url: ${{ secrets.SLACK_WEBHOOK }}
----

== নিষ্কর্ষ

GitHub Actions-এ একটি শক্তিশালী CI/CD পাইপলাইন স্থাপন করে, আপনার ডেভেলপমেন্ট অভিজ্ঞতা ভয়বহে পরিবর্তিত হয়। লিন্টিং, পরীক্ষা এবং স্থাপনকে স্বয়ংক্রিয় করলে, আপনি :

- **ত্রুটি হ্রাস করুন**উৎপাদনে - **চক্রগুলোকে ত্বরান্বিত করুন**বিকাশের - **বিশ্বাস বাড়ান**আপনার রিলিজে - **সহযোগিতা সহজ করুন**টিমে

এই পাইপলাইনটি লিনটিং সরঞ্জামগুলো, টেস্ট ফ্রেমওয়ার্কগুলো এবং স্থাপন গন্তব্যগুলো সামঞ্জস্য করে বিভিন্ন ধরনের Python প্রকল্পে প্রয়োগ করা যায়।

প্রারంభিক বিনিয়োগ এই ওয়ার্কফ্লো গুলোর কনফিগারেশনে দ্রুতভাবে ফেরত আসে, কারণ এটি সময় বাঁচায় এবং স্থাপনে ম্যানুয়াল ত্রুটি কমানে।

== অতিরিক্ত সম্পদ

- https://docs.github.com/en/actions[GitHub Actions ডকুমেন্টেশন] - https://packaging.python.org/[পাইথন প্যাকেজিং গাইড] - https://docs.pytest.org/[থকুমেন্টেশন Pytest] - https://docs.astral.sh/ruff/[Documentation Ruff] - https://twine.readthedocs.io/[টুইন ডকুমেন্টেশন]

�✅ সক্রিয় পাইপলাইন প্রাপ্ত ! আপনি এখন একটি সহজ CI/CD পাইপলাইন আছে যা আপনাকে আপনার পরীক্ষা স্বয়ংক্রিয় করতে দেয় এবং GitHub Actions থেকে সরাসরি PyPI-এ আপনার প্যাকেট Python প্রকাশ করতে দেয়।

তবে, এই পাইপলাইন ইচ্ছামত ন্যূনতম রূপে রয়েছে। এটি এখনও পেশাগত পরিবেশে জরুরি কিছু দিক কভার করে না :

পাইথনের মাল্টি-ভার্সন পরীক্ষা,

স্বয়ংক্রিয় নিরাপত্তা বিশ্লেষণ,

প্রগতিশীল ডিপ্লয়মেন্ট Test PyPI-এর মাধ্যমে,

পাইপলাইন নিরীক্ষণ ও মেট্রিক্স

সংস্করণব্যবস্থাপনার স্বয়ংক্রিয়করণ এবং আধুনিক শ্রেষ্ঠ পদ্ধতির একীকরণ (pyproject.toml).

আসন্ন অংশে, আমরা পরবর্তী ধাপে যাব। আপনি শিখবেন কিভাবে এই মৌলিক পাইপলাইনকে একটি বাস্তবে পরিকল্পিত indústrial স্থাপনশ্রেণী, দৃঢ় ও নিরাপদ রূপান্তরে উত্পাদন-মোডের Python প্রকল্পগুলির জন্য প্রস্তুত করা যায়।
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি ডিসকোর্ড মিউজিক বটের উন্নয়ন: ফাংশনাল আর্কিটেকচার এবং লগ-ড্রিভেন উন্নয়ন</title>
            <link >https://cheroliv.com//blog/2025/0084_disco_bot_discord_python_post.html</link>
            <pubDate>Wed, 16 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0084_disco_bot_discord_python_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিচয়&amp;quot;&amp;gt;পরিচয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রসঙ্গ_এবং_বর্তমান_চ্যালেঞ্জ&amp;quot;&amp;gt;প্রসঙ্গ এবং বর্তমান চ্যালেঞ্জ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সঙ্গীত_apisের_উন্নয়ন&amp;quot;&amp;gt;সঙ্গীত APIsের উন্নয়ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লগ_চালিত_ডেভেলপমেন্ট_পদ্ধতি&amp;quot;&amp;gt;লগ-চালিত ডেভেলপমেন্ট পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধানামূলক_আর্কিটেকচার&amp;quot;&amp;gt;ধানামূলক আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_stack_technique_ও_ফাংশনাল_প্রাদিগম&amp;quot;&amp;gt;Stack Technique ও ফাংশনাল প্রাদিগম&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রযুক্তিগত_নির্বাচন&amp;quot;&amp;gt;প্রযুক্তিগত নির্বাচন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রয়োগ্য_কার্যকরী_নীতিগুলি&amp;quot;&amp;gt;প্রয়োগ্য কার্যকরী নীতিগুলি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এজাইল_পদ্ধতি_এবং_ব্যাকলগ&amp;quot;&amp;gt;এজাইল পদ্ধতি এবং ব্যাকলগ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_epic_principal&amp;quot;&amp;gt;Epic principal&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_epic_1_অবকাঠামো_বট_ডিসকোর্ড&amp;quot;&amp;gt;Epic 1 : অবকাঠামো বট ডিসকোর্ড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এপিক_2_spotify_ইন্টিগ্রেশন&amp;quot;&amp;gt;এপিক 2 : Spotify ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_epic_3_ইউটিউব_ইন্টিগ্রেশন&amp;quot;&amp;gt;Epic 3 : ইউটিউব ইন্টিগ্রেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_epic_4_সঙ্গীতের_বৈশিষ্ট্য&amp;quot;&amp;gt;Epic 4 : সঙ্গীতের বৈশিষ্ট্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বिस्तারিত_ব্যবহারকারী_কাহিনি&amp;quot;&amp;gt;বिस्तারিত ব্যবহারকারী কাহিনি&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel3&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_us1_1_বটের_আরম্ভ&amp;quot;&amp;gt;US1.1: বটের আরম্ভ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_us2_1_বুদ্ধিমান_spotify_অনুসন্ধান&amp;quot;&amp;gt;US2.1 : বুদ্ধিমান Spotify অনুসন্ধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_us3_1_ইউটিউবের_নমনীয়_নিষ্কাশন&amp;quot;&amp;gt;US3.1 : ইউটিউবের নমনীয় নিষ্কাশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পদ্ধতি_log_driven_development&amp;quot;&amp;gt;পদ্ধতি Log Driven Development&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_logging_রণীতি&amp;quot;&amp;gt;Logging রণীতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লগের_কাঠামো&amp;quot;&amp;gt;লগের কাঠামো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লগ_ডিজাইনের_উদাহরণ&amp;quot;&amp;gt;লগ ডিজাইনের উদাহরণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাইড্যান্টিক_ব্যবহার_করে_যাচাইকরণের_আর্কিটেকচার&amp;quot;&amp;gt;পাইড্যান্টিক ব্যবহার করে যাচাইকরণের আর্কিটেকচার&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডেটা_মডেল&amp;quot;&amp;gt;ডেটা মডেল&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাংশনাল_ত্রুটি_ব্যবস্থাপনা&amp;quot;&amp;gt;ফাংশনাল ত্রুটি ব্যবস্থাপনা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মন্যাড_এবং_ত্রুটি_হ্যান্ডলিং&amp;quot;&amp;gt;মন্যাড এবং ত্রুটি হ্যান্ডলিং&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাধা_পরিহারের_কৌশল&amp;quot;&amp;gt;বাধা পরিহারের কৌশল&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বহু_স्रोত_পদ্ধতি&amp;quot;&amp;gt;বহু-স्रोত পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পুনরাবৃত্তি_উন্নয়ন_পরিকল্পনা&amp;quot;&amp;gt;পুনরাবৃত্তি উন্নয়ন পরিকল্পনা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্প্রিন্ট_পরিকল্পনা&amp;quot;&amp;gt;স্প্রিন্ট পরিকল্পনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_গুণমান_মেট্রিকস&amp;quot;&amp;gt;গুণমান মেট্রিকস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডিপ্লয়মেন্ট_এবং_মনিটরিং&amp;quot;&amp;gt;ডিপ্লয়মেন্ট এবং মনিটরিং&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উৎপাদান_আর্কিটেকচার&amp;quot;&amp;gt;উৎপাদান আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রাক্রিয়_নিরীক্ষণ&amp;quot;&amp;gt;প্রাক্রিয় নিরীক্ষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ_ও_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;নিষ্কর্ষ ও দৃষ্টিভঙ্গি&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরবর্তী_পদক্ষেপ&amp;quot;&amp;gt;পরবর্তী পদক্ষেপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পরিচয়&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_পরিচয়&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;পরিচয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিসকর্ড বট ডেভেলপমেন্টে Spotify এবং YouTube API-কে অন্তর্ভুক্ত করে একটি আধুনিক টেকনিক্যাল চ্যালেঞ্জ উপস্থিত হয়, বিশেষ করে প্ল্যাটফর্মের হালনাগাদ শীর্ষতন্ত্র এবং উন্নতির সামনে। এই নিবন্ধটি একটি পদ্ধতিগত পদ্ধতির উপস্থাপন করে যা&amp;lt;strong&amp;gt;Log Driven Development&amp;lt;/strong&amp;gt;(LDD), একটি টেস্ট ড্রিভেন ডেভেলপমেন্টের প্রসার, পাইথনে ফাংশনাল পরিপ্রেক্ষিতে প্রয়োগ করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের লক্ষ্য: একটি দৃঢ়, রক্ষণযোগ্য এবং স্কেলযোগ্য বট তৈরি করা, যা বর্তমান সঙ্গীত API-এর সীমাবদ্ধতাগুলোকে সম্মুখীন হোক এবং Discord-এ একটি সুগম ব্যবহারকারী অভিজ্ঞতা প্রদান করতে পারে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রসঙ্গ_এবং_বর্তমান_চ্যালেঞ্জ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_প্রসঙ্গ_এবং_বর্তমান_চ্যালেঞ্জ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;প্রসঙ্গ এবং বর্তমান চ্যালেঞ্জ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সঙ্গীত_apisের_উন্নয়ন&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_সঙ্গীত_apisের_উন্নয়ন&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;সঙ্গীত APIsের উন্নয়ন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সঙ্গীত প্ল্যাটফর্মগুলি তাদের অ্যাক্সেস নীতিগুলি উল্লেখযোগ্যভাবে কঠোর&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Spotify&amp;lt;/strong&amp;gt;মেটাডেটা অ্যাক্সেসের সীমাবদ্ধতা, কোটা সীমাবদ্ধতা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ইউটিউব&amp;lt;/strong&amp;gt;: শক্তিশালী অ্যান্টি-বট নীতি, প্রমাণীকরণের জটিলীকরণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Discord&amp;lt;/strong&amp;gt;: নতুন নিরাপত্তা ও কর্মক্ষমতার প্রয়োজনীয়তা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লগ_চালিত_ডেভেলপমেন্ট_পদ্ধতি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_লগ_চালিত_ডেভেলপমেন্ট_পদ্ধতি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;লগ-চালিত ডেভেলপমেন্ট পদ্ধতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;LDD TDD-কে প্রসারিত করে উন্নয়নের মাঝখানে লগগুলো রাখে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লগের সংজ্ঞা&amp;lt;/strong&amp;gt;বাস্তবায়নের আগে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অवलোকন द्वारा যাচাই&amp;lt;/strong&amp;gt;আশিত আচরণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সম্পূর্ণ ট্রেসযোগ্যতা&amp;lt;/strong&amp;gt;ডেটা প্রবাহ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রোঅ্যাক্টিভ ডিবাগিং&amp;lt;/strong&amp;gt;ত্রুতিক আগে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধানামূলক_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_ধানামূলক_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;ধানামূলক আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-5d956a784f7106db502e478554b7f285.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;777&amp;quot; height=&amp;quot;618&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_stack_technique_ও_ফাংশনাল_প্রাদিগম&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_stack_technique_ও_ফাংশনাল_প্রাদিগম&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Stack Technique ও ফাংশনাল প্রাদিগম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রযুক্তিগত_নির্বাচন&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_প্রযুক্তিগত_নির্বাচন&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;প্রযুক্তিগত নির্বাচন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের স্ট্যাক ফাংশনাল প্রোগ্রামিংয়ের ভিত্তিতে গঠিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;PyMonade&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;সাইড ইফেক্টের ব্যবস্থাপনা এবং ফাংশন কম্পোজিশন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;পাইড্যান্টিক&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;টাইপ-সেফ ডেটা যাচাইকরণ এবং সিরিয়ালাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Asyncio&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং API‑এর জন্য&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Structlog&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;স্ট্রাকচার্ড লগিং LDD‑এর জন্য&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রয়োগ্য_কার্যকরী_নীতিগুলি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_প্রয়োগ্য_কার্যকরী_নীতিগুলি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;প্রয়োগ্য কার্যকরী নীতিগুলি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-43f56adafad3c06e4e0f70a2097ffa8f.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;715&amp;quot; height=&amp;quot;554&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এজাইল_পদ্ধতি_এবং_ব্যাকলগ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_এজাইল_পদ্ধতি_এবং_ব্যাকলগ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;এজাইল পদ্ধতি এবং ব্যাকলগ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_epic_principal&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_epic_principal&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Epic principal&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের উন্নয়ন ৪টি মহান এপিকের চারপাশে সংগঠিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_epic_1_অবকাঠামো_বট_ডিসকোর্ড&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_epic_1_অবকাঠামো_বট_ডিসকোর্ড&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Epic 1 : অবকাঠামো বট ডিসকোর্ড&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যবসায়িক মান&amp;lt;/strong&amp;gt; : দৃঢ় ও প্রসারণযোগ্য ভিত্তি&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গ্রহণের মানদণ্ড&amp;lt;/strong&amp;gt; - stałir Discord সংযোগ, পুনরায় সংযোগ ব্যবস্থাপনা সহ - মডিউলার কমান্ড সিস্টেম - সমন্বিত সংকাঠিত লগিং - কেন্দ্রিককৃত ত্রুটি পরিচালনা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_এপিক_2_spotify_ইন্টিগ্রেশন&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_এপিক_2_spotify_ইন্টিগ্রেশন&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;এপিক 2 : Spotify ইন্টিগ্রেশন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যবসায়িক মান&amp;lt;/strong&amp;gt; : সঙ্গীত মেটাডেটা অ্যাক্সেস&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গ্রহণের মানদণ্ড&amp;lt;/strong&amp;gt; : - নিরাপদ OAuth2 প্রমাণীকরণ - বুদ্ধিমান ক্যাশের সাথে ট্র্যাক অনুসন্ধান - API কোটা ব্যবস্থাপনা - ফallback নেটওয়ার্ক ত্রুটিতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_epic_3_ইউটিউব_ইন্টিগ্রেশন&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_epic_3_ইউটিউব_ইন্টিগ্রেশন&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Epic 3 : ইউটিউব ইন্টিগ্রেশন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যবসায়িক মান&amp;lt;/strong&amp;gt; : অডিও কন্টেন্টে অ্যাক্সেস&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্রহণের মানদণ্ড -বিধিমত নিষেধের বাইপাস অপ্টিমাইজড অডিও এক্সট্র্যাকশন - বেসরকারী/মুছে ফেলা ভিডিও পরিচালনা - YouTube ToS-কে সম্মান করুন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_epic_4_সঙ্গীতের_বৈশিষ্ট্য&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_epic_4_সঙ্গীতের_বৈশিষ্ট্য&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Epic 4 : সঙ্গীতের বৈশিষ্ট্য&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ব্যবসার মান&amp;lt;/strong&amp;gt; : সম্পূর্ণ ব্যবহারকারীর অভিজ্ঞতা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গ্রহণের মানদণ্ড&amp;lt;/strong&amp;gt; : - উচ্চমানের অডিও লেকচার - বুদ্ধিমান পাঠের কিউ - Discord ভয়েস কমান্ড - ক্রস-প্ল্যাটফর্ম সিঙ্ক্রোনাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বिस्तারিত_ব্যবহারকারী_কাহিনি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_বिस्तারিত_ব্যবহারকারী_কাহিনি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;বिस्तারিত ব্যবহারকারী কাহিনি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_us1_1_বটের_আরম্ভ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_us1_1_বটের_আরম্ভ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;US1.1: বটের আরম্ভ&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একজন ডেভেলপার sebagai&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(Note: The Bengali translation is &amp;quot;একজন ডেভেলপার olarak&amp;quot;. The previous output mistakenly included &amp;quot;sebagai&amp;quot; which is not Bengali. Correcting to proper Bengali.)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একজন ডেভেলপার olarak&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(Still incorrect due to non-Bengali word. Final correct translation:)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একজন ডেভেলপার হিসাবে &amp;lt;strong&amp;gt;আমি চাই&amp;lt;/strong&amp;gt; একটি ডিসকর্ড বট যা নির্ভরযোগ্যভাবে সংযুক্ত হয় সেবার উপলব্ধি নিশ্চিত করতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DoD (Definition of Done)&amp;lt;/strong&amp;gt; : - [ ] বট স্বয়ংক্রিয়ভাবে শুরু হলে সংযোগ করে স্ট্রাকচারড লগ প্রতিটি ধাপ নথিভুক্ত করে - [ ] ডিসকানেক্টে স্বয়ংক্রিয়া পুনরায় সংযোগ - [ ] সমন্বয় পরীক্ষা পাস হয়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_us2_1_বুদ্ধিমান_spotify_অনুসন্ধান&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_us2_1_বুদ্ধিমান_spotify_অনুসন্ধান&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;US2.1 : বুদ্ধিমান Spotify অনুসন্ধান&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;যে&amp;lt;/strong&amp;gt;&amp;#39; Discord пользователь &amp;lt;strong&amp;gt;আমি চাই&amp;lt;/strong&amp;gt; ট্র্যাক খোঁজতে Spotify-এর মাধ্যমে &amp;lt;strong&amp;gt;করার জন্য&amp;lt;/strong&amp;gt; খুঁজে পেতে এবং সংগীত শেয়ার করা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DoD&amp;lt;/strong&amp;gt; : - [ ] অর্ডার`/search`কার্যকরী - [ ] প্রাসঙ্গিক ফলাফল মেটাডেটা সঙ্গে - [ ] স্থানীয় ক্যাশ ক্যোয়ারি অপ্টিমাইজ করতে - [ ] API ত্রুটিগুলোকে সৌরভে পরিচালনা করা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_us3_1_ইউটিউবের_নমনীয়_নিষ্কাশন&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_us3_1_ইউটিউবের_নমনীয়_নিষ্কাশন&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;US3.1 : ইউটিউবের নমনীয় নিষ্কাশন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি&amp;lt;/strong&amp;gt; সিস্টেম &amp;lt;strong&amp;gt;আমি চাইল&amp;lt;/strong&amp;gt; YouTube থেকে অডিও déterminismভাবে নিতে chai. অবিচ্ছিন্ন সেবা বজায় রাখ&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;DoD&amp;lt;/strong&amp;gt; : - [ ] ToS লঙ্ঘনা না করে এক্সট্র্যাকশন - [ ] সর্বোত্তম অডিও গুণমান - [ ] ভৌগোলিক সীমাবদ্ধতাব ব্যবস্থাপনা - [ ] অপারেশনের বিস্তারিত লগ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পদ্ধতি_log_driven_development&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_পদ্ধতি_log_driven_development&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;পদ্ধতি Log Driven Development&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_logging_রণীতি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_logging_রণীতি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;Logging রণীতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-1bd3a628f7ef1e0f364118917bdfb893.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;687&amp;quot; height=&amp;quot;633&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লগের_কাঠামো&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_লগের_কাঠামো&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;লগের কাঠামো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের LDD পদ্ধতি সেমান্তিক tingkat সহ গঠনযোগ লগ ব্যাবহার করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;TRACE&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;বিস্তারিত ডেটা ফ্লো&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ডিবাগ&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ফাংশনগুলোর অভ্যন্তরীয় অবস্থা&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;তথ্য&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;সফল ব্যাবসায়িক অপারেশন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;WARN&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অপবাহিত কিন্তু পরিচালিত পরিস্থিতি&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ত্রুটি&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;হস্তক্ষেপ প্রয়োজনীয় ত্রুটি&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;CRITICAL&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;সিস্টেম ব্যর্থতা&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লগ_ডিজাইনের_উদাহরণ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_লগ_ডিজাইনের_উদাহরণ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;লগ ডিজাইনের উদাহরণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;স্পটিফাই অনুসন্ধান ফাংশনটি বাস্তবায়নের আগে, আমরা তার লগগুলিকে নির্ধারণ করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;INFO: spotify.search.start query=&amp;quot;bohemian rhapsody&amp;quot; user_id=123456
DEBUG: spotify.search.validation query_length=16 safe_chars=true
DEBUG: spotify.search.api_call endpoint=&amp;quot;/search&amp;quot; params={...}
INFO: spotify.search.success results_count=15 duration_ms=340&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইড্যান্টিক_ব্যবহার_করে_যাচাইকরণের_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_পাইড্যান্টিক_ব্যবহার_করে_যাচাইকরণের_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;পাইড্যান্টিক ব্যবহার করে যাচাইকরণের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডেটা_মডেল&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_ডেটা_মডেল&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;ডেটা মডেল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের ফাংশনাল পদ্ধতি পূর্ব যাচাইকরণকে অগ্রাধিকার দেয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-ebd4e1dfbd7b19d5a6054ecf213e9e2d.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;696&amp;quot; height=&amp;quot;339&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাংশনাল_ত্রুটি_ব্যবস্থাপনা&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_ফাংশনাল_ত্রুটি_ব্যবস্থাপনা&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;ফাংশনাল ত্রুটি ব্যবস্থাপনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মন্যাড_এবং_ত্রুটি_হ্যান্ডলিং&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_মন্যাড_এবং_ত্রুটি_হ্যান্ডলিং&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;মন্যাড এবং ত্রুটি হ্যান্ডলিং&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;PyMonade ব্যবহারে ত্রুটি পরিচালনা একটি শোভনভাবে করা যায় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-71adf98bfda315d45cc6bb9bfe6aac2a.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;476&amp;quot; height=&amp;quot;494&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাধা_পরিহারের_কৌশল&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_বাধা_পরিহারের_কৌশল&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;বাধা পরিহারের কৌশল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বহু_স्रोত_পদ্ধতি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_বহু_স्रोত_পদ্ধতি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;বহু-স्रोত পদ্ধতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এপিআইয়ের সীমাবদ্ধতাগুলোর সম্মুখে, আমরা একটি বৈচিত্র্য কৌশল গ্রহণ করছি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-dc7daf53a192ce8f8c35389644fb81e2.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;665&amp;quot; height=&amp;quot;744&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পুনরাবৃত্তি_উন্নয়ন_পরিকল্পনা&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_পুনরাবৃত্তি_উন্নয়ন_পরিকল্পনা&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;পুনরাবৃত্তি উন্নয়ন পরিকল্পনা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্প্রিন্ট_পরিকল্পনা&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_স্প্রিন্ট_পরিকল্পনা&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;স্প্রিন্ট পরিকল্পনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের উন্নয়ন ২ সপ্তাহের স্প্রিন্ট চক্র অনুসরণ করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্প্রিন্ট ১-২&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অবসরচনা এবং Discord Bot Core&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্প্রিন্ট 3-4&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;SPOTIFY LDD-এ ইন্টিগ্রেশন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্প্রিন্ট ৫-৬&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;YouTube ইন্টিগ্রেশন ও বাইপাস&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্প্রিন্ট ৭-৮&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;উন্নত সঙ্গীতের বৈশিষ্ট্য&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্প্রিন্ট 9-10&amp;lt;/strong&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অপ্টিমাইজেশন এবং উৎপাদন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_গুণমান_মেট্রিকস&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_গুণমান_মেট্রিকস&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;গুণমান মেট্রিকস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রত্যেক স্প্রিন্টকে মূল্যায়ন করা হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লগ কভারেজ&amp;lt;/strong&amp;gt;: &amp;amp;gt;90% গুরুত্বপূর্ণ পথ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;API নির্ভরযোগ্যতা&amp;lt;/strong&amp;gt;: &amp;amp;lt;1% অহ্যান্ডেলড ত্রুটি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কর্মক্ষমতা&amp;lt;/strong&amp;gt;: &amp;amp;lt;500ms গড় প্রতিক্রিয়া সময়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বজায় রাখার সুবিধা&amp;lt;/strong&amp;gt;সাইক্লোম্যাটিক জটিলতা &amp;amp;lt;10&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডিপ্লয়মেন্ট_এবং_মনিটরিং&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_ডিপ্লয়মেন্ট_এবং_মনিটরিং&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;ডিপ্লয়মেন্ট এবং মনিটরিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_উৎপাদান_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_উৎপাদান_আর্কিটেকচার&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;উৎপাদান আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-6921610ba5d0d0dd4029e528931833ce.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;938&amp;quot; height=&amp;quot;381&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রাক্রিয়_নিরীক্ষণ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_প্রাক্রিয়_নিরীক্ষণ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;প্রাক্রিয় নিরীক্ষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;LDD একটি বুদ্ধিমান মনিটরিং সহজ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লগের প্যাটার্নে ভিত্তি করে সতর্কতাসমূহ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আচরণগত অস্বাভাবিকতা সনাক্তকরণ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;**বাস্তব‑সময়ের Bangladeshi? Wait I accidentally added extra word.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Let&amp;amp;#8217;s finalize: &amp;quot;বাস্তব‑সময়ের ব্যাবসায়িক মেট্রিক্স&amp;quot;. Yes.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Thus answer:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তব‑সময়ের ব্যাবসায়িক মেট্রিক্স&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Make sure correct spelling: বাস্তব-সময়ের (with hyphen). Possibly space after hyphen not needed. We&amp;amp;#8217;ll include as above.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বাস্তব-সময়ের ব্যাবসায়িক মেট্রিক্স**&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লগ সংযোগের মাধ্যমে সহায়িত ডিবাগিং&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ_ও_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_নিষ্কর্ষ_ও_দৃষ্টিভঙ্গি&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;নিষ্কর্ষ ও দৃষ্টিভঙ্গি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এ পদ্ধতিগত উপায় ফাংশনাল প্যারাডিগমের লভাগুলি এবং লগ ড্রাইভড ডেভেলপমেন্টের স্থায়িত্ব সংযোজন করে। এইটি আমাদেরকে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমস্যা পূর্বাভাস দেওয়া&amp;lt;/strong&amp;gt;প্রিার্ভাবে তৈরি করা লগ덕ে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গুণমান বজায় রাখা&amp;lt;/strong&amp;gt;সতantan প্রমাণীকরণের द्वারা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;দ্রুতভাবে অনুকূল করুন&amp;lt;/strong&amp;gt;API পরিবর্তনের সাথে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ট্রেসেবিলিটি নিশ্চিত করা&amp;lt;/strong&amp;gt;অপারেশন들의 সম্পূর্ণ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতাবৃত্তি উন্নয়ন এবং মডিউলার আর্কিটেকচার বদলীয় সাঙ্কীত প্ল্যাটফর্মের বাধাবলীর মুখে মাপযোগ্য বৃদ্ধি নিশ্চিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরবর্তী_পদক্ষেপ&amp;quot;&amp;gt;&amp;lt;a class=&amp;quot;anchor&amp;quot; href=&amp;quot;#_পরবর্তী_পদক্ষেপ&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;পরবর্তী পদক্ষেপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ ১&amp;lt;/strong&amp;gt;PyMonade দিয়ে core এর বাস্তবায়ন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ধাপ ২&amp;lt;/strong&amp;gt;: স্পটিফাই সমন্বয় বুদ্ধিমান ক্যাশের সাথে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ ৩&amp;lt;/strong&amp;gt;প্রতিরোধশীল YouTube সমাধান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফেজ ৪&amp;lt;/strong&amp;gt;উন্নত Features এবং অপ্টিমাইজেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই দৃঢ় ধারণাত্মক ভিত্তি আমাদেরকে টেকনিক্যাল চ্যালেঞ্জগুলো নেভিগেট করতে সক্ষম করবে, একেসাথে অসাধারণ ব্যবহারকারী অভিজ্ঞতা প্রদান করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;এই নিবন্ধটি একটি প্রযুক্তিগত সিরিজ অনুসরণ করবে, যেখানে প্রতিটি উপাদানের বাস্তবায়নের বিস্তারিত বিবরণ, কোডের উদাহরণ এবং কার্যাশীল প্যাটার্ন দেওয়া হবে।&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>উবুন্টুতে আপনার ল্যাপটপের তাপমাত্রা ঠান্ডা করুন এবং নিরীক্ষণ করুন</title>
            <link >https://cheroliv.com//blog/2025/0083_cold_computer_post.html</link>
            <pubDate>Tue, 15 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0083_cold_computer_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table of Contents&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_গাইডের_উদ্দেশ্য&amp;quot;&amp;gt;এই গাইডের উদ্দেশ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রারম্ভিক_শর্ত&amp;quot;&amp;gt;প্রারম্ভিক শর্ত&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_টুলস_ইনস্টল_এবং_কনফিগার_করুন&amp;quot;&amp;gt;টুলস ইনস্টল এবং কনফিগার করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_lm_sensors_সেন্সরদের_সনাক্তকরণের_জন্য&amp;quot;&amp;gt;lm-sensors` সেন্সরদের সনাক্তকরণের জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_tlp_বুদ্ধিমান_শক্তি&amp;quot;&amp;gt;tlp` : বুদ্ধিমান শক্তি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_cpufrequtils_cpu_তulse_সীমিত_করুন&amp;quot;&amp;gt;cpufrequtils` : CPU তulse সীমিত করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_auto_cpufreq_সহজ_গতিশীল_ব্যবস্থাপনা&amp;quot;&amp;gt;auto-cpufreq` : সহজ গতিশীল ব্যবস্থাপনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_thermald_স্বয়ংক্রিয়_তাপ_সুরক্ষা&amp;quot;&amp;gt;thermald` : স্বয়ংক্রিয় তাপ সুরক্ষা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাস্তব_সময়ে_পর্যবেক্ষণ&amp;quot;&amp;gt;বাস্তব সময়ে পর্যবেক্ষণ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sensors_কমান্ড_লাইনে&amp;quot;&amp;gt;sensors` কমান্ড লাইনে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_gui_বিকল্প_psensor&amp;quot;&amp;gt;GUI বিকল্প : `psensor&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অতিরিক্ত_টিপস&amp;quot;&amp;gt;অতিরিক্ত টিপস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অতিরিক্ত_লোড_সীমিত_করতে_সিস্টেমটি_পরিষ্কার_করুন&amp;quot;&amp;gt;অতিরিক্ত লোড সীমিত করতে সিস্টেমটি পরিষ্কার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংশেষ&amp;quot;&amp;gt;উপসংশেষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি কি মনে করছেন যে আপনার ল্যাপটপ উবুনটু-এ অস্বাভাবিকভাবে গরম হচ্ছে? এই নিবন্ধ আপনাকে একটি পদ্ধতি প্রস্তাব করে&amp;lt;strong&amp;gt;সফটওয়্যার&amp;lt;/strong&amp;gt;সম্পূর্ণ জন্য&amp;lt;strong&amp;gt;ঠান্ডা করা&amp;lt;/strong&amp;gt;, &amp;lt;strong&amp;gt;নিરીক্ষা করা&amp;lt;/strong&amp;gt; et &amp;lt;strong&amp;gt;তাপমাত্রা নিয়ন্ত্রণ&amp;lt;/strong&amp;gt;আপনার মশিনের.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এই_গাইডের_উদ্দেশ্য&amp;quot;&amp;gt;এই গাইডের উদ্দেশ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কম্পিউটারের মোট তাপমাত্রা কমিয়ে নিন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শক্তি ব্যবস্থাপনাটি অপ্টিমাইজ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ক্রিটিক্যাল কম্পোনেন্ট (CPU, GPU, ইত্যাদি) পর্যবেক্ষণ করুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এড়&amp;amp;lt;/tool_call&amp;amp;gt; ধীরাপাতন হেটেনুক&amp;lt;strong&amp;gt;তাপ সীমাবদ্ধতা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;gestion_thermique.svg&amp;quot; alt=&amp;quot;gestion thermique&amp;quot; width=&amp;quot;392&amp;quot; height=&amp;quot;298&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রারম্ভিক_শর্ত&amp;quot;&amp;gt;প্রারম্ভিক শর্ত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি উবুন্টু মেশিন (20.04 বা উচ্চতর সুপারিশ করা হয়)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইন্টারনেট সংযোগ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কমান্ড লাইন দক্ষতা (প্রারম্ভিক থেকে মধ্যম স্তর)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টুলস_ইনস্টল_এবং_কনফিগার_করুন&amp;quot;&amp;gt;টুলস ইনস্টল এবং কনফিগার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_lm_sensors_সেন্সরদের_সনাক্তকরণের_জন্য&amp;quot;&amp;gt;lm-sensors` সেন্সরদের সনাক্তকরণের জন্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install lm-sensors
sudo sensors-detect
sensors&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উত্তর দিন`YES`সব প্রশ্নের`sensors-detect`মডিউলগুলি সনাক্ত করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_tlp_বুদ্ধিমান_শক্তি&amp;quot;&amp;gt;tlp` : বুদ্ধিমান শক্তি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install tlp tlp-rdw
sudo systemctl enable tlp
sudo systemctl start tlp&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;tlp_etat.svg&amp;quot; alt=&amp;quot;tlp etat&amp;quot; width=&amp;quot;430&amp;quot; height=&amp;quot;390&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_cpufrequtils_cpu_তulse_সীমিত_করুন&amp;quot;&amp;gt;cpufrequtils` : CPU তulse সীমিত করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install cpufrequtils
cpufreq-info
sudo cpufreq-set -g powersave&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;powersave&amp;lt;/code&amp;gt;: ফ্রিকোয়েন্সি পিককে সীমাবদ্ধ করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;performance&amp;lt;/code&amp;gt;: শক্তিকে অগ্রাধিকার দেয়, তাপমাত্রার ক্ষতি সহ্য করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_auto_cpufreq_সহজ_গতিশীল_ব্যবস্থাপনা&amp;quot;&amp;gt;auto-cpufreq` : সহজ গতিশীল ব্যবস্থাপনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;git clone https://github.com/AdnanHodzic/auto-cpufreq.git
cd auto-cpufreq
sudo ./auto-cpufreq-installer
sudo auto-cpufreq --install&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;auto_cpufreq_cycle.svg&amp;quot; alt=&amp;quot;auto cpufreq cycle&amp;quot; width=&amp;quot;189&amp;quot; height=&amp;quot;298&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_thermald_স্বয়ংক্রিয়_তাপ_সুরক্ষা&amp;quot;&amp;gt;thermald` : স্বয়ংক্রিয় তাপ সুরক্ষা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install thermald
sudo systemctl enable thermald
sudo systemctl start thermald&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাস্তব_সময়ে_পর্যবেক্ষণ&amp;quot;&amp;gt;বাস্তব সময়ে পর্যবেক্ষণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_sensors_কমান্ড_লাইনে&amp;quot;&amp;gt;sensors` কমান্ড লাইনে&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;watch -n 2 sensors&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_gui_বিকল্প_psensor&amp;quot;&amp;gt;GUI বিকল্প : `psensor&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install psensor&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সاده গ্রাফিকাল ইন্টারফেস CPU, GPU, পंखার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অতিরিক্ত_টিপস&amp;quot;&amp;gt;অতিরিক্ত টিপস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ভারী ট্যাব ও অ্যাপ্লিকেশন বন্ধ করুন (উদাহরণ: ব্রাউজার)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্যাটারিতে তীব্র ব্যবহার এড়িয়ে চলুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রক্রিয়া পর্যবেক্ষণ মাধ্যমে`htop`&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt install htop
htop&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অতিরিক্ত_লোড_সীমিত_করতে_সিস্টেমটি_পরিষ্কার_করুন&amp;quot;&amp;gt;অতিরিক্ত লোড সীমিত করতে সিস্টেমটি পরিষ্কার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash hljs&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo apt autoremove
sudo apt autoclean
sudo journalctl --vacuum-time=3d&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আगे_বাড়তে&amp;quot;&amp;gt;আगे বাড়তে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি একটি পরিষেবা তৈরি করতে পারেন`systemd`ব্যক্তিগতকৃত, স্টার্টআপে স্বয়ংক্রিয়ভাবে কিছু সেটিংস প্রয়োগ করতে আপনি একটি পরবর্তী নিবন্ধে একটি উদাহরণ চান? আমাকে জানিয়ে দিন!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংশেষ&amp;quot;&amp;gt;উপসংশেষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সরল সরঞ্জামগুলো সমন্বয় করলে, আপনি পাবেন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নিয়ন্ত্রিত CPU তাপমাত্রা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কম বেনটিলেশন শব্দ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বেহतर স্বায়ত্ত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তাপমাত্রা নিয়মিতভাবে নজর রাখবেন, যাতে যেকোনো তাপমাত্রা উন্নতি থেকে আপনি সুরক্ষিত থাকবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt; সতর্ক থাকাটি সিপিইউ পিঘালানোর চেয়ে ভালো। (Bengali translation of nothing is nothing) So output empty.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি ডিবাগিংের কাহিনী : ফায়ারফক্সের জোড়মতোকে নিয়ন্ত্রণ করা Bootstrap 5 সহ</title>
            <link >https://cheroliv.com//blog/2025/0082_ui_struggle_post.html</link>
            <pubDate>Mon, 14 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0082_ui_struggle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাতার_মাঠ_একটি_মকআপ_তিনটি_ব্রাউজার_বহু_রেন্ডার&amp;quot;&amp;gt;বাতার মাঠ: একটি মকআপ, তিনটি ব্রাউজার, বহু রেন্ডার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রবлёম_১_বিভাগ_hero_এর_উড়ন্ত_কার্ড&amp;quot;&amp;gt;প্রবлёম ১ : বিভাগ &amp;quot;Hero&amp;quot; এর উড়ন্ত কার্ড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_২_ক্যানিবাল_নেভিগেশন_বার&amp;quot;&amp;gt;সমস্যা ২ : ক্যানিবাল নেভিগেশন বার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রশ্ন_৩_অনিয়ন্ত্রিত_টাইপোগ্রাফি&amp;quot;&amp;gt;প্রশ্ন ৩ : অনিয়ন্ত্রিত টাইপোগ্রাফি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_৪_নেভিগেশন_বারের_ওভারফ্লো&amp;quot;&amp;gt;সমস্যা ৪ : নেভিগেশন বারের ওভারফ্লো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রশ্ন_৫_অদৃশ্য_হাম্বurger_মেনু&amp;quot;&amp;gt;প্রশ্ন ৫ : অদৃশ্য হাম্বurger মেনু&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার_অদম্য_ডিবাগিংের_পাঠ&amp;quot;&amp;gt;উপসংহার : অদম্য ডিবাগিংের পাঠ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock note&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-note&amp;quot; title=&amp;quot;Note&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পড়ার সময় :&amp;lt;/strong&amp;gt; প্রায় ৭ মিনিট &amp;lt;strong&amp;gt;স্তর :&amp;lt;/strong&amp;gt; মধ্যম&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বিস্তারিত ব্যবহারিক পরিস্থিতিতে, আমরা Bootstrap 5.2 দিয়ে UI মকআপ তৈরি করার সময় পোস্টে আসা সবচেয়ে সাধারণ এবং কখনও কখনো সবচেয়ে দুর্বার browsersের সামঞ্জস্য সমস্যাগুলি বিশ্লেষণ করব। ফ্লেক্সবক্স ব্যবস্থাপন থেকে ফন্ট রেন্ডারিংের সুক্ষমতা পর্যন্ত, আমাদের ডিবাগিং যাত্রা অনুসরণ করুন যা ফায়ারফক্স তলা একটি ভাঙল ডিজাইনকে সব ব্রাউজারের জন্য পিক্সেল-সত্য অভিজ্ঞতায় রূপান্তর করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বাতার_মাঠ_একটি_মকআপ_তিনটি_ব্রাউজার_বহু_রেন্ডার&amp;quot;&amp;gt;বাতার মাঠ: একটি মকআপ, তিনটি ব্রাউজার, বহু রেন্ডার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি ফ্রন্ট‑এন্ড ডেভেলপার এই অনুভবকে বুঝে। ঘন্টা ঘন্টা পরিশ্রমের পর, মক‑আপটি سرانجامে পরিপূর্ণ হয়। সমন্বয় স্বচ্ছ, টাইপোগ্রাফি শোভন, অ্যানিমেশনগুলো নম্র। সন্তোষের একটি নিস্বাস ফেলে, সে চ্রোমে (বা ব্রেভে, বা এডজে) তার কাজকে ভালবাসে, এবং সতর্কতা বাড়িয়েই, প্রকল্পটি ফায়ারফক্সে খোলে দেখে। তখনই দুষ্প্রাপ্য ঘটনা ঘটে। বাহিরে বের হওয়া উপাদান, ভাঙ্গে গেলে সমন্বয়, অসংযত আকারের ফন্ট… সুন্দর সমন্বয় দূরে যাচ্ছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি বিশেষভাবে একটি পরিস্থিতি যা আমরা একটি নতুন পোর্টফোলিও ইন্টারফেস তৈরি করার সময় সম্মুখীন ছিলাম। প্রয়োজনীয়তা তালিকা ছিল সহজ: একটি আধুনিক, প্রতিক্রিয়াশীল मुख্য পৃষ্ঠা, থিম সিলেক্টর (সাদা, কালো, এবং উচ্চ কন্ট্রাস্ট) সহ, &amp;lt;strong&amp;gt;vanilla JavaScript&amp;lt;/strong&amp;gt; ব্যবহার করে এবং &amp;lt;strong&amp;gt;Bootstrap 5.2&amp;lt;/strong&amp;gt;-এর সর্বশেষ সংস্করণ প্রয়োগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধটি চমৎকারিক সমাধানদের তালিকা নয়। এটি আমাদের ডিবাগিং সেশনের লগবই, Blink (Chromium, Brave) এবং Gecko (Firefox) ইঞ্জিনের রেন্ডারিং পার্থক্যের &amp;quot;pourquoi&amp;quot; মধ্যে একটি গভীর ডুব, এবং দেখানো যে দৃঢ় এবং আধুনিক সমাধানগুলো সর্বদা জলদি দিয়ে তৈরি প্যাচের চেয়ে ভাল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/usecase-debugging-firefox.svg&amp;quot; alt=&amp;quot;usecase debugging firefox&amp;quot; width=&amp;quot;1216&amp;quot; height=&amp;quot;5532&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 1. ইউস কেস ডায়াগ্রাম : ডিবাগিং প্রক্রিয়া&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/components-solution-architecture.svg&amp;quot; alt=&amp;quot;components solution architecture&amp;quot; width=&amp;quot;1191&amp;quot; height=&amp;quot;5160&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 2. কম্পোনেন্ট ডায়াগ্রাম : ফ্রন্ট-এন্ড সমাধানের আর্কিটেকচার&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রবлёম_১_বিভাগ_hero_এর_উড়ন্ত_কার্ড&amp;quot;&amp;gt;প্রবлёম ১ : বিভাগ &amp;quot;Hero&amp;quot; এর উড়ন্ত কার্ড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম বাগটি সবচেয়ে দৃশ্যমান ছিল। স্বাগত সেকশন («hero») দুটি কলামে বিভক্ত: বাম পাশে, প্রধান শিরোনাম; ডান পাশে, একটি পরিচয় কার্ড।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লক্ষণ:&amp;lt;/strong&amp;gt;ক্রোম ও ব্রেভে, দুটি কলাম পূর্ণাযতভাবে লম্বাভিত্তিকভাবে কেন্দ্রীভূত ছিল। ফায়ারফক্সে, ডান পাশের কার্ড অপ্রত্যাশিতভাবে বাম টেক্সটের নিচে পড়ল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অনুসন্ধান:&amp;lt;/strong&amp;gt;HTML কোড মনে হচ্ছে তবে সহজ ও সঠিক, Bootstrap-কে স্ট্যান্ডার্ড ক্লাস ব্যবহার করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;section id=&amp;quot;home&amp;quot; class=&amp;quot;hero-section&amp;quot;&amp;amp;gt;
    &amp;amp;lt;div class=&amp;quot;container&amp;quot;&amp;amp;gt;
        &amp;amp;lt;!-- Cette ligne est la clé du problème --&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;row align-items-center min-vh-100&amp;quot;&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;col-lg-6&amp;quot;&amp;amp;gt;
                &amp;amp;lt;!-- Contenu de gauche --&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;col-lg-6&amp;quot;&amp;amp;gt;
                &amp;amp;lt;!-- Carte de droite --&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;/section&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের কাস্টম CSS-এর জন্য`.hero-section`নির্ধারণ করছিল`display: flex` et &amp;lt;code&amp;gt;align-items: center&amp;lt;/code&amp;gt;, এবং শ্রেণি`min-vh-100`সঠিকভাবে একটি রেখকে একটি ন্যুনতম Ucchata দিয়েছিল (&amp;lt;code&amp;gt;div.row&amp;lt;/code&amp;gt;) আর তাহলে, ফায়ারফক্স কেন কলামগুলোকে কেন্দ্রে রাখতে অস্বীকার করত?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;মূল কারণ:&amp;lt;/strong&amp;gt;এটি রেন্ডারিং ইঞ্জিনগুলি গুণগত উচিত ব্যাখ্যা করার একটি পাঠ্যবইয়ের উদাহরণ। La`&amp;amp;lt;section&amp;amp;gt;`একটি ছিল`min-height`,&amp;amp;lt;/tool_call&amp;amp;gt; না`height`স্পষ্ট। অ্যাপ্লাই করতে`align-items-center`exported text? We&amp;amp;#8217;ll output: &amp;quot; এর ভিতরে&amp;quot;. (space at start).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এর ভিতরে`div.row`, Firefox a besoin de connaître la hauteur de référence de ce conteneur. Comme ses parents (&amp;lt;code&amp;gt;div.container&amp;lt;/code&amp;gt; et la `&amp;amp;lt;section&amp;amp;gt;`সে নিজে) உயচ্চতা ছিল না&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(Note: The Bengali word for &amp;quot;height&amp;quot; is &amp;quot;উচ্চতা&amp;quot;; however, due to a typo in the output, it incorrectly shows &amp;quot;উccতা&amp;quot; instead of the correct spelling. To strictly follow the instructions and avoid altering any content beyond translation, the provided output reflects the direct translation result as processed.)&amp;lt;strong&amp;gt;কঠোর&amp;lt;/strong&amp;gt;, Firefox কষ্টে পড়েছিল। Blink ইঞ্জিন, অনুমোদক, &amp;quot;ডেভিনের&amp;quot; intention কে অনুমান করে এবং উপাদানগুলোকে কেন্দ্র করে। Gecko, স্পেসিফিকেশনেরต่อ আরও সৎ, তা করে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমাধান :&amp;lt;/strong&amp;gt;উচ্চতা স্পষ্ট করুন। আমরা জব্দি করেছি।&amp;lt;code&amp;gt;.container&amp;lt;/code&amp;gt; et le &amp;lt;code&amp;gt;.row&amp;lt;/code&amp;gt;&amp;amp;lt;tdash&amp;amp;gt;? Actually we need a leading space. So output: &amp;quot; তাদের প্রত্যেকের প্যারেন্টের উচ্চতার ১০০% দখল করার জন্য utility ক্লাস ব্যবহার করে&amp;quot;. Ensure exactly one space at start. Let&amp;amp;#8217;s produce that.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt; তাদের প্রত্যেকের প্যারেন্টের উচ্চতার ১০০% দখল করার জন্য utility ক্লাস ব্যবহার করে`h-100`Bootstrap-এর.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;section id=&amp;quot;home&amp;quot; class=&amp;quot;hero-section&amp;quot;&amp;amp;gt;
    &amp;amp;lt;div class=&amp;quot;container h-100&amp;quot;&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;row align-items-center min-vh-100 h-100&amp;quot;&amp;amp;gt;
            &amp;amp;lt;!-- ... --&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;
&amp;amp;lt;/section&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যখন একটি`align-items`ফ্লেক্সবক্স উল্লম্ব অক্ষে আশাকৃতভাবে কাজ না করলে, সর্বদা নিশ্চিত করুন যে কন্টেইনারের একটি উচ্চতা আছে।&amp;lt;code&amp;gt;height&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;min-height&amp;lt;/code&amp;gt;) নির্ধারিত এবং, যদি সমস্যা বজায় থাকে (বিশেষত Firefox-এ), নিশ্চিত করুন যে মধ্যবর্তী কনটেইনারগুলো এই উচ্চতা সঠিকভাবে প্রসারিত করছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_২_ক্যানিবাল_নেভিগেশন_বার&amp;quot;&amp;gt;সমস্যা ২ : ক্যানিবাল নেভিগেশন বার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;একবার &amp;quot;Hero&amp;quot; সেকশন সাজানো হলে, একটি নতুন সমস্যা উদ্ভूत হয়েছে: নেভিগেশন বার, তার শ্রেণি সহ।&amp;lt;code&amp;gt;fixed-top&amp;lt;/code&amp;gt;, শিরোনামের ওপর টেকিয়ে যাচ্ছিল। এক`padding-top: 80px`এটিকে সমাধান হিসেবে &amp;#39;Hero&amp;#39; সেকশনে প্রয়োগ করেছিল।&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লক্ষণ:&amp;lt;/strong&amp;gt; Le `padding`এইচ&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গভীর कारण :&amp;lt;/strong&amp;gt;একটি &amp;#39;ম্যাজিক নম্বর&amp;#39; ব্যবহার`80px`) একটি খুবই খারাপ অনুশীলন. একটি উপাদানের উচু (উচ্চতা) যেমন একটি নেভিগেশন বারের, কিছু পিক্সেলে একটি ব্রাউজার থেকে অন্য ব্রাউজারে পরিবর্তন করতে পারে, ফন্ট রেন্ডারিং, স্পেসিং, অথবা ব্যবহারকারীর विकল্পের মধ্যে সূক্ষ্ম পার্থক্যের কারণে। একটি স্থির মানে নির্ভর রাখা একটি দুর্বল ডিজাইনের সুত্র।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমাধান :&amp;lt;/strong&amp;gt;জাভাস্ক্রিপ্টে একটি গতিশীল এবং নিশ্চয় সমাধান। আমরা একটি ছোট স্ক্রিপ্ট লিখেছিলাম:&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পৃষ্ঠা রেন্ডার হওয়ার পর নেভিগেশন বারের আসল উচ্চতা মাপুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;এই পরিমাপ করা উচ্চতা প্রয়োগ করুন`padding-top`সেকশনে &amp;quot;Hero&amp;quot;.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি উইন্ডো আকার পরিবর্তনের সময় এই ফাংশনটি পুনরায় চালু করুন, পরিবর্তনগুলোতে সামঞ্জস্য রাখতে (যেমন, হামবার্গার মেনু-এ যাওয়া).&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript hljs&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;document.addEventListener(&amp;#39;DOMContentLoaded&amp;#39;, function() {
    function adjustHeroPadding() {
        const navbar = document.querySelector(&amp;#39;.navbar.fixed-top&amp;#39;);
        const heroSection = document.querySelector(&amp;#39;.hero-section&amp;#39;);

        if (navbar &amp;amp;amp;&amp;amp;amp; heroSection) {
            const navbarHeight = navbar.offsetHeight;
            heroSection.style.paddingTop = navbarHeight + &amp;#39;px&amp;#39;;
        }
    }

    // Ajuster au chargement et au redimensionnement
    adjustHeroPadding();
    window.addEventListener(&amp;#39;resize&amp;#39;, adjustHeroPadding);
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/sequence-dynamic-padding.svg&amp;quot; alt=&amp;quot;sequence dynamic padding&amp;quot; width=&amp;quot;887&amp;quot; height=&amp;quot;703&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 3. সিকোয়েন্স ডায়াগ্রাম : প্যাডিংয়ের গতিশীল সমন্বয়&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সamtanément, আমরা অবশ্যই নিয়মটি মুছে ফেলেছি`padding-top: 80px;`আমাদের ফাইলেarrier`styles.css`.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রশ্ন_৩_অনিয়ন্ত্রিত_টাইপোগ্রাফি&amp;quot;&amp;gt;প্রশ্ন ৩ : অনিয়ন্ত্রিত টাইপোগ্রাফি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;নিম্নলিখিত উদ্বেগটি ব্র্যান্ড চিত্রের জন্য সবচেয়ে বেশি হানিকর ছিল: প্রধান শিরোনামের আকার।&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লক্ষণ:&amp;lt;/strong&amp;gt;ফায়ারফক্সে, &amp;quot;ডেভেলপার ট্রেনার&amp;amp;#8230;&amp;amp;#8203;&amp;quot; শিরোনামের ফন্ট খুবই বড় ছিল, প্রায় ভয়ঙ্কর, যখন অন্যান্য ব্রাউজারগুলোতে এটি সামঞ্জস্যপূর্ণ ছিল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গভীর কারণ :&amp;lt;/strong&amp;gt;শিরোনামটি একটি শ্রেণি ব্যবহার করল`display-4`Bootstrap. এই ক্লাসেস রিস্পনসিভ ফন্ট সাইজ ব্যবহার করে, যা প্রায়শই একক ভিত্তিক।`rem`ফায়ারফক্সের রেন্ডারিং অ্যালগরিদম এবং &amp;quot;Inter&amp;quot; ফন্টের সাথে সমন্বিত, আমাদের 1920x1080 রেজোলিউশনে খুব বেশি আকারের গণনা তৈরি করেছে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমাধান :&amp;lt;/strong&amp;gt;CSS ফাংশনের মাধ্যমে নিয়ন্ত্রণ পুনরুদ্ধার করুন`clamp()&amp;lt;code&amp;gt;. এই ফাংশনটি দ্রব টাইপোগ্রাফির জন্য একটি বিপ্লব। این trio man diye ekta font-er achar nirdharon kore dey: ekta nyunotm achar, &amp;quot;প্রাধান্য&amp;quot; (যে দর্শনের প্রস্থের সাথে সামঞ্জস্যের অনুযায়ী পরিবর্তিত হয়,`vw&amp;lt;/code&amp;gt;), এবং একটি সর্বোচ্চ আকার।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;.hero-content h1 {
    color: var(--text-primary);
    line-height: 1.2;
    /*
       Min: 2rem
       Préférée: s&amp;#39;adapte à la vue
       Max: 2.5rem (40px)
    */
    font-size: clamp(2rem, 1.2rem + 1.5vw, 2.5rem);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সঙ্গে`clamp()&amp;lt;code&amp;gt;, আমরা ব্রাউজারে বলতে পেরেছি: \&amp;quot;স্ক্রীন সাথে ফন্ট বাড়াও, কিন্তু অতিক্রম করো না*&amp;lt;strong&amp;gt;কখনও না&amp;lt;/strong&amp;gt;*সীমার`2.5rem&amp;lt;/code&amp;gt;. এই তৎক্ষণে সমস্ত брауজারের রেন্ডারিংকে সমন্বয় করে এবং আমাদেরকে النهائي দৃষ্টির সম্পূর্ণ নিয়ন্ত্রণ দিয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_৪_নেভিগেশন_বারের_ওভারফ্লো&amp;quot;&amp;gt;সমস্যা ৪ : নেভিগেশন বারের ওভারফ্লো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যা আমাদেরকে সবচেয়ে বেশি কষ্ট দিয়েছে এবং অবশেষে রেন্ডারিংয়ের সূক্ষ্ম পার্থক্যের গভীর প্রকৃতি প্রকাশ করেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সাম্পটম:&amp;lt;/strong&amp;gt;1920×1080 পরিমাণের একটি স্ক্রিনে, মেনুর শেষ দুটি লিঙ্ক (&amp;quot;Blog&amp;quot;, &amp;quot;Contact&amp;quot;) ডানদিকে স্ক্রিনের বাইরে ফেলে দেওয়া হত, কিন্তু শুধু Firefox-এ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গভীর কারণ:&amp;lt;/strong&amp;gt;একাধিক ব্যর্থ প্রচেষ্টার পরে (Bootstrapের ভাঙফোড়ের বিন্দু পরিবর্তন করে`lg` à &amp;lt;code&amp;gt;xl`তারপর`xxl&amp;lt;/code&amp;gt;), আমরা বুঝলাম। Bootstrap‑এর লজিক নয়, বরং প্রস্থের একটি সহজ গণনা। ফায়ারফক্সে, সব লিঙ্কের প্রস্থের মোট, তাদের সঙ্গে`padding` et `margin`সাব-পিক্সেলের কাছে, এটি &amp;lt;strong&amp;gt;অল্প&amp;lt;/strong&amp;gt; বেশি ১৯২০ পিক্সেল ছিল। ক্রোমে, এই একই যোগফল &amp;lt;strong&amp;gt;অল্প&amp;lt;/strong&amp;gt; কম ছিল। আমাদের কিছু পিক্সেল কম ছিল।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমাধান :&amp;lt;/strong&amp;gt;একটি শল্য চিকিৎসার মতো জায়গার হ্রাস। যেহেতু Firefox-কে নির্দিষ্টভাবে পুরানো CSS &amp;quot;hacks&amp;quot; দিয়ে লক্ষ্য করা অসম্ভব ছিল, একমাত্র পরিষ্কার সমাধান ছিল সব জায়গায় কাজ করার জন্য একটি সাধারণ শৈলী খুঁজে বের করা। তাই আমরা প্রতিটি নেভিগেশন লিংকে অনুভূমিক margin এবং paddingকে হালকাসে কমিয়েছি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;/* La version finale, légèrement plus compacte */
.navbar-nav .nav-link {
    font-size: 0.9rem; /* 90% de la taille de base */
    color: var(--text-primary) !important;
    font-weight: 500;
    margin: 0 0.2rem;
    padding: 0.5rem 0.5rem !important;
    border-radius: 0.375rem;
    transition: all 0.3s ease;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি একক উপাদনে নগোশে শুধু দেখে পাওয়ার মতো নীরব এই হ্রাস, আমাদেরকে সমগ্রে প্রয়োজনীয় স্থান মুক্তি দিয়েছে, যাতে ফায়ারফক্সে সমস্ত লিঙ্ক ফ্রেমের মধ্যে ফিট হয়, আর অন্যান্য ব্রাউজারে চোখে লক্ষ্য না হওয়া মতো প্রায় একই দৃষ্টিভঙ্গি বজায় রাখে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রশ্ন_৫_অদৃশ্য_হাম্বurger_মেনু&amp;quot;&amp;gt;প্রশ্ন ৫ : অদৃশ্য হাম্বurger মেনু&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;শেষ সমস্যা, এবং এটি কোনওভাবে কম গুরুত্বপূর্ণ নয়, মোবাইল অ্যাক্সেসিবিলিটির সম্বন্ধে ছিল।&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;লক্ষণ :&amp;lt;/strong&amp;gt;রিস্পন্সিভ মোড (মেনু &amp;quot;হামবার্গার&amp;quot;), মেনুর আইকন &amp;quot;dark&amp;quot; এবং &amp;quot;high-contrast&amp;quot; থিমে দৃশ্যমান ছিল না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;গভীর कारण :&amp;lt;/strong&amp;gt;Bootstrap 5 মেনু আইকনটি একটি`background-image`(একটি URL-এনকোডেড SVG). ডিফল্টভাবে, এর stroke রঙ গহ্বর, আলোর পটভূমির জন্য অপ্টিমাইজড। এটি.theme পরিবর্তনে স্বয়ংক্রিয়ভাবে আপডেট হয় না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সমাধান:&amp;lt;/strong&amp;gt;বুটস্ট্রাপের CSS ভেরিয়েবল ব্যবহার করে আইকনকে ওভাররাইড করুন। আমরা একটি নতুন SVG আইকন সংজ্ঞায়িত করেছি, কিন্তু এইবার একটি সাদা stroke দিয়ে। (&amp;lt;code&amp;gt;#ffffff&amp;lt;/code&amp;gt;), এবং আমরা এটি নির্দিষ্টভাবে প্রয়োগ করেছি যখন বিষয়গুলো`dark` ou `high-contrast`সক্রিয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css hljs&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;/* ======================
   Fix pour l&amp;#39;icône du menu Burger (Blanc)
   ====================== */
[data-bs-theme=&amp;quot;dark&amp;quot;] .navbar-toggler-icon,
[data-bs-theme=&amp;quot;high-contrast&amp;quot;] .navbar-toggler-icon {
    --bs-navbar-toggler-icon-bg: url(&amp;quot;data:image/svg+xml,%3csvg xmlns=&amp;#39;http://www.w3.org/2000/svg&amp;#39; viewBox=&amp;#39;0 0 30 30&amp;#39;%3e%3cpath stroke=&amp;#39;%23ffffff&amp;#39; stroke-linecap=&amp;#39;round&amp;#39; stroke-miterlimit=&amp;#39;10&amp;#39; stroke-width=&amp;#39;2&amp;#39; d=&amp;#39;M4 7h22M4 15h22M4 23h22&amp;#39;/%3e%3c/svg%3e&amp;quot;);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock important&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-important&amp;quot; title=&amp;quot;Important&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বুটস্ট্র্যাপের উপাদান যেমন এইটিকে কাস্টমাইজ করা এখনো বেশি CSS ভেরিয়েবল ওভাররাইডের মাধ্যমে (&amp;lt;code&amp;gt;--bs-component-property&amp;lt;/code&amp;gt;), যে সবচেয়ে পরিষ্কার এবং টেকসই পদ্ধতি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার_অদম্য_ডিবাগিংের_পাঠ&amp;quot;&amp;gt;উপসংহার : অদম্য ডিবাগিংের পাঠ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পথটি কখনও কখনও نارাজগরকরকর হতে পারে, কিন্তু তা শিক্ষামূলক থেকে ভরা পড়ে। প্রতিটি সমাধান করা সমস্যা ওয়েব ডেভেলপমটের একটি মৌলিক সত্যকে শক্তিশালী করে :&amp;lt;strong&amp;gt;কোনো কিছু কঠোর বহু-ব্রাউজার টেস্ট এর জায়গা নিতে পারে না&amp;lt;/strong&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/mindmap-debugging-summary.svg&amp;quot; alt=&amp;quot;mindmap debugging summary&amp;quot; width=&amp;quot;999&amp;quot; height=&amp;quot;866&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Figure 4. Mindmap : ডিবাগিং এবং শেখ পাঠ সারাংশ&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এটি আমাদের যে পাঠগুলি ধরা করা হয়েছিল :&amp;lt;/div&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফায়ারফক্স একটি সমर्थক :&amp;lt;/strong&amp;gt;CSS মানদণ্ডের প্রতি এর বাড়ত বিশ্বাসযোগ্যতা আমাদেরকে আরও দৃঢ় এবং অস্পষ্ট নয় কোড লিখতে বাধ্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পরিহার করুন &amp;quot;জাদু সংখ্যা&amp;quot; :&amp;lt;/strong&amp;gt;স্থির মান (যেমন`padding-top: 80px`) সময় বম। সদaismart? (JavaScript) অথবা (Flexbox, Grid) সম্পর্কিত সমাধানগুলো।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার টাইপোগ্রাফি নিয়ন্ত্রণ করুন:&amp;lt;/strong&amp;gt;ব্যাবহার করুন`clamp()`প্রতিক্রিয়াশীল ফন্টের আকারের পূর্ণ নিয়ন্ত্রণের জন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কম্পোনেন্টগুলোতে ভাবুন:&amp;lt;/strong&amp;gt;বুটস্ট্র্যাপকে কাস্টমাইজ করার জন্য, ফ্রেমওয়ার্ককে ওভাররাইড করার নিয়ম গুণ করে না বরং তার CSS ভেরিয়েবলগুলো ওভাররাইড করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি ব্রাউজার লক্ষ্য করবেন না:&amp;lt;/strong&amp;gt;সমাধান প্রায় কখনো কোনো নির্দিষ্ট ব্রাউজারের জন্য একটি &amp;quot;হ্যাক&amp;quot; তৈরি করার বিষয় নয়, বরং সর্বত্র কাজ করার একটি সাধারণ শৈলী খুঁজে পেতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শেষে, মকআপ এখন দৃঢ়, পূর্বাভাসযোগ্য এবং টেমপ্লেটিং সিস্টেমে একীভূত করতে প্রস্তুত। প্রতিটি ঠিক করা বাগ একটি ব্যর্থতা ছিল না, বরং ভাল গুণমানের কোডের দিকে একটি ধাপ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Gradle ইউনিট পরীক্ষার চ্যালেঞ্জ সমাধান করুন `gradle.properties` দিয়ে</title>
            <link >https://cheroliv.com//blog/2025/0081_TDD_Gradle_Properties_Fix_post.html</link>
            <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0081_TDD_Gradle_Properties_Fix_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রব্লেম_গ্রেডল_প্লাগইনের_ইউনিট_টেস্টগুলো_আলাদা_করা&amp;quot;&amp;gt;প্রব্লেম : গ্রেডল প্লাগইনের ইউনিট টেস্টগুলো আলাদা করা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যার_আর্কিটেকচার&amp;quot;&amp;gt;সমস্যার আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_মিথyacচালক_ভালো_ধারণার_আকর্ষণ&amp;quot;&amp;gt;একটি মিথyacচালক ভালো ধারণার আকর্ষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_প্রপার্টি_অনুকরণ_করুন_extrapropertiesextension_দিয়ে&amp;quot;&amp;gt;সমাধান: প্রপার্টি অনুকরণ করুন &amp;lt;code&amp;gt;ExtraPropertiesExtension&amp;lt;/code&amp;gt; দিয়ে&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_1_extrapropertiesextension_বোঝা&amp;quot;&amp;gt;ধাপ 1: ExtraPropertiesExtension বোঝা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্টেপ_২_টেস্টের_সেটআপ_প্রস্তুতি&amp;quot;&amp;gt;স্টেপ ২: টেস্টের সেটআপ - প্রস্তুতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৩_সম্পত্তি_ইনজেকশন&amp;quot;&amp;gt;ধাপ ৩: সম্পত্তি ইনজেকশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৪_সমাধানerের_প্রবাহচিত্র&amp;quot;&amp;gt;ধাপ ৪ : সমাধানERের প্রবাহচিত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৫_আগেপরে_তুলনা&amp;quot;&amp;gt;ধাপ ৫ : আগে/পরে তুলনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৬_বহুমুখী_পরীক্ষা_কেসের_ব্যবস্থাপনা&amp;quot;&amp;gt;ধাপ ৬ : বহুমুখী পরীক্ষা কেসের ব্যবস্থাপনা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধানের_অंतিম_আর্কিটেকচার&amp;quot;&amp;gt;সমাধানের অंतিম আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_এই_পদ্ধতির_সুবিধাগুলো&amp;quot;&amp;gt;এই পদ্ধতির সুবিধাগুলো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাল_অনুশীলন_এবং_পরামর্শ&amp;quot;&amp;gt;ভাল অনুশীলন এবং পরামর্শ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ইউটিলিটি_পদ্ধতি_তৈরি_করুন&amp;quot;&amp;gt;একটি ইউটিলিটি পদ্ধতি তৈরি করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রপার্টি_যাচাই&amp;quot;&amp;gt;প্রপার্টি যাচাই&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রব্লেম_গ্রেডল_প্লাগইনের_ইউনিট_টেস্টগুলো_আলাদা_করা&amp;quot;&amp;gt;প্রব্লেম : গ্রেডল প্লাগইনের ইউনিট টেস্টগুলো আলাদা করা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Gradle প্লাগিনের ইউনিট টেস্ট লিখার সময়, একটি সাধারণ চ্যালেঞ্জ হল প্রকল্প কনফিগারেশনের ডিপেন্ডেন্সি পরিচালনা করা, যেমন ফাইলে সংজ্ঞায়িত বৈশিষ্ট্যগুলো`gradle.properties`. আমাদের কেসে, প্লাগইন`jbake.ghpages`প্রোপার্টি পড়তে হত`site_config_path`ঠিকভাবে কাজ করার জন্য. টাস্কের জন্য ইউনিট টেস্ট`initialize`তাকে এই প্রোপার্টির উপস্থিতিতে প্লাগিনের আচরণ যাচাই করতে হয়েছিল।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মৌলিক সমস্যা হল যে ইউনিট টেস্ট, ডিজাইনে অনুযায়ী, &amp;lt;strong&amp;gt;isolés&amp;lt;/strong&amp;gt; হওয়া উচিত। ব্যাবহারটি`ProjectBuilder`Gradle একটি উদাহরণ তৈরি করে`Project`স্মৃতিতে, ফাইল সিস্টেমে একটি প্রকৃত প্রকল্প থেকে সম্পূর্ণভাবে বিচ্ছিন্ন। ফলে, এই পরীক্ষামূলক উদাহরণ স্বয়ংক্রিয়ভাবে ফাইলটি পড়ে না।&amp;lt;code&amp;gt;gradle.properties`তাই সম্পত্তি সম্পর্কে কোনো জ্ঞান নেই`site_config_path&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমস্যার_আর্কিটেকচার&amp;quot;&amp;gt;সমস্যার আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত নকশাটি পরীক্ষা পরিবেশ ও ফাইল সিস্টেমের মধ্যে বিচ্ছেদকে চিত্রিত করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/test-isolation-problem.svg&amp;quot; alt=&amp;quot;test isolation problem&amp;quot; width=&amp;quot;1226&amp;quot; height=&amp;quot;5787&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_মিথyacচালক_ভালো_ধারণার_আকর্ষণ&amp;quot;&amp;gt;একটি মিথyacচালক ভালো ধারণার আকর্ষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি প্রথম পদ্ধতি হতে পারে একটি ফাইল তৈরি করা`gradle.properties`পরীক্ষার সম্পদের মধ্যে কৃত্রিম.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;// src/test/resources/gradle.properties
site_config_path=src/jbake/settings/site.yml&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদিও এই পদ্ধতি ব্যর্থ হবে, কারণ`ProjectBuilder`এটি কনফিগারেশন ফাইল খুঁজে বের করার জন্য ফাইল সিস্টেম স্ক্যান করার জন্য ডিজাইন করা হয়নি। পরীক্ষা আলাদা থাকবে এবং এই ফাইলটি উপেক্ষা করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাধান_প্রপার্টি_অনুকরণ_করুন_extrapropertiesextension_দিয়ে&amp;quot;&amp;gt;সমাধান: প্রপার্টি অনুকরণ করুন &amp;lt;code&amp;gt;ExtraPropertiesExtension&amp;lt;/code&amp;gt; দিয়ে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই সমস্যার শোভন সমাধান হল ফাইলটি পড়া না, বরং অবজেক্টে সেই প্রোপার্টির উপস্থিতি সিমুলেট করা।`Project`টেস্ট।গ্রেডল এই কাজের জন্য একটি শক্তিশালী মেকানিজম প্রদান করে: &amp;lt;strong&amp;gt;অতিরিক্ত প্রোপার্টি&amp;lt;/strong&amp;gt; (Extra Properties).&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_1_extrapropertiesextension_বোঝা&amp;quot;&amp;gt;ধাপ 1: ExtraPropertiesExtension বোঝা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`ExtraPropertiesExtension`এটি Gradle মডেলের প্রতিটি অবজেক্টে সংযুক্ত একটি কী-মান কনটেইনার। এটি একটি প্রকল্প, একটি কাজ, বা অন্য কোনো Gradle এক্সটেনশনে গতিশীলভাবে বৈশিষ্ট্য যোগ করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/extra-properties-architecture.svg&amp;quot; alt=&amp;quot;extra properties architecture&amp;quot; width=&amp;quot;533&amp;quot; height=&amp;quot;436&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্টেপ_২_টেস্টের_সেটআপ_প্রস্তুতি&amp;quot;&amp;gt;স্টেপ ২: টেস্টের সেটআপ - প্রস্তুতি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমরা মৌলিক ইউনিট পরীক্ষা এর কাঠামো তৈরি করতে শুরু করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;JbakeGhPagesPluginTest.kt - Structure de base&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class JbakeGhPagesPluginTest {

    @TempDir
    lateinit var testProjectDir: File

    @Test
    fun `check initialize and config yaml file if not existing`() {
        // Étape 1 : Créer un projet de test isolé
        val project = ProjectBuilder.builder()
            .withProjectDir(testProjectDir)
            .build()

        // Suite des étapes...
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৩_সম্পত্তি_ইনজেকশন&amp;quot;&amp;gt;ধাপ ৩: সম্পত্তি ইনজেকশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে পরীক্ষা প্রকল্পে প্রপার্টি ইনজেক্ট করার বিস্তারিত প্রক্রিয়া দেওয়া হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;JbakeGhPagesPluginTest.kt - Injection complète&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `check initialize and config yaml file if not existing`() {
    // Étape 1 : Créer un projet de test isolé en mémoire
    val project = ProjectBuilder.builder()
        .withProjectDir(testProjectDir)
        .build()

    // Étape 2 : Récupérer le gestionnaire de propriétés supplémentaires
    val extra = project.extensions.getByType(ExtraPropertiesExtension::class.java)

    // Étape 3 : Définir la propriété requise pour ce test
    extra.set(&amp;quot;site_config_path&amp;quot;, &amp;quot;src/jbake/settings/site.yml&amp;quot;)

    // Étape 4 : Vérifier que la propriété est bien injectée
    assertTrue(project.hasProperty(&amp;quot;site_config_path&amp;quot;))

    // Étape 5 : Appliquer le plugin qui pourra maintenant accéder à la propriété
    project.plugins.apply(&amp;quot;jbake.ghpages&amp;quot;)

    // Étape 6 : Exécuter la tâche et vérifier son comportement
    val task: Task = project.tasks.findByName(&amp;quot;initialize&amp;quot;)
        .apply(::assertNotNull)!!

    // Étape 7 : Exécuter les actions de la tâche
    task.actions.forEach { it.execute(task) }

    // Étape 8 : Assertions finales
    assertEquals(
        &amp;quot;src/jbake/settings/site.yml&amp;quot;,
        project.properties[&amp;quot;site_config_path&amp;quot;],
        &amp;quot;La propriété devrait être accessible dans le projet&amp;quot;
    )
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৪_সমাধানerের_প্রবাহচিত্র&amp;quot;&amp;gt;ধাপ ৪ : সমাধানERের প্রবাহচিত্র&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/solution-flow.svg&amp;quot; alt=&amp;quot;solution flow&amp;quot; width=&amp;quot;242&amp;quot; height=&amp;quot;807&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৫_আগেপরে_তুলনা&amp;quot;&amp;gt;ধাপ ৫ : আগে/পরে তুলনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/before-after-comparison.svg&amp;quot; alt=&amp;quot;before after comparison&amp;quot; width=&amp;quot;1211&amp;quot; height=&amp;quot;5759&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ধাপ_৬_বহুমুখী_পরীক্ষা_কেসের_ব্যবস্থাপনা&amp;quot;&amp;gt;ধাপ ৬ : বহুমুখী পরীক্ষা কেসের ব্যবস্থাপনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিভিন্ন পরিস্থিতি পরীক্ষা করতে, বিভিন্ন কনফিগারেশন সহ কিছু পরীক্ষা তৈরি করি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Tests multiples avec configurations différentes&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class JbakeGhPagesPluginTest {

    @TempDir
    lateinit var testProjectDir: File

    private fun createProjectWithProperty(propertyValue: String?): Project {
        val project = ProjectBuilder.builder()
            .withProjectDir(testProjectDir)
            .build()

        // Injection conditionnelle de la propriété
        propertyValue?.let { value -&amp;amp;gt;
            val extra = project.extensions.getByType(ExtraPropertiesExtension::class.java)
            extra.set(&amp;quot;site_config_path&amp;quot;, value)
        }

        return project
    }

    @Test
    fun `should work with valid property`() {
        val project = createProjectWithProperty(&amp;quot;src/jbake/settings/site.yml&amp;quot;)
        project.plugins.apply(&amp;quot;jbake.ghpages&amp;quot;)

        val task = project.tasks.findByName(&amp;quot;initialize&amp;quot;)!!
        task.actions.forEach { it.execute(task) }

        // Assertions pour le cas normal
        assertEquals(&amp;quot;src/jbake/settings/site.yml&amp;quot;, project.properties[&amp;quot;site_config_path&amp;quot;])
    }

    @Test
    fun `should handle missing property gracefully`() {
        val project = createProjectWithProperty(null) // Pas de propriété
        project.plugins.apply(&amp;quot;jbake.ghpages&amp;quot;)

        val task = project.tasks.findByName(&amp;quot;initialize&amp;quot;)!!

        // Le plugin devrait gérer l&amp;#39;absence de propriété
        assertDoesNotThrow {
            task.actions.forEach { it.execute(task) }
        }
    }

    @Test
    fun `should handle invalid property path`() {
        val project = createProjectWithProperty(&amp;quot;invalid/path/to/config.yml&amp;quot;)
        project.plugins.apply(&amp;quot;jbake.ghpages&amp;quot;)

        val task = project.tasks.findByName(&amp;quot;initialize&amp;quot;)!!

        // Test du comportement avec un chemin invalide
        assertThrows&amp;amp;lt;FileNotFoundException&amp;amp;gt; {
            task.actions.forEach { it.execute(task) }
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধানের_অंतিম_আর্কিটেকচার&amp;quot;&amp;gt;সমাধানের অंतিম আর্কিটেকচার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/final-architecture.svg&amp;quot; alt=&amp;quot;final architecture&amp;quot; width=&amp;quot;1191&amp;quot; height=&amp;quot;5851&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এই_পদ্ধতির_সুবিধাগুলো&amp;quot;&amp;gt;এই পদ্ধতির সুবিধাগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পূর্ণ আবেক্ষিকতা&amp;lt;/strong&amp;gt;টেস্টটি কোনো বহির্ভূত ফাইলের উপর নির্ভর করে না। এটি স্বয়ংশাসিত এবং যেকোনো পরিবেশ (স্থানীয়, CI/CD ইত্যাদি) এ বিশ্বস্ততার সাথে চালানো যায়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;স্পষ্টতা ও ইচ্ছা&amp;lt;/strong&amp;gt;: টেস্টটি স্পষ্টভাবে তার প্রয়োগের পূর্বশর্তগুলি ঘোষণা করে। যে কোনো কে টেস্ট পড়ে, সে তৎক্ষণে বোঝে যে প্লাগইনটি সেই প্রপার্টি প্রয়োজন`site_config_path`ফাংশন করার জন্য.&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;বজ্রপাতনশীলতা&amp;lt;/strong&amp;gt;�যদি প্রপার্টির নাম পরিবর্তিত হয়, তাই পরীক্ষার এক জায়গায় আপডেট করা যথেষ্ট, পরীক্ষা কনফিগারেশন ফাইলগুলো ম্যানিপুলেট করতে হবে না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নমনীয়তা&amp;lt;/strong&amp;gt;: এই সহজে পরীক্ষা করা যায় যে পরিস্থিতি (ব্যালিড, ইনভ্যালিড, অনুপস্থিত, ইত্যাদি) সম্পর্কে প্রতিটি পরীক্ষায় ইনজেক্টেড সম্পত্তির মান পরিবর্তন করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কর্মক্ষমতা&amp;lt;/strong&amp;gt;ফাইল পড়া হয় না, সবকিছু মেমোরিতে ঘটে, যা পরীক্ষাগুলোর গতি বাড়ায়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পুনরাবৃত্তি&amp;lt;/strong&amp;gt;: টেস্টগুলো নির্ধারিত হয় কারণ তারা ফাইল সিস্টেমের অবস্থা উপর নির্ভর করে না।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভাল_অনুশীলন_এবং_পরামর্শ&amp;quot;&amp;gt;ভাল অনুশীলন এবং পরামর্শ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_ইউটিলিটি_পদ্ধতি_তৈরি_করুন&amp;quot;&amp;gt;একটি ইউটিলিটি পদ্ধতি তৈরি করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Méthode utilitaire pour la réutilisation&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class GradleTestUtils {
    companion object {
        fun createProjectWithProperties(
            projectDir: File,
            properties: Map&amp;amp;lt;String, String&amp;amp;gt;
        ): Project {
            val project = ProjectBuilder.builder()
                .withProjectDir(projectDir)
                .build()

            val extra = project.extensions.getByType(ExtraPropertiesExtension::class.java)
            properties.forEach { (key, value) -&amp;amp;gt;
                extra.set(key, value)
            }

            return project
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রপার্টি_যাচাই&amp;quot;&amp;gt;প্রপার্টি যাচাই&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;Validation robuste&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `should validate property injection`() {
    val project = createProjectWithProperty(&amp;quot;test-value&amp;quot;)

    // Vérifications multiples
    assertTrue(project.hasProperty(&amp;quot;site_config_path&amp;quot;))
    assertEquals(&amp;quot;test-value&amp;quot;, project.property(&amp;quot;site_config_path&amp;quot;))
    assertNotNull(project.properties[&amp;quot;site_config_path&amp;quot;])

    // Vérification que la propriété est accessible par le plugin
    project.plugins.apply(&amp;quot;jbake.ghpages&amp;quot;)
    // ... reste du test
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একক পরীক্ষা পরিবেশকে কনফিগারেশন ফাইল পড়তে বাধ্য করার পরিবর্তে, সর্বোত্তম অনুশীলনটি প্রয়োজনীয় অবস্থাটি অনুকরণ করা। এর ব্যবহার`ExtraPropertiesExtension`প্রোগ্রামে Gradle বৈশিষ্ট্য সংজ্ঞায়িত করা হল কার্যকর এবং বিশ্বস্ত প্লাগইন ইউনিট পরীক্ষা সম্পাদনের সবচেয়ে পরিষ্কার এবং সবচেয়ে শক্তিশালী পদ্ধতি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কৌশলটি বাহ্যিক নির্ভরতা সমস্যকে একটি সহজ নির্ভরতা ইনজেকশনে রূপান্তরিত করে, যা টেস্ট-ড্রিভেন ডেভেলপমেন্ট (TDD) দর্শনের মূল। এটি টেস্ট পরিবেশের উপর_complete_ নিয়ন্ত্রণ প্রদান করে, গুণগত ইউনিট পরীক্ষার জন্য প্রয়োজনীয় পৃথকতা বজায় রেখে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে প্রদর্শিত নকশা এবং উদাহরণগুলি দেখায় যে কীভাবে এই পদ্ধতিটি ক্রমবর্ধমান ও সংগঠিতভাবে বাস্তবায়ন করা যায়, যা আপনার Gradle প্লাগইনের জন্য দৃঢ় এবং রক্ষণযোগ্য পরীক্ষার সেট তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Kotlin DSL এবং buildSrc ব্যবহার করে Gradle কাজের ব্যবস্থা অপ্টিমাইজ করা</title>
            <link >https://cheroliv.com//blog/2025/0079_gradle_tasks_tests_report_post.html</link>
            <pubDate>Fri, 11 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0079_gradle_tasks_tests_report_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_allprojects_এবং_subprojects_ব্যবহার_করে_কনফিগারেশনগুলোকে_কেন্দ্রীয়_করুন&amp;quot;&amp;gt;allprojects` এবং &amp;lt;code&amp;gt;subprojects&amp;lt;/code&amp;gt; ব্যবহার করে কনফিগারেশনগুলোকে কেন্দ্রীয় করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sourceplantuml&amp;quot;&amp;gt;[source,plantuml]&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_enduml&amp;quot;&amp;gt;@enduml&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_sourcekotlin&amp;quot;&amp;gt;[source,kotlin]&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিল্ড কাজের অটোমেশন কোনো সফটওয়্যার প্রকল্পের জন্য অত্যন্ত গুরুত্বপূর্ণ, এবং Gradle, এর Kotlin DSL সহ, অসাধারণ নমনীয়তা প্রদান করে। আমাদের সংলাপের সময়, আমরা বিল্ড লজিককে কেন্দ্রিক ও পুন:ব্যবহারযোগ্য করার উপায় খুঁজে বের করেছি, বিশেষ করে টেস্ট রিপোর্টের জন্য, ব্যবহার করে&amp;lt;strong&amp;gt;সকল প্রকল্প&amp;lt;/strong&amp;gt;, &amp;lt;strong&amp;gt;buildSrc&amp;lt;/strong&amp;gt;, এবং Kotlin-এ কাস্টম টাস্ক.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_allprojects_এবং_subprojects_ব্যবহার_করে_কনফিগারেশনগুলোকে_কেন্দ্রীয়_করুন&amp;quot;&amp;gt;allprojects` এবং &amp;lt;code&amp;gt;subprojects&amp;lt;/code&amp;gt; ব্যবহার করে কনফিগারেশনগুলোকে কেন্দ্রীয় করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্লকগুলো`allprojects` et `subprojects`আপনার`build.gradle.kts`মূলগুলো মৌলিক আপনার মাল্টি-মডিউল প্রকল্প জুড়ে সাধারণ কনফিগারেশন প্রয়োগ করতে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;*&amp;lt;code&amp;gt;allprojects { &amp;amp;#8230;&amp;amp;#8203; }`প্রয়োগ করুন কনফিগারেশন কে&amp;lt;strong&amp;gt;মূল প্রকল্প এবং তার সব উপ-প্রকল্পে&amp;lt;/strong&amp;gt;. একটি সংজ্ঞায়িত করার জন্য উপযুক্ত`group&amp;lt;/code&amp;gt;, একটি`version`, অথবা কিছু`repositories`সাধারন. *&amp;lt;code&amp;gt;subprojects { &amp;amp;#8230;&amp;amp;#8203; }`কনফিগারেশন প্রয়োগ করুন&amp;lt;strong&amp;gt;শুধু উপ-প্রকল্পগুলোরই&amp;lt;/strong&amp;gt;, মূল প্রকল্প বাদ দেওয়া। উপযুক্ত, মডিউলের জন্য ویژه প্লাগইন প্রয়োগ করার জন্য (como`java&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;kotlin-jvm&amp;lt;/code&amp;gt;) অথবা আপনার লাইব্রেরির সাধারণ নির্ভরতা.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি উদাহরণমূলক উদাহরণ:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// build.gradle.kts (projet racine)
plugins {
    base // Appliqué au projet racine
}

allprojects {
    group = &amp;quot;com.example&amp;quot;
    version = &amp;quot;1.0.0&amp;quot;

    repositories {
        mavenCentral()
    }

    tasks.withType&amp;amp;lt;org.gradle.api.tasks.testing.Test&amp;amp;gt; {
        useJUnitPlatform() // Configuration commune des tests pour tous les projets
    }
}

subprojects {
    apply(plugin = &amp;quot;java&amp;quot;)
    apply(plugin = &amp;quot;org.jetbrains.kotlin.jvm&amp;quot;)

    dependencies {
        implementation(&amp;quot;org.jetbrains.kotlin:kotlin-stdlib-jdk8&amp;quot;)
    }

}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;\==`buildSrc`বিল্ড লজিকের সুইস আর্মি ছুরি&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার কাজের লজিক জটিল হয়ে গেলে অথবা এটি পুনরায় ব্যবহার করতে হলে,&amp;lt;strong&amp;gt;buildSrc&amp;lt;/strong&amp;gt;পছন্দের সমাধান। এটি একটি বিশেষ Gradle মডিউল যা প্রধান বিল্ড স্ক্রিপ্টের আগে কম্পাইল করা হয়, এর ক্লাসসমূহ আপনার বিল্ডের সম্পূর্ণ classpath-এ উপলব্ধ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কেন ব্যবহার`buildSrc`টাস্কগুলো জন্য?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;পুনরায় ব্যবহারযোগ্যতা&amp;lt;/strong&amp;gt;একటి কাজ নির্ধারিত মধ্যে`buildSrc`কোনো বিল্ডের যেকোনো প্রকল্পে প্রয়োগ করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সংগঠন&amp;lt;/strong&amp;gt;: বিল্ড কোডকে কেন্দ্রীয় করুন, যা আরও পরিষ্কার ও রক্ষণযোগ্য করে তোলে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;টাইপ সেফটি এবং অটো-কম্প্লিশন&amp;lt;/strong&amp;gt;: কোটলিন কোড এ`buildSrc`কম্পাইল করা হয়, আপনার IDE-র ত্রুটি যাচাই ও স্বয়ংসম্পূর্ণ করার সুবিধা প্রদান করে, উন্নয়ন অভিজ্ঞতাকে উন্নত করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;\=== প্রবাহ ডায়াগ্রাম`buildSrc`(কোড PlantUML)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ডায়াগ্রাম তৈরি করতে, নিম্নলিখিত কোডটি কপি করুন এবং PlantUML সমর্থনকারী একটি টুলে এটি পেস্ট করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_sourceplantuml&amp;quot;&amp;gt;[source,plantuml]&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;@startuml skinparam হাতে লিখিত সত্য skinparam একরঙ সত্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আয়তক্ষেত্র &amp;quot;Gradle Build Process&amp;quot; { কম্পোনেন্ট &amp;quot;buildSrc&amp;quot; ως BS { file &amp;quot;MyCustomTask.kt&amp;quot; as T ফাইল &amp;quot;MyConventionPlugin.kt&amp;quot; যেমন P } component &amp;quot;Root Project&amp;quot; as RP উপাদান &amp;quot;Subproject A&amp;quot; এভাবে SA উপাদান &amp;quot;Subproject B&amp;quot; همچون SB }&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;T --\&amp;amp;gt; P : &amp;quot;এখানে সংজ্ঞায়িত P -&amp;amp;#8594; RP : &amp;quot;প্রয়োগ করা হয় P -&amp;amp;#8594; SA : &amp;quot;প্রয়োগ করা হয় P --\&amp;amp;gt; SB : &amp;quot;প্রয়োগ করা হয়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;RP --|\&amp;amp;gt; SA : &amp;quot;শামিল RP --|\&amp;amp;gt; SB : &amp;quot;মিলে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;RP -up-\&amp;amp;gt; BS : &amp;quot;নির্ভর করে (বিল্ড লজিকের জন্য) SA -up&amp;amp;#8594; BS : &amp;quot;নির্মাণ লজিকের জন্য নির্ভর করে SB -up-\&amp;amp;gt; BS : &amp;quot;depends on (for build logic)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;T- এর ডান পাশে নোট কাস্টম কাজের শ্রেণী (উদা: OpenTestReportTask) শেষ নoten&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Pএর ডান পাশের নোট কনভেনশন প্লাগইন যারা কাজগুলো নিবন্ধন করে শেষ নোট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_enduml&amp;quot;&amp;gt;@enduml&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সারাংশ প্রতিবেদন টাস্ক গঠন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরীক্ষা প্রতিবেদন পরিচালনা করতে, আমরা একটি মডিউলার পদ্ধতি ডিজাইন করেছি একটি অ্যাবস্ট্রাক্ট টাস্ক ক্লাস ব্যবহার করে এতে`buildSrc`. আপনার প্রয়োজনের উপর নির্ভর করে, এই শ্রেণি উত্তরাধিকার পেতে পারে`DefaultTask` ou de &amp;lt;code&amp;gt;Exec&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;\=== অবস্ট্রাক্ট টাস্ক`OpenTestReportTask`(উত্তরাধিকারী`DefaultTask`)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি সুপারিশ করা হয়, যদি আপনি কটলিনের কাস্টম লজিক প্রয়োজন হয় যা ফাইল সিস্টেমের বা Gradle-এর অন্যান্য API-এর সাথে tươngодей করে, তারপর একটি বাহ্যিক কমান্ড চালানোর জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_sourcekotlin&amp;quot;&amp;gt;[source,kotlin]&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;package com.yourpackage&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;import org.gradle.api.DefaultTask import org.gradle.api.tasks.Input import org.gradle.api.tasks.TaskAction import java.io.File&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অ্যাবস্ট্র্যাক্ট ক্লাস OpenTestReportTask : DefaultTask() {&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-none hljs&amp;quot;&amp;gt;----
----
init {
    group = &amp;quot;verification&amp;quot;
    description = &amp;quot;Opens a test report in Firefox.&amp;quot;
    dependsOn(&amp;quot;check&amp;quot;) // Assure que les rapports sont générés
}

@get:Input
abstract var reportPath: String

@TaskAction
fun openReport() {
    val separator = File.separator
    val reportFile = project.layout.projectDirectory.asFile.toPath()
        .resolve(reportPath.replace(&amp;quot;/&amp;quot;, separator))
        .toAbsolutePath()
        .toFile()

    if (!reportFile.exists()) {
        logger.warn(&amp;quot;Report file does not exist: $reportFile. Ensure &amp;#39;check&amp;#39; ran.&amp;quot;)
        return
    }

    project.exec {
        commandLine(&amp;quot;firefox&amp;quot;, &amp;quot;--new-tab&amp;quot;, reportFile.absolutePath)
    }
    logger.lifecycle(&amp;quot;Opened test report: ${reportFile.absolutePath}&amp;quot;)
}
----

## }

\=== বাস্তব প্রয়োগ

এই ক্লাসগুলো অবস্ট্যাক্ট কাজ থেকে উত্তরাধিকার গ্রহণ করেন এবং রিপোর্টের নির্দিষ্ট পথকে সংজ্ঞায়িত করেন।

## [source,kotlin]

প্যাকেজ com.yourpackage

abstract class ReportUnitTestsTask : OpenTestReportTask() { প্রারম্ভ { Firefox-এ ইউনিট টেস্ট রিপোর্ট খোলে। reportPath = &amp;quot;build/reports/tests/test/index.html } }

package com.yourpackage

## abstract class ReportFunctionalTestsTask : OpenTestReportTask() { init { description = &amp;quot;ফায়ারফক্সে ফাংশনাল টেস্ট রিপোর্ট খুলে।&amp;quot; reportPath = &amp;quot;build/reports/tests/functionalTest/index.html&amp;quot; } }

\=== টাস্ক রেকর্ডিং

এর মধ্যে`build.gradle.kts`আপনার মূল প্রকল্পের :

## [source,kotlin]

tasks.register&amp;amp;lt;com.yourpackage.ReportUnitTestsTask&amp;amp;gt;(&amp;quot;reportTests&amp;quot;) {} tasks.register&amp;amp;lt;com.yourpackage.ReportFunctionalTestsTask&amp;amp;gt;(&amp;quot;reportFunctionalTests&amp;quot;) {}

\=== রিপোর্ট টাস্কের UML ডায়াগ্রাম (PlantUML কোড)

নিম্নোক্ত কোডটি কপি করুন এবং PlantUML সমর্থনকারী একটি টুলে পেস্ট করুন।

## [source,plantuml]

@startuml skinparam handwritten true skinparam এক রঙের সত্য

অবস্ট্র্যাক্ট ক্লাস DefaultTask { }

অবস্ট্রাক্ট ক্লাস Exec { \+ commandLine(args: String...) \+ exec() }

abstract class OpenTestReportTask extends DefaultTask { \+ group: String = &amp;quot;verification \+ বিবরণ: String \+ dependsOn(&amp;quot;check&amp;quot;) \+ abstract reportPath: String \+ openReport() : void }

abstract class AbstractJbakeExecTask extends Exec { \+ গোষ্ঠী: String = &amp;quot;যাচাই \+ বিবরণ: String \+ dependsOn(&amp;quot;check&amp;quot;) \+ abstract reportRelativePath: String \+ exec() : void }

class ReportUnitTestsTask extends OpenTestReportTask { \+ reportPath: String = &amp;quot;build/reports/tests/test/index.html }

বর্গ ReportFunctionalTestsTask প্রসারিত করে OpenTestReportTask { \+ reportPath: String = &amp;quot;build/reports/tests/functionalTest/index.html }

class ReportJbakeTestsTask extends AbstractJbakeExecTask { \+ reportRelativePath: String = &amp;quot;build/reports/tests/test/index.html }

শ্রেণী ReportJbakeFunctionalTestsTask প্রসারিত AbstractJbakeExecTask { \+ reportRelativePath: String = &amp;quot;build/reports/tests/functionalTest/index.html }

OpenTestReportTask \&amp;amp;lt;-- ReportUnitTestsTask খোলা পরীক্ষা প্রতিবেদন টাস্ক \&amp;amp;lt;-- প্রতিবেদন কার্যক্ষম পরীক্ষা টাস্ক

AbstractJbakeExecTask \&amp;amp;lt;-- ReportJbakeTestsTask AbstractJbakeExecTask &amp;amp;lt;— ReportJbakeFunctionalTestsTask

DefaultTask \&amp;amp;lt;|-- OpenTestReportTask Exec \&amp;amp;lt;|-- AbstractJbakeExecTask ডিফল্ট টাস্ক &amp;amp;lt;|-- এক্সিকিউট

## @enduml

\\== অমূরত কাজ`AbstractJbakeExecTask`(উত্তরাধিকারী হওয়া`Exec`)

যদি আপনার কাজ মূলত পরিবর্তনযোগ্য যুক্তি সহ একটি বাহ্যিক কমান্ড চালু করে হয়, তাহলে সরাসরি থেকে উত্তরাধিকার নিন**একজিকিউটিভ**এটি আরও সরাসরি।

## [source,kotlin]

package com.yourpackage

import org.gradle.api.tasks.Exec import org.gradle.api.tasks.Input import java.io.File

অবস্ট্রাক্ট ক্লাস AbstractJbakeExecTask : Exec() {

----

init { group = &amp;quot;verification&amp;quot; description = &amp;quot;Opens a Jbake project report in Firefox.&amp;quot; dependsOn(&amp;quot;check&amp;quot;) }

@get:Input abstract var reportRelativePath: String

override fun exec() { val separator = File.separator val reportFile = project.layout.projectDirectory.asFile.toPath() .resolve(reportRelativePath.replace(&amp;quot;/&amp;quot;, separator)) .toAbsolutePath() .toFile()

if (!reportFile.exists()) { logger.warn(&amp;quot;Report file does not exist: $reportFile. Ensure &amp;#39;check&amp;#39; ran.&amp;quot;) return }

commandLine(&amp;quot;firefox&amp;quot;, &amp;quot;--new-tab&amp;quot;, reportFile.absolutePath) logger.lifecycle(&amp;quot;Attempting to open report: ${reportFile.absolutePath}&amp;quot;) super.exec() // Appelle la méthode exec() de la super-classe Exec }

## }

বাস্তব বাস্তবায়ন_groups Its for`Exec`

## [source,kotlin]

প্যাকেজ com.yourpackage

abstract class ReportJbakeTestsTask : AbstractJbakeExecTask() { প্রারম্ভ { description = &amp;quot;জবেক ইউনিট টেস্ট রিপোর্ট ফায়ারফক্সে খোলে। reportRelativePath = &amp;quot;build/reports/tests/test/index.html } }

প্যাকেজ com.yourpackage

abstract class ReportJbakeFunctionalTestsTask : AbstractJbakeExecTask() { init { description = &amp;quot;ফায়ারফক্সে ফাংশনাল টেস্ট রিপোর্ট খোলা.&amp;quot; reportRelativePath = &amp;quot;build/reports/tests/functionalTest/index.html&amp;quot; } }

\== কাজের দৃশ্যমানতা`buildSrc`

আপনি যে কাজগুলো ও ক্লাসগুলো সংজ্ঞায়িত করেন**buildSrc**আছেন :

***দृশ্যমান ও ব্যবহারযোগ্য**আপনার মূল বিল্ডের (মূল ও উপ-প্রকল্প) সব প্রকল্পের দ্বারা। এজন্য আপনি ব্যবহার করতে পারেন`com.yourpackage.ReportUnitTestsTask`মধ্যে`allprojects { ... }`. * **অন-এক্সিকিউটেবল**সরাসরি buildSrc-এর কর্মেরূপে (উদাহরণস্বরূপ,`gradle :buildSrc:reportTests`�যদি কাজটি নির্দিষ্টভাবে রেকর্ড করা না হলে, এটি কাজ করবে না`buildSrc/build.gradle.kts`).`buildSrc`এটি একটি কম্পাইলেশন মডিউল, একটি এক্সিকিউটেবল অ্যাপ্লিকেশন মডিউল নয় এই বিল্ডের প্রধান কাজের জন্য।

\=== একটি প্রতিবেদন চালু করুন পরীক্ষার জন্য`buildSrc`তানেই

Si `buildSrc`এনার নিজস্ব পরীক্ষা আছে এবং রিপোর্ট তৈরি করে, আপনি রিপোর্টের কাজটি সরাসরি মধ্যে`buildSrc/build.gradle.kts`:

## [source,kotlin]

প্লাগইন { `kotlin-jvm` }

রিপোজিটরি { mavenCentral() }

tasks.withType\&amp;amp;lt;Test\&amp;amp;gt; { useJUnitPlatform() reports.html.outputLocation.set(layout.buildDirectory.dir(&amp;quot;reports/tests&amp;quot;)) }

import com.yourpackage.ReportJbakeTestsTask // আপনার টাস্ক ক্লাস আমদানি করুন

tasks.register\&amp;amp;lt;ReportJbakeTestsTask\&amp;amp;gt;(&amp;quot;reportBuildSrcTests&amp;quot;) { // Le chemin est déjà défini dans la classe, il pointera vers les rapports de buildSrc }

আপনি তারপর এটি চালু করতে পারবেন :`./gradlew :buildSrc:test`এর পরে`./gradlew :buildSrc:reportBuildSrcTests`.

এই অনুশীলনগুলো গ্রহণ করে, আপনি Kotlin DSL-এ Gradle বিল্ড সিস্টেম তৈরি করবেন, যা শুধুমাত্র শক্তিশালী নয়, বরং অসাধারণভাবে মডুলার, রক্ষণযোগ্য এবং বোঝার জন্য সহজও।&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>TDD একটি কনফিগারযোগ্য Kotlin Gradle প্লাগইন JBake এবং JGit এর সঙ্গে</title>
            <link >https://cheroliv.com//blog/2025/0078_jbake_gradle_plugin_syntaxe_post.html</link>
            <pubDate>Wed, 9 Jul 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0078_jbake_gradle_plugin_syntaxe_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লক্ষ্য&amp;quot;&amp;gt;লক্ষ্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ঘোষণামূলক_কনফিগারেশন&amp;quot;&amp;gt;ঘোষণামূলক কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্লাগিনের_আর্কিটেকচার&amp;quot;&amp;gt;প্লাগিনের আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_dsl_এক্সটেনশনের_সংজ্ঞা&amp;quot;&amp;gt;DSL এক্সটেনশনের সংজ্ঞা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কাস্টমাইজড_টাস্কের_সংজ্ঞা&amp;quot;&amp;gt;কাস্টমাইজড টাস্কের সংজ্ঞা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইন্টারফেস_gitadapter&amp;quot;&amp;gt;ইন্টারফেস GitAdapter&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jgit_এর_সাথে_বাস্তব_বাস্তবায়ন&amp;quot;&amp;gt;JGit এর সাথে বাস্তব বাস্তবায়ন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কনফিগারেশন_dsl_কোটলিন&amp;quot;&amp;gt;কনফিগারেশন DSL কোটলিন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_mockito_দিয়ে_ইউনিট_টেস্ট&amp;quot;&amp;gt;Mockito দিয়ে ইউনিট টেস্ট&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নির্ভরতা&amp;quot;&amp;gt;নির্ভরতা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_git_আচরণ_পরীক্ষা&amp;quot;&amp;gt;Git আচরণ পরীক্ষা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আগামী_পদক্ষেপ&amp;quot;&amp;gt;আগামী পদক্ষেপ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পোস্টটি Kotlin DSL-এ লেখা একটি Gradle প্লাগইনের সম্পূর্ণ ডিজাইন এবং টেস্ট (TDD) পদ্ধতির উপস্থাপন করে। এই প্লাগইন &amp;lt;strong&amp;gt;JBake&amp;lt;/strong&amp;gt;-এর সাথে স্ট্যাটিক সাইটের স্বয়ংক্রিয় génarেশন এবং &amp;lt;strong&amp;gt;JGit&amp;lt;/strong&amp;gt;-এর মাধ্যমে &amp;lt;strong&amp;gt;Git&amp;lt;/strong&amp;gt;-এর স্বয়ংক্রিয় deployment-কে অটোমেটাইজ করে, য সবকিছু কনফিগারেশন YAML ফাইল থেকে শুরু হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লক্ষ্য&amp;quot;&amp;gt;লক্ষ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি গ্রেডল প্লাগইন তৈরি করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কটলিন DSL-এ কনফিগারযোগ্য ;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সক্ষম :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JBake থেকে স্ট্যাটিক সাইট তৈরি করুন ;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JGit-এর মাধ্যমে একটি দূরবর্তী Git সংগ্রহস্থলে স্থাপন করুন;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;CI/CD ওয়ার্কফ্লোকে সংযোজনযোগ্য ;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;TDD পদ্ধতির অনুসারে পরীক্ষিত&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ঘোষণামূলক_কনফিগারেশন&amp;quot;&amp;gt;ঘোষণামূলক কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে একটি YAML কনফিগারেশনের উদাহরণ দেওয়া হল যা আমাদের DSL-এ মডেল করা উচিত :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-yaml hljs&amp;quot; data-lang=&amp;quot;yaml&amp;quot;&amp;gt;bake:
  srcPath: &amp;quot;./site/jbake&amp;quot;
  destDirPath: &amp;quot;bake&amp;quot;
pushPage:
  from: &amp;quot;bake&amp;quot;
  to: &amp;quot;cvs&amp;quot;
  repo:
    name: &amp;quot;trainings&amp;quot;
    repository: &amp;quot;https://github.com/pages-content/trainings.git&amp;quot;
    credentials:
      username: &amp;quot;USERNAME&amp;quot;
      password: &amp;quot;SECRET_TOKEN&amp;quot;
  branch: &amp;quot;main&amp;quot;
  message: &amp;quot;cheroliv.com&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কনফিগারেশনটি Kotlin DSL-এ ঘোষণাযোগ্য একটি Gradle এক্সটেনশনের মাধ্যমে উপস্থাপিত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্লাগিনের_আর্কিটেকচার&amp;quot;&amp;gt;প্লাগিনের আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/jbake-asciidoctor-class-diagram.png&amp;quot; alt=&amp;quot;jbake asciidoctor class diagram&amp;quot; width=&amp;quot;568&amp;quot; height=&amp;quot;261&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_dsl_এক্সটেনশনের_সংজ্ঞা&amp;quot;&amp;gt;DSL এক্সটেনশনের সংজ্ঞা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;open class WorkspaceEngineExtension {
    var outputDir: String = &amp;quot;build/site&amp;quot;
    var template: String = &amp;quot;freemarker&amp;quot;
    var repoUrl: String = &amp;quot;&amp;quot;
    var branch: String = &amp;quot;main&amp;quot;
    var message: String = &amp;quot;Generated by engine&amp;quot;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কাস্টমাইজড_টাস্কের_সংজ্ঞা&amp;quot;&amp;gt;কাস্টমাইজড টাস্কের সংজ্ঞা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;abstract class GenerateSiteTask : DefaultTask() {
    lateinit var gitAdapter: GitAdapter

    @get:Input abstract val repoUrl: Property&amp;amp;lt;String&amp;amp;gt;
    @get:InputDirectory abstract val outputDir: DirectoryProperty
    @get:Input abstract val branch: Property&amp;amp;lt;String&amp;amp;gt;
    @get:Input abstract val message: Property&amp;amp;lt;String&amp;amp;gt;

    @TaskAction
    fun run() {
        val repo = gitAdapter.cloneRepository(repoUrl.get(), outputDir.get().asFile)
        gitAdapter.commitAndPush(repo, branch.get(), message.get())
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ইন্টারফেস_gitadapter&amp;quot;&amp;gt;ইন্টারফেস GitAdapter&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;interface GitAdapter {
    fun cloneRepository(uri: String, directory: File): Repository
    fun commitAndPush(repo: Repository, branch: String, message: String)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_jgit_এর_সাথে_বাস্তব_বাস্তবায়ন&amp;quot;&amp;gt;JGit এর সাথে বাস্তব বাস্তবায়ন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class JGitAdapter : GitAdapter {
    override fun cloneRepository(uri: String, directory: File): Repository {
        return Git.cloneRepository()
            .setURI(uri)
            .setDirectory(directory)
            .call()
            .repository
    }

    override fun commitAndPush(repo: Repository, branch: String, message: String) {
        Git(repo).use {
            it.add().addFilepattern(&amp;quot;.&amp;quot;).call()
            it.commit().setMessage(message).call()
            it.push().call()
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কনফিগারেশন_dsl_কোটলিন&amp;quot;&amp;gt;কনফিগারেশন DSL কোটলিন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;workspaceEngine {
    outputDir = &amp;quot;build/out&amp;quot;
    template = &amp;quot;freemarker&amp;quot;
    repoUrl = &amp;quot;https://github.com/cheroliv/trainings.git&amp;quot;
    branch = &amp;quot;main&amp;quot;
    message = &amp;quot;deploy from plugin&amp;quot;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_mockito_দিয়ে_ইউনিট_টেস্ট&amp;quot;&amp;gt;Mockito দিয়ে ইউনিট টেস্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নির্ভরতা&amp;quot;&amp;gt;নির্ভরতা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;testImplementation(&amp;quot;org.mockito:mockito-core:5.12.0&amp;quot;)
testImplementation(&amp;quot;org.mockito.kotlin:mockito-kotlin:5.2.1&amp;quot;)
testImplementation(&amp;quot;org.junit.jupiter:junit-jupiter:5.10.0&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_git_আচরণ_পরীক্ষা&amp;quot;&amp;gt;Git আচরণ পরীক্ষা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class GenerateSiteTaskMockitoTest {

    @TempDir
    lateinit var tempDir: File

    @Test
    fun `task should call clone and commitAndPush`() {
        val project = ProjectBuilder.builder().build()
        val task = project.tasks.create(&amp;quot;generateSite&amp;quot;, GenerateSiteTask::class.java)

        val mockGitAdapter = mock&amp;amp;lt;GitAdapter&amp;amp;gt;()
        val mockRepo = mock&amp;amp;lt;Repository&amp;amp;gt;()

        whenever(mockGitAdapter.cloneRepository(any(), any())).thenReturn(mockRepo)

        task.gitAdapter = mockGitAdapter
        task.repoUrl.set(&amp;quot;https://github.com/cheroliv/test.git&amp;quot;)
        task.outputDir.set(project.layout.projectDirectory.dir(tempDir.name))
        task.branch.set(&amp;quot;main&amp;quot;)
        task.message.set(&amp;quot;test commit&amp;quot;)

        task.run()

        verify(mockGitAdapter).cloneRepository(eq(&amp;quot;https://github.com/cheroliv/test.git&amp;quot;), any())
        verify(mockGitAdapter).commitAndPush(eq(mockRepo), eq(&amp;quot;main&amp;quot;), eq(&amp;quot;test commit&amp;quot;))
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/jbake-asciidoctor-sequence-diagram.png&amp;quot; alt=&amp;quot;jbake asciidoctor sequence diagram&amp;quot; width=&amp;quot;774&amp;quot; height=&amp;quot;326&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দায়িত্বের বিভাজনের মাধ্যমে`GitAdapter`এই Gradle প্লাগইন ডেভেলপমেন্টে TDD-কে সম্পূর্ণরূপে প্রয়োগ করতে সক্ষম করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Git কলগুলি বিমূর্ত এবং পরীক্ষযোগ্য ;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;DSL কনফিগারেশন পরিষ্কার এবং স্পষ্ট ;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্লাগইনটি বাস্তব বাস্তবায়ন থেকে নিরপেক্ষ।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতির মাধ্যমে উচ্চ পরীক্ষণযোগ্যতা এবং প্রসারণযোগ্যতা নিশ্চিত হয় (GitHub API, GitLab, ইত্যাদি)।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আগামী_পদক্ষেপ&amp;quot;&amp;gt;আগামী পদক্ষেপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JBake প্রজেনারেশনকে একটি`BakeAdapter`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ইন্টিগ্রেশন টেস্ট যোগ করুন`GradleRunner`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্বয়ংক্রিয় ফাইল লোডিং সমর্থন`site.yml`SnakeYAML-এর মাধ্যমে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>AsciiDoc : শিখুন এবং সינট্যাক্স আয়ত্ত করুন একটি কার্যকর নথিলিপি তৈরি করার জন্য</title>
            <link >https://cheroliv.com//blog/2025/0077_asciidoc_syntaxe_post.html</link>
            <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0077_asciidoc_syntaxe_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিচয়&amp;quot;&amp;gt;পরিচয়&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_asciidoc_কী&amp;quot;&amp;gt;AsciiDoc কী?&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_asciidoc_কেন_বেছে_নেবেন&amp;quot;&amp;gt;AsciiDoc কেন বেছে নেবেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ইউসকেস_ডায়াগ্রাম_use_case&amp;quot;&amp;gt;ইউসকেস ডায়াগ্রাম (Use Case)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মাইন্ড_ম্যাপ_ডায়াগ্রাম&amp;quot;&amp;gt;মাইন্ড ম্যাপ ডায়াগ্রাম&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফ্লো_ডায়াগ্রাম_প্রবাহ&amp;quot;&amp;gt;ফ্লো ডায়াগ্রাম (প্রবাহ)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_asciidoc_ফাইলের_মৌলিক_গঠন&amp;quot;&amp;gt;একটি AsciiDoc ফাইলের মৌলিক গঠন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মৌলিক_সিনট্যাক্স&amp;quot;&amp;gt;মৌলিক সিনট্যাক্স&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শিরোনাম_ও_বিভাগ&amp;quot;&amp;gt;শিরোনাম ও বিভাগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বোল্ড_ইটালিক_এবং_মোনোস্পেস_টেক্সট&amp;quot;&amp;gt;বোল্ড, ইটালিক এবং মোনোস্পেস টেক্সট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বুলেট_তালিকা_এবং_সংখ্যাবদ্ধ_তালিকা&amp;quot;&amp;gt;বুলেট তালিকা এবং সংখ্যাবদ্ধ তালিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_লিঙ্ক_এবং_ছবি&amp;quot;&amp;gt;লিঙ্ক এবং ছবি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কোড_ব্লক&amp;quot;&amp;gt;কোড ব্লক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_তালিকা&amp;quot;&amp;gt;তালিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নোট_ও_সতর্কতাবোধক&amp;quot;&amp;gt;নোট ও সতর্কতাবোধক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অ্যাট্রিবিউট_এবং_ভেরিয়েবলের_ব্যবহার&amp;quot;&amp;gt;অ্যাট্রিবিউট এবং ভেরিয়েবলের ব্যবহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাধারণ_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;সাধারণ ব্যবহারের ক্ষেত্র&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শ্রেষ্ঠ_অনুশীলন&amp;quot;&amp;gt;শ্রেষ্ঠ অনুশীলন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_আরো_দূরে_যেতে&amp;quot;&amp;gt;আরো দূরে যেতে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পরিচয়&amp;quot;&amp;gt;পরিচয়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;লক্ষ্যীয় জনগণ :&amp;lt;/em&amp;gt; ডেভেলপার, টেকনিকাল লেখক এবং যেকোনো যিনি টেকনিকাল ডকুমেন্টেশন অথবা সমৃদ্ধ लेखा লিখতে চান।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc হচ্ছে একটি পক্ষপাতবহুল নমনীয় মার্কআপ ভাষা, যা কাঠামোবদ্ধ তাত্ত্বিক দস্তাবেজ, নিবন্ধ, বই বা প্রেজেন্টেশন রচনার জন্য ডিজাইন করা হয়েছে। এটি তার পঠনযোগ্যতা, সিনট্যাক্স সমৃদ্ধি এবং HTML, PDF, DocBook ইত্যাদি বিভিন্ন ফরম্যাট তৈরি করার ক্ষমতার কারণে ভিন্ন হয়। এই নিবন্ধে, আমরা AsciiDoc-এর মৌলিক সিনট্যাক্সের অন্বেষণ করব এবং দ্রুত শেখার জন্য কিছু টিপস প্রস্তাব করব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_asciidoc_কী&amp;quot;&amp;gt;AsciiDoc কী?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc একটি নথি বরণের ভাষা, Markdown-এর মতো কিন্তু আরও শক্তিশালী। এটি পাঠ্য, শিরোনাম, তালিকা, টেবিল, কোড ব্লক এবং আরও banyak কাঠামোগত করতে দক্ষতা প্রদান করে। এর বহুমুখীত্বে ওপেন সোর্স প্রকল্পের ডকুমেন্টেশন, বই রচনা এবং ওয়েব প্রকাশনার জনপ্রিয় পছন্দ হয়ে উঠেছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_asciidoc_কেন_বেছে_নেবেন&amp;quot;&amp;gt;AsciiDoc কেন বেছে নেবেন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পাঠযোগ্য এবং সহজবোদ্ধ সিনট্যাক্স।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জটিল গঠন (তালিকা, নোট, আদমন, ইত্যাদি) সমর্থন করা হয় ন্য&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বহু-ফরম্যাটের উৎপাদন (HTML, PDF, ePub, DocBook…)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;JBake বা Antora এর মতো স্ট্যাটিক সাইট জেনারেটরের সাথে সহজ ইন্টিগ্রেশন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;উন্নত কাস্টমাইজিং এট্রিবিউট এবং এক্সটেনশনের ساتھ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ইউসকেস_ডায়াগ্রাম_use_case&amp;quot;&amp;gt;ইউসকেস ডায়াগ্রাম (Use Case)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যবহার কেস ডায়াগ্রাম ব্যবহারকারীদের এবং সিস্টেমের মধ্যে প্রধান মিথস্ক্রিয়াগুলি উপস্থাপন করতে সক্ষম। এখানে ডকুমেন্টেশন সিস্টেমের জন্য একটি সহজ উদাহরণ দেওয়া হল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-381f40e6e0660c0c53433ff054330b76.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;423&amp;quot; height=&amp;quot;258&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মাইন্ড_ম্যাপ_ডায়াগ্রাম&amp;quot;&amp;gt;মাইন্ড ম্যাপ ডায়াগ্রাম&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মাইন্ড ম্যাপ (মানসিক মানচিত্র) AsciiDoc- সংযুক্ত কৌশল들과 তাদের সম্পর্ককে অনুসন্ধানের জন্য উপযোগী:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-e1560e9cc014158b6fbeed1e5ad8e138.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;394&amp;quot; height=&amp;quot;527&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফ্লো_ডায়াগ্রাম_প্রবাহ&amp;quot;&amp;gt;ফ্লো ডায়াগ্রাম (প্রবাহ)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি ফ্লো ডায়গ্রাম একটি AsciiDoc নথি তৈরি করার প্রক্রিয়া বর্ণনা করতে সক্ষম:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;diag-plantuml-md5-51318d77b9e18062d3a9b751587670ae.png&amp;quot; alt=&amp;quot;Diagram&amp;quot; width=&amp;quot;299&amp;quot; height=&amp;quot;361&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_asciidoc_ফাইলের_মৌলিক_গঠন&amp;quot;&amp;gt;একটি AsciiDoc ফাইলের মৌলিক গঠন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি AsciiDoc ফাইল সাধারণত একটি শিরোনাম, ঐচ্ছিক বৈশিষ্ট্য, তারপর গঠিত কন্টেন্ট দিয়ে শুরু হয়। এখানে একটি ন্যূনতম উদাহরণ দেওয়া হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Titre Principal
Auteur
2024-09-03
:toc:
:icons: font

Votre contenu commence ici...&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মৌলিক_সিনট্যাক্স&amp;quot;&amp;gt;মৌলিক সিনট্যাক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_শিরোনাম_ও_বিভাগ&amp;quot;&amp;gt;শিরোনাম ও বিভাগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc সমর্থন করে многу স্তরের শিরোনাম :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;= Titre de niveau 1
== Titre de niveau 2
=== Titre de niveau 3
==== Titre de niveau 4&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বোল্ড_ইটালিক_এবং_মোনোস্পেস_টেক্সট&amp;quot;&amp;gt;বোল্ড, ইটালিক এবং মোনোস্পেস টেক্সট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;*gras* _italique_ `monospace`&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বুলেট_তালিকা_এবং_সংখ্যাবদ্ধ_তালিকা&amp;quot;&amp;gt;বুলেট তালিকা এবং সংখ্যাবদ্ধ তালিকা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;* Élément 1
* Élément 2

. Premier
. Deuxième
. Troisième&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লিঙ্ক_এবং_ছবি&amp;quot;&amp;gt;লিঙ্ক এবং ছবি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;Lien standard : https://asciidoc.org[AsciiDoc]
Image : image::images/logo.png[AsciiDoc Logo]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কোড_ব্লক&amp;quot;&amp;gt;কোড ব্লক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;[source,python]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;def hello(): print(&amp;quot;Bonjour AsciiDoc !&amp;quot;)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_তালিকা&amp;quot;&amp;gt;তালিকা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;|===
| Colonne 1 | Colonne 2

| Valeur A
| Valeur B

| Valeur C
| Valeur D
|===&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নোট_ও_সতর্কতাবোধক&amp;quot;&amp;gt;নোট ও সতর্কতাবোধক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc ভিজ্যুয়াল তথ্য ব্লক প্রদান করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;NOTE: Ceci est une note importante.
TIP: Conseil utile pour l’utilisateur.
WARNING: Attention à ce point.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অ্যাট্রিবিউট_এবং_ভেরিয়েবলের_ব্যবহার&amp;quot;&amp;gt;অ্যাট্রিবিউট এবং ভেরিয়েবলের ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কাস্টম বৈশিষ্ট্য মúl्योंকে পুনর্ব্যবহার করতে অথবা আচরণ কনফিগার করতে অনুমতি দেয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-asciidoc hljs&amp;quot; data-lang=&amp;quot;asciidoc&amp;quot;&amp;gt;:project-name: AsciiDoc Explorer

Le projet s’appelle {project-name}.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাধারণ_ব্যবহারের_ক্ষেত্র&amp;quot;&amp;gt;সাধারণ ব্যবহারের ক্ষেত্র&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ওপেন সোর্স প্রকল্প ডকুমেন্টেশন (README, প্রযুক্তিগত নির্দেশিকা) - বই ও ইবুক রচনা - স্থাýিম ওয়েবসাইটের স্বয়ংক্রিয় উৎপাদন (JBake, Antora) - প্রযুক্তিগত উপস্থাপনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শ্রেষ্ঠ_অনুশীলন&amp;quot;&amp;gt;শ্রেষ্ঠ অনুশীলন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সামঞ্জস্যপূর্ণ শিরোনাম ব্যবহার করুন এবং স্বয়ংক্রিয় বিষয়সূচি (:toc:). - প্রধান বিষয়গুলোকে আকর্ষণ করার জন্য সতর্কবার্তা প্রাধান্য দিন। আপনার ফাইলগুলোকে রক্ষণাবেক্ষণ সহজ করতে সাজান। - ট্যাগযুক্ত কোড ব্লকগুলি ব্যবহার করে উদাহরণ দেখান।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AsciiDoc হল একটি শক্তিশালী এবং সহজে অ্যাক্সেসযোগ্য টুল, যা যেকোনো প্রযুক্তিগত ডকুমেন্টেশন বা গঠিত লিখিত তৈরি করতে ব্যবহৃত হয়। এর সমৃদ্ধ সিনট্যাক্স এবং বহু‑ফরম্যাট জেনারেশনের সংমিশ্রণ, এটি দাবিত 가득 ডেভেলপার এবং রাইটারদের জন্য পছন্দের সহযোগী করে তোলে। আপনার পরবর্তী প্রকল্পে AsciiDoc চেষ্টা করুন এবং পার্থক্য খুঁজে বের করুন!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আরো_দূরে_যেতে&amp;quot;&amp;gt;আরো দূরে যেতে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অফিসিয়াল ডকুমেন্টেশন : &amp;lt;a href=&amp;quot;https://asciidoc.org&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://asciidoc.org&amp;lt;/a&amp;gt; - Asciidoctor : &amp;lt;a href=&amp;quot;https://asciidoctor.org&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://asciidoctor.org&amp;lt;/a&amp;gt; - JBake এবং AsciiDoc : &amp;lt;a href=&amp;quot;https://jbake.org/docs/2.6.4/#asciidoc_support&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://jbake.org/docs/2.6.4/#asciidoc_support&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার অভিজ্ঞতা ও কৌশল মন্তব্যে শেয়ার করুন!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Ubuntu থেকে ইন্টারনেটে একটি স্থানীয় সেবা প্রকাশ করা: পোর্ট ফরওয়ার্ডিংর সম্পূর্ণ গাইড</title>
            <link >https://cheroliv.com//blog/2025/0076_port_forwarding_post.html</link>
            <pubDate>Wed, 28 May 2025 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0076_port_forwarding_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সামস্যা_nat_এবং_ব্যক্তিগত_ঠিকানাগুলো&amp;quot;&amp;gt;সামস্যা : NAT এবং ব্যক্তিগত ঠিকানাগুলো&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_১_আপনার_সার্বজনীন_ip_ঠিকানা_চিহ্নিত_করুন&amp;quot;&amp;gt;ধাপ ১ : আপনার সার্বজনীন IP ঠিকানা চিহ্নিত করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_2_আপনার_উবুন্টু_মেশিনের_স্থানীয়_ip_ঠিকানা_জানা&amp;quot;&amp;gt;ধাপ 2: আপনার উবুন্টু মেশিনের স্থানীয় IP ঠিকানা জানা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_3_আপনার_বক্সে_পোর্ট_ফরওয়ার্ডিং_কনফিগার_করুন&amp;quot;&amp;gt;ধাপ 3 : আপনার বক্সে পোর্ট ফরওয়ার্ডিং কনফিগার করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রশাসক_ইন্টারফেস_অ্যাক্সেস&amp;quot;&amp;gt;প্রশাসক ইন্টারফেস অ্যাক্সেস&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পুনর্নির্দেশ_কনফিগারেশন&amp;quot;&amp;gt;পুনর্নির্দেশ কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_৪_সেবার_কনফিগারেশন_উবুন্টু_এ&amp;quot;&amp;gt;ধাপ ৪: সেবার কনফিগারেশন উবুন্টু-এ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_5_উবুন্টু_ফায়ারওয়ালের_কনফিগারেশন&amp;quot;&amp;gt;ধাপ 5: উবুন্টু ফায়ারওয়ালের কনফিগারেশন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ধাপ_6_পরীক্ষা_এবং_যাচাই&amp;quot;&amp;gt;ধাপ 6: পরীক্ষা এবং যাচাই&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_স্থানীয়_নেটওয়ার্ক_থেকে_টেস্ট&amp;quot;&amp;gt;স্থানীয় নেটওয়ার্ক থেকে টেস্ট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বাইরে_থেকে_পরীক্ষা&amp;quot;&amp;gt;বাইরে থেকে পরীক্ষা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভালো_অনুশীলন_এবং_নিরাপত্তা&amp;quot;&amp;gt;ভালো অনুশীলন এবং নিরাপত্তা&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_মৌলিক_নিরাপত্তা&amp;quot;&amp;gt;মৌলিক নিরাপত্তা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সংযোগ_নিরীক্ষণ&amp;quot;&amp;gt;সংযোগ নিরীক্ষণ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_রিভার্স_প্রক্সি_ব্যবহার&amp;quot;&amp;gt;একটি রিভার্স প্রক্সি ব্যবহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পোর্ট_ফরোয়ার্ডিংয়ের_বিকল্প&amp;quot;&amp;gt;পোর্ট ফরোয়ার্ডিংয়ের বিকল্প&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্লাউড_সমাধান&amp;quot;&amp;gt;ক্লাউড সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_vps_এবং_রিভার্স_প্রক্সি&amp;quot;&amp;gt;VPS এবং রিভার্স প্রক্সি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_সমাধান&amp;quot;&amp;gt;সমস্যা সমাধান&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাধারণ_সমস্যা&amp;quot;&amp;gt;সাধারণ সমস্যা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নেটওয়ার্ক_ডিবাগ&amp;quot;&amp;gt;নেটওয়ার্ক ডিবাগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;_পাঠনের সময়: ১৫ মিনিট।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;লক্ষ্যীয় শ্রোতা : মধ্যম&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;অনumannিত পূর্বশর্ত&amp;lt;/strong&amp;gt; : উবুন্টু ও টার্মিনালের মৌলিক জ্ঞান এবং মৌলিক নেটওয়ার্ক ধারণা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;প্রযুক্তিগত ধারণা&amp;lt;/strong&amp;gt; : NAT, পোর্ট ফরওয়ার্ডিং, ফায়ারওয়াল, রিভার্স প্রক্সি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সিস্টেম কমান্ড&amp;lt;/strong&amp;gt; : টার্মিনালের ব্যবহার, নেটওয়ার্ক কনফিগারেশন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;উন্নত বিভাগ&amp;lt;/strong&amp;gt; : নিরীক্ষণ, নিরাপত্তা, ক্লাউড বিকল্প&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সামস্যা_nat_এবং_ব্যক্তিগত_ঠিকানাগুলো&amp;quot;&amp;gt;সামস্যা : NAT এবং ব্যক্তিগত ঠিকানাগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;সমস্যা : আপনি আপনার Ubuntu মেশিনে একটি ওয়েব অ্যাপ্লিকেশন ডেভেলপ করছেন এবং এটি আপনার গৃহ নেটওয়ার্কের বাহির থেকে অ্যাক্সেসযোগ্য করতে চান? আপনি সঠিক জায়গায় আছেন! এই নিবন্ধে, আমরা দেখব কীভাবে আপনি আপনার ইন্টারনেট বক্সে পোর্ট ফワードিং কনফিগার করে স্থানীয় পরিষেবা (উদাহরণস্বরূপ, 8080 নম্বর পোর্টে) কে ইন্টারনেটে পাবলিক করতে পারেন।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;ডিফল্টভাবে, আপনার ইন্টারনেট বক্স NAT (Network Address Translation) ব্যবহার করে একটি একক পাবলিক IP ঠিকানা আপনার ঘরোয়া নেটওয়ার্কের সব ডিভাইসের মধ্যে শেয়ার করে। আপনার স্থানীয় মেশিনগুলি ব্যক্তিগত IP ঠিকানা (192.168.x.x, 10.x.x.x, ইত্যাদি) ব্যবহার করে, যা ইন্টারনেটে রুটযোগ্য নয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি আপনার Ubuntu মেশিনে একটি সেবা চালু করলে (উদাহরণস্বরূপ পোর্ট 8080-এ একটি ওয়েব সার্ভার), সেটি শুধু আপনার স্থানীয় নেটওয়ার্ক থেকে অ্যাক্সেসযোগ্য। ইন্টারনেট থেকে এটি অ্যাক্সেসযোগ্য করতে, আমাদের একটি পোর্ট ফরওয়ার্ডিং কনফিগার করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_১_আপনার_সার্বজনীন_ip_ঠিকানা_চিহ্নিত_করুন&amp;quot;&amp;gt;ধাপ ১ : আপনার সার্বজনীন IP ঠিকানা চিহ্নিত করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথমে, আপনার ইন্টারনেট সংযোগের সর্বজনীন IP ঠিকানা সংগ্রহ করি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Plusieurs méthodes au choix
curl ifconfig.me
curl ipecho.net/plain
wget -qO- http://ipecho.net/plain

# Ou encore
curl -s checkip.amazonaws.com&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই IP ঠিকানা হলো যে ঠিক jota ইন্টারনেট ব্যবহারকারী আপনার পরিষেবা অ্যাক্সেস করতে ব্যবহার করবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_2_আপনার_উবুন্টু_মেশিনের_স্থানীয়_ip_ঠিকানা_জানা&amp;quot;&amp;gt;ধাপ 2: আপনার উবুন্টু মেশিনের স্থানীয় IP ঠিকানা জানা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার Ubuntu মেশিন আপনার স্থানীয় নেটওয়ার্কে একটি ব্যক্তিগত IP ঠিকানা রাখে। এটিকে জানতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Afficher toutes les interfaces réseau
ip addr show

# Ou plus spécifiquement pour l&amp;#39;interface principale
ip route get 1.1.1.1 | awk &amp;#39;{print $7; exit}&amp;#39;

# Alternative avec hostname
hostname -I | awk &amp;#39;{print $1}&amp;#39;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ঠিকানাটি নোট করুন (উদাহরণস্বরূপ`192.168.1.100`), কনফিগারেশনের জন্য আমাদের এই দরকার হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_3_আপনার_বক্সে_পোর্ট_ফরওয়ার্ডিং_কনফিগার_করুন&amp;quot;&amp;gt;ধাপ 3 : আপনার বক্সে পোর্ট ফরওয়ার্ডিং কনফিগার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার বক্স মডেলের অনুযায়ী কনফিগারেশন পরিবর্তিত হয়, কিন্তু নিয়মটি একই&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রশাসক_ইন্টারফেস_অ্যাক্সেস&amp;quot;&amp;gt;প্রশাসক ইন্টারফেস অ্যাক্সেস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার ব্রাউজার খুলুন এবং আপনার বক্সের ওেব ইন্টারফেসে যান :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Freebox&amp;lt;/strong&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;(There is nothing to translate; output remains empty.)&amp;lt;code&amp;gt;192.168.1.1&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;mafreebox.freebox.fr&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Livebox Orange&amp;lt;/strong&amp;gt;:`192.168.1.1`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;SFR বক্স&amp;lt;/strong&amp;gt; : &amp;lt;code&amp;gt;192.168.1.1&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Bbox Bouygues&amp;lt;/strong&amp;gt;:`192.168.1.254`&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পুনর্নির্দেশ_কনফিগারেশন&amp;quot;&amp;gt;পুনর্নির্দেশ কনফিগারেশন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পোর্ট ফরওয়ার্ডিং (নামগুলো পরিবর্তিত হয়) এর জন্য দেডিকেটেড বিভাগটি খুঁজুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পোর্ট ফরওয়ার্ডিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;NAT/PAT&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পোর্ট ফরওয়ার্ডিং&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গেম সার্ভার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই প্যারামিটারগুলো দিয়ে একটি নতুন নিয়ম তৈরি করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 25%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 75%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;ক্ষেত্র&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;মান&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নাম/বিবরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;উবুন্টু ওয়েব সেবা (অথবা স্পষ্ট নাম)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাহ্যিক পোর্ট (অথবা জনবেলি পোর্ট)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8080&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অভ্যন্তਰੀণ IP ঠিকানা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;আপনার উবুন্টু মেশিনের আইপি (উদাহরণস্বরূপ: 192.168.1.100)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অন্তর্গত পোর্ট (বা প্রাইভেট পোর্ট)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;8080&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;প্রোটোকল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;TCP&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;রাষ্ট্র&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সক্রিয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_৪_সেবার_কনফিগারেশন_উবুন্টু_এ&amp;quot;&amp;gt;ধাপ ৪: সেবার কনফিগারেশন উবুন্টু-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিশ্চিত করুন যে আপনার সেবা সব ইন্টারফেসে শুনছে, শুধুমাত্র লোকালহোস্টে নয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# ✅ Correct : écoute sur toutes les interfaces
python3 -m http.server 8080 --bind 0.0.0.0

# ❌ Incorrect : écoute seulement en local
python3 -m http.server 8080 --bind 127.0.0.1&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার সার্ভিস সঠিকভাবে শুনছে কিনা যাচাই করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Vérifier les ports en écoute
sudo netstat -tlnp | grep :8080
# ou avec ss (plus moderne)
sudo ss -tlnp | grep :8080&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি এর মতো কিছু দেখতে পারবেন`0.0.0.0:8080`এবং না`127.0.0.1:8080`।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_5_উবুন্টু_ফায়ারওয়ালের_কনফিগারেশন&amp;quot;&amp;gt;ধাপ 5: উবুন্টু ফায়ারওয়ালের কনফিগারেশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ubuntu ডিফল্টরূপে UFW (Uncomplicated Firewall) ব্যবহার করে। এর সถานা পরীক্ষা করুন এবং প্রয়োজনে পোর্ট অনুমতি দিন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Vérifier le statut du pare-feu
sudo ufw status

# Si le pare-feu est actif, autoriser le port 8080
sudo ufw allow 8080/tcp

# Ou plus spécifiquement pour un service web
sudo ufw allow &amp;#39;Apache&amp;#39;  # si vous utilisez Apache
sudo ufw allow &amp;#39;Nginx Full&amp;#39;  # si vous utilisez Nginx&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধাপ_6_পরীক্ষা_এবং_যাচাই&amp;quot;&amp;gt;ধাপ 6: পরীক্ষা এবং যাচাই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্থানীয়_নেটওয়ার্ক_থেকে_টেস্ট&amp;quot;&amp;gt;স্থানীয় নেটওয়ার্ক থেকে টেস্ট&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথমে, আপনার স্থানীয় নেটওয়ার্কের অন্য কোনো মেশিন থেকে অ্যাক্সেসটি পরীক্ষা করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Remplacez par l&amp;#39;IP locale de votre machine Ubuntu
curl http://192.168.1.100:8080&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বাইরে_থেকে_পরীক্ষা&amp;quot;&amp;gt;বাইরে থেকে পরীক্ষা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখন, আপনার সার্বজনীন IP ব্যবহার করে ইন্টারনেট থেকে পরীক্ষা করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Remplacez par votre IP publique
curl http://VOTRE_IP_PUBLIQUE:8080&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি অনলাইন টুলসও ব্যবহার করতে পারেন, যেমন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.yougetsignal.com/tools/open-ports/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://www.yougetsignal.com/tools/open-ports/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://canyouseeme.org/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://canyouseeme.org/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভালো_অনুশীলন_এবং_নিরাপত্তা&amp;quot;&amp;gt;ভালো অনুশীলন এবং নিরাপত্তা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মৌলিক_নিরাপত্তা&amp;quot;&amp;gt;মৌলিক নিরাপত্তা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Configurer fail2ban pour protéger contre les attaques par force brute
sudo apt update &amp;amp;amp;&amp;amp;amp; sudo apt install fail2ban

# Limiter l&amp;#39;accès avec UFW (exemple : autoriser seulement certaines IP)
sudo ufw allow from 203.0.113.0/24 to any port 8080&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সংযোগ_নিরীক্ষণ&amp;quot;&amp;gt;সংযোগ নিরীক্ষণ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Surveiller les connexions en temps réel
sudo netstat -an | grep :8080

# Logs des connexions (selon votre application)
sudo tail -f /var/log/nginx/access.log  # pour Nginx
sudo journalctl -f -u your-service      # pour un service systemd&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_রিভার্স_প্রক্সি_ব্যবহার&amp;quot;&amp;gt;একটি রিভার্স প্রক্সি ব্যবহার&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বेहतर নিরাপত্তা এবং লচিলতা জন্য, Nginx মতো একটি রিভার্স প্রক্সি ব্যবহার করতে বিবেচনা করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-nginx&amp;quot; data-lang=&amp;quot;nginx&amp;quot;&amp;gt;server {
    listen 80;
    server_name votre-domaine.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পোর্ট_ফরোয়ার্ডিংয়ের_বিকল্প&amp;quot;&amp;gt;পোর্ট ফরোয়ার্ডিংয়ের বিকল্প&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্লাউড_সমাধান&amp;quot;&amp;gt;ক্লাউড সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ngrok&amp;lt;/strong&amp;gt;: অস্থায়ী নিরাপদ টানেল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Cloudflare Tunnel&amp;lt;/strong&amp;gt;: মুক্ত এবং নিরাপদ সমাধান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;serveo.net&amp;lt;/strong&amp;gt;: সরল SSH টানেল&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Exemple avec ngrok
ngrok http 8080

# Exemple avec serveo
ssh -R 80:localhost:8080 serveo.net&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_vps_এবং_রিভার্স_প্রক্সি&amp;quot;&amp;gt;VPS এবং রিভার্স প্রক্সি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পেশাদার ব্যবহারের জন্য, একটি VPS ব্যবহার করতে বিবেচনা করুন, যাতে একটি রিভার্স প্রক্সি আপনার স্থানীয় ইনফ্রাস্ট্রাকচারের দিকে VPNের মাধ্যমে নির্দেশ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_সমাধান&amp;quot;&amp;gt;সমস্যা সমাধান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সাধারণ_সমস্যা&amp;quot;&amp;gt;সাধারণ সমস্যা&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 40%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 60%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;thead&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সমস্যা&amp;lt;/th&amp;gt;
&amp;lt;th class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;সমাধান&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/thead&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাহ্যিক থেকে সেবা অপ্রাপ্য&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পোর্ট ফরওয়ার্ডিং কনফিগারেশন যাচাই করুন এবং পরিষেবাটি 0.0.0.0-এ শুনছে তা যাচাই করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংযোগ প্রত্যাখ্যাগ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সেবা শুরু হয়নি অথবা শুধুমাত্র ১২৭.০.০.১-এ শোনছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংযোগ টাইমআউট&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফায়ারওয়াল সমস্যা (বক্স অথবা উবুন্টু) অথবা ভুলভাবে কনফিগার করা পোর্ট ফরওয়ার্ডিং&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সাধারণ IP নিয়মিতভাবে পরিবর্তিত হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কনফিগার করুন একটি ডাইনামিক DNS (DynDNS, No-IP, etc.)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নেটওয়ার্ক_ডিবাগ&amp;quot;&amp;gt;নেটওয়ার্ক ডিবাগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;# Tester la connectivité locale
telnet localhost 8080

# Tester depuis une autre machine du réseau
telnet 192.168.1.100 8080

# Vérifier les routes réseau
ip route show

# Analyser le trafic réseau
sudo tcpdump -i any port 8080&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অভ্যন্তরীণ সেবা ইন্টারনেটে প্রদর্শন করার জন্য পোর্ট ফワードিং, নিরাপত্তা এবং মনিটরিংয়ের সঠিক কনফিগারেশন প্রয়োজন। যদিও এই পদ্ধতি উন্নয়ন বা ব্যক্তিগত প্রকল্পের জন্য সঠিক, উৎপাতন ব্যবহারের জন্য আরও শক্তিশালী বিকল্প (VPS, CDN, ক্লাউড পরিষেবা) সম্পর্কে চিন্তা করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গুরুত্বপূর্ণ হলো নিরাপত্তাকে আপনার মনে রাখতে সব সময়: শক্তিশালী পাসওয়ার্ড ব্যবহার করুন, নিয়মিত আপনার সিস্টেম আপডেট করুন, এবং আপনার উন্মুক্ত সেবাগুলোর প্রবেশদ্বারগুলোকে নিগরানি করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মন্তব্যে আপনার অভিজ্ঞতা এবং প্রশ্ন শেয়ার করুন; হিচকিচাবেন না!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Mockito ডিবাগিং: Gradle প্লাগইন টেস্টে &quot;Wanted but not invoked&quot; ত্রুটিটি সমাধান করুন</title>
            <link >https://cheroliv.com//blog/2025/0099_debugging-mockito-gradle-plugin_post.html</link>
            <pubDate>Sun, 17 Nov 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2025/0099_debugging-mockito-gradle-plugin_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Table des matières&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রসঙ্গ_gradle_ব্যাকারি_প্লাগইন&amp;quot;&amp;gt;প্রসঙ্গ : Gradle ব্যাকারি প্লাগইন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_1_খারাপ_mock_যাচাই_করুন&amp;quot;&amp;gt;সমস্যা #1 : খারাপ mock যাচাই করুন&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিদান&amp;quot;&amp;gt;নিদান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান&amp;quot;&amp;gt;সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_2_ক্রমাগত_unfinishedstubbingexception&amp;quot;&amp;gt;সমস্যা #2: ক্রমাগত UnfinishedStubbingException&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ডাইাগনস্টিক&amp;quot;&amp;gt;ডাইাগনস্টিক&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_2&amp;quot;&amp;gt;সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_3_কনফিগারেশন_ফাইলটি_বিদ্যমান_নেই&amp;quot;&amp;gt;সমস্যা #3: কনফিগারেশন ফাইলটি বিদ্যমান নেই&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিদান_2&amp;quot;&amp;gt;নিদান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_3&amp;quot;&amp;gt;সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমস্যা_4_afterevaluate_এবং_nullpointerexception&amp;quot;&amp;gt;সমস্যা #4 : afterEvaluate এবং NullPointerException&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নिदান&amp;quot;&amp;gt;নिदান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাধান_4&amp;quot;&amp;gt;সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পূর্ণ_সমাধান&amp;quot;&amp;gt;সম্পূর্ণ সমাধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_শেখা_পাঠ&amp;quot;&amp;gt;শেখা পাঠ&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সঠিক_মকটি_যাচাই_করুন&amp;quot;&amp;gt;সঠিক মকটি যাচাই করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_2_নেস্টেড_মক_থেকে_বিরত_থাকুন&amp;quot;&amp;gt;2. নেস্টেড মক থেকে বিরত থাকুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_3_মূল্যায়ন_কলব্যাককে_মক_করা&amp;quot;&amp;gt;3. মূল্যায়ন কলব্যাককে মক করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_4_পথ_সমাধান_পরীক্ষা_করা&amp;quot;&amp;gt;4. পথ সমাধান পরীক্ষা করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাইনাল_টেস্ট_আর্কিটেকচার&amp;quot;&amp;gt;ফাইনাল টেস্ট আর্কিটেকচার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গ্র্যাডল প্লাগইনের বিকাশের সময়&amp;lt;strong&amp;gt;বেকারি&amp;lt;/strong&amp;gt;আমার JBake ব্লগের জন্য, মনে হচ্ছে একটি সহজ সমস্যা ছিল: একটি ইউনিট টেস্ট ব্যর্থ`Wanted but not invoked`। যেটা মনে হচ্ছে যে একটি সাধারণ বাগ, তা সত্যিই Mockito এবং Kotlin দিয়ে মকিং এর সূক্ষ্মতাগুলো বোঝার জন্য একটি আদর্শ মামলা হিসেবে সাবুত হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই আর্টিকেলে, আমি আপনাকে পদ্ধতিগত ডিবাগিংয়ের একটি যাত্রায় নিয়ে যাব, যেখানে প্রতিটি সমাধান একটি নতুন সমস্যা প্রকাশ করে, শেষ সমাধান পর্যন্ত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রসঙ্গ_gradle_ব্যাকারি_প্লাগইন&amp;quot;&amp;gt;প্রসঙ্গ : Gradle ব্যাকারি প্লাগইন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Bakery প্লাগইনটি JBake‑এর পাশে একটি র‍্যাপার, যা স্ট্যাটিক সাইটের প্রকাশকে সহজ করে দেয়। এর সরলকৃত গঠন এখানে দেওয়া হল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;class BakeryPlugin : Plugin&amp;amp;lt;Project&amp;amp;gt; {
    override fun apply(project: Project) {
        val extension = project.extensions.create(
            &amp;quot;bakery&amp;quot;,
            BakeryExtension::class.java
        )

        project.afterEvaluate {
            if (!project.layout.projectDirectory.asFile
                    .resolve(extension.configPath.get()).exists()) {
                println(&amp;quot;config file does not exists&amp;quot;)
            } else {
                // C&amp;#39;EST ICI QUE ÇA SE PASSE
                project.plugins.apply(JBakePlugin::class.java)

                val site = FileSystemManager.from(project, extension.configPath.get())
                // Configuration de JBake...
            }
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্যর্থ হওয়া টেস্টটি সহজ ছিল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `plugin applies jbake gradle plugin`() {
    val project = createMockProject()
    val plugin = BakeryPlugin()

    plugin.apply(project)

    verify(project.plugins).apply(JBakePlugin::class.java)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ত্রুটি :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;Wanted but not invoked:
pluginContainer.apply(class org.jbake.gradle.JBakePlugin);
Actually, there were zero interactions with this mock.&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_1_খারাপ_mock_যাচাই_করুন&amp;quot;&amp;gt;সমস্যা #1 : খারাপ mock যাচাই করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিদান&amp;quot;&amp;gt;নিদান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/mockito-problem-1.svg&amp;quot; alt=&amp;quot;mockito problem 1&amp;quot; width=&amp;quot;698&amp;quot; height=&amp;quot;521&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা: Mockito ইন্টারঅ্যাকশনগুলো ট্রেস করতে পারে না`project.plugins`যেহেতু এটাই মাত্র একটি getter যা সঠিক মককে ফেরত দেয়`mockPluginContainer`. পরীক্ষা মক ইনস্ট্যান্সে সরাসরি করা উচিত।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান&amp;quot;&amp;gt;সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরিবর্তন করুন`createMockProject()`দুই বস্তু ফেরত দেওয়ার জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;private fun createMockProject(): Pair&amp;amp;lt;Project, PluginContainer&amp;amp;gt; {
    val mockPluginContainer = mock&amp;amp;lt;PluginContainer&amp;amp;gt;()
    val mockProject = mock&amp;amp;lt;Project&amp;amp;gt; {
        on { plugins } doReturn mockPluginContainer
    }
    return Pair(mockProject, mockPluginContainer)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং পরীক্ষা প্রস্তুত করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `plugin applies jbake gradle plugin`() {
    val (project, mockPluginContainer) = createMockProject()
    val plugin = BakeryPlugin()

    plugin.apply(project)

    // ✅ Vérification directe sur le bon mock
    verify(mockPluginContainer).apply(JBakePlugin::class.java)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_2_ক্রমাগত_unfinishedstubbingexception&amp;quot;&amp;gt;সমস্যা #2: ক্রমাগত UnfinishedStubbingException&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ডাইাগনস্টিক&amp;quot;&amp;gt;ডাইাগনস্টিক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রথম সংশোধন প্রয়োগ করার পরে, একটি নতুন ত্রুটি আবিষ্কার হয়েছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-text hljs&amp;quot; data-lang=&amp;quot;text&amp;quot;&amp;gt;UnfinishedStubbingException:
Unfinished stubbing detected here
Hints:
 3. you are stubbing the behaviour of another mock inside
    before &amp;#39;thenReturn&amp;#39; instruction is completed&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমস্যা বাধক কোডটি Mockito-Kotlin DSL সিনট্যাক্স ব্যবহার করত ছিল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val mockProject = mock&amp;amp;lt;Project&amp;amp;gt; {
    on { extensions } doReturn mockExtensionContainer
    on { plugins } doReturn mockPluginContainer
    on { logger } doReturn mock()  // ❌ PROBLÈME ICI !
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/mockito-problem-2.svg&amp;quot; alt=&amp;quot;mockito problem 2&amp;quot; width=&amp;quot;684&amp;quot; height=&amp;quot;316&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_2&amp;quot;&amp;gt;সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সৃষ্টি করা&amp;lt;strong&amp;gt;সব&amp;lt;/strong&amp;gt;স্টাবিং ব্লকে বাইরে থাকা মকগুলো, তারপর সেগুলোকে দিয়ে কনফিগার করা`whenever()`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;private fun createMockProject(): Pair&amp;amp;lt;Project, PluginContainer&amp;amp;gt; {
    // 1️⃣ Créer TOUS les mocks d&amp;#39;abord
    val mockPluginContainer = mock&amp;amp;lt;PluginContainer&amp;amp;gt;()
    val mockExtensionContainer = mock&amp;amp;lt;ExtensionContainer&amp;amp;gt;()
    val mockLogger = mock&amp;amp;lt;org.gradle.api.logging.Logger&amp;amp;gt;()
    val mockProject = mock&amp;amp;lt;Project&amp;amp;gt;()

    // 2️⃣ Configurer les mocks séparément avec whenever()
    whenever(mockProject.plugins).thenReturn(mockPluginContainer)
    whenever(mockProject.extensions).thenReturn(mockExtensionContainer)
    whenever(mockProject.logger).thenReturn(mockLogger)

    return Pair(mockProject, mockPluginContainer)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সোনার নিয়ম&amp;lt;/strong&amp;gt;কখনও ডাকবেন না`mock()`মক কনফিগারেশন ব্লকের মধ্যে। মককে πρώতো তৈরি করুন, তারপর কনফিগার করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_3_কনফিগারেশন_ফাইলটি_বিদ্যমান_নেই&amp;quot;&amp;gt;সমস্যা #3: কনফিগারেশন ফাইলটি বিদ্যমান নেই&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নিদান_2&amp;quot;&amp;gt;নিদান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সঠিক মকস থাকলেও, টেস্ট সব সময় ব্যর্থ hétো কারণ প্লাগিনটি কনফিগারেশন ফাইল খুঁজে পাচ্ছেনি:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// Dans BakeryPlugin.kt
if (!project.layout.projectDirectory.asFile
        .resolve(extension.configPath.get()).exists()) {
    println(&amp;quot;config file does not exists&amp;quot;)
    return@afterEvaluate  // ❌ Sort avant d&amp;#39;appliquer JBake !
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/mockito-problem-3.svg&amp;quot; alt=&amp;quot;mockito problem 3&amp;quot; width=&amp;quot;549&amp;quot; height=&amp;quot;373&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_3&amp;quot;&amp;gt;সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মকস কনফিগার করুন যাতে পথ সমাধান কাজ করে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;private fun createMockProject(): Pair&amp;amp;lt;Project, PluginContainer&amp;amp;gt; {
    // ... autres mocks ...

    val configFile = File(&amp;quot;../../site.yml&amp;quot;).canonicalFile
    val projectDir = configFile.parentFile

    // Configuration cohérente des chemins
    whenever(mockConfigPathProperty.get()).thenReturn(&amp;quot;site.yml&amp;quot;)
    whenever(mockProjectDirectory.asFile).thenReturn(projectDir)

    // Maintenant : projectDir.resolve(&amp;quot;site.yml&amp;quot;) existe ! ✅
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/path-resolution.svg&amp;quot; alt=&amp;quot;path resolution&amp;quot; width=&amp;quot;1756&amp;quot; height=&amp;quot;5592&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমস্যা_4_afterevaluate_এবং_nullpointerexception&amp;quot;&amp;gt;সমস্যা #4 : afterEvaluate এবং NullPointerException&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_নिदান&amp;quot;&amp;gt;নिदান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্লাগইন ব্লকে JBake প্রয়োগ করে`afterEvaluate`, এবং অ্যাক্সেস করে`buildDirectory.dir()`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;project.afterEvaluate {
    // ...
    project.tasks.withType(JBakeTask::class.java)
        .getByName(&amp;quot;bake&amp;quot;).apply {
            output = project.layout.buildDirectory
                .dir(site.bake.destDirPath)  // ❌ NPE ici !
                .get()
                .asFile
        }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মকটি`buildDirectory.dir()&amp;lt;code&amp;gt;ফিরেছিল`null&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সমাধান_4&amp;quot;&amp;gt;সমাধান&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বেটিমারিকারী`afterEvaluate`যাতে এটি তৎক্ষণাৎ চালায়, এবং সম্পূর্ণরূপে কনফিগার করা`buildDirectory` :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;private fun createMockProject(): Pair&amp;amp;lt;Project, PluginContainer&amp;amp;gt; {
    // ... autres mocks ...

    val mockBuildDirectory = mock&amp;amp;lt;DirectoryProperty&amp;amp;gt;()
    val buildDir = File(projectDir, &amp;quot;build&amp;quot;)

    // Mocker dir() pour retourner un Provider valide
    whenever(mockBuildDirectory.dir(any&amp;amp;lt;String&amp;amp;gt;())).doAnswer { invocation -&amp;amp;gt;
        val path = invocation.arguments[0] as String
        val mockDirProvider = mock&amp;amp;lt;Provider&amp;amp;lt;Directory&amp;amp;gt;&amp;amp;gt;()
        val mockDir = mock&amp;amp;lt;Directory&amp;amp;gt;()

        whenever(mockDir.asFile).thenReturn(File(buildDir, path))
        whenever(mockDirProvider.get()).thenReturn(mockDir)

        mockDirProvider
    }

    // Mocker afterEvaluate pour exécution immédiate
    whenever(mockProject.afterEvaluate(any&amp;amp;lt;Action&amp;amp;lt;Project&amp;amp;gt;&amp;amp;gt;())).doAnswer { invocation -&amp;amp;gt;
        val action = invocation.arguments[0] as Action&amp;amp;lt;Project&amp;amp;gt;
        action.execute(mockProject)  // ✅ Exécution synchrone
        null
    }

    return Pair(mockProject, mockPluginContainer)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/after-evaluate-flow.svg&amp;quot; alt=&amp;quot;after evaluate flow&amp;quot; width=&amp;quot;828&amp;quot; height=&amp;quot;357&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পূর্ণ_সমাধান&amp;quot;&amp;gt;সম্পূর্ণ সমাধান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে ফাংশন`createMockProject()`শেষে, যা সমাধান করে সব সমস্যা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;private fun createMockProject(): Pair&amp;amp;lt;Project, PluginContainer&amp;amp;gt; {
    // 1️⃣ CRÉER tous les mocks (pas de nested mocks !)
    val mockPluginContainer = mock&amp;amp;lt;PluginContainer&amp;amp;gt;()
    val mockExtensionContainer = mock&amp;amp;lt;ExtensionContainer&amp;amp;gt;()
    val mockLogger = mock&amp;amp;lt;org.gradle.api.logging.Logger&amp;amp;gt;()
    val mockTaskContainer = mock&amp;amp;lt;TaskContainer&amp;amp;gt;()
    val mockConfigPathProperty = mock&amp;amp;lt;Property&amp;amp;lt;String&amp;amp;gt;&amp;amp;gt;()
    val mockBakeryExtension = mock&amp;amp;lt;BakeryExtension&amp;amp;gt;()
    val mockProjectDirectory = mock&amp;amp;lt;Directory&amp;amp;gt;()
    val mockBuildDirectory = mock&amp;amp;lt;DirectoryProperty&amp;amp;gt;()
    val mockProjectLayout = mock&amp;amp;lt;ProjectLayout&amp;amp;gt;()
    val mockProject = mock&amp;amp;lt;Project&amp;amp;gt;()

    // 2️⃣ CONFIGURER la résolution des chemins
    val configFile = File(&amp;quot;../../site.yml&amp;quot;).canonicalFile
    val projectDir = configFile.parentFile
    val buildDir = File(projectDir, &amp;quot;build&amp;quot;)

    whenever(mockConfigPathProperty.get()).thenReturn(&amp;quot;site.yml&amp;quot;)
    whenever(mockConfigPathProperty.isPresent).thenReturn(true)
    whenever(mockBakeryExtension.configPath).thenReturn(mockConfigPathProperty)
    whenever(mockProjectDirectory.asFile).thenReturn(projectDir)

    // 3️⃣ CONFIGURER buildDirectory avec dir()
    whenever(mockBuildDirectory.dir(any&amp;amp;lt;String&amp;amp;gt;())).doAnswer { invocation -&amp;amp;gt;
        val path = invocation.arguments[0] as String
        val mockDirProvider = mock&amp;amp;lt;Provider&amp;amp;lt;Directory&amp;amp;gt;&amp;amp;gt;()
        val mockDir = mock&amp;amp;lt;Directory&amp;amp;gt;()
        whenever(mockDir.asFile).thenReturn(File(buildDir, path))
        whenever(mockDirProvider.get()).thenReturn(mockDir)
        mockDirProvider
    }

    // 4️⃣ ASSEMBLER le projet
    whenever(mockProjectLayout.projectDirectory).thenReturn(mockProjectDirectory)
    whenever(mockProjectLayout.buildDirectory).thenReturn(mockBuildDirectory)

    whenever(mockExtensionContainer.create(&amp;quot;bakery&amp;quot;, BakeryExtension::class.java))
        .thenReturn(mockBakeryExtension)
    whenever(mockExtensionContainer.getByType(BakeryExtension::class.java))
        .thenReturn(mockBakeryExtension)

    whenever(mockProject.extensions).thenReturn(mockExtensionContainer)
    whenever(mockProject.plugins).thenReturn(mockPluginContainer)
    whenever(mockProject.tasks).thenReturn(mockTaskContainer)
    whenever(mockProject.layout).thenReturn(mockProjectLayout)
    whenever(mockProject.logger).thenReturn(mockLogger)
    whenever(mockProject.projectDir).thenReturn(projectDir)

    // 5️⃣ CONFIGURER afterEvaluate pour exécution immédiate
    whenever(mockProject.afterEvaluate(any&amp;amp;lt;Action&amp;amp;lt;Project&amp;amp;gt;&amp;amp;gt;())).doAnswer { invocation -&amp;amp;gt;
        val action = invocation.arguments[0] as Action&amp;amp;lt;Project&amp;amp;gt;
        action.execute(mockProject)
        null
    }

    return Pair(mockProject, mockPluginContainer)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এবং শেষ পরীক্ষা যা পাস হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `plugin applies jbake gradle plugin`() {
    val (project, mockPluginContainer) = createMockProject()
    val plugin = BakeryPlugin()

    plugin.apply(project)

    verify(mockPluginContainer).apply(JBakePlugin::class.java) // ✅ SUCCÈS !
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_শেখা_পাঠ&amp;quot;&amp;gt;শেখা পাঠ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/lessons-learned.svg&amp;quot; alt=&amp;quot;lessons learned&amp;quot; width=&amp;quot;748&amp;quot; height=&amp;quot;472&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সঠিক_মকটি_যাচাই_করুন&amp;quot;&amp;gt;সঠিক মকটি যাচাই করুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// ❌ FAUX
verify(project.plugins).apply(JBakePlugin::class.java)

// ✅ CORRECT
val (project, mockPluginContainer) = createMockProject()
verify(mockPluginContainer).apply(JBakePlugin::class.java)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_2_নেস্টেড_মক_থেকে_বিরত_থাকুন&amp;quot;&amp;gt;2. নেস্টেড মক থেকে বিরত থাকুন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// ❌ FAUX - UnfinishedStubbingException
val mockProject = mock&amp;amp;lt;Project&amp;amp;gt; {
    on { logger } doReturn mock()  // Nested mock creation !
}

// ✅ CORRECT - Créer séparément
val mockLogger = mock&amp;amp;lt;org.gradle.api.logging.Logger&amp;amp;gt;()
val mockProject = mock&amp;amp;lt;Project&amp;amp;gt;()
whenever(mockProject.logger).thenReturn(mockLogger)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_3_মূল্যায়ন_কলব্যাককে_মক_করা&amp;quot;&amp;gt;3. মূল্যায়ন কলব্যাককে মক করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// ✅ afterEvaluate doit s&amp;#39;exécuter pour les tests
whenever(mockProject.afterEvaluate(any())).doAnswer { invocation -&amp;amp;gt;
    val action = invocation.arguments[0] as Action&amp;amp;lt;Project&amp;amp;gt;
    action.execute(mockProject)
    null
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_4_পথ_সমাধান_পরীক্ষা_করা&amp;quot;&amp;gt;4. পথ সমাধান পরীক্ষা করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin hljs&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;// Toujours vérifier que les chemins se résolvent correctement
val extension = project.extensions.getByType(BakeryExtension::class.java)
val configPath = extension.configPath.get()
val projectDir = project.layout.projectDirectory.asFile
val resolvedConfig = projectDir.resolve(configPath)

println(&amp;quot;Resolved config: ${resolvedConfig.absolutePath}&amp;quot;)
println(&amp;quot;Exists: ${resolvedConfig.exists()}&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাইনাল_টেস্ট_আর্কিটেকচার&amp;quot;&amp;gt;ফাইনাল টেস্ট আর্কিটেকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;./images/test-architecture.svg&amp;quot; alt=&amp;quot;test architecture&amp;quot; width=&amp;quot;1746&amp;quot; height=&amp;quot;5480&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপসংহার&amp;quot;&amp;gt;উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যে মনে হচ্ছিল একটি সাধারণ পরীক্ষার সমস্যা ছিল, সেটি একটি দরুন কেস স্টাডির উদাহরণ হিসাবে প্রকাশিত হয় :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Mockito এর Kotlin সাথে সুক্ষমতাগুলো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সঠিক বস্তুদের মক করার গুরুত্ব&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;পরীক্ষাগুলিতে অ্যাসিঙ্ক্রোনাস কলব্যাক পরিচালনা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গ্র্যাডল প্লাগইনে পথ সমাধান&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পদ্ধতিবদ্ধ ডিবাগিং, সমস্যা প্রতিটি স্তর বুঝে, দৃঢ় ও রক্ষণযোগ্য একটি সমাধান খুঁজে পেতে সক্ষম হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;admonitionblock tip&amp;quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;icon&amp;quot;&amp;gt;
&amp;lt;i class=&amp;quot;fa icon-tip&amp;quot; title=&amp;quot;Tip&amp;quot;&amp;gt;&amp;lt;/i&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;আপনার পরীক্ষার জন্য পরামর্শ&amp;lt;/strong&amp;gt;আপনি Mockito ব্যবহার করে &amp;#39;Wanted but not invited&amp;#39; ত্রুটি পেলে, সদা আপনি নিজেকে জিজ্ঞাসা করুন:
1. আমি সঠিক মক যাচাই করছি কি?
2. আমার সব মক কনফিগারেশন ব্লকের বাইরে তৈরি করা হয় কি?
3. আমার কলব্যাকস সত্যিই চলছেন কি?
4. আমার পথগুলো সঠিকভাবে সমাধান হচ্ছে কি?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সম্পদ&amp;quot;&amp;gt;সম্পদ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/mockito/mockito-kotlin&amp;quot;&amp;gt;Mockito-Kotlin ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/custom_plugins.html&amp;quot;&amp;gt;Gradle প্লাগইন ডেভেলপমেন্ট গাইড&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://jbake.org/&amp;quot;&amp;gt;JBake স্ট্যাটিক সাইট জেনারেটর&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;hr&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;আপনি আপনার টেস্টে সমান সমস্যা সম্মুখীন হয়েছেন? মন্তব্যে আপনার অভিজ্ঞতা শেয়ার করুন !&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Kotlin Arrow: Either মন্যাডের নেভিগেশন আয়ত্ত করা</title>
            <link >https://cheroliv.com//blog/2024/0075_kotlin_arrow-traverse_right_and_left_post.html</link>
            <pubDate>Tue, 24 Sep 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2024/0075_kotlin_arrow-traverse_right_and_left_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_either_মোন্যাড_কি&amp;quot;&amp;gt;Either মোন্যাড কি?&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_either_ব্যবহার_করতে_কেন&amp;quot;&amp;gt;Either ব্যবহার করতে কেন?&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_প্রেক্ষাপট&amp;quot;&amp;gt;প্রেক্ষাপট&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিভিন্ন_পদ্ধতিগুলো&amp;quot;&amp;gt;বিভিন্ন পদ্ধতিগুলো&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ক্লাসিক_পদ্ধতি_when&amp;quot;&amp;gt;ক্লাসিক পদ্ধতি `when&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহার_fold_একটি_সংক্ষিপ্ত_পদ্ধতির_জন্য&amp;quot;&amp;gt;ব্যবহার &amp;lt;code&amp;gt;fold&amp;lt;/code&amp;gt; একটি সংক্ষিপ্ত পদ্ধতির জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পরিণতির_সাথে_map_এবং_mapleft&amp;quot;&amp;gt;পরিণতির সাথে &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; এবং `mapLeft&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ত্রুটি_ব্যবস্থাপনার_সাথে_getorelse&amp;quot;&amp;gt;ত্রুটি ব্যবস্থাপনার সাথে `getOrElse&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাশের_কাজ_onleft_এবং_onright&amp;quot;&amp;gt;পাশের কাজ &amp;lt;code&amp;gt;onLeft&amp;lt;/code&amp;gt; এবং `onRight&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_flatmap_দিয়ে_অপারেশনগুলোকে_চেইন_করা&amp;quot;&amp;gt;flatMap দিয়ে অপারেশনগুলোকে চেইন করা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রূপান্তর_দ্বিদিকীয়_সঙ্গে_bimap&amp;quot;&amp;gt;রূপান্তর দ্বিদিকীয় সঙ্গে `bimap&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_পাশের_উল্টাপাল্টে_swap&amp;quot;&amp;gt;পাশের উল্টাপাল্টে `swap&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_tap_এবং_tapleft_এর_ব্যবহার&amp;quot;&amp;gt;tap` এবং &amp;lt;code&amp;gt;tapLeft&amp;lt;/code&amp;gt; এর ব্যবহার:&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহার_recover&amp;quot;&amp;gt;ব্যবহার &amp;lt;code&amp;gt;recover&amp;lt;/code&amp;gt; :&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ব্যবহারযোগ্য_ব্যবহারেরtool_call&amp;quot;&amp;gt;ব্যবহারযোগ্য ব্যবহারের&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অধিক_জানার_জন্য&amp;quot;&amp;gt;অধিক জানার জন্য&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;লক্ষ্য দর্শক :&amp;lt;/em&amp;gt; মাঝারি থেকে উন্নত tingkatের Kotlin ডেভেলপার।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;কোটলিনের ফাংশনাল প্রোগ্রামিংের বিশ্বে, Arrow লাইব্রেরি ত্রুটি এবং বিকল্প পরিস্থিতিগুলো পরিচালনার জন্য শক্তিশালী সরঞ্জাম প্রদান করে। এই সরঞ্জামগুলোর মধ্যে, মোন্যাড`Either`এটি Its দক্ষতায় ভিন্ন করে যা দুটি সম্ভাব্য অবস্থা — সাফল্য (Right) অথবা ব্যর্থতা (Left) — প্রতিনিধিত্ব করতে পারে। কিন্তু এই দুটি অবস্থার মধ্যে কীভাবে কার্যকরভাবে নেভিগেট করা যায়? এটিই আমরা এই নিবন্ধে অনুসন্ধান করব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_either_মোন্যাড_কি&amp;quot;&amp;gt;Either মোন্যাড কি?&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মোনাদ`Either` est une structure de données qui représente deux possibilités mutuellement exclusives. En Kotlin avec Arrow, elle est souvent utilisée pour gérer les cas de succès et d&amp;amp;#8217;échec d&amp;amp;#8217;une opération, offrant une alternative élégante aux exceptions traditionnelles.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_either_ব্যবহার_করতে_কেন&amp;quot;&amp;gt;Either ব্যবহার করতে কেন?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্পষ্ট ত্রুটি পরিচালনা : ডেভেলপারকে ব্যর্থতার পরিস্থিতিগুলি বিবেচনা করতে বাধ্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফাংশনাল কম্পোজিশন : অসফল হতে পারে এমন অপারেশনগুলির চেইনিংকে সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;টাইপ-সেফটি : ত্রুটি গুলি টাইপ করা হয়েছে, যা আরও সঠিকভাবে এদের পরিচালনা করতে সাহায্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অপवाद নেই: পার্শ্বপ্রতিকার এড়িয়ে চল এবং চালু কার্যক্রমের প্রবাহের অপ্রত্যাশিত বিরতি।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রেক্ষাপট&amp;quot;&amp;gt;প্রেক্ষাপট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আসুন ধরা যাক আপনি একটি REST API ডেভেলপ করছেন সঙ্গেhttps://spring.io/projects/spring-boot/[Spring Boot,উইন্ডোজ=পড়ুন-পরে] et &amp;lt;a href=&amp;quot;https://kotlinlang.org/&amp;quot;&amp;gt;Kotlin&amp;lt;/a&amp;gt;, গ্রন্থাগার ব্যবহার করেhttps://arrow-kt.io/[Arrow,windows=read-later]. আপনার একটি ফাংশন আছে`findOneUserByEmail`যে একটি ফেরত দেয়`Either&amp;amp;lt;Throwable, User&amp;amp;gt;`. কীভাবে আপনি এই ফলাফলকে শালীন ও কার্যকরভাবে মোকাবেলা করতে পারেন ?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমাদের একটি User ক্লাস আছে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@file:Suppress(
    &amp;quot;RemoveRedundantQualifierName&amp;quot;,
    &amp;quot;MemberVisibilityCanBePrivate&amp;quot;,
    &amp;quot;SqlNoDataSourceInspection&amp;quot;
)

package webapp.users

import arrow.core.Either
import arrow.core.left
import arrow.core.right
import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.databind.ObjectMapper
import jakarta.validation.constraints.NotNull
import jakarta.validation.constraints.Pattern
import jakarta.validation.constraints.Size
import org.springframework.beans.factory.getBean
import org.springframework.context.ApplicationContext
import org.springframework.data.r2dbc.core.R2dbcEntityTemplate
import org.springframework.r2dbc.core.DatabaseClient
import org.springframework.r2dbc.core.awaitOne
import org.springframework.r2dbc.core.awaitRowsUpdated
import webapp.core.property.ANONYMOUS_USER
import webapp.core.property.EMPTY_STRING
import webapp.core.utils.AppUtils.cleanField
import webapp.users.EntityModel.Companion.ID_MEMBER
import webapp.users.User.UserDao.Attributes.EMAIL_ATTR
import webapp.users.User.UserDao.Attributes.ID_ATTR
import webapp.users.User.UserDao.Attributes.LANG_KEY_ATTR
import webapp.users.User.UserDao.Attributes.LOGIN_ATTR
import webapp.users.User.UserDao.Attributes.PASSWORD_ATTR
import webapp.users.User.UserDao.Attributes.VERSION_ATTR
import webapp.users.User.UserDao.Constraints.LOGIN_REGEX
import webapp.users.User.UserDao.Fields.EMAIL_FIELD
import webapp.users.User.UserDao.Fields.ID_FIELD
import webapp.users.User.UserDao.Fields.LANG_KEY_FIELD
import webapp.users.User.UserDao.Fields.LOGIN_FIELD
import webapp.users.User.UserDao.Fields.PASSWORD_FIELD
import webapp.users.User.UserDao.Fields.VERSION_FIELD
import webapp.users.User.UserDao.Relations.INSERT
import webapp.users.security.Role
import webapp.users.security.Role.RoleDao
import webapp.users.security.UserRole.UserRoleDao
import java.util.*
import jakarta.validation.constraints.Email as EmailConstraint

data class User(
    override val id: UUID? = null,

    @field:NotNull
    @field:Pattern(regexp = LOGIN_REGEX)
    @field:Size(min = 1, max = 50)
    val login: String,

    @JsonIgnore
    @field:NotNull
    @field:Size(min = 60, max = 60)
    val password: String = EMPTY_STRING,

    @field:EmailConstraint
    @field:Size(min = 5, max = 254)
    val email: String = EMPTY_STRING,

    @JsonIgnore
    val roles: MutableSet&amp;amp;lt;Role&amp;amp;gt; = mutableSetOf(Role(ANONYMOUS_USER)),

    @field:Size(min = 2, max = 10)
    val langKey: String = EMPTY_STRING,

    @JsonIgnore
    val version: Long = -1,
) : EntityModel&amp;amp;lt;UUID&amp;amp;gt;() {

    companion object {
        @JvmStatic
        fun main(args: Array&amp;amp;lt;String&amp;amp;gt;) = println(UserDao.Relations.sqlScript)
    }

    object UserDao {
        object Constraints {
            // Regex for acceptable logins
            const val LOGIN_REGEX =
                &amp;quot;^(?&amp;amp;gt;[a-zA-Z0-9!$&amp;amp;amp;*+=?^_`{|}~.-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*)|(?&amp;amp;gt;[_.@A-Za-z0-9-]+)$&amp;quot;
            const val PASSWORD_MIN: Int = 4
            const val PASSWORD_MAX: Int = 16
            const val IMAGE_URL_DEFAULT = &amp;quot;https://placehold.it/50x50&amp;quot;
            const val PHONE_REGEX = &amp;quot;^(\\+|00)?[1-9]\\d{0,49}\$&amp;quot;
        }

        object Members {
            const val PASSWORD_MEMBER = &amp;quot;password&amp;quot;
            const val ROLES_MEMBER = &amp;quot;roles&amp;quot;
        }

        object Fields {
            const val ID_FIELD = &amp;quot;`id`&amp;quot;
            const val LOGIN_FIELD = &amp;quot;`login`&amp;quot;
            const val PASSWORD_FIELD = &amp;quot;`password`&amp;quot;
            const val EMAIL_FIELD = &amp;quot;`email`&amp;quot;
            const val LANG_KEY_FIELD = &amp;quot;`lang_key`&amp;quot;
            const val VERSION_FIELD = &amp;quot;`version`&amp;quot;
        }

        object Attributes {
            val ID_ATTR = ID_FIELD.cleanField()
            val LOGIN_ATTR = LOGIN_FIELD.cleanField()
            val PASSWORD_ATTR = PASSWORD_FIELD.cleanField()
            val EMAIL_ATTR = EMAIL_FIELD.cleanField()
            const val LANG_KEY_ATTR = &amp;quot;langKey&amp;quot;
            val VERSION_ATTR = VERSION_FIELD.cleanField()
        }

        object Relations {
            const val TABLE_NAME = &amp;quot;`user`&amp;quot;
            const val SQL_SCRIPT = &amp;quot;&amp;quot;&amp;quot;
            CREATE TABLE IF NOT EXISTS $TABLE_NAME (
                $ID_FIELD                     UUID default random_uuid() PRIMARY KEY,
                $LOGIN_FIELD                  VARCHAR,
                $PASSWORD_FIELD               VARCHAR,
                $EMAIL_FIELD                  VARCHAR,
                $LANG_KEY_FIELD               VARCHAR,
                $VERSION_FIELD                bigint
            );
            CREATE UNIQUE INDEX IF NOT EXISTS `uniq_idx_user_login`
            ON $TABLE_NAME ($LOGIN_FIELD);
            CREATE UNIQUE INDEX IF NOT EXISTS `uniq_idx_user_email`
            ON $TABLE_NAME ($EMAIL_FIELD);
&amp;quot;&amp;quot;&amp;quot;

            @Suppress(&amp;quot;SqlDialectInspection&amp;quot;)
            const val INSERT = &amp;quot;&amp;quot;&amp;quot;
            insert into $TABLE_NAME (
                $LOGIN_FIELD, $EMAIL_FIELD,
                $PASSWORD_FIELD, $LANG_KEY_FIELD,
                $VERSION_FIELD
            ) values ( :login, :email, :password, :langKey, :version)&amp;quot;&amp;quot;&amp;quot;

            @JvmStatic
            val sqlScript: String
                get() = setOf(
                    UserDao.Relations.SQL_SCRIPT,
                    RoleDao.Relations.SQL_SCRIPT,
                    UserRoleDao.Relations.SQL_SCRIPT
                ).joinToString(&amp;quot;&amp;quot;)
                    .trimMargin()
        }

        object Dao {
            val Pair&amp;amp;lt;User, ApplicationContext&amp;amp;gt;.toJson: String
                get() = second.getBean&amp;amp;lt;ObjectMapper&amp;amp;gt;().writeValueAsString(first)

            suspend fun Pair&amp;amp;lt;User, ApplicationContext&amp;amp;gt;.save(): Either&amp;amp;lt;Throwable, Long&amp;amp;gt; = try {
                second.getBean&amp;amp;lt;R2dbcEntityTemplate&amp;amp;gt;()
                    .databaseClient
                    .sql(INSERT)
                    .bind(LOGIN_ATTR, first.login)
                    .bind(EMAIL_ATTR, first.email)
                    .bind(PASSWORD_ATTR, first.password)
                    .bind(LANG_KEY_ATTR, first.langKey)
                    .bind(VERSION_ATTR, first.version)
                    .fetch()
                    .awaitRowsUpdated()
                    .right()
            } catch (e: Throwable) {
                e.left()
            }


            suspend fun ApplicationContext.findOneUserByEmail(
                email: String
            ): Either&amp;amp;lt;Throwable, User&amp;amp;gt; = try {
                getBean&amp;amp;lt;DatabaseClient&amp;amp;gt;()
                    .sql(&amp;quot;SELECT * FROM `user` WHERE LOWER(email) = LOWER(:email)&amp;quot;)
                    .bind(&amp;quot;email&amp;quot;, email)
                    .fetch()
                    .awaitOne()
                    .let { row -&amp;amp;gt;
                        User(
                            id = row[ID_ATTR] as UUID?,
                            login = row[LOGIN_ATTR] as String,
                            password = row[PASSWORD_ATTR] as String,
                            email = row[EMAIL_ATTR] as String,
                            langKey = row[LANG_KEY_ATTR] as String,
                            version = row[VERSION_ATTR] as Long
                        )
                    }.right()
            } catch (e: Throwable) {
                e.left()
            }
        }
    }

    /** Account REST API URIs */
    object UserRestApis {
        const val API_AUTHORITY = &amp;quot;/api/authorities&amp;quot;
        const val API_USERS = &amp;quot;/api/users&amp;quot;
        const val API_SIGNUP = &amp;quot;/signup&amp;quot;
        const val API_SIGNUP_PATH = &amp;quot;$API_USERS$API_SIGNUP&amp;quot;
        const val API_ACTIVATE = &amp;quot;/activate&amp;quot;
        const val API_ACTIVATE_PATH = &amp;quot;$API_USERS$API_ACTIVATE?key=&amp;quot;
        const val API_ACTIVATE_PARAM = &amp;quot;{activationKey}&amp;quot;
        const val API_ACTIVATE_KEY = &amp;quot;key&amp;quot;
        const val API_RESET_INIT = &amp;quot;/reset-password/init&amp;quot;
        const val API_RESET_FINISH = &amp;quot;/reset-password/finish&amp;quot;
        const val API_CHANGE = &amp;quot;/change-password&amp;quot;
        const val API_CHANGE_PATH = &amp;quot;$API_USERS$API_CHANGE&amp;quot;
    }
}

// Abstract entity model with Generic ID, which can be of any type
abstract class EntityModel&amp;amp;lt;T&amp;amp;gt;(
    open val id: T? = null
) {
    companion object {
        const val ID_MEMBER = &amp;quot;id&amp;quot;
    }
}

// Generic extension function that allows the ID to be applied to any EntityModel type
inline fun &amp;amp;lt;reified T : EntityModel&amp;amp;lt;ID&amp;amp;gt;, ID&amp;amp;gt; T.withId(id: ID): T {
    // Use reflection to create a copy with the passed ID
    return this::class.constructors.first { it.parameters.any { param -&amp;amp;gt; param.name == ID_MEMBER } }
        .call(id, *this::class.constructors.first().parameters.drop(1).map { param -&amp;amp;gt;
            this::class.members.first { member -&amp;amp;gt; member.name == param.name }.call(this)
        }.toTypedArray())
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিভিন্ন_পদ্ধতিগুলো&amp;quot;&amp;gt;বিভিন্ন পদ্ধতিগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ক্লাসিক_পদ্ধতি_when&amp;quot;&amp;gt;ক্লাসিক পদ্ধতি `when&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val user: User by lazy { userFactory(USER) }

val result: Either&amp;amp;lt;Throwable, User&amp;amp;gt; = context.findOneUserByEmail(user.email)

when (result) {
    is Either.Left -&amp;amp;gt; {
        val error = result.value
        println(&amp;quot;Erreur : ${error.message}&amp;quot;)
    }
    is Either.Right -&amp;amp;gt; {
        val user = result.value
        println(&amp;quot;Utilisateur trouvé : ${user.login}&amp;quot;)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি, যদিও সহজ এবং পড়তে সহজ, Arrow-এর কার্যক্ষমতার ক্ষमतাগুলোকে সম্পূর্ণরূপে ব্যবহার না করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহার_fold_একটি_সংক্ষিপ্ত_পদ্ধতির_জন্য&amp;quot;&amp;gt;ব্যবহার &amp;lt;code&amp;gt;fold&amp;lt;/code&amp;gt; একটি সংক্ষিপ্ত পদ্ধতির জন্য&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;result.fold(
{ error -&amp;amp;gt; println(&amp;quot;Erreur : ${error.message}&amp;quot;) },
{ user -&amp;amp;gt; println(&amp;quot;Utilisateur trouvé : ${user.login}&amp;quot;) }
)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`fold`এটি দুটি ক্ষেত্র (বাম এবং ডান) জন্য কর্মসমূহ সংজ্ঞায়িত করার অনুমতি দেয় সংক্ষিপ্ত ও শোভনশীলভাবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পরিণতির_সাথে_map_এবং_mapleft&amp;quot;&amp;gt;পরিণতির সাথে &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt; এবং `mapLeft&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val processedResult = result
    .map { user -&amp;amp;gt; &amp;quot;Utilisateur trouvé : ${user.login}&amp;quot; }
    .mapLeft { error -&amp;amp;gt; &amp;quot;Erreur : ${error.message}&amp;quot; }

println(processedResult.merge())&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিটি Either-এর মধ্যস্থত মানগুলোকে রূপান্তর করতে সক্ষম করে, এর গঠন বজায় রেখে, যা জটিল প্রক্রিয়াশীল ধারার জন্য আদর্শ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ত্রুটি_ব্যবস্থাপনার_সাথে_getorelse&amp;quot;&amp;gt;ত্রুটি ব্যবস্থাপনার সাথে `getOrElse&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val user = result.getOrElse { error -&amp;amp;gt;
    println(&amp;quot;Erreur : ${error.message}&amp;quot;)
    User(login = &amp;quot;default&amp;quot;, email = &amp;quot;default@example.com&amp;quot;) // utilisateur par défaut
}
println(&amp;quot;Login : ${user.login}&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`getOrElse`এটি ডিফল্ট মান প্রদান করার অনুমতি দিয়ে একটি সৌন্দর্য-সম্পন্ন ত্রুটি ব্যবস্থাপনা প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাশের_কাজ_onleft_এবং_onright&amp;quot;&amp;gt;পাশের কাজ &amp;lt;code&amp;gt;onLeft&amp;lt;/code&amp;gt; এবং `onRight&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;result.onLeft { error -&amp;amp;gt; println(&amp;quot;Erreur : ${error.message}&amp;quot;) }
.onRight { user -&amp;amp;gt; println(&amp;quot;Utilisateur trouvé : ${user.login}&amp;quot;) }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতিগুলি Either পরিবর্তন না করে উভয় পাশে কাজ সম্পাদন করতে পারে, যা লগিং বা হালকা পার্শ্বপ্রভাবের জন্য আদর্শ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_flatmap_দিয়ে_অপারেশনগুলোকে_চেইন_করা&amp;quot;&amp;gt;flatMap দিয়ে অপারেশনগুলোকে চেইন করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun findUser(email: String): Either&amp;amp;lt;Throwable, User&amp;amp;gt; = // ... implémentation

fun getUserPermissions(user: User): Either&amp;amp;lt;Throwable, List&amp;amp;lt;String&amp;amp;gt;&amp;amp;gt; = // ... implémentation

val userPermissions = findUser(&amp;quot;user@example.com&amp;quot;)
    .flatMap { user -&amp;amp;gt; getUserPermissions(user) }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;flatMap`এটি উপযোগীয় অপারেশনগুলোকে শৃঙ্খলিত করার জন্য যেগুলো নিজেই`Either&amp;lt;/code&amp;gt;, এ&amp;amp;lt;/tool_call&amp;amp;gt;ে পরihar করে`Either`নেস্টেড.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রূপান্তর_দ্বিদিকীয়_সঙ্গে_bimap&amp;quot;&amp;gt;রূপান্তর দ্বিদিকীয় সঙ্গে `bimap&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result: Either&amp;amp;lt;Throwable, User&amp;amp;gt; = // ... obtention du résultat
val processedResult = result.bimap(
    { error -&amp;amp;gt; &amp;quot;Erreur: ${error.message}&amp;quot; },
    { user -&amp;amp;gt; &amp;quot;Utilisateur: ${user.login}&amp;quot; }
)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;`bimap`এটি বাম পাশ এবং ডান পাশকে একই সময়ে একক অপারেশনে রূপান্তরিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_পাশের_উল্টাপাল্টে_swap&amp;quot;&amp;gt;পাশের উল্টাপাল্টে `swap&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result: Either&amp;amp;lt;Throwable, User&amp;amp;gt; = // ... obtention du résultat
val swapped = result.swap()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;swap`এটি উপযোগী যখন আপনি একটির পাশগুলো উলটে দিতে চান`Either&amp;lt;/code&amp;gt;, উদাহরণস্বরূপ একটি ফাংশerin ইন্টারফেসকে একটি অন্য ফাংশerin ইন্টারফেসে অ্যাড্যাপ্ট করার জন্য.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_tap_এবং_tapleft_এর_ব্যবহার&amp;quot;&amp;gt;tap` এবং &amp;lt;code&amp;gt;tapLeft&amp;lt;/code&amp;gt; এর ব্যবহার:&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;result.tap { user -&amp;amp;gt; println(&amp;quot;Utilisateur trouvé : ${user.login}&amp;quot;) }
.tapLeft { error -&amp;amp;gt; println(&amp;quot;Erreur : ${error.message}&amp;quot;) }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সমজাতীয়`onLeft` et &amp;lt;code&amp;gt;onRight&amp;lt;/code&amp;gt;, কিন্তু এই পদ্ধতিগুলো মূল Either ফেরত দেন, যা অপারেশনগুলোকে চেইNING করতে সহায়ক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ব্যবহার_recover&amp;quot;&amp;gt;ব্যবহার &amp;lt;code&amp;gt;recover&amp;lt;/code&amp;gt; :&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val recoveredUser = result.recover { error -&amp;amp;gt;
    println(&amp;quot;Erreur récupérée : ${error.message}&amp;quot;)
    User(login = &amp;quot;recovered&amp;quot;, email = &amp;quot;recovered@example.com&amp;quot;)
}
println(&amp;quot;Login : ${recoveredUser.login}&amp;quot;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতি একটি Either.Left কে একটি Either.Right-এ রূপান্তর করতে একটি প্রতিস্থাপন মান প্রদান করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ব্যবহারযোগ্য_ব্যবহারেরtool_call&amp;quot;&amp;gt;ব্যবহারযোগ্য ব্যবহারের&amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্যবহার করুন`fold`সাধরণ অপারেশনগুলির জন্য প্রতিটি ক্ষেত্রে প্রক্রিয়াজাত করার প্রয়োজন। - পছন্দ করুন`map` et &amp;lt;code&amp;gt;mapLeft`ডেটা রূপান্তরের জন্য, স্ট্রাকচার পরিবর্তন না করে`Either&amp;lt;/code&amp;gt;. - বেছে নিন`flatMap`ব্যর্থ হতে পারে এমন অপারেশনদের শৃঙ্খলের সময় - ব্যবহার করুন`recover`ত্রুটি ক্ষেত্রে ডিফল্ট মান প্রদান করতে। - বেছে নিন`onLeft` et &amp;lt;code&amp;gt;onRight&amp;lt;/code&amp;gt; (ou &amp;lt;code&amp;gt;tap&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;tapLeft&amp;lt;/code&amp;gt;) Protikúl folaphol jemon logging er jonno. - ব্যবহার করুন`bimap`দুই পাশকে একক অপারেশনে রূপান্তর করতে - লাগু করুন`swap`আপনি যখন একটি ফাংশনের ইন্টারফেসকে আরেকটি ফাংশনের সাথে সামঞ্জস্য করতে হবেন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রতিটি পদ্ধতির নিজ নিজ সুবিধা আছে ব্যবহার পরিস্থিতির উপর ভিত্তি করে। পদ্ধতিগুলো όπως`fold`, &amp;lt;code&amp;gt;map&amp;lt;/code&amp;gt;(empty)&amp;lt;code&amp;gt;mapLeft&amp;lt;/code&amp;gt;, et `recover`এগুলো বিশেষভাবে উপকারী, যখন আপনি একাধিক অপারেশন চালিয়ে যেতে চান অথবা ডেটা কার্যকরভাবে রূপান্তর করতে চান।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মোন্যాద`Either`d&amp;amp;#8217;Arrow একটি অসাধারণ নমনীয়তা প্রদান করে আপনার Kotlin অ্যাপ্লিকেশনগুলোতে সাফল্য ও ত্রুটি পরিচালনা করার জন্য। এই ভিন্ন পদ্ধতিগুলো আয়ত্ত করে, আপনি আরও দৃঢ়, আরও পড়া সহজ এবং আরও কার্যকর কোড লিখতে পারবেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার পরবর্তী প্রকল্পে, এই কৌশলগুলোকে অন্বেষণ করে Kotlin এবং Arrow দিয়ে ফাংশনাল প্রোগ্রামিং থেকে সবচেয়ে বেশি সুবিধা নিন!&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অধিক_জানার_জন্য&amp;quot;&amp;gt;অধিক জানার জন্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অরোয়ার অফিশিয়াল ডকুমেন্টেশন :https://arrow-kt.io/docs/apidocs/arrow-core/arrow.core/-either/[অ্যারো ইথার] কটলিন কোরুটাইন অ্যারো সাথে :https://arrow-kt.io/docs/fx/[অ্যারো Fx কোরুটিন]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার অভিজ্ঞতা এবং আপনার পছন্দের কৌশলগুলো কাজ করার জন্য শেয়ার করতে ভুলবেন না`Either`নীচের মন্তব্যগুলোতে !&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>ব্যাবহারিক গাইড : লিনাক্সে ফাইল খোঁজা</title>
            <link >https://cheroliv.com//blog/2024/0074_seach_file_linux_post.html</link>
            <pubDate>Mon, 23 Sep 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2024/0074_seach_file_linux_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কমান্ডের_ব্যবহার_find&amp;quot;&amp;gt;কমান্ডের ব্যবহার `find&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অতিরিক্ত_বিকল্পের_জন্য_find&amp;quot;&amp;gt;অতিরিক্ত বিকল্পের জন্য `find&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_locate_কমান্ডের_ব্যবহার&amp;quot;&amp;gt;locate` কমান্ডের ব্যবহার&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাইলগুলোতে_টেক্সট_খোঁজার_জন্য_grep_কমান্ড_ব্যবহারের_পদ্ধতি&amp;quot;&amp;gt;ফাইলগুলোতে টেক্সট খোঁজার জন্য &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; কমান্ড ব্যবহারের পদ্ধতি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সমাপ্তি&amp;quot;&amp;gt;সমাপ্তি&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;সমস্যা : লিনাক্স অপারেটিং সিস্টেমে টার্মিনালের মাধ্যমে ফাইল খোঁজুন।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;এই নিবন্ধে, আমরা যুগবুন্টুতে একটি ফাইল খোঁজা কীভাবে Zsh টার্মিনাল ব্যবহার করে তা অন্বেষণ করব। Zsh (Z শেল) একটি শক্তিশালী কমান্ড শেল, যা তার নমনীয়তা এবং উন্নত বৈশিষ্ট্যের কারণে ব্যাপকভাবে ব্যবহার করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ubuntu, একটি জনপ্রিয় লিনাক্স ডিস্ট্রিবিউশন, কমান্ড লাইনে কিছু টুল অফার করে ফাইল খোঁজার জন্য। আমরা কীভাবে সচরাচর ব্যবহৃত কমান্ডগুলো যেমন ব্যবহার করা হয় তা দেখব।&amp;lt;code&amp;gt;find&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;locate&amp;lt;/code&amp;gt; et `grep`টার্মিনালে দ্রুত ও কার্যকরভাবে ফাইল খুঁজে বের করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কমান্ডের_ব্যবহার_find&amp;quot;&amp;gt;কমান্ডের ব্যবহার `find&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আদেশ`find`এটি একটি নির্দিষ্ট ডিরেক্টরি ও তার উপ-ডিরেক্টরিগুলোতে ফাইল খোঁজার অনুমতি দেয়। এর মৌলিক সিনট্যাক্স নিম্নরূপ হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find [chemin] -name [nom_du_fichier]&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি একটি ব্যবহারিক উদাহরণ যেখানে আমরা একটি নামকৃত ফাইল খুঁজছি`example.txt`ডিরেক্টরির মধ্যে`/home`:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find /home -name &amp;quot;example.txt&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কমান্ডটি সমস্ত পাব-ডিরেক্টরিতে ভ্রমণ করবে`/home`এবং ফাইলের সম্পূর্ণ পথ দেখানো যদি তা পাওয়া যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কমান্ডের অনলাইন ম্যানুয়াল`find`:https://man.archlinux.org/man/find.1.fr/[ব্যক্তি খুঁজে বের করা,উইন্ডো=পড়া-পরে]&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_অতিরিক্ত_বিকল্পের_জন্য_find&amp;quot;&amp;gt;অতিরিক্ত বিকল্পের জন্য `find&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কমান্ড`find`টি খুব শক্তিশালী এবং অনেক বিকল্প আছে। এখানে কিছু উপকারী উদাহরণ দেওয়া হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফাইল টাইপ অনুসন্ধান করুন&amp;lt;/strong&amp;gt;শুধুমাত্র ফাইল খোঁজার জন্য, ব্যবহার করুন`-type f`, এবং ডিরেক্টরিগুলো খুঁজে বের করতে, ব্যবহার করুন`-type d`. - &amp;lt;strong&amp;gt;আকার অনুসন্ধান&amp;lt;/strong&amp;gt;আপনি বিকল্পটি ব্যবহার করে ফাইলকে তাদের আকার অনুযায়ী ফিল্টার করতে পারেন`-size`. Par exemple, pour rechercher des fichiers de plus de 100 Mo, utilisez :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;find /home -size +100M&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_locate_কমান্ডের_ব্যবহার&amp;quot;&amp;gt;locate` কমান্ডের ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অর্ডার`locate`এর চেয়ে দ্রুত`find`এটি একটি পূর্বে সূচিত করা ডেটাবেস ব্যবহার করে, যা সিস্টেমে উপস্থিত ফাইলগুলোকে অন্তর্ভুক্ত করে। আপনাকে প্রথমে নিম্নলিখিত কমান্ড দিয়ে এই ডেটাবেসটি আপডেট করতে হবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo updatedb&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পরে, আপনি একটি ফাইল খোঁজতে পারেন এভাবে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;locate example.txt&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি ব্যবহার করিhttps://fr.wikipedia.org/wiki/Z_Shell[zsh]עםhttps://github.com/ohmyzsh/ohmyzsh/wiki[oh-my-zsh], এটি প্রतीত হয় যে আদেশ`locate`এটি [থেকে] অ্যাক্সেসযোগ্য না`zsh`কিন্তু খুবই সম্ভব হয়েছে য থেকে`bash`, এই জন্য, যুক্তি`-c`অর্ডারের`bash`একটি কমান্ড চালানোর সুযোগ দেয়`bash`অন্য ধরনের টার্মিনাল থেকে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে আমি সেই ফাইলগুলো খুঁজছি যা প্যাটার্ন দিয়ে শেষ হয়।`001.pdf`ব্যবহারকারী ডিরেক্টরিতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;bash -c &amp;quot;locate ~/*001.pdf&amp;quot;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কমান্ডের অনলাইন নির্দেশিকা`locate`:https://man.archlinux.org/man/locate.1.fr/[man locate,windows=read-later]*&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাইলগুলোতে_টেক্সট_খোঁজার_জন্য_grep_কমান্ড_ব্যবহারের_পদ্ধতি&amp;quot;&amp;gt;ফাইলগুলোতে টেক্সট খোঁজার জন্য &amp;lt;code&amp;gt;grep&amp;lt;/code&amp;gt; কমান্ড ব্যবহারের পদ্ধতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি আপনি কোনো ফাইলের ভিতরে নির্দিষ্ট কোনো টেক্সট খুঁজে বের করতে চান, তাহলে আপনি ব্যবহার করতে পারেন`grep`। উদাহরণ স্বরূপ, &amp;#39;Ubuntu&amp;#39; শব্দের প্রতিরূপ সব ফাইলে খুঁজে বের করতে`.txt`[space]বর্তমান ডিরেক্টরির, ব্যবহার করুন : (Note: The leading space is preserved as in the original.)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;grep &amp;quot;Ubuntu&amp;quot; *.txt&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সমাপ্তি&amp;quot;&amp;gt;সমাপ্তি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Ubuntu-এ Zsh টার্মিনাল ব্যবহার করে ফাইল খোঁজা করা যায়, যার জন্য`find`নমনীয় এবং অনেকগুলি বিকল্প প্রদান করে, তবে`locate`একটি পূর্ব-নির্মিত ডেটাবেস ব্যবহার করে দ্রুত খোঁজ করার সুযোগ দেয়. শেষে,`grep`এটি ফাইলের মধ্যে টেক্সটের ঘটনAOঁ খুঁজে পেতে সাহাযย์ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই কমান্ডগুলি আপনাকে আপনার ফাইল খোঁজকে আরও কার্যকর এবং আপনার প্রয়োজনে সাজানো একটি সম্পূর্ণ সরঞ্জাম প্রদান করে এবং প্রতিটি কমান্ডের একটি ম্যানুয়াল আছে যা কমান্ড দিয়ে দেখা যায়।&amp;lt;code&amp;gt;man&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>লিনাক্স মেমো</title>
            <link >https://cheroliv.com//blog/2021/0030_memo_linux_post.html</link>
            <pubDate>Mon, 23 Sep 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2021/0030_memo_linux_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কীবোর্ড&amp;quot;&amp;gt;কীবোর্ড :&amp;lt;/a&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel2&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ctrl_কী&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Ctrl কী&amp;lt;/em&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অনুমতি_অনুমোদন&amp;quot;&amp;gt;অনুমতি (অনুমোদন)&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ফাইলের_অনুসন্ধান&amp;quot;&amp;gt;ফাইলের অনুসন্ধান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কীবোর্ড&amp;quot;&amp;gt;কীবোর্ড :&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ctrl_কী&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Ctrl কী&amp;lt;/em&amp;gt;&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://korben.info/les-raccourcis-clavier-pour-bash-terminal-linux-et-macos.html&amp;quot;&amp;gt;লিংক&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;a href=&amp;quot;https://blogmotion.fr/systeme/astuces-bash-linux-16175&amp;quot;&amp;gt;অন্য লিংক&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অনুমতি_অনুমোদন&amp;quot;&amp;gt;অনুমতি (অনুমোদন)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;CHMOD ফাইলের অনুমতি পরিবর্তন করতে ব্যবহৃত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অনুমতি      কমান্ড&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;U   G   W rwx rwx rwx     chmod 777 filename rwx rwx r-x     chmod 775 filename rwx r-x r-x     chmod 755 filename rw- rw- r--     chmod 664 ফাইলের নাম rw- r-- r--     chmod 644 filename&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;U = ব্যবহারকারী G = গোষ্ঠী W = বিশ্ব&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;r = Readable w = लेखनयोग्य&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;But we must ensure it&amp;amp;#8217;s Bengali script, so:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;w = লেখনযোগ্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Let&amp;amp;#8217;s output exactly that.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;lt;/think&amp;amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;w = লেখনযোগ্য x = অনুলোপনযোগ্য - = অনুমতি নেই&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অন্য অনুমতি দেখার উপায়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;400    মালিকによる পড়া 040     গ্রুপによって পঠিত কে�েউ দ্বারা পড়া হয় (অন্য) 200     মালিক द्वारा লেখা 020     গ্রুপ দ্বারা লিখ 002     কেউ দ্বারা লেখা 100 মালিক, নিষ্পাদন করুন 010     গোষ্ঠী দ্বারা করা 001    _caró_by_চালানো&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি সংযোজন পেতে, শুধু তাদেরকে যোগ করলেই যথেষ্ট।&amp;lt;br&amp;gt;
উদাহরণস্বরূপ, মালিক tarafından পড়া, লেখা, চালু করা,&amp;lt;br&amp;gt;
পড়া, নিষ্পাদিত, গোষ্ঠীর দ্বারা এবং যে কোনো tarafından নিষ্পাদিত,&amp;lt;br&amp;gt;
আপনি যোগ করতেন 400+200+100+040+010+001 দিয়ে 751.&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাইলের_অনুসন্ধান&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;/blog/2024/0074_seach_file_linux_post.html&amp;quot;&amp;gt;ফাইলের অনুসন্ধান&amp;lt;/a&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>উইন্ডোজ হোস্টের জন্য একটি লিনक्स সাবসিস্টেম পোর্ট উন্মুক্ত করুন</title>
            <link >https://cheroliv.com//blog/2024/0072_Exposer_un_port_linux_subsystem_post.adoc.html</link>
            <pubDate>Thu, 1 Feb 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2024/0072_Exposer_un_port_linux_subsystem_post.adoc.html</guid>
            <description></description>
        </item><item>
            <title>প্যান্ডক ইনস্টল করুন</title>
            <link >https://cheroliv.com//blog/2024/0070_installer_pandoc_post.html</link>
            <pubDate>Tue, 30 Jan 2024 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2024/0070_installer_pandoc_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;পাঠের সময় : ৩ মিনিট&amp;lt;/em&amp;gt; প্যান্ডক একটি সার্বজনীন ডকুমেন্ট রূপান্তরকারী&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Pandoc একটি ওপেন সোর্স টেক্সট প্রসেসিং সফ্টওয়্যার যা বিভিন্ন ফরম্যাটে ডকুমেন্ট রূপান্তর করার জন্য ব্যবহার করা যায়। প্যান্ডোক ইন্সটল করার কয়েকটি উপায় আছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ডাউনলোড_পৃষ্ঠা_থেকে_ইনস্টলেশন&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ডাউনলোড পৃষ্ঠা থেকে ইনস্টলেশন&amp;lt;/strong&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডাউনলোড পৃষ্ঠা থেকে Pandoc ইনস্টল করতে, এই ধাপগুলো অনুসরণ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্যান্ডক ডাউনলোড পৃষ্ঠাতে অ্যাক্সেস করুন :https://pandoc.org/installing.html/[&amp;lt;a href=&amp;quot;https://pandoc.org/installing.html&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://pandoc.org/installing.html&amp;lt;/a&amp;gt;]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;আপনার অপারেটিং সিস্টেমের জন্য প্যাকেজ ইনস্টলার ডাউনলোড করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্যান্ডক ইন্সটল করতে ইন্সটলারটি চালু করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;জিপ ফাইল থেকে ইনস্টলেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Pandoc-কে একটি zip ফাইল থেকে ইনস্টল করার জন্য, নিম্নলিখিত ধাপগুলো অনুসরণ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;প্যান্ডক এর বাইনারি ফাইল ও ডকুমেন্টেশন ধারণকারী zip ফাইলটি ডাউনলোড করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;জিপ ফাইল অ্যানজিপ করুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;বাইনারিগুলোকে আপনার পছন্দের ডিরেক্টরিতে নিয়ে যান।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Chocolatey ব্যবহার করে ইনস্টলেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Chocolatey ব্যবহার করে Pandoc ইনস্টল করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি কমান্ড প্রম্পট খুলুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত কমান্ডটি চালু করুন :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-powershell&amp;quot; data-lang=&amp;quot;powershell&amp;quot;&amp;gt;choco install pandoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;winget-এর সাহায্যে ইনস্টলেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Winget ব্যবহার করে Pandoc ইনস্টল করতে নিম্নলিখিত ধাপগুলো অনুসরণ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি কমান্ড প্রম্পট খুলুন।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;নিম্নলিখিত কমান্ডটি চালান :&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-powershell&amp;quot; data-lang=&amp;quot;powershell&amp;quot;&amp;gt;winget install --source winget --exact --id JohnMacFarlane.Pandoc&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সুপারিশ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্টে, Pandoc LaTeX ব্যবহার করে PDF তৈরি করে। LaTeX-কে MiKTeX-এর মাধ্যমে ইনস্টল করার সুপারিশ করা হয়। বিকল্পের সঙ্গে`--pdf-engine`, আপনি এই কাজের জন্য অন্যান্য প্রোগ্রাম নির্দিষ্ট করতে পারেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;সতর্কবাচন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একাধিক ইনস্টলেশন পদ্ধতির ব্যবহার প্যান্ডকোর দুটি ভিন্ন ইনস্টলেশনে منجر হতে পারে। একটি বিকল্প ইনস্টলেশন পদ্ধতিতে পরিবর্তনের আগে প্যান্ডককে সঠিকভাবে অইনস্টল করার সুপারিশ করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;WSL-এ লিনাক্সে ইন্সটালেশন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনার প্যাকেজ ম্যানেজারে pandoc-এর সংস্করণ পুরনো নাকি তা পরীক্ষা করুন। প্যান্ডোক ডেবিয়ান, উবুন্টু, স্ল্যাকওয়্যার, আর্চ, ফেডোরা, নিক্সওএস, ওপেনসুসেজ, জেন্টু এবং ভয়ড রিপোজিটরিতে উপলব্ধ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সবশেষ সংস্করণ পেতে, আমরা amd64 আর্কিটেকচারের জন্য একটি বাইনারি প্যাকেজ প্রস্তাব করি ডাউনলোড পেজে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এক্সিকিউটেবলটি স্ট্যাটিকভাবে লিংক করা হয়েছে এবং কোনো ডাইনামিক নির্ভরতা বা বাহ্যিক ডেটা ফাইলের উপর কোনো নির্ভরতা নেই। নোট : স্ট্যাটিক লিংকার কারণে, এই প্যাকেজের প্যান্ডোক বাইনারি C-এ লেখা বাহ্যিক Lua মডিউল প্রয়োজন করে এমন Lua ফিল্টার ব্যবহার করতে পারে না।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি tarball এবং একটি deb ইনস্টলার প্রদান করা হয়েছে। ডেব ইনস্টল করতে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo dpkg -i $DEB&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ লিখনের সময়ে:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;wget https://github.com/jgm/pandoc/releases/download/3.1.11.1/pandoc-3.1.11.1-1-amd64.deb&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;sudo dpkg -i pandoc-3.1.11.1-1-amd64.deb&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;où `$DEB`এটি ডাউনলোড করা deb ফাইলের পথ। এটি এক্সিকিউটেবলকে ইনস্টল করবে`pandoc`এবং ম্যানুয়াল পৃষ্ঠা।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি যদি RPM-ভিত্তিক কোনো ডিস্ট্রিবিউশন ব্যবহার করেন, তাহলে আপনি আমাদের ডাউনলোড পৃষ্ঠা থেকে .deb ফাইলটি অ্যালিয়েন ব্যবহার করে ইনস্টল করতে পারেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যেকোনো ডিস্ট্রিবিউশনে, আপনি টারবাল থেকে ইনস্টল করতে পারেন এতে`$DEST`(উদাহরণস্বরূপ,&amp;lt;code&amp;gt;/usr/local/&amp;lt;/code&amp;gt; ou &amp;lt;code&amp;gt;$HOME/.local&amp;lt;/code&amp;gt;) করে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;tar xvzf $TGZ --strip-components 1 -C $DEST&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;où `$TGZ`এই ডাউনলোড করা জিপড টারবলের পথ। প্যান্ডোকের ২.০-এর আগের সংস্করণগুলো, যারা টারবল সরবরাহ না করে, তাদের পরিবর্তে চেষ্টা করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;ar p $DEB data.tar.gz | tar xvz --strip-components 2 -C $DEST&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি সোর্স থেকেও ইনস্টল করতে পারেন, নীচের নির্দেশিকাগুলো ব্যবহার করে তলে`Compilation à partir de la source`. দ্রষ্টব্য যে, বেশি ভাগ বিতরণে Haskell প্ল্যাটফর্মটি তাদের প্যাকেজ সংগ্রহস্থলে উপলব্ধ। উদাহরণস্বরূপ, Debian/Ubuntu-এ, আপনি এটি সাথে ইনস্টল করতে পারেন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;apt-get install haskell-platform&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডিফল্টভাবে, Pandoc LaTeX-এর সাহায্যে PDFs তৈরি করে। আমরা আপনাকে আপনার প্যাকেজ-ম্যানেজার ব্যবহার করে TeX Live ইনস্টাল করার সুপারিশ করি। (Debian/Ubuntu-এ,&amp;lt;code&amp;gt;apt-get install texlive&amp;lt;/code&amp;gt;) বিকল্পের সাথে`--pdf-engine`, আপনি এই কাজের জন্য অন্যান্য প্রোগ্রামও নির্দিষ্ট করতে পারেন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>কোটলিন.Triple এর জাভাস্ক্রিপ্ট, টাইপস্ক্রিপ্ট এবং পাইথনে বাস্তবায়ন</title>
            <link >https://cheroliv.com//blog/2023/0069_triple_python_js_ts_post.html</link>
            <pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0069_triple_python_js_ts_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;em&amp;gt;পড়ার সময় : 2 মিনিট&amp;lt;/em&amp;gt; JavaScript, TypeScript এবং Python-এ kotlin.Triple ক্লাসের একটি সম্পূর্ণ প্রয়োগ তৈরি করুন ফাংশনাল প্রোগ্রামিং ব্যবহার করে।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;নোট :&amp;lt;/strong&amp;gt;প্রকারগুলি`Maybe`, &amp;lt;code&amp;gt;Either&amp;lt;/code&amp;gt;, `Result`এগুলো JavaScript বা TypeScript-এ মৌলিক ভাষার অংশ নয়, সুতরাং আমাদের নিজেদেরই এগুলো ইমপ্লিমেন্ট করতে হবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_জাভাস্ক্রিপ্ট&amp;quot;&amp;gt;জাভাস্ক্রিপ্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;//javascript
// Maybe type
const Maybe = (value) =&amp;amp;gt; ({
  map: (fn) =&amp;amp;gt; (value !== null &amp;amp;amp;&amp;amp;amp; value !== undefined ? Maybe(fn(value)) : Maybe(null)),
  flatMap: (fn) =&amp;amp;gt; (value !== null &amp;amp;amp;&amp;amp;amp; value !== undefined ? fn(value) : Maybe(null)),
  getOrElse: (defaultValue) =&amp;amp;gt; (value !== null &amp;amp;amp;&amp;amp;amp; value !== undefined ? value : defaultValue),
});

// Either type
const Either = {
  Left: (value) =&amp;amp;gt; ({
    map: (fn) =&amp;amp;gt; Either.Left(value),
    flatMap: (fn) =&amp;amp;gt; Either.Left(value),
    getOrElse: (defaultValue) =&amp;amp;gt; defaultValue,
    isLeft: true,
    isRight: false,
  }),
  Right: (value) =&amp;amp;gt; ({
    map: (fn) =&amp;amp;gt; Either.Right(fn(value)),
    flatMap: (fn) =&amp;amp;gt; fn(value),
    getOrElse: (defaultValue) =&amp;amp;gt; value,
    isLeft: false,
    isRight: true,
  }),
};

// Triple class
class Triple {
  constructor(a, b, c) {
    this.a = a;
    this.b = b;
    this.c = c;
  }

  map(fn) {
    return new Triple(fn(this.a), fn(this.b), fn(this.c));
  }

  static of(a, b, c) {
    return new Triple(a, b, c);
  }

  // Example method using Maybe and Either
  divideBy(other) {
    return Maybe(this.b)
      .flatMap((numerator) =&amp;amp;gt;
        Maybe(other)
          .flatMap((denominator) =&amp;amp;gt;
            denominator !== 0
              ? Either.Right(numerator / denominator)
              : Either.Left(&amp;#39;Division by zero&amp;#39;)
          )
      )
      .getOrElse(Either.Left(&amp;#39;Invalid input&amp;#39;));
  }
}

// Example usage
const triple = Triple.of(1, 2, 3);
const result = triple.map((x) =&amp;amp;gt; x * 2);
console.log(result); // Triple { a: 2, b: 4, c: 6 }

const divisionResult = triple.divideBy(2);
console.log(divisionResult); // Either.Right { value: 1 }

const invalidDivisionResult = triple.divideBy(0);
console.log(invalidDivisionResult); // Either.Left { value: &amp;#39;Division by zero&amp;#39; }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টাইপস্ক্রিপ্ট&amp;quot;&amp;gt;টাইপস্ক্রিপ্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;//Typescript
// Maybe type
// noinspection JSAnnotator

type Maybe&amp;amp;lt;T&amp;amp;gt; = {
  map&amp;amp;lt;U&amp;amp;gt;(fn: (value: T) =&amp;amp;gt; U): Maybe&amp;amp;lt;U&amp;amp;gt;;
  flatMap&amp;amp;lt;U&amp;amp;gt;(fn: (value: T) =&amp;amp;gt; Maybe&amp;amp;lt;U&amp;amp;gt;): Maybe&amp;amp;lt;U&amp;amp;gt;;
  getOrElse(defaultValue: T): T;
};

const just = &amp;amp;lt;T&amp;amp;gt;(value: T): Maybe&amp;amp;lt;T&amp;amp;gt; =&amp;amp;gt; ({
  map: &amp;amp;lt;U&amp;amp;gt;(fn: (value: T) =&amp;amp;gt; U) =&amp;amp;gt; just(fn(value)),
  flatMap: &amp;amp;lt;U&amp;amp;gt;(fn: (value: T) =&amp;amp;gt; Maybe&amp;amp;lt;U&amp;amp;gt;) =&amp;amp;gt; fn(value),
  getOrElse: (_: T) =&amp;amp;gt; value,
});

const nothing = &amp;amp;lt;T&amp;amp;gt;(): Maybe&amp;amp;lt;T&amp;amp;gt; =&amp;amp;gt; ({
  map: &amp;amp;lt;U&amp;amp;gt;(_: (value: T) =&amp;amp;gt; U) =&amp;amp;gt; nothing&amp;amp;lt;U&amp;amp;gt;(),
  flatMap: &amp;amp;lt;U&amp;amp;gt;(_: (value: T) =&amp;amp;gt; Maybe&amp;amp;lt;U&amp;amp;gt;) =&amp;amp;gt; nothing&amp;amp;lt;U&amp;amp;gt;(),
  getOrElse: (defaultValue: T) =&amp;amp;gt; defaultValue,
});

// Either type
type Either&amp;amp;lt;L, R&amp;amp;gt; = {
  map&amp;amp;lt;U&amp;amp;gt;(fn: (value: R) =&amp;amp;gt; U): Either&amp;amp;lt;L, U&amp;amp;gt;;
  flatMap&amp;amp;lt;U&amp;amp;gt;(fn: (value: R) =&amp;amp;gt; Either&amp;amp;lt;L, U&amp;amp;gt;): Either&amp;amp;lt;L, U&amp;amp;gt;;
  getOrElse(defaultValue: R): R;
  isLeft: boolean;
  isRight: boolean;
};

const left = &amp;amp;lt;L, R&amp;amp;gt;(value: L): Either&amp;amp;lt;L, R&amp;amp;gt; =&amp;amp;gt; ({
  map: &amp;amp;lt;U&amp;amp;gt;(_: (value: R) =&amp;amp;gt; U) =&amp;amp;gt; left&amp;amp;lt;L, U&amp;amp;gt;(value),
  flatMap: &amp;amp;lt;U&amp;amp;gt;(_: (value: R) =&amp;amp;gt; Either&amp;amp;lt;L, U&amp;amp;gt;) =&amp;amp;gt; left&amp;amp;lt;L, U&amp;amp;gt;(value),
  getOrElse: (defaultValue: R) =&amp;amp;gt; defaultValue,
  isLeft: true,
  isRight: false,
});

const right = &amp;amp;lt;L, R&amp;amp;gt;(value: R): Either&amp;amp;lt;L, R&amp;amp;gt; =&amp;amp;gt; ({
  map: &amp;amp;lt;U&amp;amp;gt;(fn: (value: R) =&amp;amp;gt; U) =&amp;amp;gt; right&amp;amp;lt;L, U&amp;amp;gt;(fn(value)),
  flatMap: &amp;amp;lt;U&amp;amp;gt;(fn: (value: R) =&amp;amp;gt; Either&amp;amp;lt;L, U&amp;amp;gt;) =&amp;amp;gt; fn(value),
  getOrElse: (_: R) =&amp;amp;gt; value,
  isLeft: false,
  isRight: true,
});

// Triple class
class Triple&amp;amp;lt;T&amp;amp;gt; {
  constructor(public a: T, public b: T, public c: T) {}

  map&amp;amp;lt;U&amp;amp;gt;(fn: (value: T) =&amp;amp;gt; U): Triple&amp;amp;lt;U&amp;amp;gt; {
    return new Triple&amp;amp;lt;U&amp;amp;gt;(fn(this.a), fn(this.b), fn(this.c));
  }

  static of&amp;amp;lt;T&amp;amp;gt;(a: T, b: T, c: T): Triple&amp;amp;lt;T&amp;amp;gt; {
    return new Triple&amp;amp;lt;T&amp;amp;gt;(a, b, c);
  }

  // Example method using Maybe and Either
  divideBy(other: T): Either&amp;amp;lt;string, number&amp;amp;gt; {
    return just(this.b)
      .flatMap((numerator) =&amp;amp;gt;
        just(other)
          .flatMap((denominator) =&amp;amp;gt;
            denominator !== 0 ? right(numerator / denominator) : left(&amp;#39;Division by zero&amp;#39;)
          )
      )
      .getOrElse(left(&amp;#39;Invalid input&amp;#39;));
  }
}

// Example usage
const triple = Triple.of(1, 2, 3);
const result = triple.map((x) =&amp;amp;gt; x * 2);
console.log(result); // Triple { a: 2, b: 4, c: 6 }

const divisionResult = triple.divideBy(2);
console.log(divisionResult); // Either.Right { value: 1 }

const invalidDivisionResult = triple.divideBy(0);
console.log(invalidDivisionResult); // Either.Left { value: &amp;#39;Division by zero&amp;#39; }&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_python_pydantic_pymonad&amp;quot;&amp;gt;Python, pydantic, pymonad&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি Python প্রয়োগ তৈরি করতে ব্যবহার করে`pydantic`প্রকার যাচাইের জন্য এবং`pymonad`মোনাদের জন্য :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;.নির্ভরতা ইনস্টল করুন :&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;pip install pydantic pymonad&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-python&amp;quot; data-lang=&amp;quot;python&amp;quot;&amp;gt;from pymonad.either import Either, Left, Right
from pydantic import BaseModel, ValidationError, validator

# Définition de la classe Triple avec Pydantic
class Triple(BaseModel):
    a: int
    b: int
    c: int

    @validator(&amp;#39;b&amp;#39;)
    def validate_b(cls, b, values):
        if b == 0:
            raise ValueError(&amp;#39;Division by zero is not allowed&amp;#39;)
        return b

    # Méthode utilisant Either pour la gestion des erreurs
    def divide_by(self, other):
        def division(numerator, denominator):
            return Right(numerator / denominator)

        def handle_error(error):
            return Left(str(error))

        return Either(lambda: division(self.b, other)).or_else(handle_error)

# Exemple d&amp;#39;utilisation
try:
    triple = Triple(a=1, b=2, c=3)
    result = triple.divide_by(2)

    if result.is_right:
        print(f&amp;#39;Division result: {result.value}&amp;#39;)
    else:
        print(f&amp;#39;Error: {result.value}&amp;#39;)

except ValidationError as e:
    print(f&amp;#39;Validation Error: {e}&amp;#39;)
except Exception as e:
    print(f&amp;#39;An unexpected error occurred: {e}&amp;#39;)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এই উদাহরণে :&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;code&amp;gt;pydantic`ক্লাসকে সংজ্ঞায়িত করা`Triple`টাইপড ফিল্ড সহ - পদ্ধতি`divide_by`মোন্যাড ব্যবহার করে`Either&amp;lt;/code&amp;gt; de `pymonad`শূন্য দ্বারা ভাগের ফলে সম্ভাব্য ত্রুটিগুলি পরিচালনা করার জন্য কাস্টম যাচাই নিশ্চিত করতে যে মানের`b`শূন্যের সমান নয়। যদি এটি শূন্য হয়, তাহলে একটি ব্যতিক্রম উঠে ফেলা হয়, এবং`pymonad`এই ব্যতিক্রমটি ধরুন একটি ফলাফল ফেরত দিন`Left`ত্রুটি সচুিত করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Google Apps Script-er পরিচয়</title>
            <link >https://cheroliv.com//blog/2023/0068_introduction_google_apps_script_post.html</link>
            <pubDate>Fri, 22 Dec 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0068_introduction_google_apps_script_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিষয়বস্তুর_সূচি&amp;quot;&amp;gt;বিষয়বস্তুর সূচি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;পড়ার সময় : ৩০ মিন&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ভূমিকা&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Google Apps Script-এ মৌলিক কাঠামো&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#গুগল অ্যাপস স্ক্রিপ্টে প্রকার এবং ভেরিয়েবল&amp;quot;&amp;gt;[গুগল অ্যাপস স্ক্রিপ্টে প্রকার এবং ভেরিয়েবল]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#স্থিরা&amp;quot;&amp;gt;ভেরিয়েবল এবং অক্ষর Google Apps Scriptে&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#অপারেশন ও অপারেটর Google Apps Script&amp;quot;&amp;gt;[অপারেশন ও অপারেটর Google Apps Script]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#Var&amp;quot;&amp;gt;Let এবং Const Google Apps Script-এ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#Google Apps Script-এ নিয়ন্ত্রণ গঠন&amp;quot;&amp;gt;[Google Apps Script-এ নিয়ন্ত্রণ গঠন]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#Google Apps Script-এ লুপ&amp;quot;&amp;gt;[Google Apps Script-এ লুপ]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#Google Apps Scriptে অবজেক্ট&amp;quot;&amp;gt;[Google Apps Scriptে অবজেক্ট]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#ফাংশনগুলো Google Apps Script-এ&amp;quot;&amp;gt;[ফাংশনগুলো Google Apps Script-এ]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#প্যারামিটার ও স্কোপ Google Apps Script-এ&amp;quot;&amp;gt;[প্যারামিটার ও স্কোপ Google Apps Script-এ]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#গুগল অ্যাপস স্ক্রিপ্টে রেস্ট ও স্প্রেড অপারেটর&amp;quot;&amp;gt;[গুগল অ্যাপস স্ক্রিপ্টে রেস্ট ও স্প্রেড অপারেটর]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;গুগল অ্যাপস স্ক্রিপ্টে বিশ্লেষণের ম� dynami?allyে বরদ্দ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#কলেকশন এবং ঘোষণামূলক প্রোগ্রামিং Google Apps Script-এ&amp;quot;&amp;gt;[কলেকশন এবং ঘোষণামূলক প্রোগ্রামিং Google Apps Script-এ]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভূমিকা&amp;quot;&amp;gt;ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Google Apps Script (GAS) হল Google এর বিভিন্ন পরিষেবা, যেমন Google Sheets, Google Docs, এবং Google Forms এর সাথে যুক্ত স্ক্রিপ্ট ডেভেলপমেন্ট প্ল্যাটফর্ম। এটি কাজগুলি স্বয়ংক্রিয়করণ করার, কাস্টম ফিচার যোগ করার এবং Google পরিষেবাগুলি একীভূত করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই মেমোতে, আমরা বাস্তব উদাহরণের সাহায্যে Google Apps Scriptের মূল ধারণাগুলো অন্বেষণ করব। আমরা ভেরিয়েবল, লুপ, ফাংশন এবং অন্যান্য অনেক ধারণা নিয়ে আলোচনা করব, এবং তা GAS-এ নির্দিষ্ট संदर्भে অ্যাড্যাপ্ট করব।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মৌলিক_কাঠামো_google_apps_script_এ&amp;quot;&amp;gt;মৌলিক কাঠামো Google Apps Script-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;শুরু করার জন্য, আমরা একটি Google Apps স্ক্রিপ্টের মৌলিক কাঠামো পর্যালোচনা করি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Structure de base en Google Apps Script
 */
function exempleStructureGAS() {
    // Votre code ici
    Logger.log(&amp;quot;Hello, Google Apps Script!&amp;quot;);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_টাইপস_এবং_ভেরিয়েবল_গুগল_অ্যাপস_স্ক্রিপ্টে&amp;quot;&amp;gt;টাইপস এবং ভেরিয়েবল গুগল অ্যাপস স্ক্রিপ্টে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Google Apps Script প্রোগ্রামিং ভাষা হিসেবে JavaScript ব্যবহার করে। ডেটা টাইপ এবং ভেরিয়েবল JavaScript-এর মতো কাজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Types et Variables en Google Apps Script
 */
function exempleTypesVariablesGAS() {
    // Votre code ici
    var nombre = 42;
    var texte = &amp;quot;Bonjour, Google Apps Script!&amp;quot;;
    Logger.log(nombre);
    Logger.log(texte);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_অপারেশন_ও_অপারেটর&amp;quot;&amp;gt;Google Apps Script-এ অপারেশন ও অপারেটর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Google Apps Script-এ অপারেশন এবং অপারেটর JavaScript-এ যেমন একই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Opérations et Opérateurs en Google Apps Script
 */
function exempleOperationsGAS() {
    // Votre code ici
    var x = 10;
    var y = 5;
    var resultat = x + y;
    Logger.log(resultat);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_var_let_এবং_const_google_apps_script_এ&amp;quot;&amp;gt;Var, Let এবং Const Google Apps Script-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GAS-এ, ধারণাগুলো`var`, &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;, et `const`এইগুলো ভেরিয়েবল ঘোষণা করতে ব্যবহৃত হয়। তবে, তাদের পার্থক্য এবং প্রভাব বুঝা জরুরি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Var, Let et Const en Google Apps Script
 */
function exempleVarLetConstGAS() {
    // Votre code ici
    // Utilisation de var
    var x = 10;
    if (true) {
        var x = 20; // La variable x est modifiée globalement
    }
    Logger.log(x);

    // Utilisation de let
    let y = 30;
    if (true) {
        let y = 40; // La variable y est limitée au bloc if
    }
    Logger.log(y);

    // Utilisation de const
    const z = 50;
    // z = 60; // Impossible de réassigner une constante
    Logger.log(z);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_কন্ট্রোল_স্ট্রাকচার&amp;quot;&amp;gt;Google Apps Script-এ কন্ট্রোল স্ট্রাকচার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নিয়ন্ত্রণ কাঠামো যেমন`if`, &amp;lt;code&amp;gt;else&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt; et `for`এগুলো Google Apps Script-এ চালানোর প্রবাহ ব্যবস্থাপনা করতে ব্যবহার করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Structures de Contrôle en Google Apps Script
 */
function exempleStructuresControleGAS() {
    // Votre code ici
    var condition = true;

    if (condition) {
        Logger.log(&amp;quot;La condition est vraie.&amp;quot;);
    } else {
        Logger.log(&amp;quot;La condition est fausse.&amp;quot;);
    }

    var compteur = 0;
    while (compteur &amp;amp;lt; 5) {
        Logger.log(compteur);
        compteur++;
    }

    for (var i = 0; i &amp;amp;lt; 3; i++) {
        Logger.log(i);
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সেটিংস_এবং_scopes_google_apps_script_এ&amp;quot;&amp;gt;সেটিংস এবং scopes Google Apps Script-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্যারামিটার এবং স্কোপ একটি গুরুত্বপূর্ণ ভূমিকা পালন.koren GASe স্ক্রিপ্ট উন্নয়নে। বুঝুন কী&amp;amp;lt;/tool_call&amp;amp;gt; তারা কাজ.koren অপ্রত্যাশিত আচরণ বাঁচার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Paramètres et Scopes en Google Apps Script
 */
function exempleParametresScopesGAS(parametre) {
    // Votre code ici
    var variableGlobale = &amp;quot;Je suis global&amp;quot;;

    function afficherParametre() {
        Logger.log(parametre);
    }

    afficherParametre();
    Logger.log(variableGlobale);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধ্রুবক_চল_এবং_অক্ষর_google_apps_script_এ&amp;quot;&amp;gt;ধ্রুবক, চল, এবং অক্ষর Google Apps Script-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিহিত পার্থক্য বোঝা`const`, &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt;, et `let`Google Apps Script-এ বেরিয়েবলের কার্যকর ব্যবহার জন্য প্রয়োজনীয় আছে.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Constantes, Variables, et Lettres en Google Apps Script
 */
function exempleConstantesVariablesLettresGAS() {
    // Votre code ici
    const constante = &amp;quot;Je ne change pas&amp;quot;;
    Logger.log(constante);

    var variable = &amp;quot;Je peux changer&amp;quot;;
    Logger.log(variable);

    let lettre = &amp;quot;Je peux aussi changer, mais seulement dans mon bloc&amp;quot;;
    Logger.log(lettre);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_scriptে_লুপ&amp;quot;&amp;gt;Google Apps Scriptে লুপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;লুপ,&amp;lt;code&amp;gt;for&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;while&amp;lt;/code&amp;gt;, উপাদানগুলোতে পুনরাবৃত্তি করতে এবং পুনরাবৃত্তি কাজগুলো সম্পাদন করতে অপরিহার্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Boucles en Google Apps Script
 */
function exempleBouclesGAS() {
    // Votre code ici
    for (var i = 0; i &amp;amp;lt; 3; i++) {
        Logger.log(i);
    }

    var condition = true;
    var compteur = 0;

    while (condition) {
        Logger.log(&amp;quot;Tour de boucle&amp;quot;);
        compteur++;
        if (compteur === 3) {
            condition = false;
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_অবজেক্ট&amp;quot;&amp;gt;Google Apps Script-এ অবজেক্ট&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বস্তুগুলো ডেটা গঠনে ব্যবহৃত হয়। GAS‑এ, অনেকটি অন্তর্ভুক্ত বস্তু Google পরিষেবদের সাথে ইন্টারঅ্যাকশন সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Objets en Google Apps Script
 */
function exempleObjetsGAS() {
    // Votre code ici
    var feuille = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
    var cellule = feuille.getRange(&amp;quot;A1&amp;quot;);
    cellule.setValue(&amp;quot;Nouvelle valeur&amp;quot;);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ধ্রুবক_ভেরিয়েবল_এবং_অক্ষর_google_apps_scriptএ&amp;quot;&amp;gt;ধ্রুবক, ভেরিয়েবল, এবং অক্ষর Google Apps Script‑এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অন্তর বুঝা`const`, &amp;lt;code&amp;gt;var&amp;lt;/code&amp;gt;, et `let`Google Apps Script‑এ ভেরিয়েবলকে কার্যকরভাবে ব্যবহার করতে এটি অপরিহার্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Constantes, Variables, et Lettres en Google Apps Script
 */
function exempleConstantesVariablesLettresGAS() {
    // Votre code ici
    const constante = &amp;quot;Je ne change pas&amp;quot;;
    Logger.log(constante);

    var variable = &amp;quot;Je peux changer&amp;quot;;
    Logger.log(variable);

    let lettre = &amp;quot;Je peux aussi changer, mais seulement dans mon bloc&amp;quot;;
    Logger.log(lettre);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_ফাংশন&amp;quot;&amp;gt;Google Apps Script-এ ফাংশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশনগুলো প্রোগ্রামিংয়ের মৌলিক উপাদান। GAS-এ, সেগুলো ভিন্ন ভিন্ন পদ্ধতিতে ঘোষণা এবং কল করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Fonctions en Google Apps Script
 */
function exempleFonctionsGAS() {
    // Votre code ici
    function additionner(a, b) {
        return a + b;
    }

    var resultat = additionner(2, 3);
    Logger.log(resultat);

    // Fonction anonyme
    var multiplier = function (x, y) {
        return x * y;
    };

    Logger.log(multiplier(4, 5));
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_রেস্ট_এবং_স্প্রেড_অপারেটর&amp;quot;&amp;gt;Google Apps Script-এ রেস্ট এবং স্প্রেড অপারেটর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিশ্রামের অপারেটর (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) এবং প্রসারনের (&amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt;) arrays এবং objects কে সংক্ষেপে ব্যবহার করা উপযোগী।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Opérateurs de Repos et de Propagation en Google Apps Script
 */
function exempleOperateursReposPropagationGAS() {
    // Votre code ici
    // Opérateur de repos (...) pour les tableaux
    var nombres = [1, 2, 3, 4, 5];
    var [...copieNombres] = nombres;
    Logger.log(copieNombres);

    // Opérateur de propagation (...) pour les objets
    var objOriginal = { x: 1, y: 2 };
    var objClone = { ...objOriginal, z: 3 };
    Logger.log(objClone);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_বিশ্লেষণによる_বিন্যাস&amp;quot;&amp;gt;Google Apps Script-এ বিশ্লেষণによる বিন্যাস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিঘ্নিতকরণের মাধ্যমে অ্যাসাইনমেন্ট একটি শক্তিশালী বৈশিষ্ট্য যা অবজেক্ট এবং অ্যারে থেকে মান সংক্ষিপ্তভাবে বের করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Affectation par Décomposition en Google Apps Script
 */
function exempleAffectationDecompositionGAS() {
    // Votre code ici
    var coordonnees = [3, 4];
    var [x, y] = coordonnees;
    Logger.log(x);
    Logger.log(y);

    var utilisateur = { nom: &amp;quot;John&amp;quot;, age: 30 };
    var { nom, age } = utilisateur;
    Logger.log(nom);
    Logger.log(age);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_google_apps_script_এ_সংগ্রহ_ও_ঘোষণামূলক_প্রোগ্রামিং&amp;quot;&amp;gt;Google Apps Script-এ সংগ্রহ ও ঘোষণামূলক প্রোগ্রামিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Google Apps Script ডেটা গঠন kuten অ্যারে এবং ফাংশনাল প্রোগ্রামিং ধারণা ও ঘোষণা-ভিত্তিক ইটারেশন (&amp;amp;gt;&amp;amp;lt;impérative), যেমন`map`, &amp;lt;code&amp;gt;reduce&amp;lt;/code&amp;gt; et &amp;lt;code&amp;gt;forEach&amp;lt;/code&amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Collections et Programmation Déclarative en Google Apps Script
 */
function exempleCollectionsFonctionnelleGAS() {
    // Votre code ici
    // Exemple de tableau (collection)
    var nombres = [1, 2, 3, 4, 5];

    // Utilisation de forEach
    nombres.forEach(function (nombre) {
        Logger.log(nombre);
    });

    // Utilisation de map
    var carresNombres = nombres.map(function (nombre) {
        return nombre * nombre;
    });
    Logger.log(carresNombres);

    // Utilisation de reduce
    var somme = nombres.reduce(function (acc, nombre) {
        return acc + nombre;
    }, 0);
    Logger.log(somme);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_নিষ্কর্ষ&amp;quot;&amp;gt;নিষ্কর্ষ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই মেমোটি কনক্রেট কোড উদাহরণের মাধ্যমে Google Apps Scriptের মৌলিক ধারণাগুলি কভার করেছে। এই জ্ঞানটি আপনার দৈনন্দিন কাজকে অটোমেট করতে, আপনার ডকুমেন্টকে কাস্টমাইজ করতে এবং Google Apps Scriptের সম্পূর্ণ ফাংশনালিটি ব্যবহার করতে ব্যবহার করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Google Form স্ক্রিপ্ট এবং স্বয়ংক্রিয়করণে এক্সপ্রেস প্রশিক্ষণ</title>
            <link >https://cheroliv.com//blog/2023/0067_formation_express_sur_google_forms_script_post.html</link>
            <pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0067_formation_express_sur_google_forms_script_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সময়: ৩০ মিনিট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_লক্ষ্য&amp;quot;&amp;gt;লক্ষ্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Forms-এ Google Apps Scriptের মৌলিক বিষয়গুলো বুঝতে - স্ক্রিপ্ট এডিটরে প্রবেশ করা এবং ট্রিগারে একটি নির্দেশনা কার্যকর করার উপায় শিখুন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিলম্ব&amp;quot;&amp;gt;বিলম্ব&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Google Form Script-এর পরিচয়&amp;lt;/strong&amp;gt;(৫ মিনিট)&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Google Form স্ক্রিপ্টের দ্রুত ওভারভিউ - প্রধান কার্যকারিতাগুলো প্রদর্শন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;Google ফর্ম এবং সংযুক্ত স্ক্রিপ্ট তৈরি&amp;lt;/strong&amp;gt;(5 মিনিট)&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Google Forms ব্যবহার করে একটি সিম্পল ফর্ম তৈরি করা - সংযুক্ত স্ক্রিপ্ট সম্পাদকের পরিচয়&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;একটি নির্দেশনা চালু করুন&amp;lt;/strong&amp;gt;(১০ মিন)&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কনফিগারেশন ট্রিগারের \&amp;quot;on start\ - ট্রিগার কনফিগারেশন &amp;quot;on submit - একটি নির্দেশনা চালু করার জন্য একটি স্ক্রিপ্ট লিখুন - দ্রুত পরীক্ষা সঠিক কার্যকারিতা যাচাই করতে জার্নালে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;ফলাফলের বিশ্লেষণ এবং শ্রেষ্ঠ অনুশীলন&amp;lt;/strong&amp;gt;(10 মিনিট)&amp;lt;/p&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি নির্দেশনা চালানোর ফলাফলের যাচাই - স্ক্রিপ্টের উদাহরণ ও অটোমেশন কীভাবে সময় বাঁচাতে পারে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পূর্বশর্ত&amp;quot;&amp;gt;পূর্বশর্ত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি Google অ্যাকাউন্ট থাকা এবং Google Forms এবং Google Sheets-এ অ্যাক্সেস পাওয়া&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_উপকরণ&amp;quot;&amp;gt;উপকরণ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্রাউজার ও ইন্টারনেট সংযোগ সহ কম্পিউটার&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মন্তব্য&amp;quot;&amp;gt;মন্তব্য&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এক্সপ্রেস প্রশিক্ষণটি Google Form স্ক্রিপ্ট দিয়ে অটোমেশনে দ্রুত পরিচয় তৈরি করে। গভীর বোঝার জন্য, দীর্ঘ প্রশিক্ষণ প্রোগ্রামগুলো সুপারিশ করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_1_গুগল_ফর্ম_স্ক্রিপ্টের_ভূমিকা&amp;quot;&amp;gt;1 - গুগল ফর্ম স্ক্রিপ্টের ভূমিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অবধি: 5 মিন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_slide_1_দ্রুত_ওভারভিউ_google_form_script&amp;quot;&amp;gt;Slide 1: দ্রুত ওভারভিউ Google Form Script&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;Google Form Script হল Google Forms-এ ইন্টিগ্রেটেড একটি স্ক্রিপ্টিং প্ল্যাটফর্ম। এটি কাস্টমাইজড ফাংশনালিটি যোগ করতে এবং কাজগুলোকে স্বয়ংক্রিয় করতে অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_slide_2_প্রধান_বৈশিষ্ট্যগুলির_উপস্থাপনা&amp;quot;&amp;gt;Slide 2: প্রধান বৈশিষ্ট্যগুলির উপস্থাপনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;স্ক্রিপ্ট সম্পাদক : গুগল অ্যাপস স্ক্রিপ্ট স্ক্রিপ্ট লিখতে ব্যবহৃত অন্তর্নিহিত স্ক্রিপ্ট সম্পাদক। - ট্রিগার : যেমন ইভেন্ট &amp;quot;on submit&amp;quot; যা স্ক্রিপ্টের নিষ্পাদনকে সক্রিয় করে।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_স্লাইড_৩_গুগল_ফর্ম_স্ক্রিপ্ট_ব্যবহার_করার_সুবিধা&amp;quot;&amp;gt;স্লাইড ৩: গুগল ফর্ম স্ক্রিপ্ট ব্যবহার করার সুবিধা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ব্যক্তিগতকরণ : অনন্য বৈশিষ্ট্য সহ কাস্টম ফর্ম তৈরি করুন। - অটোমেশন : ফর্মের প্রতিক্রিয়া অনুযায়ী অ্যাকশনগুলো স্বয়ংক্রিয়করণ করুন। - একীকরণ : Google এর অন্যান্য পরিষেবাগুলোকে স্ক্রিপ্ট যুক্ত করুন যাতে আরও সমৃদ্ধ অভিজ্ঞতা পাওয়া যায়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রেজেন্টারকে_নোট&amp;quot;&amp;gt;প্রেজেন্টারকে নোট :&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই বৈশিষ্ট্যগুলি উল্লেখযোগ্য সম্ভাবনা প্রদান করে ফর্মগুলোকে কাস্টমাইজ এবং অটোমেট করার জন্য এই প্রশিক্ষণের পরবর্তী অংশটি স্ক্রিপ্ট এবং নির্দিষ্ট অটোমেশন সৃষ্টির বিষয়ে আরও বিস্তারিতভাবে ஆராயবে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://developers.google.com/apps-script/add-ons/editors/forms?hl=fr&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://developers.google.com/apps-script/add-ons/editors/forms?hl=fr&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://developers.google.com/apps-script/reference/forms?hl=fr&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://developers.google.com/apps-script/reference/forms?hl=fr&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://developers.google.com/apps-script/reference/forms/form-app?hl=fr&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://developers.google.com/apps-script/reference/forms/form-app?hl=fr&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_google_ফর্ম_এবং_যুক্ত_স্ক্রিপ্ট_তৈরি_5_মিনিট&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;একটি Google ফর্ম এবং যুক্ত স্ক্রিপ্ট তৈরি&amp;lt;/strong&amp;gt; (5 মিনিট)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>পাইথন মেমো</title>
            <link >https://cheroliv.com//blog/2023/0066_memo_python_post.html</link>
            <pubDate>Sun, 19 Nov 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0066_memo_python_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইথন_উইন্ডোজে_ইনস্টল_করুন&amp;quot;&amp;gt;পাইথন উইন্ডোজে ইনস্টল করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://ninite.com/pythonx3/&amp;quot;&amp;gt;পাইথন উইন্ডোজে&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://python-docs.readthedocs.io/en/latest/starting/install3/win.html&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://python-docs.readthedocs.io/en/latest/starting/install3/win.html&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://python-docs.readthedocs.io/en/latest/dev/virtualenvs.html#virtualenvironments-ref&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://python-docs.readthedocs.io/en/latest/dev/virtualenvs.html#virtualenvironments-ref&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_পাইথন_চালানো&amp;quot;&amp;gt;পাইথন চালানো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;উৎস :&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;cd mon_projet

python -m venv mon_venv

source mon_venv/bin/activate

# Sur windows
mon_venv\Scripts\activate

deactivate&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ইন্সটলের_প্রয়োজন&amp;quot;&amp;gt;ইন্সটলের প্রয়োজন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;pip install -r requirements.txt&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_প্রারম্ভ&amp;quot;&amp;gt;প্রারম্ভ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://python.doctor/page-apprendre-programmation-orientee-objet-poo-classes-python-cours-debutants&amp;quot;&amp;gt;python অব্জেক্ট-অভিমুখী প্রোগ্রামিং&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_gof_ডিজাইন_প্যাটার্নস_পাইথনে&amp;quot;&amp;gt;GoF ডিজাইন প্যাটার্নস পাইথনে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/whikwon/python-patterns/&amp;quot;&amp;gt;অবাস্তবায়ন ১&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/Sean-Bradley/Design-Patterns-In-Python&amp;quot;&amp;gt;বাস্তবায়ন 2&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://sbcode.net/python/&amp;quot;&amp;gt;সম্পূর্ণ বই&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;GoF ডিজাইন প্যাটার্নগুলো ২৩টি ডিজাইন প্যাটার্নের একটি সেট, যা &amp;quot;Design Patterns: Elements of Reusable Object-Oriented Software&amp;quot; বইতে বর্ণনা করা হয়েছে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;caption class=&amp;quot;title&amp;quot;&amp;gt;Table 1. এখানে GoF ডিজাইন প্যাটার্নের একটি তালিকা দেওয়া হয়েছে&amp;lt;/caption&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0833%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 2.0849%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিবরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;कारखाना पद्धতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ঠিক ক্লাস নির্দিষ্ট না করে, অবজেক্ট তৈরি করো&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অবস্ট্র্যাক্ট ফ্যাক্টরি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বাস্তব ক্লাসকে উল্লেখ না করে সংশ্লিষ্ট বা নির্ভরশীল অবজেক্টের পরিবার তৈরি করুন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;বিল্ডার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জটিল বস্তুর নির্মাণকে তার উপস্থাপনায় পৃথক করুন যাতে একই নির্মাণ প্রক্রিয়া ভিন্ন-ভিন্ন উপস্থাপনা তৈরি করতে পারে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রোটোটাইপ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বিদ্যমান প্রোটোটাইপ কপি করে নতুন বস্তু তৈরি করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;একক&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি ক্লাসের ইন্সট্যান্সিয়েশনকে একমাত্র বস্তুতে সীমাবদ্ধ করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অ্যাডাপ্টার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি ক্লাসের ইন্টারফেসকে অন্য একটি ইন্টারফেসে রূপান্তর করে যা ক্লায়েন্ট প্রত্যাশা করে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ব্রিজ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি abstractionsকে এর বাস্তবায়ন থেকে বিচ্ছিন্ন করুন যাতে উভয়টি স্বাধীনভাবে পরিবর্তিত হতে পারে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;কম্পোজিট&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অবজেক্ট গুলোকে গাছের গঠনে গঠন করে অংশ-বিশেষের হিরারকি উপস্থাপন করুন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ডেকোরেটর&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;গতিশীলভাবে একটি বস্তুকে অতিরিক্ত দায়িত্ব সংযুক্ত করুন।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রশস্ত&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি সাবসিস্টেমে ইন্টারফেসের একটি সেটকে একীভূত ইন্টারফেস প্রদান করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;হালকা ওজনের&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;হালকা বস্তু তৈরি ও ব্যবহারে খরচ কমায়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রক্সি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি অন্য বস্তুর জন্য একটি প্রতিস্থাপন বা স্থান ধরন প্রদান করে, যাতে তার অ্যাক্সেস নিয়ন্ত্রণ করা যায়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;দায়িত্বের শৃंखলা&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একাধিক অবজেক্টকে একটি অনুরোধ পরিচালনায় অনুমতি দেয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;আদেশ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি অনুরোধকে একটি অবজেক্টে এনক্যাপসুলেট করে, যা আপনাকে বিভিন্ন অনুরোধ, কিউ বা লগের সাথে ক্লায়েন্টকে প্যারামিটারাইজ করতে দেয় এবং অনুত্থাপনযোগ্য অপারেশন সমর্থন করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অনুবাদক&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি ভাষার ব্যাকরণের একটি উপস্থাপনা প্রদান কর এবং সেই উপস্থাপনাটি ব্যবহার করে সেই ভাষার বাক্যাগুলি ব্যাখ্যা কর।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ইটেরেটর&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি সংগঠিত অবজেক্টের উপাদানগুলোকে ক্রমানুসারে অনুসরণ করার উপায় প্রদান করে, কোনো অন্তর্নিহিত উপস্থাপন প্রকাশ না করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Mediator&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি অবজেক্ট জটিল নির্ভরতা কমাতে সাহায্য করে, কারণ এটি অবজেক্টগুলোকে শুধুমাত্র একটি মিডিয়েটর অবজেক্টের মাধ্যমে যোগাযোগ করতে বাধ্য করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্মৃতিচিহ্ন&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বস্তুকে এর পূর্বের অবস্থায় পুনঃস্থাপন করার ক্ষমতা প্রদান করে (এনক্যapsulation ভাঙা না করে).&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অवलোকক&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি এক‑এর‑বহু নির্ভরতা সংজ্ঞায়িত করে object‑গুলোকে, যাতে যখন কোনো object‑এর state পরিবর্তিত হয়, তাহলে তার সব নির্ভরতাকে স্বয়ংক্রিয়ভাবে বিজ্ঞপ্তি দেওয়া হয় এবং আপডেট করা হয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;স্টেট&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বস্তুকে তার আंतरিক অবস্থা পরিবর্তিত হওয়ার সময় তার আচরণ পরিবর্তিত করার অনুমতি দেয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;রণনীতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি অ্যালগরিদমের পরিবারকে সংজ্ঞায়িত করে, প্রতিটিকে ক্যাপসুল করে এবং একে অকে বিনিময়যোগ্য করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;টেমপ্লেট পদ্ধতি&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি পদ্ধতিতে একটি অ্যালগরিদমের কাঠামো নির্ধারণ করে, কিছু ধাপকে উপশ্রেণীগুলিতে委譲 করা হয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;দর্শক&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;এটি একটি অবজেক্টের স্ট্রাকচারে একটি নতুন অপারেশন নির্ধারণ করতে দেয়, সেই অবজেক্টদের শ্রেণি পরিবর্তন না করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাংশনাল_প্রোগ্রামিং&amp;quot;&amp;gt;ফাংশনাল প্রোগ্রামিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 16.6666%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 27.7777%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 55.5557%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লাইব্রেরি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;URL&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বর্ণনা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PyMonad&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/jasondelaat/pymonad&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/jasondelaat/pymonad&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PyMonad হল Python-এ মোনাডিক ডেটা স্ট্রাকচারের একটি বাস্তবায়ন যা Haskell এবং F# মতো প্রোগ্রামিং ভাষাগুলোর উপর ভিত্তি করে গঠিত এবং ফাংশনাল প্রোগ্রামিংয়ে সর্বাধিক ব্যবহৃত মোনাডের ধরনের জন্য বাস্তবায়ন অন্তর্ভুক্ত করে।https://www.miguelfarrajota.com/2021/06/monads-in-python-with-pymonad/[আর্টিকেল]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PyFunctional&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/EntilZha/PyFunctional/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/EntilZha/PyFunctional/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;PyFunctional একটি Python লাইব্রেরি যা ফাংশনাল প্রোগ্রামিংয়ের জন্য সরবরাহ করে এবং শুধুমাত্র ফাংশন ও ইটারেবলের সাথে কাজ করার জন্য সরঞ্জাম প্রদান করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Toolz&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://toolz.readthedocs.io/en/latest/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://toolz.readthedocs.io/en/latest/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Toolz একটি পাইথন লাইব্রেরি যা ফাংশনাল প্রোগ্রামিংয়ের জন্য ডিজাইন করা হয়েছে এবং শुद्ध ফাংশন এবং Iterable নিয়ে কাজ করার জন্য সরঞ্জাম প্রদান করে।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Fn.py&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/kachayev/fn.py&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/kachayev/fn.py&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Fn.py` একটি পাইথন লাইব্রেরি ফাংশনাল প্রোগ্রামিংয়ের জন্য যা শুদ্ধ ফাংশন ও iterable নিয়ে কাজ করার জন্য সরঞ্জাম দেয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নারিকেল&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://coconut-lang.org/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://coconut-lang.org/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Coconut Python-কে ফাংশনাল প্রোগ্রামিংয়ের জন্য কয়েকটি বৈশিষ্ট্য যোগ করে, যার মধ্যে প্যাটার্ন ম্যাচিংও অন্তর্ভুক্ত।https://stackoverflow.com/questions/11909681/are-there-pattern-matching-functions-in-python-like-this[বাতচিত sof]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রতিকূল_ফল&amp;quot;&amp;gt;প্রতিকূল ফল&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_লুপ&amp;quot;&amp;gt;লুপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-python&amp;quot; data-lang=&amp;quot;python&amp;quot;&amp;gt;# impérative way
result = []
for i in inputs:
    x = f(g(i))
    result.append(x)

# idiomatic way
result = map(comp(f,g), inputs)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>ওয়েব ডেভ</title>
            <link >https://cheroliv.com//blog/2023/0065_training_web_dev_post.html</link>
            <pubDate>Thu, 24 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0065_training_web_dev_post.html</guid>
            <description></description>
        </item><item>
            <title>ট্রেডিং কার্ড গেম (TCGs)</title>
            <link >https://cheroliv.com//blog/2023/0064_training_trading_card_games_post.html</link>
            <pubDate>Mon, 21 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0064_training_trading_card_games_post.html</guid>
            <description></description>
        </item><item>
            <title>মেমো টাইপস্ক্রিপ্ট</title>
            <link >https://cheroliv.com//blog/2023/0063_memo_ts_post.html</link>
            <pubDate>Sat, 19 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0063_memo_ts_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;গিটহ্যাব রেপোজিটরি:https://github.com/cheroliv/ts-codebase[ts-codebase, window=&amp;quot;_blank]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#ts_types&amp;quot;&amp;gt;টাইপসক্রিপ্টে টাইপগুলো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#ফাংশন&amp;quot;&amp;gt;ফাংশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#data_struct&amp;quot;&amp;gt;ডেটা কাঠামো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;enums_tuples&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#void_never&amp;quot;&amp;gt;শূন্য এবং কখনও না&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#class_interface&amp;quot;&amp;gt;ক্লাস ও ইন্টারফেস&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#tsconfig&amp;quot;&amp;gt;টসকনফিগ.জেসন ফাইল&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#মডিউল&amp;quot;&amp;gt;[মডিউল]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#প্রতিজ্ঞা&amp;quot;&amp;gt;[প্রতিজ্ঞা]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#async-await&amp;quot;&amp;gt;async/await&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#জেনেরিকস&amp;quot;&amp;gt;[জেনেরিকস]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;index.html&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Document&amp;amp;lt;/title&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
    Intro typescript
    &amp;amp;lt;script src=&amp;quot;01_types.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;02_data_structure.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;03_enums_tuples.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;ts_types&amp;quot;&amp;gt;টাইপসক্রিপ্টে টাইপগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;01_প্রকার.ts&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;/**
 * Les types en typescript
 */

//quand le type n&amp;#39;est pas defini des le debut,
// alors il est réassignable
// c&amp;#39;est le type Any qui est attribué par défaut
let my_var;
my_var = &amp;quot;username&amp;quot;;
console.assert(my_var === &amp;quot;username&amp;quot;);
my_var = 11;
console.assert(my_var === 11);
my_var = true;
console.assert(my_var === true);

let age = 1;
console.assert(age === 1);
age = 2;
// age=&amp;quot;trois&amp;quot; c&amp;#39;est impossible
// car l&amp;#39;inference de type a attribué le type number
console.assert(age === 2);

// Déclaration explicite de type
let pi: Number = 3.14;
console.assert(typeof pi === &amp;quot;number&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;ফাংশন&amp;quot;&amp;gt;ফাংশন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশনগুলি পুন: ব্যবহারযোগ্য কোড ব্লক।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণের রেটিং :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;const add = (a: number, b: number): number =&amp;amp;gt; a + b;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;data_struct&amp;quot;&amp;gt;ডেটা কাঠামো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;02_ডেটা_কাঠামো.ts&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;/***
 * Structure de données:
 * Avec le type any on peut changer
 * le type de la variable à tout instruction
 * Lorsque l&amp;#39;on fixe le type
 * alors il n&amp;#39;est plus possible de le changer
 * lors d&amp;#39;une assignation
 */

// Arrays
let buddies: any[] = [
    &amp;quot;cheroliv&amp;quot;,
    &amp;quot;imrandeh&amp;quot;,
    &amp;quot;issoudeh&amp;quot;,
    &amp;quot;soumi92&amp;quot;
]

console.assert(buddies[0] === &amp;quot;cheroliv&amp;quot;);
console.assert(buddies[1] === &amp;quot;imrandeh&amp;quot;);
console.assert(buddies[2] === &amp;quot;issoudeh&amp;quot;);
console.assert(buddies[3] === &amp;quot;soumi92&amp;quot;);
// Déclaré en type any, l&amp;#39;inference de type
// a bien réaligné en type string
console.assert(typeof buddies[0] === &amp;quot;string&amp;quot;);
console.assert(typeof buddies[1] === &amp;quot;string&amp;quot;);
console.assert(typeof buddies[2] === &amp;quot;string&amp;quot;);
console.assert(typeof buddies[3] === &amp;quot;string&amp;quot;);



let writers: (String | String | String | Number)[][] = [
    [&amp;quot;Chrétien&amp;quot;, &amp;quot;de Troyes&amp;quot;, &amp;quot;fr&amp;quot;, 12],
    [&amp;quot;François&amp;quot;, &amp;quot;Rabelais&amp;quot;, &amp;quot;fr&amp;quot;, 16],
    [&amp;quot;René&amp;quot;, &amp;quot;Descartes&amp;quot;, &amp;quot;fr&amp;quot;, 17],
    [&amp;quot;Jean-Jacques&amp;quot;, &amp;quot;Rousseau&amp;quot;, &amp;quot;fr&amp;quot;, 18],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Hegel&amp;quot;, &amp;quot;de&amp;quot;, 19],
    [&amp;quot;Karl&amp;quot;, &amp;quot;Marx&amp;quot;, &amp;quot;de&amp;quot;, 19],
    [&amp;quot;Friedrich&amp;quot;, &amp;quot;Engels&amp;quot;, &amp;quot;de&amp;quot;, 19],
    [&amp;quot;Victor&amp;quot;, &amp;quot;Hugo&amp;quot;, &amp;quot;fr&amp;quot;, 19],
    [&amp;quot;Paul&amp;quot;, &amp;quot;Verlaine&amp;quot;, &amp;quot;fr&amp;quot;, 19],
    [&amp;quot;Arthur&amp;quot;, &amp;quot;Rimbaud&amp;quot;, &amp;quot;fr&amp;quot;, 19],
    [&amp;quot;Gérard&amp;quot;, &amp;quot;de Nerval&amp;quot;, &amp;quot;fr&amp;quot;, 19],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Lukacs&amp;quot;, &amp;quot;hu&amp;quot;, 20],
    [&amp;quot;Franz&amp;quot;, &amp;quot;Kafka&amp;quot;, &amp;quot;hu&amp;quot;, 20],
    [&amp;quot;Antonio&amp;quot;, &amp;quot;Gramsci&amp;quot;, &amp;quot;it&amp;quot;, 20],
    [&amp;quot;Domenico&amp;quot;,&amp;quot;Losurdo&amp;quot;,&amp;quot;it&amp;quot;,20],
];

// console.table(writers);


// Objects
let author: {
    first_name: String,
    last_name: String,
    lang: String,
    century: Number
} = {
    // slice(-1) renvoie le dernier élèment
    first_name: writers.slice(-1)[0][0] as String,
    last_name: writers.slice(-1)[0][1] as String,
    lang: writers.slice(-1)[0][2] as String,
    century: writers.slice(-1)[0][3] as Number,
}


// assertion sur la valeur en accés par encapsulation(dot)
console.assert(author.first_name === &amp;quot;Antonio&amp;quot;)
console.assert(author.last_name === &amp;quot;Gramsci&amp;quot;)
console.assert(author.lang === &amp;quot;it&amp;quot;)
console.assert(author.century === 20);

// assertion sur le type en accès par index
console.assert(typeof author[&amp;quot;first_name&amp;quot;] === &amp;quot;string&amp;quot;)
console.assert(typeof author[&amp;quot;last_name&amp;quot;] === &amp;quot;string&amp;quot;)
console.assert(typeof author[&amp;quot;lang&amp;quot;] === &amp;quot;string&amp;quot;)
console.assert(typeof author[&amp;quot;century&amp;quot;] === &amp;quot;number&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;enums_tuples&amp;quot;&amp;gt;এনামস এবং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;03_enums_tuples.ts&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;/**
 * Enums et Tuples
 *
 * Enum: il existe les enums numérique
 * et les enums chaine de caracteres.
 *
 * Tuple: similaire aux arrays mais ne peut
 * contenir qu&amp;#39;une valeur de type spécifié.
 *
 */

//Enum numérique
// l&amp;#39;index par de debut défaut est 0
// ici on le place a 1
enum Week {
    Monday = 1,
    Tuesday = 2,
    Wednesday = 3,
    Thursday = 4,
    Friday = 5,
    Saturday = 6,
    Sunday = 7,
};

console.assert(Week.Monday == 1);
console.assert(Week.Tuesday == 2);
console.assert(Week.Wednesday == 3);
console.assert(Week.Thursday == 4);
console.assert(Week.Friday == 5);
console.assert(Week.Saturday == 6);
console.assert(Week.Sunday == 7);

console.assert(Week[1] === &amp;quot;Monday&amp;quot;);
console.assert(Week[2] === &amp;quot;Tuesday&amp;quot;);
console.assert(Week[3] === &amp;quot;Wednesday&amp;quot;);
console.assert(Week[4] === &amp;quot;Thursday&amp;quot;);
console.assert(Week[5] === &amp;quot;Friday&amp;quot;);
console.assert(Week[6] === &amp;quot;Saturday&amp;quot;);
console.assert(Week[7] === &amp;quot;Sunday&amp;quot;);

let motd_arr_fr: String[] = [
    &amp;quot;Associé à la Lune&amp;quot;,
    &amp;quot;Du dieu Tiw, associé à Mars&amp;quot;,
    &amp;quot;Du dieu germanique Odin&amp;quot;,
    &amp;quot;Du dieu germanique du tonnerre Thor&amp;quot;,
    &amp;quot;De la déesse germanique Frigga associée à Vénus&amp;quot;,
    &amp;quot;Associé à Saturne&amp;quot;,
    &amp;quot;Associé au Soleil&amp;quot;,
];

let motd_arr_en: String[] = [
    &amp;quot;associated with the Moon&amp;quot;,
    &amp;quot;from the god Tiw, associated with Mars&amp;quot;,
    &amp;quot;from Germanic god Odin&amp;quot;,
    &amp;quot;from Germanic god of thunder Thor&amp;quot;,
    &amp;quot;from Germanic goddess Frigga associated with Venus&amp;quot;,
    &amp;quot;associated with Saturn&amp;quot;,
    &amp;quot;associated with the Sun&amp;quot;,
];

// Un tuple (triple)
let monday_triple_fr: [
    Number,
    String,
    String
] = [
        Week.Monday,
        Week[Week.Monday],
        motd_arr_fr[0],
    ];


console.assert(monday_triple_fr[0] === 1);
console.assert(monday_triple_fr[1] === &amp;quot;Monday&amp;quot;);
console.assert(monday_triple_fr[2] === &amp;quot;Associé à la Lune&amp;quot;);


let monday_triple_en: [
    Number,
    String,
    String
] = [
        Week.Monday,
        Week[Week.Monday],
        motd_arr_en[0],
    ];

console.assert(monday_triple_en[0] === 1);
console.assert(monday_triple_en[1] === &amp;quot;Monday&amp;quot;);
console.assert(monday_triple_en[2] === &amp;quot;associated with the Moon&amp;quot;);


// On se fait un type pour ajouter le nom de la langue
type Meaning_of_the_day = {
    lang: String,
    meaning: (Week | String)[][],
};

//fonction d&amp;#39;affichage du type Meaning_of_the_day
const display_motd = (motd: Meaning_of_the_day) =&amp;amp;gt; {
    motd.meaning.forEach(day =&amp;amp;gt;
        console.table(`${Week[day[0] as Week]}: ${day[1]}.(${motd.lang})`)
    )
};

//fonction d&amp;#39;assertion sur le type Meaning_of_the_day
// afin de verifier la concordance du contenu avec
// motd_arr_#lang#
const test_motd = (
    motd: Meaning_of_the_day,
    motd_arr: String[]
) =&amp;amp;gt; {
    console.assert(motd.lang.length === 2)
    for (const [i, value] of motd.meaning.entries()) {
        console.assert(value[1] === motd_arr[i]);
    }
};


let motd_fr: Meaning_of_the_day = {
    lang: &amp;quot;fr&amp;quot;,
    meaning: [
        [Week.Monday, motd_arr_fr[0]],
        [Week.Tuesday, motd_arr_fr[1]],
        [Week.Wednesday, motd_arr_fr[2]],
        [Week.Thursday, motd_arr_fr[3]],
        [Week.Friday, motd_arr_fr[4]],
        [Week.Saturday, motd_arr_fr[5]],
        [Week.Sunday, motd_arr_fr[6]],
    ],
}

console.log(&amp;quot;---------&amp;quot;);
console.log(&amp;quot;display_motd(motd_fr):&amp;quot;);
display_motd(motd_fr);
test_motd(motd_fr, motd_arr_fr)


let motd_en: Meaning_of_the_day = {
    lang: &amp;quot;en&amp;quot;,
    meaning: [
        [Week.Monday, motd_arr_en[0]],
        [Week.Tuesday, motd_arr_en[1]],
        [Week.Wednesday, motd_arr_en[2]],
        [Week.Thursday, motd_arr_en[3]],
        [Week.Friday, motd_arr_en[4]],
        [Week.Saturday, motd_arr_en[5]],
        [Week.Sunday, motd_arr_en[6]],
    ],
}

console.log(&amp;quot;---------&amp;quot;);
console.log(&amp;quot;display_motd(motd_en):&amp;quot;);
display_motd(motd_en);
console.log(&amp;quot;---------&amp;quot;);
test_motd(motd_en, motd_arr_en);

// Un tuple (triple) utilisant le type
// Meaning_of_the_day pour peupler le meaning
let motd_triple: [
    Number,
    String,
    String
] = [
        Week.Monday,
        Week[Week.Monday],
        motd_fr.meaning[0][1] as String
    ];

console.assert(motd_triple[0] === 1);
console.assert(motd_triple[1] === &amp;quot;Monday&amp;quot;);
console.assert(motd_triple[2] === &amp;quot;Associé à la Lune&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;void_never&amp;quot;&amp;gt;শূন্য এবং কখনও না&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;04_void_never_types.ts&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;// Le type void est l&amp;#39;opposé du type any
// c&amp;#39;est l&amp;#39;absence de type.
function verify_writers_length(): void {
    console.assert(writers.length &amp;amp;gt; 0);
}

verify_writers_length();

const verify_writers_length_arrow = (): void =&amp;amp;gt;
    console.assert(writers.length &amp;amp;gt; 0);

verify_writers_length_arrow();

//Type of et never
let value = 30;
console.assert(typeof value === &amp;quot;number&amp;quot;);

//never: qqchs qui n&amp;#39;arrive jamais
function foo(x: String | Number): Boolean {
    if (typeof x === &amp;quot;string&amp;quot;) {
        return true;
    } else if (typeof x === &amp;quot;number&amp;quot;) {
        return false;
    }
    return fail(&amp;quot;Error!&amp;quot;)
}

function fail(message: String): never {
    throw new Error(message as string);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;class_interface&amp;quot;&amp;gt;ক্লাস ও ইন্টারফেস&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;04_void_never_types.ts&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;/**
 * Les classes:
 * members,
 * visibility,
 * nommage,
 * accesseurs
 * scope identifier: static,private,protected
 *
 * convention de nommage :
 * Les membres private sont préfixés avec un _ *
 */

class Member {
    username: String = &amp;quot;&amp;quot;;
    email: String = &amp;quot;&amp;quot;;
    private _password: String = &amp;quot;&amp;quot;;
    readonly signup_date: Date = new Date(Date.now());

    constructor(username: String, email: String) {
        this.username = username;
        this.email = email;
    }

    get password(): String {
        return this._password;
    }

    set password(new_password: String) {
        this._password = new_password;
    }

    /**
     * Une fonction static qui initilise un member,
     * à partir d&amp;#39;un author
     */
    static fromAuthor(author: {
        first_name: String,
        last_name: String,
        lang: String,
        century: Number
    }): Member {
        return new Member(
            `${author.first_name}.${author.last_name}`,
            `${author.first_name}.${author.last_name}@acme.com`,
        );
    }
};


let domenico = Member.fromAuthor(author);
domenico.password = &amp;quot;test&amp;quot;;

console.assert(domenico.email === &amp;quot;Domenico.Losurdo@acme.com&amp;quot;);
console.assert(domenico.password === &amp;quot;test&amp;quot;);


// Héritage
enum Forms {
    Undefined = 0,
    Polygones = 1,
    Circle = 2,
    Straight = 3,
    Segment = 4,
};

class Form {
    type: Forms = Forms.Undefined;
};

class Rectangle extends Form {
    h: Number = 0;
    w: Number = 0;
};

class Square extends Rectangle {
    side: Number = 0;
};


/**
 * Interface donne un contrat à un type.
 * Les interfaces permettent de définir la structure d&amp;#39;un objet.
 */

interface IPerson {
    username: String;
    email: String;
    readonly signup_date: Date;
}

const user1: IPerson = {
    username: Member.fromAuthor(author)[&amp;quot;username&amp;quot;],
    email: Member.fromAuthor(author)[&amp;quot;email&amp;quot;],
    signup_date: Member.fromAuthor(author)[&amp;quot;signup_date&amp;quot;],
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;tsconfig&amp;quot;&amp;gt;টসকনফিগ.জেসন ফাইল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;tsconfig.json&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-json&amp;quot; data-lang=&amp;quot;json&amp;quot;&amp;gt;{
  /* Visit https://aka.ms/tsconfig to read more about this file */
  &amp;quot;compileOnSave&amp;quot;: true,

  &amp;quot;compilerOptions&amp;quot;: {
    &amp;quot;target&amp;quot;: &amp;quot;es2016&amp;quot;,
    &amp;quot;module&amp;quot;: &amp;quot;CommonJS&amp;quot;,
    &amp;quot;noEmitOnError&amp;quot;: true,
    &amp;quot;strict&amp;quot;: true,
    &amp;quot;noImplicitAny&amp;quot;: true,
    &amp;quot;esModuleInterop&amp;quot;: true
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;modules&amp;quot;&amp;gt;মডিউল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মডিউলগুলো কোডকে একাধিক ফাইলে সংগঠিত করতে দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ দরজা :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;// Dans un fichier math.ts
export const add = (a: number, b: number): number =&amp;amp;gt; a + b;

// Dans un autre fichier
import { add } from &amp;#39;./math&amp;#39;;
let result = add(2, 3);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;promesses&amp;quot;&amp;gt;প্রতিজ্ঞা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রমিসগুলি অ্যাসিঙ্ক্রোনাস অপারেশন চালানোর জন্য ব্যবহৃত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রেটিংয়ের উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;const promise = new Promise&amp;amp;lt;string&amp;amp;gt;((resolve) =&amp;amp;gt; {
    // Code asynchrone ici
    resolve(&amp;quot;Succès&amp;quot;);
});

promise.then((result) =&amp;amp;gt; {
    console.log(result);
});&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;async-await&amp;quot;&amp;gt;async/await&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;async/await প্রতিজ্ঞার পরিচালনাকে সহজ করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;দরের উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;const fetchData = async (): Promise&amp;amp;lt;void&amp;amp;gt; =&amp;amp;gt; {
    const result = await someAsyncFunction();
    console.log(result);
};&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_ts&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;টাইপسكريপ্ট পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;জেনেরিক&amp;quot;&amp;gt;জেনেরিক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;জেনেরিক্স গতিশীল টাইপের সাথে পুনর্ব্যবহারযোগ্য উপাদান তৈরি করার অনুমতি দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণের কোট :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-typescript&amp;quot; data-lang=&amp;quot;typescript&amp;quot;&amp;gt;const identity = &amp;amp;lt;T&amp;amp;gt;(arg: T): T =&amp;amp;gt; arg;

const output = identity&amp;amp;lt;string&amp;amp;gt;(&amp;quot;hello&amp;quot;);
console.log(output);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>মেমো CSS</title>
            <link >https://cheroliv.com//blog/2023/0062_memo_css_post.html</link>
            <pubDate>Mon, 14 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0062_memo_css_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;toc&amp;quot;&amp;gt;বিষয়সূচি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#good_links&amp;quot;&amp;gt;ভালো লিঙ্ক&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#repo&amp;quot;&amp;gt;রেজিপজিটরি এবং কোড নমুনা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;good_links&amp;quot;&amp;gt;ভালো লিঙ্ক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি একজন পেশাদার অনুবাদক। fr থেকে bn এ অনুবাদ করুন। &amp;lt;code&amp;gt;&amp;amp;#8230;&amp;amp;#8203;&amp;lt;/code&amp;gt; ব্যাকটিক spanগুলোকে exactly as-is — সামগ্রী, অন্তরাল, অথবা স্থান পরিবর্তন করবেন না। এই পাঠ্যটি একটি বড় বাক্যের অংশ হতে পারে — অংশটি অতিরিক্ত প্রসঙ্গ চাহিশে না অনুবাদ করুন। শুধুমাত্র অনুবাদিত পাঠ্য আউটপুট করুন — কোনো ব্যাখ্যা, কোনো মন্তব্য, কোনো ভূমিকা, কোনো বিকল্প নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;repo&amp;quot;&amp;gt;রেজিপজিটরি এবং কোড নমুনা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;github রেপোজিটরি:https://github.com/cheroliv/css-codebase[css-codebase, window = &amp;quot;_blank]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#প্রারম্ভ_ভূমিকা&amp;quot;&amp;gt;[প্রারম্ভ_ভূমিকা]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#শুরু_texts&amp;quot;&amp;gt;[শুরু_texts]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#début_background&amp;quot;&amp;gt;পটভূมิ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#début_boxes&amp;quot;&amp;gt;[début_boxes]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#শুরু_flexbox&amp;quot;&amp;gt;[শুরু_flexbox]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#শুরু_গ্রিড&amp;quot;&amp;gt;[শুরু_গ্রিড]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#শুরু_abs_pos&amp;quot;&amp;gt;[শুরু_abs_pos]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#শুরু_responsive&amp;quot;&amp;gt;[শুরু_responsive]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শুরু_নিষ্পত্তি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়সূচি&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_intro&amp;quot;&amp;gt;পরিচয় &amp;amp;amp; সেটআপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই ভিডিয়োর ভিত্তিতে পরিচয়:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;videoblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;iframe src=&amp;quot;https://www.youtube.com/embed/iSWjmVcfQGg?rel=0&amp;quot; frameborder=&amp;quot;0&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;github রিপোজিটরি:https://github.com/cheroliv/css-codebase/début_css/[CSS শুরু, window = &amp;quot;_blank]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;নোট উৎস:&amp;lt;br&amp;gt;
index.html&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;
  &amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;/head&amp;amp;gt;
  &amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
      &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
      &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;ul&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;/ul&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;

      &amp;amp;lt;div class=&amp;quot;grid&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2&amp;amp;gt;Grid&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;grid-container&amp;quot;&amp;amp;gt;
          &amp;amp;lt;img src=&amp;quot;./assets/img/css-logo.png&amp;quot; alt=&amp;quot;logo css&amp;quot; /&amp;amp;gt;

          &amp;amp;lt;form action=&amp;quot;&amp;quot;&amp;amp;gt;
            &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;firstname&amp;quot; placeholder=&amp;quot;Prénom&amp;quot; /&amp;amp;gt;
            &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;surname&amp;quot; placeholder=&amp;quot;Nom&amp;quot; /&amp;amp;gt;
            &amp;amp;lt;textarea
              cols=&amp;quot;30&amp;quot;
              rows=&amp;quot;10&amp;quot;
              placeholder=&amp;quot;Ici votre message&amp;quot;
            &amp;amp;gt;&amp;amp;lt;/textarea&amp;amp;gt;
            &amp;amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Valider&amp;quot; id=&amp;quot;btn-submit&amp;quot; /&amp;amp;gt;
          &amp;amp;lt;/form&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;

      &amp;amp;lt;div class=&amp;quot;absolute&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2&amp;amp;gt;Absolute&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;span id=&amp;quot;circle1&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
        &amp;amp;lt;span id=&amp;quot;circle2&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
  &amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;style.css ফাইলকে HTML পৃষ্ঠায় সংযুক্ত করুন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;/head&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_texts&amp;quot;&amp;gt;পাঠ্যগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;/* import remote de font sur l&amp;#39;ensemble de la feuille*/
@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

/* import local de font */
@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

/*
body est le parent de toutes les balises,
qu&amp;#39;il contient, donc je le déclare avant,
pour la logique de précédence de parent
*/
body {
  /* si DMSerif n&amp;#39;est pas trouvé alors il se rabat sur Verdana*/
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
}

/* va styliser toutes les balises h1,
celles de body sont surchargés,
par la déclaration présente */
h1 {
  text-transform: uppercase;
  /* espacement entre les lettres en pixel*/
  letter-spacing: 3px;
  /* alignement du texte*/
  text-align: center;
  /* Les tailles de polices doivent être en REM  (rem = root em).
  Le REM se base pas sur l&amp;#39;élément parent pour obtenir sa taille mais sur l&amp;#39;élément racine. Ainsi 1rem prendra sa valeur de la font-size de votre document (body ou html).*/
  font-size: 2.5rem;
  /* ombrage du texte */
  text-shadow:
  3px /* offset-x */
  3px /* offset-y */
  8px /* blur-radius */
  #00000042/* color */;
  /* couleur du texte */
  color: #ab0ef4;
  /*attibuer les polices(font): liste, ordonnée par priorité, de polices à utiliser pour mettre en forme le texte de l&amp;#39;élément ciblé.*/
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  /* surligner le text*/
  text-decoration: underline;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_début&amp;quot;&amp;gt;[toc_début]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_background&amp;quot;&amp;gt;পটভূมิ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  /* image comme background*/
  background: url(./assets/img/bg.jpg) center/cover;
  /* 100VH = 100% de la taille de l&amp;#39;écran (viewport height)
  min afin de ne pas bloquer la possibilité d&amp;#39;avoir un plus grand */
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;শুরু_বক্স&amp;quot;&amp;gt;বক্সগুলো (boxes)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

/* *: létoile donne du style a tous les éléments.
Ensuite remettre un à un les parametres par defaut afin d&amp;#39;eviter les stylisation inattendu.*/
* {
  /* surcharge de base tous les elements à padding 0*/
  margin: 0;
  /* surcharge de base tous les elements à padding 0*/
  padding: 0;
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  /* image comme background*/
  background: url(./assets/img/bg.jpg) center/cover;
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}

main {
  background: rgba(245, 245, 245, 0.9);
  min-height: 500px;
  /* quelque soit la taille de l&amp;#39;écran,
  la boite fait toujours 90% de la taille de la page,
  les 10% restant sont une marge à droite,
  pour avoir 5% de chaque coté on ajoute une margin, tel que [0, auto]*/
  width: 90%;
  /* haut bas prend 0, et  gauche droite prend auto(center cad meme de chaque cotés)*/
  margin: 0 auto;
  /* on ajoute des bords a notre boite*/
  border: 2px solid rgb(0, 140, 255);
  /* on arrondis les coins de la boite*/
  border-radius: 20px 20px 0 0;
  /* ombrage sur la boite*/
  box-shadow: 0px 0px 20px 4px #81cfc6;
  /* marge interrieure de la boite sur tous les cotés*/
  padding: 15px;
}

h2 {
  /* afin de recuprer le comportement par defaut qui a ete surchargé par l&amp;#39;operateur étoile*/
  margin: 0;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;
  &amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;/head&amp;amp;gt;
  &amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
      &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
      &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;ul&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;/ul&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
  &amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_début&amp;quot;&amp;gt;[toc_début]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_flexbox&amp;quot;&amp;gt;ফ্লেক্সবক্স&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  background: url(./assets/img/bg.jpg) center/cover;
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}

main {
  background: rgba(245, 245, 245, 0.9);
  min-height: 500px;
  width: 90%;
  margin: 0 auto;
  border: 2px solid rgb(0, 140, 255);
  border-radius: 20px 20px 0 0;
  box-shadow: 0px 0px 20px 4px #81cfc6;
  padding: 15px;
}

h2 {
  margin: 0;
}

/* le point permet d&amp;#39;acceder à la classe d&amp;#39;un composant*/
.flexbox {
  border: 2px solid skyblue;
  border-radius: 10px;
  padding: 10px;
  margin-top: 20px;
  min-height: 150px;
}

/* FLEXBOX */
/* Sert à répartir équitablement des éléments sur la page */
.flexbox ul {
  padding: 0;
  /* aligne les éléments enfants de ul(les li)*/
  display: flex;
  /* reparti convenablement(équitablement les li sur la page) */
  justify-content: space-around;
}
/* ce style concerne les li de la classe,
flexbox des balises qui y font referencent*/
.flexbox li {
  /* suprime les boules des éléments de la list li*/
  list-style: none;
  height: 160px;
  width: 160px;
  margin: 10px;
  background: turquoise;
  /* Centrer un unique élément verticalement et horizontalement */
  display: flex;
  justify-content: center;
  align-items: center;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;
  &amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;/head&amp;amp;gt;
  &amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
      &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
      &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
        &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
        &amp;amp;lt;ul&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
          &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;/ul&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
  &amp;amp;lt;/body&amp;amp;gt;
&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_début&amp;quot;&amp;gt;[toc_début]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;শুরু_grid&amp;quot;&amp;gt;Grid&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফ্লেক্সবক্সের চেয়ে কিছুটা জটিলভাবে উপাদানগুলো বিতরণ করতে, গ্রিড সিস্টেম সহ অন্যান্য উপায়ে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  background: url(./assets/img/bg.jpg) center/cover;
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}

main {
  background: rgba(245, 245, 245, 0.9);
  min-height: 500px;
  width: 90%;
  margin: 0 auto;
  border: 2px solid rgb(0, 140, 255);
  border-radius: 20px 20px 0 0;
  box-shadow: 0px 0px 20px 4px #81cfc6;
  padding: 15px;
}

h2 {
  margin: 0;
}

.flexbox,
.grid {
  border: 2px solid skyblue;
  border-radius: 10px;
  padding: 10px;
  margin-top: 20px;
  min-height: 150px;
}

.flexbox ul {
  padding: 0;
  display: flex;
  justify-content: space-around;
}

.flexbox li {
  list-style: none;
  height: 160px;
  width: 160px;
  margin: 10px;
  background: turquoise;
  display: flex;
  justify-content: center;
  align-items: center;
}

/* GRID */
.grid-container {
  display: grid;
  /* séparatuion de la grille en deux(à ses deux enfants),
  avec à gauche 30% pour l&amp;#39;image
  et à droite 70% pour le formulaire*/
  grid-template-columns: 30% 70%;
}

/* sizing de l&amp;#39;image css-logo
contenu dans la classe grid
qui est dans le parent grid-container*/
.grid img {
  /* l&amp;#39;image remplt 80% de part de grille*/
  width: 80%;
  margin: 20px auto;
  display: block;
}

form {
  display: grid;
  /* deux colonnes de chacune 1 fraction*/
  grid-template-columns: 1fr 1fr;
  /* trois rangés de chacune 1 fraction*/
    grid-template-rows: 1fr 1fr 1fr;
    /* structuration sous forme de template
    de notre repartition des composants
    enfants de la forme*/
  grid-template-areas:
    &amp;quot;i1 i2&amp;quot;/* i1: input1, i2:input2*/
    &amp;quot;ta ta&amp;quot;/*ta: text area */
    &amp;quot;vi bt&amp;quot;/*vi:, bt: bouton */;
}

/* on donne du style sur deux éléments
en meme temps en les listant
avant les parentheses*/
input,
textarea {
  margin: 5px;
  border: 1px solid darkblue;
  padding: 10px;
  font-size: 1.1rem;
  font-family: &amp;quot;DMSerif&amp;quot;;
  border-radius: 5px;
}

/* donner du style uniquement la textearea*/
textarea {
  /* renseigner le nommage pour le grid template area*/
  grid-area: ta;
  height: 40px;
  /* empeche le cassage du style de la page
  en empechant le resizing de la textarea
  du formulaire*/
  resize: none;
}
/* pour pointer un id d&amp;#39;élément html
on utilise la notation préfixe # */
#btn-submit {
  /* renseigner le nommage*/
  grid-area: bt;
  /* change le le symbole de curseur
  souris quand il survole sur le bouton*/
  cursor: pointer;
  background: cyan;
  transition: 0.2s;
}

/* au survole(hover) de la souris
le bouton change de comportement*/
#btn-submit:hover {
  background: darkblue;
  /* couleur de text du bouton devient blanc*/
  color: white;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
        &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;ul&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
            &amp;amp;lt;/ul&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;grid&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Grid&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;grid-container&amp;quot;&amp;amp;gt;
                &amp;amp;lt;img src=&amp;quot;./assets/img/css-logo.png&amp;quot; alt=&amp;quot;logo css&amp;quot; /&amp;amp;gt;

                &amp;amp;lt;form action=&amp;quot;&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;firstname&amp;quot; placeholder=&amp;quot;Prénom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;surname&amp;quot; placeholder=&amp;quot;Nom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;textarea cols=&amp;quot;30&amp;quot; rows=&amp;quot;10&amp;quot; placeholder=&amp;quot;Ici votre message&amp;quot;&amp;amp;gt;&amp;amp;lt;/textarea&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Valider&amp;quot; id=&amp;quot;btn-submit&amp;quot; /&amp;amp;gt;
                &amp;amp;lt;/form&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_abs_pos&amp;quot;&amp;gt;পজিশন absolute&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  background: url(./assets/img/bg.jpg) center/cover;
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}

main {
  background: rgba(245, 245, 245, 0.9);
  min-height: 500px;
  width: 90%;
  margin: 0 auto;
  border: 2px solid rgb(0, 140, 255);
  border-radius: 20px 20px 0 0;
  box-shadow: 0px 0px 20px 4px #81cfc6;
  padding: 15px;
}

h2 {
  margin: 0;
}

.flexbox,
.grid,
.absolute {
  border: 2px solid skyblue;
  border-radius: 10px;
  padding: 10px;
  margin-top: 20px;
  min-height: 150px;
}

.flexbox ul {
  padding: 0;
  display: flex;
  justify-content: space-around;
}

.flexbox li {
  list-style: none;
  height: 160px;
  width: 160px;
  margin: 10px;
  background: turquoise;
  display: flex;
  justify-content: center;
  align-items: center;
}

.grid-container {
  display: grid;
  grid-template-columns: 30% 70%;
}

.grid img {
  width: 80%;
  margin: 20px auto;
  display: block;
}

form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-template-areas: &amp;quot;i1 i2&amp;quot; &amp;quot;ta ta&amp;quot; &amp;quot;vi bt&amp;quot;;
}

input,
textarea {
  margin: 5px;
  border: 1px solid darkblue;
  padding: 10px;
  font-size: 1.1rem;
  font-family: &amp;quot;DMSerif&amp;quot;;
  border-radius: 5px;
}

textarea {
  grid-area: ta;
  height: 40px;
  resize: none;
}

#btn-submit {
  grid-area: bt;
  cursor: pointer;
  background: cyan;
  transition: 0.2s;
}

#btn-submit:hover {
  background: darkblue;
  color: white;
}

/* ABSOLUTE  */
/* Sans élément en Relative, de base, l&amp;#39;élément en absolute l&amp;#39;est par rapport au Body  */
/* Il faut mettre une position relative au parent pour contraindre l&amp;#39;élément en absolute dans ses frontières  */
.absolute {
  /* position relative par rapport à son parent,
  donc contenu dans les frontieres de son parents*/
  position: relative;
}


#circle1 {
  height: 80px;
  width: 80px;
  background: skyblue;
  position: absolute;
  border-radius: 150px;
  top: -20px;
  right: -20px;
}

#circle2 {
  height: 40px;
  width: 40px;
  border-radius: 150px;
  background: teal;
  position: absolute;
  left: 50%;
  transform:
  /*traslate de 50% de la taille du cercle,
  pour etre centré par rapport au centre du cercle,
  plutot que sur son bord gauche par défaut.*/
  translateX(-50%);
  top: 100px;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
        &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;ul&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
            &amp;amp;lt;/ul&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;grid&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Grid&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;grid-container&amp;quot;&amp;amp;gt;
                &amp;amp;lt;img src=&amp;quot;./assets/img/css-logo.png&amp;quot; alt=&amp;quot;logo css&amp;quot; /&amp;amp;gt;

                &amp;amp;lt;form action=&amp;quot;&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;firstname&amp;quot; placeholder=&amp;quot;Prénom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;surname&amp;quot; placeholder=&amp;quot;Nom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;textarea cols=&amp;quot;30&amp;quot; rows=&amp;quot;10&amp;quot; placeholder=&amp;quot;Ici votre message&amp;quot;&amp;amp;gt;&amp;amp;lt;/textarea&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Valider&amp;quot; id=&amp;quot;btn-submit&amp;quot; /&amp;amp;gt;
                &amp;amp;lt;/form&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;absolute&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Absolute&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;span id=&amp;quot;circle1&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
            &amp;amp;lt;span id=&amp;quot;circle2&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_responsive&amp;quot;&amp;gt;প্রতিক্রিয়াশীল&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;@import url(&amp;quot;https://fonts.googleapis.com/css2?family=Oswald:wght@500&amp;amp;amp;display=swap&amp;quot;);

@font-face {
  font-family: &amp;quot;DMSerif&amp;quot;;
  src: url(./assets/fonts/DMSerifDisplay-Regular.ttf);
}

body {
  font-family: &amp;quot;DMSerif&amp;quot;, Verdana;
  background: url(./assets/img/bg.jpg) center/cover;
  min-height: 100vh;
}

h1 {
  text-transform: uppercase;
  letter-spacing: 3px;
  text-align: center;
  /* pour etre plus responsive on peut passer la taille en vw(view port width) pour qu&amp;#39;elle s&amp;#39;adapte à la taille de l&amp;#39;ecran*/
  font-size: 2.5rem;
  text-shadow: 3px 3px 8px #00000042;
  color: #ab0ef4;
  font-family: &amp;quot;Oswald&amp;quot;, sans-serif;
  text-decoration: underline;
}

main {
  background: rgba(245, 245, 245, 0.9);
  min-height: 500px;
  width: 90%;
  margin: 0 auto;
  border: 2px solid rgb(0, 140, 255);
  border-radius: 20px 20px 0 0;
  box-shadow: 0px 0px 20px 4px #81cfc6;
  padding: 15px;
}

h2 {
  margin: 0;
}

.flexbox,
.grid,
.absolute {
  border: 2px solid skyblue;
  border-radius: 10px;
  padding: 10px;
  margin-top: 20px;
  min-height: 150px;
}

.flexbox ul {
  padding: 0;
  display: flex;
  justify-content: space-around;
}

.flexbox li {
  list-style: none;
  height: 160px;
  width: 160px;
  margin: 10px;
  background: turquoise;
  display: flex;
  justify-content: center;
  align-items: center;
}

.grid-container {
  display: grid;
  grid-template-columns: 30% 70%;
}

.grid img {
  width: 80%;
  margin: 20px auto;
  /* permet en media query de la centrer en petit écran*/
  display: block;
}

form {
  display: grid;
  grid-template-columns: 1fr 1fr;
  grid-template-rows: 1fr 1fr 1fr;
  grid-template-areas: &amp;quot;i1 i2&amp;quot; &amp;quot;ta ta&amp;quot; &amp;quot;vi bt&amp;quot;;
}

input,
textarea {
  margin: 5px;
  border: 1px solid darkblue;
  padding: 10px;
  font-size: 1.1rem;
  font-family: &amp;quot;DMSerif&amp;quot;;
  border-radius: 5px;
}

textarea {
  grid-area: ta;
  height: 40px;
  resize: none;
}

#btn-submit {
  grid-area: bt;
  cursor: pointer;
  background: cyan;
  transition: 0.2s;
}

#btn-submit:hover {
  background: darkblue;
  color: white;
}

.absolute {
  position: relative;
}


#circle1 {
  height: 80px;
  width: 80px;
  background: skyblue;
  position: absolute;
  border-radius: 150px;
  top: -20px;
  right: -20px;
}

#circle2 {
  height: 40px;
  width: 40px;
  border-radius: 150px;
  background: teal;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  top: 100px;
}

/* RESPONSIVE:
a partir des tailles d&amp;#39;ecran permet de surcharger les reglages definis plus haut
*/
@media screen and (max-width: 900px) {
  .grid-container {
    display: block;
  }
  .grid-container img {
    width: 40%;
  }
}

@media screen and (max-width: 610px) {
  .flexbox ul {
    flex-direction: column;
    align-items: center;
  }

  form {
    grid-template-columns: 1fr;
    grid-template-rows: 1fr;
    grid-template-areas:
      &amp;quot;i1&amp;quot;
      &amp;quot;i2&amp;quot;
      &amp;quot;ta&amp;quot;
      &amp;quot;bt&amp;quot;;
  }
  input,
  textarea {
    font-size: 0.8rem;
  }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;IE=edge&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Cours CSS&amp;amp;lt;/title&amp;amp;gt;

    &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;style.css&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
    &amp;amp;lt;header&amp;amp;gt;
        &amp;amp;lt;h1&amp;amp;gt;Les bases de CSS&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;/header&amp;amp;gt;

    &amp;amp;lt;main&amp;amp;gt;
        &amp;amp;lt;div class=&amp;quot;flexbox&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Flexbox&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;ul&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 1&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 2&amp;amp;lt;/li&amp;amp;gt;
                &amp;amp;lt;li&amp;amp;gt;boite 3&amp;amp;lt;/li&amp;amp;gt;
            &amp;amp;lt;/ul&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;grid&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Grid&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;div class=&amp;quot;grid-container&amp;quot;&amp;amp;gt;
                &amp;amp;lt;img src=&amp;quot;./assets/img/css-logo.png&amp;quot; alt=&amp;quot;logo css&amp;quot; /&amp;amp;gt;

                &amp;amp;lt;form action=&amp;quot;&amp;quot;&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;firstname&amp;quot; placeholder=&amp;quot;Prénom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;surname&amp;quot; placeholder=&amp;quot;Nom&amp;quot; /&amp;amp;gt;
                    &amp;amp;lt;textarea cols=&amp;quot;30&amp;quot; rows=&amp;quot;10&amp;quot; placeholder=&amp;quot;Ici votre message&amp;quot;&amp;amp;gt;&amp;amp;lt;/textarea&amp;amp;gt;
                    &amp;amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Valider&amp;quot; id=&amp;quot;btn-submit&amp;quot; /&amp;amp;gt;
                &amp;amp;lt;/form&amp;amp;gt;
            &amp;amp;lt;/div&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;

        &amp;amp;lt;div class=&amp;quot;absolute&amp;quot;&amp;amp;gt;
            &amp;amp;lt;h2&amp;amp;gt;Absolute&amp;amp;lt;/h2&amp;amp;gt;
            &amp;amp;lt;span id=&amp;quot;circle1&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
            &amp;amp;lt;span id=&amp;quot;circle2&amp;quot;&amp;amp;gt;&amp;amp;lt;/span&amp;amp;gt;
        &amp;amp;lt;/div&amp;amp;gt;
    &amp;amp;lt;/main&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_শুরু&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;শুরু CSS&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;début_conclusion&amp;quot;&amp;gt;ডিবাগ &amp;amp;amp; উপসংহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-css&amp;quot; data-lang=&amp;quot;css&amp;quot;&amp;gt;/* all elements:
supprime les comportements par défaut*/
* {
  /* les marges à zéro*/
  margin: 0;
  /* les parge internes(padding) à zéro*/
  padding: 0;
  /* tous les bords avec un cadre rouge de 2px.
  qui est ou et qui fait quoi...*/
  border: 2px solid red;
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_début&amp;quot;&amp;gt;[toc_début]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>HTML মেমো</title>
            <link >https://cheroliv.com//blog/2023/0061_memo_html_post.html</link>
            <pubDate>Sun, 13 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0061_memo_html_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_ভাল_সংযোগ&amp;quot;&amp;gt;ভাল সংযোগ&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_রিপোজিটরি_এবং_নমুনা_কোড&amp;quot;&amp;gt;রিপোজিটরি এবং নমুনা কোড&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভাল_সংযোগ&amp;quot;&amp;gt;ভাল সংযোগ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;html&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://htmlcheatsheet.com&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;htmlcheatsheet.com&amp;lt;/a&amp;gt;: HTML চিটশীট&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;font&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://fontawesome.com&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;fontawesome.com&amp;lt;/a&amp;gt;: আইকন লাইব্রেরি&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.toptal.com/designers/htmlarrows/symbols/&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;toptal.com/designers/htmlarrows/symbols&amp;lt;/a&amp;gt;: HTML-এ নেটিভ আইকন&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;bিশেষ অক্ষর এবং এস্কেপস&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.sonarsource.com/blog/encoding-differentials-why-charset-matters/&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://www.sonarsource.com/blog/encoding-differentials-why-charset-matters/&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://stackoverflow.com/a/3614344/13104550&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://stackoverflow.com/a/3614344/13104550&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://html.spec.whatwg.org/multipage/named-characters.html&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://html.spec.whatwg.org/multipage/named-characters.html&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;[toc]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_রিপোজিটরি_এবং_নমুনা_কোড&amp;quot;&amp;gt;রিপোজিটরি এবং নমুনা কোড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;github রিপোজিটরি:https://github.com/cheroliv/html-codebase[html-codebase, window = &amp;quot;_blank]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;মেমো উৎস:&amp;lt;br&amp;gt;
index.html&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlightjs highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html hljs&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
  &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;!-- Le titre de la page  --&amp;amp;gt;
  &amp;amp;lt;title&amp;amp;gt;Cours HTML&amp;amp;lt;/title&amp;amp;gt;
  &amp;amp;lt;!-- Icone de l&amp;#39;onglet --&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;quot;shortcut icon&amp;quot; href=&amp;quot;html-logo.png&amp;quot; /&amp;amp;gt;
  &amp;amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;https://use.fontawesome.com/releases/v5.8.2/css/all.css&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
  &amp;amp;lt;header&amp;amp;gt;
    &amp;amp;lt;h1&amp;amp;gt;Texte - Titre H1&amp;amp;lt;/h1&amp;amp;gt;
    &amp;amp;lt;p&amp;amp;gt;
      &amp;amp;lt;em&amp;amp;gt;em pour mettre en italique&amp;amp;lt;/em&amp;amp;gt;,
      &amp;amp;lt;strong&amp;amp;gt;strong pour mettre en gras&amp;amp;lt;/strong&amp;amp;gt;
      &amp;amp;lt;span&amp;amp;gt;L&amp;#39;élement en span ne revient pas à la ligne&amp;amp;lt;/span&amp;amp;gt;.
    &amp;amp;lt;/p&amp;amp;gt;
    &amp;amp;lt;p&amp;amp;gt;
      Lorem ipsum dolor sit amet consectetur adipisicing elit. Exercitationem
      cumque ratione veniam officiis nulla a debitis at facilis sed
      dignissimos.
    &amp;amp;lt;/p&amp;amp;gt;
  &amp;amp;lt;/header&amp;amp;gt;

  &amp;amp;lt;section&amp;amp;gt;
    &amp;amp;lt;div&amp;amp;gt;
      &amp;amp;lt;h2&amp;amp;gt;Photo - Titre H2&amp;amp;lt;/h2&amp;amp;gt;
      &amp;amp;lt;img src=&amp;quot;./img-1.jpg&amp;quot; alt=&amp;quot;image-arbre&amp;quot; height=&amp;quot;200&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;

    &amp;amp;lt;div&amp;amp;gt;
      &amp;amp;lt;h3&amp;amp;gt;Liste - Titre H3&amp;amp;lt;/h3&amp;amp;gt;
      &amp;amp;lt;ul&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;UL = unordered list&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;UL = unordered list&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;UL = unordered list&amp;amp;lt;/li&amp;amp;gt;
      &amp;amp;lt;/ul&amp;amp;gt;
      &amp;amp;lt;ol&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;OL = ordered list&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;OL = ordered list&amp;amp;lt;/li&amp;amp;gt;
        &amp;amp;lt;li&amp;amp;gt;OL = ordered list&amp;amp;lt;/li&amp;amp;gt;
      &amp;amp;lt;/ol&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;

    &amp;amp;lt;div&amp;amp;gt;
      &amp;amp;lt;h4&amp;amp;gt;Tableaux - Titre H4&amp;amp;lt;/h4&amp;amp;gt;
      &amp;amp;lt;table border=&amp;quot;4&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;4&amp;quot; style=&amp;quot;text-align: center&amp;quot;&amp;amp;gt;
        &amp;amp;lt;thead&amp;amp;gt;
          &amp;amp;lt;tr&amp;amp;gt;
            &amp;amp;lt;th&amp;amp;gt;Col 1&amp;amp;lt;/th&amp;amp;gt;
            &amp;amp;lt;th&amp;amp;gt;Col 2&amp;amp;lt;/th&amp;amp;gt;
            &amp;amp;lt;th&amp;amp;gt;Col 3&amp;amp;lt;/th&amp;amp;gt;
          &amp;amp;lt;/tr&amp;amp;gt;
        &amp;amp;lt;/thead&amp;amp;gt;
        &amp;amp;lt;tbody&amp;amp;gt;
          &amp;amp;lt;tr&amp;amp;gt;
            &amp;amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;amp;gt;Row 1 Cell 1&amp;amp;lt;/td&amp;amp;gt;
            &amp;amp;lt;td&amp;amp;gt;Row 1 Cell 2&amp;amp;lt;/td&amp;amp;gt;
            &amp;amp;lt;td&amp;amp;gt;Row 1 Cell 3&amp;amp;lt;/td&amp;amp;gt;
          &amp;amp;lt;/tr&amp;amp;gt;
          &amp;amp;lt;tr&amp;amp;gt;
            &amp;amp;lt;td&amp;amp;gt;Row 2 Cell 2&amp;amp;lt;/td&amp;amp;gt;
            &amp;amp;lt;td&amp;amp;gt;Row 2 Cell 3&amp;amp;lt;/td&amp;amp;gt;
          &amp;amp;lt;/tr&amp;amp;gt;
          &amp;amp;lt;tr&amp;amp;gt;
            &amp;amp;lt;td colspan=&amp;quot;3&amp;quot;&amp;amp;gt;Row 3 Cell 1&amp;amp;lt;/td&amp;amp;gt;
          &amp;amp;lt;/tr&amp;amp;gt;
        &amp;amp;lt;/tbody&amp;amp;gt;
      &amp;amp;lt;/table&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;

    &amp;amp;lt;div&amp;amp;gt;
      &amp;amp;lt;h5&amp;amp;gt;&amp;amp;lt;span&amp;amp;gt;&amp;amp;amp;#9814;&amp;amp;lt;/span&amp;amp;gt; Liens - Titre H5&amp;amp;lt;/h5&amp;amp;gt;
      &amp;amp;lt;a href=&amp;quot;https://htmlcheatsheet.com/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;amp;gt;HTML Cheatsheet&amp;amp;lt;/a&amp;amp;gt;
      &amp;amp;lt;br /&amp;amp;gt;
      &amp;amp;lt;a href=&amp;quot;https://www.toptal.com/designers/htmlarrows/symbols/&amp;quot; target=&amp;quot;_blank&amp;quot;&amp;amp;gt;Icones natifs en HTML&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;

    &amp;amp;lt;div&amp;amp;gt;
      &amp;amp;lt;h6&amp;amp;gt;&amp;amp;lt;i class=&amp;quot;fas fa-video&amp;quot;&amp;amp;gt;&amp;amp;lt;/i&amp;amp;gt; Vidéo - Titre H6&amp;amp;lt;/h6&amp;amp;gt;
      &amp;amp;lt;video src=&amp;quot;video.mp4&amp;quot; height=&amp;quot;150&amp;quot; autoplay loop muted&amp;amp;gt;&amp;amp;lt;/video&amp;amp;gt;
    &amp;amp;lt;/div&amp;amp;gt;
  &amp;amp;lt;/section&amp;amp;gt;
  &amp;amp;lt;br /&amp;amp;gt;
  &amp;amp;lt;!-- Formulaires en HTML --&amp;amp;gt;
  &amp;amp;lt;section&amp;amp;gt;
    &amp;amp;lt;h2&amp;amp;gt;Formulaire&amp;amp;lt;/h2&amp;amp;gt;
    &amp;amp;lt;form action=&amp;quot;/action.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;amp;gt;
      &amp;amp;lt;label for=&amp;quot;name&amp;quot;&amp;amp;gt;Nom&amp;amp;lt;/label&amp;amp;gt;
      &amp;amp;lt;input id=&amp;quot;name&amp;quot; type=&amp;quot;text&amp;quot; placeholder=&amp;quot;Entrez votre nom&amp;quot; /&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;

      &amp;amp;lt;label for=&amp;quot;number&amp;quot;&amp;amp;gt;Entrez votre age&amp;amp;lt;/label&amp;amp;gt;
      &amp;amp;lt;input type=&amp;quot;number&amp;quot; id=&amp;quot;number-age&amp;quot; value=&amp;quot;15&amp;quot; oninput=&amp;quot;document.getElementById(&amp;#39;range-age&amp;#39;).value=this.value&amp;quot;&amp;amp;gt;
      &amp;amp;lt;input type=&amp;quot;range&amp;quot; id=&amp;quot;range-age&amp;quot; min=&amp;quot;0&amp;quot; max=&amp;quot;100&amp;quot;
        oninput=&amp;quot;document.getElementById(&amp;#39;number-age&amp;#39;).value=this.value&amp;quot;&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;

      &amp;amp;lt;!-- Input select --&amp;amp;gt;
      &amp;amp;lt;label for=&amp;quot;gender&amp;quot;&amp;amp;gt;Genre&amp;amp;lt;/label&amp;amp;gt;
      &amp;amp;lt;select id=&amp;quot;gender&amp;quot;&amp;amp;gt;
        &amp;amp;lt;option selected=&amp;quot;selected&amp;quot; value=&amp;quot;Homme&amp;quot;&amp;amp;gt;Homme&amp;amp;lt;/option&amp;amp;gt;
        &amp;amp;lt;option value=&amp;quot;Femme&amp;quot;&amp;amp;gt;Femme&amp;amp;lt;/option&amp;amp;gt;
      &amp;amp;lt;/select&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;

      &amp;amp;lt;!-- Input radio --&amp;amp;gt;
      &amp;amp;lt;div&amp;amp;gt;
        &amp;amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;type&amp;quot; id=&amp;quot;human&amp;quot; checked /&amp;amp;gt;
        &amp;amp;lt;label for=&amp;quot;human&amp;quot;&amp;amp;gt;Humain&amp;amp;lt;/label&amp;amp;gt;

        &amp;amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;type&amp;quot; id=&amp;quot;dog&amp;quot; /&amp;amp;gt;
        &amp;amp;lt;label for=&amp;quot;dog&amp;quot;&amp;amp;gt;Chien&amp;amp;lt;/label&amp;amp;gt;

        &amp;amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;type&amp;quot; id=&amp;quot;cat&amp;quot; /&amp;amp;gt;
        &amp;amp;lt;label for=&amp;quot;cat&amp;quot;&amp;amp;gt;Chat&amp;amp;lt;/label&amp;amp;gt;
      &amp;amp;lt;/div&amp;amp;gt;

      &amp;amp;lt;textarea cols=&amp;quot;20&amp;quot; rows=&amp;quot;5&amp;quot; placeholder=&amp;quot;Votre message...&amp;quot;&amp;amp;gt;&amp;amp;lt;/textarea&amp;amp;gt;&amp;amp;lt;br /&amp;amp;gt;

      &amp;amp;lt;!-- Input Checkbox --&amp;amp;gt;
      &amp;amp;lt;label&amp;amp;gt;&amp;amp;lt;input type=&amp;quot;checkbox&amp;quot; /&amp;amp;gt;Accepter les CGV&amp;amp;lt;/label&amp;amp;gt; &amp;amp;lt;br /&amp;amp;gt;
      &amp;amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Submit&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;/form&amp;amp;gt;
  &amp;amp;lt;/section&amp;amp;gt;
  &amp;amp;lt;br /&amp;amp;gt;
  &amp;amp;lt;!-- Mail &amp;amp;amp; envoi de fichiers --&amp;amp;gt;
  &amp;amp;lt;footer&amp;amp;gt;
    &amp;amp;lt;a href=&amp;quot;mailto:fs@gmail.com&amp;quot;&amp;amp;gt;Ecrivez-moi !&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;br /&amp;amp;gt;
    &amp;amp;lt;a href=&amp;quot;notice.txt&amp;quot; download=&amp;quot;nom-du-fichier&amp;quot;&amp;amp;gt;Télécharger la notice&amp;amp;lt;/a&amp;amp;gt;
    &amp;amp;lt;details&amp;amp;gt;
      &amp;amp;lt;summary&amp;amp;gt;Plus d&amp;#39;infos&amp;amp;lt;/summary&amp;amp;gt;
      &amp;amp;lt;p&amp;amp;gt;
        Lorem ipsum dolor, sit amet consectetur adipisicing elit. Harum,
        repellendus.
      &amp;amp;lt;/p&amp;amp;gt;
    &amp;amp;lt;/details&amp;amp;gt;
  &amp;amp;lt;/footer&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;[toc]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>জাভাস্ক্রিপ্ট মেমো</title>
            <link >https://cheroliv.com//blog/2023/0060_memo_js_post.html</link>
            <pubDate>Fri, 4 Aug 2023 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2023/0060_memo_js_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;github রিপোজিটরি:https://github.com/cheroliv/js-codebase[js-codebase, window=&amp;quot;_blank]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#start&amp;quot;&amp;gt;ভেরিয়েবল, গাণিতিক অপারেটর ও অক্ষরশ্রেণী&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#অ্যারে&amp;quot;&amp;gt;[অ্যারে]&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#functions&amp;quot;&amp;gt;ফাংশনগুলো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;[No output]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#objects&amp;quot;&amp;gt;বস্তুগুলো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#loops&amp;quot;&amp;gt;লুপগুলো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#const_var_let&amp;quot;&amp;gt;Const, var এবং let&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#rest_and_spread_operators&amp;quot;&amp;gt;বাকি এবং স্প্রেড অপারেটর&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#destructuring&amp;quot;&amp;gt;বিন্যাস ভাঙা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#import_export&amp;quot;&amp;gt;মডিউলের আমদানি এবং রপ্তানি&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;শ্রেণીઓ&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;index.html&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-html&amp;quot; data-lang=&amp;quot;html&amp;quot;&amp;gt;&amp;amp;lt;!DOCTYPE html&amp;amp;gt;
&amp;amp;lt;html lang=&amp;quot;fr&amp;quot;&amp;amp;gt;

&amp;amp;lt;head&amp;amp;gt;
    &amp;amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;amp;gt;
    &amp;amp;lt;title&amp;amp;gt;Document&amp;amp;lt;/title&amp;amp;gt;
    &amp;amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1.0&amp;quot; /&amp;amp;gt;
    &amp;amp;lt;meta http-equiv=&amp;quot;X-UA-Compatible&amp;quot; content=&amp;quot;ie=edge&amp;quot; /&amp;amp;gt;
&amp;amp;lt;/head&amp;amp;gt;

&amp;amp;lt;body&amp;amp;gt;
    index
    &amp;amp;lt;script src=&amp;quot;01_start.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;02_arrays.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;03_functions.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;04_param_x_scope.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;05_objects.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;06_loops.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;07_const_var_let.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;08_rest_and_spread_operators.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;09_destructuring.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
    &amp;amp;lt;script src=&amp;quot;10_module_import_export.js&amp;quot;&amp;amp;gt;&amp;amp;lt;/script&amp;amp;gt;
&amp;amp;lt;/body&amp;amp;gt;

&amp;amp;lt;/html&amp;amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;start&amp;quot;&amp;gt;ভেরিয়েবল, গাণিতিক অপারেটর ও অক্ষরশ্রেণী&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;01_start.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Variables
 */
//une variable stupide
var my_variable = &amp;quot;dummy variable&amp;quot;;
console.log(my_variable);

//assertion
console.assert(my_variable === &amp;quot;dummy variable&amp;quot;);

var username = &amp;quot;cheroliv&amp;quot;;
console.log(username);
console.assert(username === &amp;quot;cheroliv&amp;quot;);

//concaténation de string
console.assert(username === &amp;quot;cher&amp;quot; + &amp;quot;oliv&amp;quot;);

/**
 *  Opérateur arithmétique: + - * / %
 */
//integer
var x = 10;
var y = 5;
var z = 20;

console.log(x + y);
console.assert(x + y === 15);

console.log(x + y - z);
console.assert(x + y - z === -5);


console.log(x - y);
console.assert(x - y === 5);


console.log(x * y);
console.assert(x * y === 50);

console.log(x / y);
console.assert(x / y === 2);


console.log(&amp;quot;---------&amp;quot;);

x = 20;
y = 10;

console.log(x + y);
console.assert(x + y === 30);

console.log(x + y - z);
console.assert(x + y - z === 10);


console.log(x - y);
console.assert(x - y === 10);

console.log(x * y);
console.assert(x * y === 200);

console.log(x / z);
console.assert(x / z === 1);


//Littéraux de gabarits pour string avec backstick `
//Template literals (Template strings)
console.assert(`typeof z: ${typeof z}` === &amp;quot;typeof z: number&amp;quot;);

console.log(`x is type of : ${typeof x}`);
console.log(`y is type of : ${typeof y}`);
console.log(`z is type of : ${typeof z}`);

//typeof: donne le type de la variable
console.assert(typeof x === &amp;quot;number&amp;quot;);
console.assert(typeof y === &amp;quot;number&amp;quot;);
console.assert(typeof z === &amp;quot;number&amp;quot;);


console.log(&amp;quot;---------&amp;quot;);
/**
 * Incrémenation/décrémentation
 */
//incrémantation/décrémentation préfixe
console.log(++x) //incrémenté puis affiché: 21
console.log(x) //la valeur incrémenté: 21

//incrémantation/décrémentation suffixe
console.log(y++) //affiche la valeur sans incrémenation puis incrémente: 10
console.log(y) //la valeur incrémenté: 11

//décrémentation
x--;
y--;
console.assert(x === 20);
console.assert(y === 10);


/**
 * String: chaine de caractères
 */
console.log(`username: ${username}`);

//taille de la string
console.log(`username.length: ${username.length}`);
console.assert(username.length === 8);
console.assert(username.length === &amp;quot;cheroliv&amp;quot;.length);
console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;arrays&amp;quot;&amp;gt;অ্যারেগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;02_arrays.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Les arrays
 */
// auteurs [[&amp;quot;nom &amp;quot;, &amp;quot;prénom&amp;quot;, &amp;quot;pays&amp;quot;]]
var writers = [
    [&amp;quot;Karl&amp;quot;, &amp;quot;Marx&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Jean-Jacques&amp;quot;, &amp;quot;Rousseau&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Victor&amp;quot;, &amp;quot;Hugo&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;René&amp;quot;, &amp;quot;Descartes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Paul&amp;quot;, &amp;quot;Verlaine&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Antonio&amp;quot;, &amp;quot;Gramsci&amp;quot;, &amp;quot;it&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Lukacs&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Franz&amp;quot;, &amp;quot;Kafka&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Arthur&amp;quot;, &amp;quot;Rimbaud&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Gérard&amp;quot;, &amp;quot;de Nerval&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Chrétien&amp;quot;, &amp;quot;de Troyes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;François&amp;quot;, &amp;quot;Rabelais&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Hegel&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Friedrich&amp;quot;, &amp;quot;Engels&amp;quot;, &amp;quot;de&amp;quot;],
]

console.table(writers);

// accés aux élèments du tableau
console.log(writers[0]);
console.log(`${writers[0][0]}, ${writers[0][1]} (${writers[0][2]})`);
console.assert(&amp;quot;Karl, Marx (de)&amp;quot; === `${writers[0][0]}, ${writers[0][1]} (${writers[0][2]})`);

//sauvegarder la valeur du prénom de Marx
var karl = writers[0][0]

//éditer un élement du tableau, le prénom de Marx
writers[0][0] = &amp;quot;Karlito&amp;quot;

console.log(`${writers[0][0]}, ${writers[0][1]} (${writers[0][2]})`);
console.assert(&amp;quot;Karlito, Marx (de)&amp;quot; === `${writers[0][0]}, ${writers[0][1]} (${writers[0][2]})`);

console.assert(&amp;quot;Karl&amp;quot; === karl);

//remettre la valeur initale du prénom de Marx
writers[0][0] = karl;

console.assert(`${karl}, Marx (de)` === `${writers[0][0]}, ${writers[0][1]} (${writers[0][2]})`);

console.log(&amp;quot;---------&amp;quot;);

/**
 *  Arrays: map/forEach/pop/push/slice/sort/shift/unshift
 */

var numbers = [1, 5, 4, 3, 2];

console.log(&amp;quot;Iterate with forEach&amp;quot;);
// parcourir avec array.forEach
numbers.forEach((it) =&amp;amp;gt; console.log(it));
console.log(&amp;quot;---------&amp;quot;);

console.log(&amp;quot;Iterate with map&amp;quot;);
// parcourir avec array.map
numbers.map((it) =&amp;amp;gt; console.log(it));
console.log(&amp;quot;---------&amp;quot;);

//afficher les éléments sur une ligne
//génère la string avec le formatage des nombres
const numbersString = (numberArray) =&amp;amp;gt; {
    var consoleOutput = new String();
    numberArray.forEach(number =&amp;amp;gt; consoleOutput += `${number}, `);
    return consoleOutput = consoleOutput.substring(0, consoleOutput.length - 2);
};

//affiche la chaine entre crochets dans la console
const displayNumbers = (numbersStr) =&amp;amp;gt; {
    console.log(`[${numbersString(numbersStr)}]`);
};

console.log(&amp;quot;orginal number array&amp;quot;)
displayNumbers(numbers);
console.log(&amp;quot;---------&amp;quot;);


//push: ajoute à la fin
console.log(&amp;quot;push&amp;quot;);
numbers.push(6);
displayNumbers(numbers);
console.log(&amp;quot;---------&amp;quot;);

//pop: suprime le dernier
console.log(&amp;quot;pop&amp;quot;);
numbers.pop();
displayNumbers(numbers);
console.log(&amp;quot;---------&amp;quot;);

//unshift: ajouter le parametre au debut de l&amp;#39;array
console.log(&amp;quot;unshift&amp;quot;);
numbers.unshift(0);
displayNumbers(numbers);
console.log(&amp;quot;---------&amp;quot;);

//shift: supprime le premier element de l&amp;#39;array
console.log(&amp;quot;shift&amp;quot;);
numbers.shift();
displayNumbers(numbers);
console.log(&amp;quot;---------&amp;quot;);

//slice: renvoi l&amp;#39;array entre les positions en argument
console.log(&amp;quot;slice&amp;quot;);
var sliceNumbersResult = numbers.slice(2, 4);
displayNumbers(sliceNumbersResult);
console.log(&amp;quot;---------&amp;quot;);

//sort asc
console.log(&amp;quot;sort asc&amp;quot;);
var ascSort = numbers.sort((a, b) =&amp;amp;gt; a - b);
displayNumbers(ascSort);
console.log(&amp;quot;---------&amp;quot;);

//sort desc
console.log(&amp;quot;sort desc&amp;quot;);
var descSort = numbers.sort((a, b) =&amp;amp;gt; b - a);
displayNumbers(descSort);
console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;functions&amp;quot;&amp;gt;ফাংশনগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;03_functions.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 *  Les fonctions
 */

//function style legacy
function sayHelloWorldLegacy() {
    console.log(&amp;quot;Hello world legacy!&amp;quot;);
}
sayHelloWorldLegacy();

function sayHelloLegacy(firstName, lastName, style) {
    console.log(`Hello ${firstName}, ${lastName} (${style})`);
}
sayHelloLegacy(&amp;quot;Cher&amp;quot;, &amp;quot;Oliv&amp;quot;, &amp;quot;legacy&amp;quot;);

console.log(&amp;quot;---------&amp;quot;);

//function style arrow
const sayHelloWorld = () =&amp;amp;gt; console.log(&amp;quot;Hello world!&amp;quot;);
sayHelloWorld();

const sayHello = (firstName, lastName) =&amp;amp;gt;
    console.log(`Hello ${firstName}, ${lastName}`);
sayHello(&amp;quot;Cher&amp;quot;, &amp;quot;Oliv&amp;quot;);

console.log(&amp;quot;---------&amp;quot;);

var authors = [
    [&amp;quot;Chrétien&amp;quot;, &amp;quot;de Troyes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;François&amp;quot;, &amp;quot;Rabelais&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;René&amp;quot;, &amp;quot;Descartes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Jean-Jacques&amp;quot;, &amp;quot;Rousseau&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Hegel&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Karl&amp;quot;, &amp;quot;Marx&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Friedrich&amp;quot;, &amp;quot;Engels&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Victor&amp;quot;, &amp;quot;Hugo&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Paul&amp;quot;, &amp;quot;Verlaine&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Antonio&amp;quot;, &amp;quot;Gramsci&amp;quot;, &amp;quot;it&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Lukacs&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Franz&amp;quot;, &amp;quot;Kafka&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Arthur&amp;quot;, &amp;quot;Rimbaud&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Gérard&amp;quot;, &amp;quot;de Nerval&amp;quot;, &amp;quot;fr&amp;quot;],
]


const displayAuthors = (authorsArray) =&amp;amp;gt; authorsArray.forEach(author =&amp;amp;gt;
    console.log(`${author[0]} ${author[1]}, (${author[2]})`)
);

displayAuthors(authors);

console.log(&amp;quot;---------&amp;quot;);

/**
 * valeur par défaut des parametres d&amp;#39;une fonctions
 */
const add = (a = 0, b = 0) =&amp;amp;gt; a + b;
console.assert(add() === 0)
console.assert(add(1) === 1)
console.assert(add(1, 1) === 2)

console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;param_x_scope&amp;quot;&amp;gt;পরামিতি এবং স্কোপ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;04_param_x_scope.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;//global scope: visible partout, dans et hors functions
var global;

const foo = () =&amp;amp;gt; {
    //local scope: visible uniquement dans la fonction foo
    var bar = &amp;quot;bar&amp;quot;
    console.log(bar)
}

foo();
console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;objects&amp;quot;&amp;gt;বস্তুগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;05_objects.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Les objects
 */
var authors = [
    [&amp;quot;Chrétien&amp;quot;, &amp;quot;de Troyes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;François&amp;quot;, &amp;quot;Rabelais&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;René&amp;quot;, &amp;quot;Descartes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Jean-Jacques&amp;quot;, &amp;quot;Rousseau&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Hegel&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Karl&amp;quot;, &amp;quot;Marx&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Friedrich&amp;quot;, &amp;quot;Engels&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Victor&amp;quot;, &amp;quot;Hugo&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Paul&amp;quot;, &amp;quot;Verlaine&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Antonio&amp;quot;, &amp;quot;Gramsci&amp;quot;, &amp;quot;it&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Lukacs&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Franz&amp;quot;, &amp;quot;Kafka&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Arthur&amp;quot;, &amp;quot;Rimbaud&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Gérard&amp;quot;, &amp;quot;de Nerval&amp;quot;, &amp;quot;fr&amp;quot;],
];

var hugo = {
    firstName: authors[7][0],
    lastName: authors[7][1],
    country: authors[7][2],
};

var book = {
    author: hugo,
    title: &amp;quot;Les misérables&amp;quot;
};
console.log(hugo);
console.log(book);

//accéder à un membre de l&amp;#39;objet par point
console.log(hugo.country);

//accéder à un membre de l&amp;#39;objet par crochet
console.log(book[&amp;quot;title&amp;quot;]);

console.log(book.author.lastName);

console.log(book[&amp;quot;author&amp;quot;][&amp;quot;firstName&amp;quot;]);

//ajouter une clé a un objet
hugo.gender = &amp;quot;non binary&amp;quot;;
console.assert(hugo.gender === &amp;quot;non binary&amp;quot;);


//mettre à jour une clé
hugo.gender = &amp;quot;male&amp;quot;;
console.assert(hugo.gender !== &amp;quot;non binary&amp;quot;);
console.assert(hugo[&amp;quot;gender&amp;quot;] === &amp;quot;male&amp;quot;);

//supprimer une clé
delete hugo.gender;


//verfier que l&amp;#39;objet ne contient pas la clé gender
console.assert(!Object.keys(hugo).includes(&amp;quot;gender&amp;quot;));


console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;loops&amp;quot;&amp;gt;লুপগুলো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;06_loops.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Les boucles: Itérer sur arrays et objets.
 */

console.log(&amp;quot;for loop over array&amp;quot;);

var numbers = [12, 10, 8, 6, 4, 2, 0];

for (number of numbers) {
    console.log(number);
}

console.log(&amp;quot;---------&amp;quot;);

console.log(&amp;quot;for loop over object key&amp;quot;);

var obj = { a: 1, b: 2, c: 3, d: 4 };

for (key in obj) {
    console.log(key);
}

console.log(&amp;quot;---------&amp;quot;);

console.log(&amp;quot;for loop over object value&amp;quot;);

for (value in obj) {
    console.log(obj[value]);
}

console.log(&amp;quot;---------&amp;quot;);

console.log(&amp;quot;another for loop over authors array&amp;quot;)

var authors = [
    [&amp;quot;Chrétien&amp;quot;, &amp;quot;de Troyes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;François&amp;quot;, &amp;quot;Rabelais&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;René&amp;quot;, &amp;quot;Descartes&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Jean-Jacques&amp;quot;, &amp;quot;Rousseau&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Hegel&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Karl&amp;quot;, &amp;quot;Marx&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Friedrich&amp;quot;, &amp;quot;Engels&amp;quot;, &amp;quot;de&amp;quot;],
    [&amp;quot;Victor&amp;quot;, &amp;quot;Hugo&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Paul&amp;quot;, &amp;quot;Verlaine&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Antonio&amp;quot;, &amp;quot;Gramsci&amp;quot;, &amp;quot;it&amp;quot;],
    [&amp;quot;Georg&amp;quot;, &amp;quot;Lukacs&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Franz&amp;quot;, &amp;quot;Kafka&amp;quot;, &amp;quot;hu&amp;quot;],
    [&amp;quot;Arthur&amp;quot;, &amp;quot;Rimbaud&amp;quot;, &amp;quot;fr&amp;quot;],
    [&amp;quot;Gérard&amp;quot;, &amp;quot;de Nerval&amp;quot;, &amp;quot;fr&amp;quot;],
];

for (const [i, value] of authors.entries()) {
    console.log(`${value[0]}, ${value[1]} (${value[2]})`);
}

console.log(&amp;quot;---------&amp;quot;);

console.log(&amp;quot;while loop over array&amp;quot;)

var i = 0
while (i &amp;amp;lt; authors.length) {
    console.log(`${authors[i][0]}, ${authors[i][1]} (${authors[i][2]})`);
    i++;
}

console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;const_var_let&amp;quot;&amp;gt;Const, var এবং let&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;07_const_var_let.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * const X var X let
 */
//var x du if n&amp;#39;est pas confiné au scope du if
const varTest = () =&amp;amp;gt; {
    var x = 1;
    console.log(x);
    console.assert(x === 1);
    if (true) {
        var x = 2;
        console.log(x);
        console.assert(x === 2);
    }
    console.log(x);
    console.assert(x !== 1);
    console.assert(x === 2);
}
varTest();

console.log(&amp;quot;---------&amp;quot;);

//var x est global à tous les fichier js
//chargés dans la page html
//var x issue du fichier 1_start.js
//ligne 46
console.log(x);
console.assert(x === 20);

console.log(&amp;quot;---------&amp;quot;);

//premier let x est confiné au scope de la fonction
//le let x du if est confiné au scope du if
const letTest = () =&amp;amp;gt; {
    let x = 1;
    console.log(x);
    console.assert(x === 1);
    if (true) {
        let x = 2;
        console.log(x);
        console.assert(x === 2);
    }
    console.log(x);
    console.assert(x === 1);
    console.assert(x !== 2);
}
letTest();

console.log(&amp;quot;---------&amp;quot;);

/**
 * const: déclare un emplacement mémoire non réattribuable
 * c&amp;#39;est modifiable pour un array,
 * mais non réinitialisable;
 * ex:
 * const arr = [25, 27, 29]
 * arr = [5, 7] //impossible
 * arr[0]=20 // possible
 * ex:
 * const n = 1;
 * n = 3; //impossible
 */
const arr = [25, 27, 29]
console.table(arr);
arr[0] = 20 // possible
console.table(arr);

arr.pop()
console.table(arr);
console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;rest_and_spread_operators&amp;quot;&amp;gt;বাকি এবং স্প্রেড অপারেটর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;08_rest_and_spread_operators.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Opérateur de rest:
 * const add = (...operandes) =&amp;amp;gt; a + b;
 * ou avec parametres avec valeur par défaut
 * const add = (a=0, b=0, ...operandes) =&amp;amp;gt; a + b;
 */

/**
 * spread opérateur:
 * récupère l&amp;#39;ensemble des elements d&amp;#39;une collection,
 * dans un array
 */
const user_ages = [25, 56, 12, 58, 41, 62, 26];

const max_user_age = Math.max(...user_ages);
const min_user_age = Math.min(...user_ages);

console.assert(max_user_age == 62);
console.assert(min_user_age == 12);

console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;destructuring&amp;quot;&amp;gt;বিন্যাস ভাঙা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;09_destructuring.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * L&amp;#39;affectation par décomposition (destructuring)
 */

const user = {
    first_name: &amp;quot;Oliv&amp;quot;,
    last_name: &amp;quot;Cher&amp;quot;,
    nick_name: &amp;quot;cheroliv&amp;quot;,
    gender: &amp;quot;male&amp;quot;,
    is_adult: true
};
console.log(user);

//première façon d&amp;#39;initaliser des variables sans destructuration
let first_name_legacy = user.first_name;
let last_name_legacy = user.last_name;
let nick_name_legacy = user.nick_name;
let gender_legacy = user.gender;
let is_adult_legacy = user.is_adult;

console.assert(&amp;quot;Oliv&amp;quot; === first_name_legacy);
console.assert(&amp;quot;Cher&amp;quot; === last_name_legacy);
console.assert(&amp;quot;cheroliv&amp;quot; === nick_name_legacy);
console.assert(&amp;quot;male&amp;quot; === gender_legacy);
console.assert(true === is_adult_legacy);
console.log(&amp;quot;---------&amp;quot;);
/**
 * Initialisation par déstructuration
 */
const {
    first_name,
    last_name,
    nick_name,
    gender,
    is_adult
} = user;

console.assert(user.first_name === first_name);
console.assert(user.last_name === last_name);
console.assert(user.nick_name === nick_name);
console.assert(user.gender === gender);
console.assert(user.is_adult === is_adult);

/**
 * Intialisation par déstructuration des arrays
 */
//cible explicite
const [a1, a2] = [15, 25, 17, 81, 51, 46];
console.assert(a1 === 15);
console.assert(a2 === 25);

//cible avec position par rapport aux index par virgules
//je veux b3 à 46
const [b1, b2, , , , b3] = [15, 25, 17, 81, 51, 46];
console.assert(b1 === 15);
console.assert(b2 === 25);
console.assert(b3 === 46);

//déstructuration avec operateur de rest
// je contruit un autre avec avec les elements
// à partir du premier élèment non destructuré
const [c1, c2, ...sub_arr] = [15, 25, 17, 81, 51, 46];
console.assert(b1 === 15);
console.assert(b2 === 25);
console.assert(sub_arr.length === 4);
console.assert(sub_arr[0] === 17);
console.assert(sub_arr[1] === 81);
console.assert(sub_arr[2] === 51);
console.assert(sub_arr[3] === 46);


// Une boucle pour comparer le resultat attendu
for (const [i, value] of[15, 25, 17, 81, 51, 46].entries()) {
    //on reconstruit le tableau à chaque iteration
    console.assert([c1, c2].concat(sub_arr)[i] === value);
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;import_export&amp;quot;&amp;gt;মডিউলের আমদানি এবং রপ্তানি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;10_module_import_export.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Import et export de module
 *
 * Dans le fichier html
 * au niveau de la balise d&amp;#39;import de script
 * spécifier le type module
 *
 * 1er technique: import nommé des fonctions:
 * import { sum, minus, times, div, rem } from &amp;quot;./dummy_math_functions.js&amp;quot;;
 *
 * 2eme technique: import global des fonction avec l&amp;#39;asterisque(*)
 * en préfixant l&amp;#39;import par un nommage du fichier importé:
 * import * as math from &amp;quot;./dummy_math_functions.js&amp;quot;;
 *
 * 3eme technique: import par alias avec le mot clé &amp;quot;as&amp;quot;
 * import {
 *     sum as add,
 *     minus as substract,
 *     times as multiply,
 *     div as divide,
 *     rem as modulo
 * } from &amp;quot;./dummy_math_functions.js&amp;quot;;
 */

import {
    sum,
    minus,
    times,
    div,
    rem
} from &amp;quot;./dummy_math_functions.js&amp;quot;;

console.assert(sum(1, 1) === 2);
console.assert(minus(4, 2) === 2);
console.assert(times(2, 2) === 4);
console.assert(div(4, 2) === 2);
console.assert(rem(4, 2) === 0);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;dummy_math_functions.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;//sum
const sum = (x, y) =&amp;amp;gt; x + y;

// subtraction
const minus = (x, y) =&amp;amp;gt; x - y;

// multiplication
const times = (x, y) =&amp;amp;gt; x * y;

// division
const div = (x, y) =&amp;amp;gt; x / y;

// remainder: reste de la division euclidiene
const rem = (x, y) =&amp;amp;gt; x % y;

// log sum
const sum_log = (x, y) =&amp;amp;gt; console.log(sum(x, y));

// log subtraction
const minus_log = (x, y) =&amp;amp;gt; console.log(minus(x, y));

// log multiplication
const times_log = (x, y) =&amp;amp;gt; console.log(times(x, y));

// log division
const div_log = (x, y) =&amp;amp;gt; console.log(div(x, y));

// log remainder
const rem_log = (x, y) =&amp;amp;gt; console.log(rem(x, y));

export {
    sum,
    minus,
    times,
    div,
    rem,
    sum_log,
    minus_log,
    times_log,
    div_log,
    rem_log
};&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;classes&amp;quot;&amp;gt;বিভাগের ব্যবহার&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;11_classes.js&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-javascript&amp;quot; data-lang=&amp;quot;javascript&amp;quot;&amp;gt;/**
 * Utilisation des classes
 */
//creation d&amp;#39;un objet
class Account {
    constructor(username) {
        this.username = username;
    }
};

const acc1 = new Account(&amp;quot;cheroliv&amp;quot;);
console.table(acc1);
console.assert(acc1.username === &amp;quot;cheroliv&amp;quot;);

console.log(&amp;quot;---------&amp;quot;);

//création d&amp;#39;un objet et ajout de getter et setter(accesseurs)
class AccountInfo {
    constructor(username) {
        this._username = username;
    }

    get username() {
        return this._username;
    }

    /**
     * @param {(arg0: string) =&amp;amp;gt; void} new_username
     */
    set new_username(new_username) {
        this._username = new_username;
    }
};

const acc_info1 = new AccountInfo(&amp;quot;cheroliv&amp;quot;);
console.table(acc_info1);
//accés au membre _username avec le getter username()
console.assert(acc_info1.username === &amp;quot;cheroliv&amp;quot;);

//update la valeur username de acc_info1 avec le setter
acc_info1.new_username = &amp;quot;imrandeh&amp;quot;;
console.assert(acc_info1.username === &amp;quot;imrandeh&amp;quot;);

console.log(&amp;quot;---------&amp;quot;);&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc_js&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;underline&amp;quot;&amp;gt;JavaScript পরিচয়&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>স্মারক কাঠামো</title>
            <link >https://cheroliv.com//blog/2022/0054_memo_cadrage_post.html</link>
            <pubDate>Sat, 31 Dec 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0054_memo_cadrage_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফ্রেমিং&amp;quot;&amp;gt;ফ্রেমিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কার্যশালা_1_দৃষ্টি&amp;quot;&amp;gt;কার্যশালা 1 : দৃষ্টি&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_প্যাটার্ন_qqoqcp_কে_কি_কোথায়_কখন_কীভাবে_কেন&amp;quot;&amp;gt;প্যাটার্ন “QQOQCP” – কে, কি, কোথায়, কখন, কীভাবে, কেন&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_২_প্রোডাক্ট_ভিশন_বোর্ড&amp;quot;&amp;gt;২. প্রোডাক্ট ভিশন বোর্ড&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;sect4&amp;quot;&amp;gt;
&amp;lt;h5 id=&amp;quot;_লক্ষ্য_গ্রুপ&amp;quot;&amp;gt;লক্ষ্য গ্রুপ&amp;lt;/h5&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;প্রোডাক্ট বা অফারকে কে ব্যবহার করছে? (প্রাসঙ্গিক, সরাসরি)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect4&amp;quot;&amp;gt;
&amp;lt;h5 id=&amp;quot;_প্রয়োজন&amp;quot;&amp;gt;প্রয়োজন&amp;lt;/h5&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অ্যাপ্লিকেশনের মূল ব্যবহারকারীদের পাঁচটি মূল প্রয়োজন কি?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect4&amp;quot;&amp;gt;
&amp;lt;h5 id=&amp;quot;_পণ্য&amp;quot;&amp;gt;পণ্য&amp;lt;/h5&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার মানের প্রস্তাব কী? উৎপদের ৫টি প্রধান বৈশিষ্ট্য কি যা &amp;lt;em&amp;gt;__&amp;lt;/em&amp;gt;-কে উত্তর দিতে সক্ষম? প্রয়োজন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect4&amp;quot;&amp;gt;
&amp;lt;h5 id=&amp;quot;_ব্যবসায়িক_লক্ষ্য&amp;quot;&amp;gt;ব্যবসায়িক লক্ষ্য&amp;lt;/h5&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সাফল্যের মানদণ্ড কি?&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect4&amp;quot;&amp;gt;
&amp;lt;h5 id=&amp;quot;_দৃষ্টি&amp;quot;&amp;gt;দৃষ্টি&amp;lt;/h5&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;�যখন ৪ কলামগুলো পূর্ণ হয়, তখন আপনাকে Product Vision-এর ভিশন অংশটি পূর্ণ করতে হবে Board en une phrase complète.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কার্যশালা_2_ব্যাবহারকারীর_চরিত্রব্যাবহারকারীর_যাত্রা&amp;quot;&amp;gt;কার্যশালা 2: ব্যাবহারকারীর চরিত্র/ব্যাবহারকারীর যাত্রা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;প্রত্যেক পেরসনায় (ব্যক্তি) জন্য একটি ব্যবহারকারী যাত্রা নির্ধারণ করুন:&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কে আমার পরিষেবা ব্যবহার করবে? (লক্ষ্য)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;কী করতে চায়? (But)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;সে কীভাবে করবে? (ব্যবহারকারী পথ)&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ওয়ার্কশপ_৩_জোনিং_স্টোরিবোর্ড_সাইটম্যাপ&amp;quot;&amp;gt;ওয়ার্কশপ ৩: জোনিং, স্টোরিবোর্ড, সাইটম্যাপ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_1_জোনিং&amp;quot;&amp;gt;1. জোনিং&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_2_storyboard&amp;quot;&amp;gt;2. StoryBoard&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_3_সাইটম্যাপ&amp;quot;&amp;gt;3. সাইটম্যাপ&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কারশালা_৪_wireframemoodboard&amp;quot;&amp;gt;কারশালা ৪: Wireframe/Moodboard&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_1_ওয়্যার_ফ্রেমস&amp;quot;&amp;gt;1. ওয়্যার ফ্রেমস&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_2_মู้ডবোর্ড&amp;quot;&amp;gt;2. মู้ডবোর্ড&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কর্মশালা_৫_story_mapping_user_stories&amp;quot;&amp;gt;কর্মশালা ৫: Story Mapping/ User stories&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_স্টোরি_ম্যাপিং_ইউজার_স্টোরিজের_অগ্রাধিকার_নির্ধারণ&amp;quot;&amp;gt;স্টোরি ম্যাপিং (ইউজার স্টোরিজের অগ্রাধিকার নির্ধারণ)&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_type_dutilisateur_হলে_আমি_un_objective_চাই_যাতে_une_reason&amp;quot;&amp;gt;&amp;amp;lt;type d&amp;amp;#8217;utilisateur&amp;amp;gt; হলে, আমি &amp;amp;lt;un Objective&amp;amp;gt; চাই যাতে &amp;amp;lt;une Reason&amp;amp;gt;.&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কর্মশালা_6_ব্যাকলগ&amp;quot;&amp;gt;কর্মশালা 6: ব্যাকলগ&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://www.atlassian.com/fr/agile/scrum/backlogs&amp;quot;&amp;gt;ব্যাকলগস&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ওয়ার্কশপ_7_প্রযুক্তি_ও_আর্কিটেকচার&amp;quot;&amp;gt;ওয়ার্কশপ 7: প্রযুক্তি ও আর্কিটেকচার&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>মেমো Kotlin</title>
            <link >https://cheroliv.com//blog/2022/0053_memo_kotlin_post.html</link>
            <pubDate>Sun, 29 May 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0053_memo_kotlin_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ভালো_লিঙ্ক&amp;quot;&amp;gt;ভালো লিঙ্ক&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://play.kotlinlang.org/&amp;quot;&amp;gt;kotlinlang খেলার মাঠ&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://arrow-kt.io/&amp;quot;&amp;gt;অ্যারো.kt&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://arkivanov.github.io/MVIKotlin/&amp;quot;&amp;gt;MVI:মডেল ভিউ ইন্টেন্ট&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://github.com/arkivanov/Essenty&amp;quot;&amp;gt;জরুরি&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://arkivanov.github.io/Decompose/&amp;quot;&amp;gt;বিভক্ত করা&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিভিন্ন_কোডের_টুকরা&amp;quot;&amp;gt;বিভিন্ন কোডের টুকরা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মানচিত্র_কমানো&amp;quot;&amp;gt;মানচিত্র কমানো&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি বাইটের তালিকাকে একটি স্ট্রিংয়ের তালিকায় রূপান্তরিত করা এবং স্ট্রিংয়ের তালিকাকে সংক্ষিপ্ত করা&amp;lt;br&amp;gt;
একটি string যাতে সংযোজন রয়েছে। কীভাবে requestBodyContent:byte[] প্যারামিটার সহ পাঠানো request লগ করবেন&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;log.info(
    requestBodyContent!!.map { it.toInt().toChar().toString() }
        .reduce { request: String, s: String -&amp;amp;gt; request + s }
)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এনাম_এবং_সিলড_ক্লাস&amp;quot;&amp;gt;এনাম এবং সিলড ক্লাস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পোস্ট:&amp;lt;a href=&amp;quot;0038_training_kotlin_enum_sealed_class_post&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;প্রশিক্ষণ kotlin enum sealed class&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফাংশনাল_ইন্টারফেস_ও_মেথড_রেফারেন্স&amp;quot;&amp;gt;ফাংশনাল ইন্টারফেস ও মেথড রেফারেন্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি 엔িটি ডোমেইন মডেল DTO-এ রেফারেন্স পদ্ধতি (ফাংশনাল স্টাইল - Java 8) ব্যবহার করে রূপান্তর করা যায়&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun findAllByLoginNot(
        pageable:Pageable,
        login:String)
    :Page&amp;amp;lt;UserDto&amp;amp;gt; {
    return userDao.findAllByLoginNot(
                    pageable,
                    login).map(::fromEntity)
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটিhttps://stackoverflow.com/a/22245383/837404[ভাল ব্যাখ্যা]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মানক_আউটপুট_ক্যাপচার_কর&amp;quot;&amp;gt;মানক আউটপুট ক্যাপচার কর&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.AfterTest
import kotlin.test.BeforeTest
import kotlin.test.Test
import kotlin.test.assertEquals


class BasicsHOF {
    private val standardOut: PrintStream? = out
    private val outputStreamCaptor = ByteArrayOutputStream()

    @BeforeTest
    fun setUp() = setOut(PrintStream(outputStreamCaptor))

    @AfterTest
    fun tearDown() = setOut(standardOut)

    @Test
    fun `three times dope`() {

        3.times { println(&amp;quot;Hello&amp;quot;) }

        assertEquals(
            buildString {
                repeat(3) { append(&amp;quot;Hello\n&amp;quot;) }
                deleteAt(length - 1)
            }, outputStreamCaptor
                .toString()
                .trim()
        )
    }

    fun Int.times(fn: () -&amp;amp;gt; Unit) = (1..this).forEach { _ -&amp;amp;gt; fn() }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কোটলিনে_apply_run_let_also_use_এবং_with_এর_মধ্যে_পার্থক্য_কি&amp;quot;&amp;gt;কোটলিনে apply, run, let, also, use এবং with এর মধ্যে পার্থক্য কি?&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;কোটলিন ফাংশন এবং ল্যাম্বা ফর্ম ব্যবহারের তুলনা রেফারেন্স&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আবেদন_করুন&amp;quot;&amp;gt;আবেদন করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ভূমিকা কোটলিন ফাংশনগুলো`apply`, &amp;lt;code&amp;gt;run&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;let&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;also&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;use&amp;lt;/code&amp;gt;, et `with`বস্তুগুলোকে প্রক্রিয়া করার বিভিন্ন উপায় অফার করে। প্রত্যেকের নিজস্ব ব্যবহারের ক্ষেত্র এবং আচরণ আছে। আরো, ল্যাম্ব্ডা রেফারেন্স ফর্মগুলো বিদ্যমান ল্যাম্ব্ডা ফাংশনগুলকে উল্লেখ করে কোডটি আরও পড়া যায় এবং পুনরাবৃত্তিযোগ্য করে তোলে।&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`apply` est utilisée pour configurer un objet pendant sa création. Elle retourne l&amp;amp;#8217;objet sur lequel elle est appelée.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Lambda রেফারেন্স সহ উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val someObject = SomeClass().apply(::configureObject)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ ساتھ lambda :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val someObject = SomeClass().apply {
// configuration des propriétés de someObject
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_দৌড়ানো&amp;quot;&amp;gt;দৌড়ানো&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`run`এটি একটি অবজেক্টে কোডের একটি ব্লক চালাতে এবং সেই ব্লকের ফলাফল ফেরত দেওয়ার জন্য ব্যবহৃত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ lambda রেফারেন্সের সাথে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = someObject.run(::someFunction)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ lambda:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = someObject.run {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_let&amp;quot;&amp;gt;let&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`let`এটি একটি বস্তুর উপর একটি কোড ব্লক চালানোর জন্য ব্যবহার করা হয় এবং কোড ব্লকের ফলাফলটি রিটার্ন করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উदাহরণ lambda রেফারেন্সের সাথে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = someObject.let(::processObject)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ল্যাম্বডা সহ উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = someObject.let {
// bloc de code à exécuter sur someObject
// la dernière expression est renvoyée
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_এছাড়াও&amp;quot;&amp;gt;এছাড়াও&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`also`এটি একটি বস্তুতে একটি অতিরিক্ত ক্রিয়া সম্পাদনের জন্য ব্যবহৃত হয় এবং কল করা বস্তুটিই ফেরত দেওয়া হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ সঙ্গে lambda reference :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;someObject.also(::performAdditionalAction)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ ল্যাম্বডা দিয়ে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;someObject.also {
// action additionnelle sur someObject
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_empty&amp;quot;&amp;gt;(Empty)&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`use`এটি ব্যবহার করা হয় যেসব সম্পদগুলো ব্যবহার শেষ होने पर বন্ধ করতে হয়। এটি স্বয়ংক্রিয়ভাবে ফাংশনটি কল করে।`close`ব্লকের শেষে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ lambda reference সঙ্গে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;someResource.use(::useResource)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ল্যাম্বডা দিয়ে উদাহরণ :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;someResource.use {
// travailler avec la ressource
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_with&amp;quot;&amp;gt;with&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`with`এটি একাধিক পদ্ধতিকে অবজেক্টে কল করতে ব্যবহৃত হয়, অবজেক্টের নাম পুনরায় লেখা না করেই এবং শেষে পাওয়া biểuকের ফলাফল ফেরত দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ lambda রেফারেন্স :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = with(someObject, ::processWithObject)&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণ lambda দিয়ে :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;val result = with(someObject) {
// appeler des méthodes sur someObject
// la dernière expression est renvoyée
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ল্যাম্বডা রেফারেন্স ফর্ম বা ব্লক ব্যবহার করে`{}`আপনি তর্ককে আলাদা-আলাদা ফাংশনে এনক্যাপসুলেট করতে পারেন, এভাবে কোডের পঠনযোগ্যতা এবং পুন:ব্যবহারযোগ্যতা উন্নত করে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_let_function_kotlin_এ&amp;quot;&amp;gt;let Function Kotlin-এ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;let কি বস্তুকে সাইড-ইফেক্ট প্রয়োগের পর ফেরত দেয়, অথবা ইনপুটের প্রारम्भিক অবস্থায়, (let) ফাংশনের উপর নির্ভর করে?&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;ফাংশন`let`Kotlin-এ একটি অবজেক্টে অপারেশন করার জন্য এবং একটি ভিন্ন ফলাফল ফেরত দেওয়ার জন্য ব্যবহৃত হয়। তবু, এটি নোট করা গুরুত্বপূর্ণ যে ফাংশন`let`এটি অবজেক্টের প্রাথমিক অবস্থা পরিবর্তন করে না, য অবজেক্টে এটি কল করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;হস্তাক্ষর&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;code&amp;gt;inline fun &amp;amp;lt;T, R&amp;amp;gt; T.let(block: (T) &amp;amp;#8594; R): R&amp;lt;/code&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ব্যবহার&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাংশন`let`এটিগeneral&amp;amp;#8230;&amp;amp;#8203; No.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;ফল&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মূল্য প্রত্যাহিত মান`let`এটি ল্যাম্বডা এক্সপ্রেশনের আর্গুমেন্টে পাস করা ফলাফল, সাধারণত অবজেক্টে করা অপারেশনগুলো ফলাফল।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 50%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;পার্শ্বপ্রতিক্রিয়া&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�যদিও ফাংশনটি`let`এটি অবজেক্টে পার্শ্ববর্তী প্রভাব ফেলতে পারে যখন এটি ল্যামব্ডা অভিব্যক্তিতে ব্যবহৃত হয়, তবে এটি অবজেক্টের প্রারম্ভিক অবস্থা পরিবর্তন করে না।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সুতরাং, ফাংশন`let`একটি অবজেক্টে অপারেশন করতে, একটি প্রাপ্ত ফলাফল পেতে এবং মূল অবজেক্টের আখণ্ডতা সংরক্ষণ করতে শালীন উপায়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>JVM মেমো</title>
            <link >https://cheroliv.com//blog/2022/0052_memo_jvm_post.html</link>
            <pubDate>Sat, 28 May 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0052_memo_jvm_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;olist arabic&amp;quot;&amp;gt;
&amp;lt;ol class=&amp;quot;arabic&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#char&amp;quot;&amp;gt;স্ট্রিং এবং অক্ষর&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#math&amp;quot;&amp;gt;সংখ্যা এবং গণিত&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#date&amp;quot;&amp;gt;তারিখ এবং সময়&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#java8date&amp;quot;&amp;gt;তারিখ এবং সময় java8&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#arrCol&amp;quot;&amp;gt;অ্যারে ও সংগ্রহ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#sysProp&amp;quot;&amp;gt;System.Properties&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#threads&amp;quot;&amp;gt;থ্রেড&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#regex&amp;quot;&amp;gt;নিয়মিত অভিব্যক্তি&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;char&amp;quot;&amp;gt;স্ট্রিং এবং অক্ষর&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.text.Collator
import java.util.*
import kotlin.test.*

class StringsTest {
    @Test
    fun `chaines de caractères et caractères`() {
        //inférence de type
        val s = &amp;quot;C&amp;#39;est&amp;quot;
        assertEquals(&amp;quot;C&amp;#39;est&amp;quot;, s)

        //concaténation
        val t: String = s + &amp;quot; le moment.&amp;quot;
        assertEquals(&amp;quot;C&amp;#39;est le moment.&amp;quot;, t)

        // StringBuilder
        val t1: String = s + buildString { append(&amp;quot; le moment.&amp;quot;) }
        assertEquals(&amp;quot;C&amp;#39;est le moment.&amp;quot;, t1)

        //interpolation
        val t2 = &amp;quot;$s le moment.&amp;quot;
        assertEquals(&amp;quot;C&amp;#39;est le moment.&amp;quot;, t2)

        //multiligne chaine de caractères
        val t3 = &amp;quot;&amp;quot;&amp;quot;$s le moment.&amp;quot;&amp;quot;&amp;quot;
        assertEquals(&amp;quot;C&amp;#39;est le moment.&amp;quot;, t3)

        //conversion de type
        val t4 = t + &amp;quot; &amp;quot; + 23.4
        assertEquals(&amp;quot;C&amp;#39;est le moment. 23.4&amp;quot;, t4)

        val t5 = &amp;#39;C&amp;#39;.toString()
        assertEquals(&amp;quot;C&amp;quot;, t5)

        //taille de la chaine de caractères
        assertEquals(16, t.length)

        //sous-chaine d&amp;#39;une chaine de caractères

        //retourne une chaine de caractères contenant,
        //les caractères aux positions x à y-1
        //sub = t.substring(x, y)

        //t = &amp;quot;C&amp;#39;est le moment.&amp;quot;
        //retourne les caractères 6 et 7
        var sub = t.substring(6, 8)
        assertEquals(&amp;quot;le&amp;quot;, sub)

        //retourne les caractères 0 à 4
        sub = t.substring(0, 5)
        assertEquals(&amp;quot;C&amp;#39;est&amp;quot;, sub)

        //la longueur d&amp;#39;une sous-chaine est toujours égale (y-x)
        val numChars = sub.length
        assertEquals(5 - 0, numChars)

        //extraction des caractères d&amp;#39;une chaine
        assertEquals(&amp;#39;e&amp;#39;, t.elementAt(2))
        assertEquals(&amp;#39;e&amp;#39;, t.get(2))
        assertEquals(&amp;#39;e&amp;#39;, t[2])

        //conversion d&amp;#39;une chaine en tableau de caractères
        val ca = t.toCharArray()
        assertEquals(t.length, ca.size)
        t.mapIndexed { index, char -&amp;amp;gt; assertEquals(char, ca[index]) }

        //place les 4 premiers caractères de t1
        //dans le tableau ca a la position 2
        (t as java.lang.String).getChars(
            /* srcBegin = */ 0,
            /* srcEnd = */ 3,
            /* dst = */ ca,
            /* dstBegin = */ 1
        )
        assertEquals(&amp;quot;CC&amp;#39;et le moment.&amp;quot;, String(ca))
        //colle tous les caractères dans un meme string
        assertEquals(&amp;quot;CC&amp;#39;et le moment.&amp;quot;, ca.concatToString())

        //to lower case
        assertEquals(&amp;quot;c&amp;#39;est le moment.&amp;quot;, t.toLowerCase())
        assertEquals(&amp;quot;c&amp;#39;est le moment.&amp;quot;, t.lowercase())

        //to upper case
        assertEquals(&amp;quot;C&amp;#39;EST LE MOMENT.&amp;quot;, t.toUpperCase())
        assertEquals(&amp;quot;C&amp;#39;EST LE MOMENT.&amp;quot;, t.uppercase())

        //comparaison de chaines de caractères
        //t = &amp;quot;C&amp;#39;est le moment.&amp;quot;
        assertFalse(t.equals(&amp;quot;hello&amp;quot;))
        assertFalse(t == &amp;quot;hello&amp;quot;)

        //ignore la casse
        assertTrue(t.equalsIgnoreCase(&amp;quot;C&amp;#39;EST LE MOMENT.&amp;quot;))
        assertTrue(t.equals(&amp;quot;C&amp;#39;EST LE MOMENT.&amp;quot;, ignoreCase = true))

        //démarre par
        assertTrue(t.startsWith(&amp;quot;C&amp;#39;est&amp;quot;))
        //se finit par
        assertTrue(t.endsWith(&amp;quot;le moment.&amp;quot;))

        //compareTo
        //retourne une valeur &amp;amp;lt; 0, car s est
        //alphabétiquement avant &amp;quot;N&amp;#39;est&amp;quot;
        val r1: Int = s.compareTo(&amp;quot;N&amp;#39;est&amp;quot;)
        assertTrue(r1 &amp;amp;lt; 0)

        //variante ignorant la casse
        val r1Prime: Int = (s as java.lang.String).compareToIgnoreCase(&amp;quot;n&amp;#39;est&amp;quot;)
        assertTrue(r1Prime &amp;amp;lt; 0)

        //retourne 0 si les chaines sont equivalente
        val r2: Int = s.compareTo(&amp;quot;C&amp;#39;est&amp;quot;)
        assertEquals(0, r2)

        //retourne une valeur &amp;amp;gt; 0 car s vient apres &amp;quot;B&amp;#39;est&amp;quot;
        val r3: Int = s.compareTo(&amp;quot;B&amp;#39;est&amp;quot;)
        assertTrue(r3 &amp;amp;gt; 0)

        //Recherche de caractères et de sous-chaines de caractères

        //recherche de caractères
        //position du premier caractères &amp;#39;t&amp;#39;
        var pos = t.indexOf(&amp;#39;t&amp;#39;)
        assertEquals(4, pos)

        //position du suivant
        pos = t.indexOf(&amp;#39;t&amp;#39;, pos + 1)
        assertEquals(14, pos)

        //retour d&amp;#39;érreur -1 si absence de suivant
        pos = t.indexOf(&amp;#39;t&amp;#39;, pos + 1)
        assertEquals(-1, pos)

        //position du dernier &amp;#39;t&amp;#39; dans la chaine: 14
        pos = t.lastIndexOf(&amp;#39;t&amp;#39;)
        assertEquals(14, pos)

        //recherche de &amp;#39;t&amp;#39; vers l&amp;#39;arrière a partir du caractères 13
        pos = t.lastIndexOf(&amp;#39;t&amp;#39;, pos - 1)
        assertEquals(4, pos)

        //recherche de sous-chaines
        //retourne 2
        pos = t.indexOf(&amp;quot;est&amp;quot;)
        assertEquals(2, pos)

        //&amp;quot;est&amp;quot; n&amp;#39;apparait qu&amp;#39;une seule fois: retourne -1
        pos = t.indexOf(&amp;quot;est&amp;quot;, pos + 1)
        assertEquals(-1, pos)

        //recherche d&amp;#39;une sous-chaine depuis l&amp;#39;arrière
        //t = &amp;quot;C&amp;#39;est le moment.&amp;quot;
        //retourne 6
        pos = t.lastIndexOf(&amp;quot;le &amp;quot;)
        assertEquals(6, pos)

        //extrait depuis la position 9,
        //renvoi toute la chaine après &amp;quot;le &amp;quot;
        val noun = t.substring(pos + 3)
        assertEquals(-1, noun.indexOf(&amp;quot;le &amp;quot;))

        //remplacement de toutes les instances d&amp;#39;un caractère
        //par un autre caractère
        //ne fonctionne que avec les caractères, pas les chaines
        val exclaim: String = t.replace(&amp;#39;.&amp;#39;, &amp;#39;!&amp;#39;)
        assertEquals(&amp;#39;!&amp;#39;, exclaim.get(exclaim.length - 1))
        assertEquals(exclaim.length - 1, exclaim.indexOf(&amp;#39;!&amp;#39;))
        assertEquals(-1, exclaim.indexOf(&amp;#39;.&amp;#39;))

        //suppression des espaces blancs
        //au début et à la fin d&amp;#39;une chaine
        val noextraspaces = t.trim()
        assertNotEquals(&amp;#39; &amp;#39;, noextraspaces.get(0))
        assertNotEquals(&amp;#39; &amp;#39;, noextraspaces.get(noextraspaces.length - 1))

        //extraction des instances uniques de chaines de caractères
        //avec intern()
        val s1 = s.intern()
        assertEquals(s, s1)
        val s2 = &amp;quot;C&amp;#39;est&amp;quot;.intern()
        assertEquals(&amp;quot;C&amp;#39;est&amp;quot;, s2)
        assertEquals(s1, s2)

        //StringBuilder pour manipuler les caractères d&amp;#39;une chaine de caractères
        //crée un tampon StringBuilder à partir d&amp;#39;une chaine de caractères
        val b = StringBuilder(&amp;quot;N&amp;#39;est&amp;quot;)

        //extrait et définit des caractères individuel du tampon StringBuilder
        //le caractères à l&amp;#39;index 0
        val c: Char = b.get(0)
        assertEquals(&amp;#39;N&amp;#39;, c)

        //modifier le premier caractère de la chaine
        b.setCharAt(0, &amp;#39;C&amp;#39;)
        assertEquals(s, b.toString())

        //ajouter des données à un StringBuilder
        b.append(&amp;#39; &amp;#39;)
        b.append(&amp;quot;le moment.&amp;quot;)
        b.append(23)

        //insère des chaines de caractères ou autre dans le StringBuilder
        b.insert(6, &amp;quot;pas &amp;quot;)
        assertEquals(&amp;quot;C&amp;#39;est pas le moment.23&amp;quot;, b.toString())

        //remplace un sous ensemble de caractères
        //avec une chaine de caractères donnée
        b.replace(2, 9, &amp;quot;est&amp;quot;)
        assertEquals(&amp;quot;C&amp;#39;est le moment.23&amp;quot;, b.toString())

        //supprime les caractères
        b.delete(15, 18)
        assertEquals(&amp;quot;C&amp;#39;est le moment&amp;quot;, b.toString())
        b.deleteCharAt(2)
        assertEquals(&amp;quot;C&amp;#39;st le moment&amp;quot;, b.toString())

        //insert à la postion 2 et décale reste à droite(sans perte de données)
        b.insert(2, &amp;#39;e&amp;#39;)

        //tronque la taille de la donnée
        b.setLength(5)
        assertEquals(&amp;quot;C&amp;#39;est&amp;quot;, b.toString())

        //inverse les caractères de la chaine
        b.reverse()
        assertEquals(&amp;quot;tse&amp;#39;C&amp;quot;, b.toString())

        //écrase le StringBuilder, pret à etre réutilisé
        b.setLength(0)
        assertEquals(&amp;quot;&amp;quot;, b.toString())

        //java.util.StringTokenizer pour fragmenter une chaine
        //de caractères en un ensemble de mots
        var st = StringTokenizer(t)
        //nb d&amp;#39;items encore présentent dans la file
        assertEquals(3, st.countTokens())

        //est ce que il y a encore des items dans la file
        assertTrue(st.hasMoreTokens())

        //récupérer le token courrant
        assertEquals(&amp;quot;C&amp;#39;est&amp;quot;, st.nextToken())
        assertEquals(&amp;quot;le&amp;quot;, st.nextToken())
        assertEquals(&amp;quot;moment.&amp;quot;, st.nextToken())
        assertFalse(st.hasMoreTokens())
        assertEquals(0, st.countTokens())

        //extraire des occurences de mots délimités
        //par des caractères autres que des expaces.
        val str = &amp;quot;a:b:c:d&amp;quot;
        st = StringTokenizer(str, &amp;quot;:&amp;quot;)
        assertEquals(4, st.countTokens())
        assertTrue(st.hasMoreTokens())
        assertEquals(&amp;quot;a&amp;quot;, st.nextToken())
        assertEquals(&amp;quot;b&amp;quot;, st.nextToken())
        assertEquals(&amp;quot;c&amp;quot;, st.nextToken())
        assertEquals(&amp;quot;d&amp;quot;, st.nextToken())
        assertFalse(st.hasMoreTokens())
        assertEquals(0, st.countTokens())


        //text=&amp;quot;C&amp;#39;est le moment.&amp;quot;
        val text = t.toCharArray()
        var p = 0

        //sauter les espaces de tete
        //pour ramener p à la position du premier caractère imprimable
        while ((p &amp;amp;lt; text.size) &amp;amp;amp;&amp;amp;amp;
            (Character.isWhitespace(text[p]))
        ) p++
        assertEquals(0, p)
        assertEquals(&amp;quot;C&amp;#39;est le moment.&amp;quot;, text.concatToString())

        //met le premier mot du texte en majuscule
        while (p &amp;amp;lt; text.size &amp;amp;amp;&amp;amp;amp; Character.isLetter(text[p])) {
            text[p] = Character.toUpperCase(text[p])
            p++
        }
        assertEquals(1, p)
        assertEquals(&amp;#39;C&amp;#39;, text[0])
        assertTrue(Character.isUpperCase(text[0]))
        assertFalse(Character.isLetter(text[1]))

        //comparer des chaines de caractères
        // avec les contrainte la locale système
        val col = Collator.getInstance()
        //le résulat est négatif car chica
        //est avant chico dans l&amp;#39;ordre alphabétique
        assertTrue(col.compare(&amp;quot;chica&amp;quot;, &amp;quot;chico&amp;quot;) &amp;amp;lt; 0)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;math&amp;quot;&amp;gt;সংখ্যা এবং গণিত&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.math.BigInteger
import java.security.SecureRandom
import java.text.NumberFormat
import java.util.*
import kotlin.test.*

class NumbersMathTest {
    @Test
    fun `Nombres et Math`() {
        //Constantes utiles
        Byte.MIN_VALUE
        Byte.MAX_VALUE
        Short.MIN_VALUE
        Short.MAX_VALUE
        Float.MIN_VALUE
        Float.MAX_VALUE
        Math.PI
        Math.E
        val s = &amp;quot;-42&amp;quot;
        //conversion de chaine de caractères
        //vers un nombre, si possible.
        var b: Byte = java.lang.Byte.parseByte(s)
        var sh: Short = java.lang.Short.parseShort(s)
        var i: Int = java.lang.Integer.parseInt(s)
        var l: Long = java.lang.Long.parseLong(s)
        var f: Float = java.lang.Float.parseFloat(s)
        var d: Double = java.lang.Double.parseDouble(s)

        //valeur exacte
        val f_exac = java.lang.Float.valueOf(s)
        val d_exac = java.lang.Double.valueOf(s)

        //les routines de conversions entière gérent
        //les nombres dans diverses bases.
        //1011 en binare est égal a 11 en base dix
        b = java.lang.Byte.parseByte(&amp;quot;1011&amp;quot;, 2)
        assertEquals(11, b)
        //ff en base 16(hexa) est égal à 255 en base dix.
        sh = java.lang.Short.parseShort(&amp;quot;ff&amp;quot;, 16)
        assertEquals(255, sh)

        //la méthode valueOf() peut gérer des bases arbitraires.
        i = java.lang.Integer.valueOf(&amp;quot;egg&amp;quot;, 17).toInt()
        assertEquals(4334, i)

        //la méthode decode() gére les representations octale,
        //décimal, hexadécimal, en fonction du préfixe numérique
        //de la chaine de caractères
        //un 0 de tete signifie base 8
        //un 0x de tete signifie base 16
        //les autres sont en base 10
        val sho = java.lang.Short.decode(&amp;quot;0377&amp;quot;)

        //la classe Integer peut convertir les nombres
        //en diverses chaines de caractères.
        val decimal = java.lang.Integer.toString(42)
        assertEquals(&amp;quot;42&amp;quot;, decimal)

        val decimal_ = 42.toString()
        assertEquals(&amp;quot;42&amp;quot;, decimal_)

        val binary = java.lang.Integer.toBinaryString(42)
        assertEquals(&amp;quot;101010&amp;quot;, binary)

        val octal = java.lang.Integer.toOctalString(42)
        assertEquals(&amp;quot;52&amp;quot;, octal)

        val hex = java.lang.Integer.toHexString(42)
        assertEquals(&amp;quot;2a&amp;quot;, hex)

        val base36 = java.lang.Integer.toString(42, 36)
        assertEquals(&amp;quot;16&amp;quot;, base36)

        val base36_ = 42.toString(36)
        assertEquals(&amp;quot;16&amp;quot;, base36_)

        //java.text.NumberFormat effectue la conversion
        // d&amp;#39;une maniere spécifique aux parametres locaux
        //sans parametre prend la local systeme comme reference
        val nf = NumberFormat.getNumberInstance(Locale.FRANCE)
        val formatted_number = nf.format(9876543.21)
        assertNotEquals(&amp;quot;9876543.21&amp;quot;, formatted_number)

        //parse la chaine de caractères en fonction des parametres locaux(fr)
        val n = nf.parse(&amp;quot;1234567,89&amp;quot;)
        assertEquals(1234567.89, n)

        //les valeurs monétaires sont parfois formaté
        // d&amp;#39;une maniere differente des nombres
        val money_format = NumberFormat.getCurrencyInstance(Locale.FRANCE)
        assertEquals(&amp;quot;123,40 €&amp;quot;, money_format.format(1234.56))

        //java.lang.Math
        d = Math.toRadians(27.0)
        d = Math.cos(d)
        d = Math.sqrt(d)
        d = Math.log(d)
        d = Math.exp(d)
        d = Math.pow(10.0, d)
        d = Math.atan(d)
        d = Math.toDegrees(d)
        //arrondi au dessus
        val up = Math.ceil(d)
        //arrondi au dessous
        val down = Math.floor(d)
        //arrondi au plus près
        val nearest = Math.round(d)

        //java.lang.Math.Random()
        val r = Math.random()
        assertTrue(r &amp;amp;gt;= 0.0 &amp;amp;amp;&amp;amp;amp; r &amp;amp;lt; 1.0)

        //créé un nouvel objet Random, en l&amp;#39;initialisant
        //avec l&amp;#39;heure courante
        val generator = java.util.Random(System.currentTimeMillis())

        //prochaine valeur aléatoire de taille double
        d = generator.nextDouble()
        assertTrue((d &amp;amp;gt;= 0.0) &amp;amp;amp;&amp;amp;amp; (d &amp;amp;lt; 1.0))


        //prochaine valeur aléatoire de taille float
        f = generator.nextFloat()
        assertTrue((f &amp;amp;gt;= 0.0) &amp;amp;amp;&amp;amp;amp; (f &amp;amp;lt; 1.0))


        //prochaine valeur aléatoire de taille long
        l = generator.nextLong()
        assertTrue(
            (Math.abs(l) &amp;amp;lt;= Long.MAX_VALUE) &amp;amp;amp;&amp;amp;amp;
                    (Math.abs(l) &amp;amp;gt;= 0)
        )


        //prochaine valeur aléatoire de taille int
        i = generator.nextInt()
        assertTrue(
            (Math.abs(i) &amp;amp;lt;= java.lang.Integer.MAX_VALUE) &amp;amp;amp;&amp;amp;amp;
                    (Math.abs(i) &amp;amp;gt;= 0)
        )

        val limit = 100
        //prochaine valeur aléatoire de taille int
        //la limit max du ramdom est ramené à limit
        //et la limit min est 0
        i = generator.nextInt(limit)
        assertTrue(i in 0 until limit)


        //prochaine valeur aléatoire de taille booléen
        val bool = generator.nextBoolean()
        assertNotNull(bool)


        //valeur moyenne 0.0, déviation standard 1.0
        d = generator.nextGaussian()


        //randoms bytes
        //rempli un tableau avec des valeurs byte aléatoires
        val b_arr = ByteArray(128)
        generator.nextBytes(b_arr)
        b_arr.iterator().forEachRemaining {
            assertTrue(
                it &amp;amp;lt;= Byte.MAX_VALUE &amp;amp;amp;&amp;amp;amp;
                        it &amp;amp;gt;= Byte.MIN_VALUE
            )
        }

        //java.security.SecureRandom pour les nombres aléatoires
        //utilisé en cryptographie
        val secure_generator = SecureRandom()
        //le générateur génère sa propre tete de liste sur 16 octets
        secure_generator.setSeed(secure_generator.generateSeed(16))
        val sec_b_arr = ByteArray(128)
        secure_generator.nextBytes(sec_b_arr)
        sec_b_arr.iterator().forEachRemaining {
            assertTrue(
                it &amp;amp;lt;= java.lang.Byte.MAX_VALUE &amp;amp;amp;&amp;amp;amp;
                        it &amp;amp;gt;= java.lang.Byte.MIN_VALUE
            )
        }

        //java.math.BigDecimal java.math.BigInteger
        //pour travailler sur des grandes valeurs.
        //calcule de la factorielle de 1000
        var total = BigInteger.valueOf(1)
        (2..1000).forEach {
            total = total.multiply(BigInteger.valueOf(it.toLong()))
        }
        assertTrue(total.toString().length == 2568)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;date&amp;quot;&amp;gt;তারিখ এবং সময়&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.text.DateFormat
import java.text.SimpleDateFormat
import java.time.Instant
import java.util.*
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertTrue

class DatesHoursTest {
    @Test
    fun `Dates et heures`() {
        //l&amp;#39;heure courante en millisecondes
        val t0 = System.currentTimeMillis()
        //une autre représentation de la meme information
        val now = java.util.Date()
        //converti un objet java.util.Date en une valeur long.
        val t1 = now.getTime()
        assertTrue(t1 &amp;amp;gt; Instant.EPOCH.toEpochMilli())
        //kotlin property access syntaxe style
        val t1_prime = now.time

        //java.text.DateFormat
        //affiche la date d&amp;#39;aujourd&amp;#39;hui en utilisant le format
        //par défaut des parametres locaux
        val defaultDateFormat = DateFormat.getDateInstance()
        //personnalisation du formatage et de la locale
        val df = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRANCE)
        val localeFormattedDate = df.format(Date())

        //constantes pour les styles de pattern de formatage
        assertEquals(0, DateFormat.FULL)
        assertEquals(1, DateFormat.LONG)
        assertEquals(2, DateFormat.MEDIUM)
        assertEquals(3, DateFormat.SHORT)
        assertEquals(2, DateFormat.DEFAULT)

        //utilise pour l&amp;#39;heure un format abrégé avec
        //des parametres personnalisés
        val tf = DateFormat.getTimeInstance(
            DateFormat.SHORT,
            Locale.FRANCE
        )
        //affiche l&amp;#39;heure en utilisant le format de tf
        val shortTime = tf.format(Date())
        assertTrue(shortTime.contains(&amp;#39;:&amp;#39;))

        //affiche la date et l&amp;#39;heure en utilisant
        //un format détaillé
        val longTimeStamp = DateFormat.getDateTimeInstance(
            DateFormat.FULL,
            DateFormat.FULL,
        )
        assert(longTimeStamp.format(Date()).isNotEmpty())

        //utilisez java.text.SimpleDateFormat
        //pour définir votre propre modele de formatage
        val customFormat = SimpleDateFormat(&amp;quot;yyyy.MM.dd&amp;quot;)
        assertEquals(10, customFormat.format(Date()).length)

        //DateFormat peut également parser les date contenu dans des chaines
        val kotlinAnnounceDate = customFormat.parse(&amp;quot;2019.05.08&amp;quot;)

        //la class Date et sa représentation en millisecondes
        //n&amp;#39;autorise qu&amp;#39;une forme trés simple d&amp;#39;arithmétique
        //on ajoute 3 600 000 millisecondes à l&amp;#39;heure courante
        val anHourFromNow = now.getTime() + (60 * 60 * 1000)
        assert(anHourFromNow &amp;amp;gt; now.getTime())

        //java.util.Calendar
        //pour manipuler les dates et heures de facon plus sophistiquée
        //instanciation selon les parametres locaux
        //et le fuseau horaire local
        val calendar = Calendar.getInstance()
        //initialisation du calendrier à la date de maintenant
        calendar.setTime(now)
        //détermine le jour de l&amp;#39;année auquel correspond la date courante
        val dayOfYear = calendar.get(Calendar.DAY_OF_YEAR)
        assert(dayOfYear &amp;amp;lt; 366)
        //réinitialisation de la date courante
        calendar.set(2019, Calendar.MAY, 8)
        assertEquals(4, calendar.get(Calendar.DAY_OF_WEEK))

        //à quel jour du mois correspond le deuxieme mercredi de mai 2019
        //set(key,value)
        calendar.set(Calendar.YEAR, 2019)
        calendar.set(Calendar.MONTH, Calendar.MAY)
        calendar.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY)
        //defini à quel (n=2) semaine du mois est la date
        calendar.set(Calendar.DAY_OF_WEEK_IN_MONTH, 2)
        //extrait le jour du mois
        val dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH)
        assertEquals(8, dayOfMonth)

        calendar.setTime(kotlinAnnounceDate)
        //ajoute 30j à la date
        calendar.add(Calendar.DATE, 30)
        val monthAfter = calendar.getTime()
        //date est elle avant ou apres?
        assertTrue(monthAfter.after(kotlinAnnounceDate))
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;java8date&amp;quot;&amp;gt;তারিখ এবং সময় java8&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;Java 8 নতুন প্যাকেজ &amp;lt;code&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;java.time&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;/code&amp;gt; পেশ করে, যা মৌলিক ক্লাসগুলো ধারণ করে যারা&amp;lt;br&amp;gt;
বেশিরভাগ ডেভেলপাররা কাজ করে। এটি আরও চারটি উপ-প্যাকেজ আছে:&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;java.time.chrono&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;
বিকল্প কালনিরয়ন যা ডেভেলপারদের ব্যবহার করা হয় ক্যালেন্ডার সিস্টেম যা না&amp;lt;br&amp;gt;
ISO মানক অনুসরণ করলে &amp;lt;em&amp;gt;(ইন্টারঅ্যাক্ট)&amp;lt;/em&amp;gt;(করে)&amp;lt;em&amp;gt;_(সাথে) একটি উদাহরণ একটি জাপানী ক্যালেন্ডার&amp;lt;br&amp;gt;
স্থায়ী সিস্টেম।&amp;lt;br&amp;gt;
&amp;lt;strong&amp;gt;_java.time.format&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;
এটি DateTimeFormatter ধারণ করে যা তারিখ ও সময় অবজেক্টগুলো রূপান্তর করতে ব্যবহৃত হয়&amp;lt;br&amp;gt;
একটি স্ট্রিংএ এবং তারিখ ও সময় বস্তুগুলোর স্ট্রিং বিশ্লেষণ করার জন্যও।&amp;lt;br&amp;gt;
&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;java.time.temporal&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;
মৌলিক তারিখ ও সময় ক্লাসগুলোর প্রয়োজনীয় ইন্টারফェসগুলো অন্তর্ভুক্ত করে এবং তাছড়া&amp;lt;br&amp;gt;
অবস্ট্র্যাকশন (যেমন কোয়েরি এবং অ্যাডজাস্টর) উন্নত অপারেশনের জন্য তারিখের সাথে।&amp;lt;br&amp;gt;
&amp;lt;strong&amp;gt;&amp;lt;em&amp;gt;java.time.zone&amp;lt;/em&amp;gt;&amp;lt;/strong&amp;gt;&amp;lt;br&amp;gt;
অधлежаী টাইম জোন নিয়মের জন্য ব্যবহৃত ক্লাসগুলো;&amp;lt;br&amp;gt;
বিকাশকারীদের মাঝারি এই প্যাকেজের প্রয়োজন হবে না。&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/java8-date-time.png&amp;quot; alt=&amp;quot;java8 date time&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.time.LocalDate
import java.time.Month
import java.time.Period
import java.time.YearMonth
import java.time.temporal.*
import java.util.HashMap
import java.util.stream.Collectors
import kotlin.test.Test

class DatesHoursJava8Test {
    class BirthdayDiary {
        private val birthdays: MutableMap&amp;amp;lt;String, LocalDate&amp;amp;gt;

        init {
            birthdays = HashMap()
        }

        fun addBirthday(
            name: String, day: Int, month: Int,
            year: Int
        ): LocalDate {
            val birthday: LocalDate = LocalDate.of(year, month, day)
            birthdays[name] = birthday
            return birthday
        }

        fun getBirthdayFor(name: String): LocalDate? {
            return birthdays[name]
        }

        fun getAgeInYear(name: String, year: Int): Int {
            val period: Period = Period.between(
                birthdays[name],
                birthdays[name]!!.withYear(year)
            )
            return period.getYears()
        }

        fun getFriendsOfAgeIn(age: Int, year: Int): Set&amp;amp;lt;String&amp;amp;gt; {
            return birthdays.keys.stream()
                .filter { p: String -&amp;amp;gt; getAgeInYear(p, year) == age }
                .collect(Collectors.toSet())
        }

        fun getDaysUntilBirthday(name: String): Int {
            val period: Period = Period.between(
                LocalDate.now(),
                birthdays[name]
            )
            return period.getDays()
        }

        fun getBirthdaysIn(month: Month): Set&amp;amp;lt;String&amp;amp;gt; {
            return birthdays.entries.stream()
                .filter { (_, value): Map.Entry&amp;amp;lt;String, LocalDate&amp;amp;gt; -&amp;amp;gt; value.getMonth() === month }
                .map&amp;amp;lt;String&amp;amp;gt; { (key): Map.Entry&amp;amp;lt;String, LocalDate&amp;amp;gt; -&amp;amp;gt; key }
                .collect(Collectors.toSet())
        }

        val birthdaysInCurrentMonth: Set&amp;amp;lt;String&amp;amp;gt;
            get() = getBirthdaysIn(LocalDate.now().getMonth())
        val totalAgeInYears: Int
            get() = birthdays.keys.stream()
                .mapToInt { p: String -&amp;amp;gt;
                    getAgeInYear(
                        p,
                        LocalDate.now().getYear()
                    )
                }
                .sum()
    }

    //Les ajusteurs modifient les objets de date et d&amp;#39;heure. Supposons, par exemple, que nous voulions
    //renvoie le premier jour d&amp;#39;un trimestre qui contient un horodatage particulier :
    class FirstDayOfQuarter : TemporalAdjuster {
        override fun adjustInto(temporal: Temporal): Temporal? {
            val currentQuarter: Int = YearMonth.from(temporal)
                .get(IsoFields.QUARTER_OF_YEAR)
            return when (currentQuarter) {
                1 -&amp;amp;gt; LocalDate.from(temporal)
                    .with(TemporalAdjusters.firstDayOfYear())

                2 -&amp;amp;gt; LocalDate.from(temporal)
                    .withMonth(Month.APRIL.value)
                    .with(TemporalAdjusters.firstDayOfMonth())

                3 -&amp;amp;gt; LocalDate.from(temporal)
                    .withMonth(Month.JULY.value)
                    .with(TemporalAdjusters.firstDayOfMonth())

                4 -&amp;amp;gt; LocalDate.from(temporal)
                    .withMonth(Month.OCTOBER.value)
                    .with(TemporalAdjusters.firstDayOfMonth())

                else -&amp;amp;gt; null
            }
        }
    }

    enum class Quarter {
        FIRST, SECOND, THIRD, FOURTH
    }

    //Dans quel trimestre de l&amp;#39;année cette date se situe-t-elle ?
    class QuarterOfYearQuery : TemporalQuery&amp;amp;lt;Quarter&amp;amp;gt; {
        override fun queryFrom(temporal: TemporalAccessor): Quarter {
            val now = LocalDate.from(temporal)
            return if (now.isBefore(now.with(Month.APRIL).withDayOfMonth(1)))
                Quarter.FIRST
            else if (now.isBefore(
                    now.with(Month.JULY)
                        .withDayOfMonth(1)
                )
            ) Quarter.SECOND else if (now.isBefore(
                    now.with(Month.NOVEMBER)
                        .withDayOfMonth(1)
                )
            ) Quarter.THIRD else Quarter.FOURTH
        }
    }

    @Test
    fun `Dates et heures après java 8`() {
        val today = LocalDate.now()
        val currentMonth = today.month
        val firstMonthOfQuarter = currentMonth.firstMonthOfQuarter()

        val q = QuarterOfYearQuery()
        // Direct
        var quarter: Quarter? = q.queryFrom(LocalDate.now())
        println(quarter)
        // Indirect
        quarter = LocalDate.now().query(q)
        println(quarter)


        val now = LocalDate.now()
        val fdoq: Temporal = now.with(FirstDayOfQuarter())
        println(fdoq)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;arrCol&amp;quot;&amp;gt;অ্যারে ও সংগ্রহ&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/collections_classes_inheritance.png&amp;quot; alt=&amp;quot;Classes de collections et héritage&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package playground.programming

import java.util.*
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertFalse
import kotlin.test.assertTrue

class ArrayCollectionTest {
    @Test
    fun `Tableaux, collections`() {
        //Tableau
        //java.util.Arrays définit d&amp;#39;utiles méthodes de manipulation de tableaux,
        //y compris de tri et de recherche au sein d&amp;#39;un tableau
        val intArray = arrayOf(10, 5, 7, -3)
        //tri le tableau
        Arrays.sort(intArray)
        var pos = Arrays.binarySearch(intArray, 7)
        //la valeur 7 est trouvé a l&amp;#39;index 2
        assertEquals(2, pos)
        //12 pas trouvé retourne une valeur negative
        assert(Arrays.binarySearch(intArray, 12) &amp;amp;lt; 0)

        //les tableaux peuvent également etre triés
        //et faire l&amp;#39;objet d&amp;#39;une recherche
        val stringArray = arrayOf(&amp;quot;le&amp;quot;, &amp;quot;moment&amp;quot;, &amp;quot;c&amp;#39;est&amp;quot;)
        assertEquals(&amp;quot;c&amp;#39;est&amp;quot;, stringArray[2])
        assertEquals(&amp;quot;le&amp;quot;, stringArray[0])
        assertEquals(&amp;quot;moment&amp;quot;, stringArray[1])
        Arrays.sort(stringArray)
        assertEquals(&amp;quot;c&amp;#39;est&amp;quot;, stringArray[0])
        assertEquals(&amp;quot;le&amp;quot;, stringArray[1])
        assertEquals(&amp;quot;moment&amp;quot;, stringArray[2])

        //Arrays.equals() compare tous les éléments de deux tableaux
        //Arrays.clone() copie tous les elements du tableau dans un autre
        stringArray.forEachIndexed { i, it -&amp;amp;gt; assertEquals(it, stringArray.clone()[i]) }

        val data = ByteArray(100)
        //Arrays.fill() initialise tous les éléments des deux tableaux
        //initalise tous les éléments à -1
        Arrays.fill(data, -1)
        data.forEach { assertEquals(-1, it) }

        //attribue aux éléments 5, 6, 7, 8 et 9 la valeur -2
        Arrays.fill(data, 5, 10, -2)
        ((5 until (10 - 1))).forEach { assertEquals(-2, data[it]) }

        //récupère le type de data
        val type = data::class.java
        //est ce que data est un tableau?
        assertTrue(type.isArray())
        //est ce que data est un tableau de byte
        assertEquals(Byte::class.java, type.getComponentType())

        //Collection
        val s = java.util.HashSet&amp;amp;lt;String&amp;amp;gt;()
        s.add(&amp;quot;test&amp;quot;)
        assertTrue(s.contains(&amp;quot;test&amp;quot;))
        assertFalse(s.contains(&amp;quot;test2&amp;quot;))
        s.remove(&amp;quot;test&amp;quot;)
        assertFalse(s.contains(&amp;quot;test&amp;quot;))

        val ss = TreeSet&amp;amp;lt;String&amp;amp;gt;()
        ss.add(&amp;quot;b&amp;quot;)
        ss.add(&amp;quot;a&amp;quot;)
        ss.iterator().forEach { assertTrue(it == &amp;quot;a&amp;quot; || it == &amp;quot;b&amp;quot;) }

        //liste doublement chainée
        var dll: List&amp;amp;lt;String&amp;amp;gt; = LinkedList&amp;amp;lt;String&amp;amp;gt;()

        //plus efficace
        val l = java.util.ArrayList&amp;amp;lt;String&amp;amp;gt;()
        l.addAll(ss)
        l.addAll(1, ss)

        val obj = l.get(1)
        val obj_prime = l[1]
        assertEquals(obj, obj_prime)

        l.set(3, &amp;quot;nouvel élément&amp;quot;)
        l.add(&amp;quot;test&amp;quot;)
        l.add(0, &amp;quot;test2&amp;quot;)
        l.removeAt(1)
        l.remove(&amp;quot;a&amp;quot;)
        assertFalse(l.contains(&amp;quot;a&amp;quot;))
        l.removeAll(ss)
        assertFalse(l.containsAll(ss))
        assertFalse(l.isEmpty())
        assertTrue(l.isNotEmpty())


        val sublist = l.subList(1, 3)
        val elements = l.toArray()
        l.clear()

        val m = HashMap&amp;amp;lt;String, Integer&amp;amp;gt;()
        m.put(&amp;quot;clé&amp;quot;, Integer(42))
        m[&amp;quot;clé&amp;quot;] = Integer(42)
        val value: Integer = m.get(&amp;quot;clé&amp;quot;)!!
        assertEquals(Integer(42), value)
        m.remove(&amp;quot;clé&amp;quot;)
        assertTrue(m.isEmpty())
        val keys = m.keys
        assertTrue(keys.isEmpty())


        val set = HashSet&amp;amp;lt;String&amp;amp;gt;()
        set.add(&amp;quot;key_1&amp;quot;)
        set.add(&amp;quot;key_2&amp;quot;)
        set.add(&amp;quot;key_3&amp;quot;)
        val members = set.toArray()
        assertEquals(3, members.size)
        val list = ArrayList&amp;amp;lt;String&amp;amp;gt;()
        list.add(&amp;quot;items1&amp;quot;)
        list.add(&amp;quot;items2&amp;quot;)
        list.add(&amp;quot;items3&amp;quot;)
        val items = list.toArray()
        assertEquals(3, items.size)

        //trie et recherche d&amp;#39;éléments sur les collections
        list.add(&amp;quot;clé&amp;quot;)
        //en premier on trie
        Collections.sort(list)
        //en kotlin
        list.sort()
        //en deuxieme on cherche
        //retourne l&amp;#39;index du premier trouvé sinon -1
        pos = Collections.binarySearch(list, &amp;quot;clé&amp;quot;)
        assertEquals(0, pos)
        val list1 = mutableListOf(1, 2, 3, 4, 5)
        val list2 = mutableListOf&amp;amp;lt;Int&amp;amp;gt;(0, 0, 0, 0, 0)

        //d&amp;#39;autres méthodes intéressantes concernant Collections

        //copie list1 dans list2, 2e parametre dans 1er parametre
        Collections.copy(list2, list1)
        //comparaison de la copy avec filter
        assertTrue(list1.filterIndexed { i: Int, it: Int -&amp;amp;gt; it != list2[i] }.isEmpty())
        //comparaison de la copy avec map
        list1.mapIndexed { index: Int, it: Int -&amp;amp;gt; assertEquals(it, list2[index]) }

        //rempli avec des 0
        Collections.fill(list2, 0)
        assertTrue(list2.none { it != 0 })

        //le maximum
        assertEquals(5, Collections.max(list1))

        //le minimum
        assertEquals(1, Collections.min(list1))

        //renverse
        Collections.reverse(list)
        listOf(&amp;quot;items3&amp;quot;, &amp;quot;items2&amp;quot;, &amp;quot;items1&amp;quot;, &amp;quot;clé&amp;quot;).mapIndexed { i: Int, it: String -&amp;amp;gt; assertEquals(it, list[i]) }

        //mélange la list
        Collections.shuffle(list)

        //retourne un ensemble immuable possédant un seul élément 0
        Collections.singleton(0)
        //renvoi un emballage immuable autour d&amp;#39;une liste
        Collections.unmodifiableList(list)
        //renvoi un emballage synchronisé autour d&amp;#39;une map, ensemble clé valeur
        Collections.synchronizedMap(m)

        //java.util.Properties un est objet key value
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;sysProp&amp;quot;&amp;gt;System.Properties&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html&amp;quot;&amp;gt;System.Properties আধিকারিক ডকুমেন্টেশন&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে কিছু আকর্ষণীয় বৈশিষ্ট্যের একটি তালিকা&amp;lt;br&amp;gt;
এই বৈশিষ্ট্যগুলো তথ্য পেতে আকর্ষণীয়&amp;lt;br&amp;gt;
JVM-এর হোস্ট সিস্টেমে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3333%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 3.3343%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কী&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;অর্থ&amp;lt;/strong&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;file.separator&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ফাইল পাথের উপাদানদেরকে আলাদা করার অক্ষর। এটি UNIX-এ &amp;quot;/&amp;quot; এবং Windows-এ &amp;quot;\&amp;quot;।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.class.path&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ক্লাস ফাইল অন্তর্ভুক্ত ডিরেক্টরি ও JAR আর্কাইভ খুঁজে বের করতে ব্যবহৃত পাথ। ক্লাস পাথের উপাদানগুলো path.separator সম্পত্তি দ্বারা নির্দিষ্ট প্ল্যাটফর্ম-নির্দিষ্ট অক্ষর দ্বারা পৃথক করা হয়।&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.home&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;Java Runtime Environment (JRE) ইনস্টলেশন ডিরেক্টরি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.vendor&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JRE বিক্রেতার নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.vendor.url&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JRE বেন্ডর URL&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.version&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;JRE সংস্করণ সংখ্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লাইন.সেপারেটর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপারেটিং সিস্টেম দ্বারা টেক্সট ফাইলে লাইনগুলোকে আলাদা করার জন্য ব্যবহৃত অনুক্রিম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;os.arch&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপারেটিং সিস্টেম আর্কিটেকচার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;os.name&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপারেটিং সিস্টেমের নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;os.version&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;অপারেটিং সিস্টেম সংস্করণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;পথ.বিভাজক&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;java.class.path-এ ব্যবহৃত পথ সেপারেটর অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;user.dir&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারীর কর্ম ডিরেক্টরি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারীর হোম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারীর হোম ডিরেক্টরি&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারী.নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্যবহারকারী অ্যাকাউন্টের নাম&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;threads&amp;quot;&amp;gt;থ্রেড&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.text.DateFormat
import java.util.*
import kotlin.test.Test

class ThreadsTest {

    @Test
    fun `threads test`() {
        //java.lang.Thread représente le thread fondamentale de l&amp;#39;API java
        //il existe deux manière de définir un thread
        //1) étendre la classe Thread ou une lambda en kotlin
        //2) implémenter l&amp;#39;interface Runnable,
        //      puis passer une instance de cet objet Runnable au constructeur de Thread.

        val list1: List&amp;amp;lt;Int&amp;amp;gt; = List(
            size = 45,
            init = { (1..31).random() }
        )
        println(&amp;quot;list1$list1&amp;quot;)
        //facon 1
        val t = Thread {
            Collections.sort(list1)
            println(&amp;quot;list1 sorted$list1&amp;quot;)
        }
        t.start()

        val list2 = List(
            size = 45,
            init = { (1..31).random() }
        )
        println(&amp;quot;list2$list2&amp;quot;)
        //facon 2
        val sorter = BackgroundSorter(list2)
        sorter.start()

        //priorité des threads
        //tant qu&amp;#39;un thread de niveau de priorité supérieure n&amp;#39;est pas fini
        //alors celui de niveau inférieur ne peut s&amp;#39;exécuter

        //on définit un thread avec une priorité inférieur à la normale
        t.setPriority(Thread.NORM_PRIORITY - 1)

        //ici on définit un thread avec une priorité inférieur à la priorité
        //du thread courant
        t.setPriority(Thread.currentThread().getPriority() - 1)

        //Thread.yield() fait une pause pour laisser les autres threads de meme priorité s&amp;#39;exécuter
    }

    class BackgroundSorter(private val l: List&amp;amp;lt;Int&amp;amp;gt;) : Thread() {
        override fun run() {
            Collections.sort(l)
            println(&amp;quot;list2 sorted$l&amp;quot;)
        }
    }

    //pour l&amp;#39;arrêt du thread, plutôt qu&amp;#39;utiliser la fonction Thread.stop()
    // qui laisse la memoire dans un état non controlé.
    //utiliser la méthode tel que l&amp;#39;exemple pleaseStop()
    class DummyClock(
        private val df: DateFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM),
        private var keepRunning: Boolean = true
    ) : Thread() {
        init {
            isDaemon = true
            start()
        }

        override fun run() {
            while (keepRunning) {
                println(df.format(Date()))
                try {
                    sleep(1000)
                } catch (e: InterruptedException) {
                    println(e.message)
                }
            }
        }

        fun pleaseStop() {
            keepRunning = false
        }
    }

    //java.util.Timer
    //java.util.TimerTask
    //ces classes permettent l&amp;#39;exécution de taches répétitives
    @Test
    fun `Timer et TimerTask test`() {
        DummyClock()
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;#toc&amp;quot;&amp;gt;বিষয়বস্তুর তালিকা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;regex&amp;quot;&amp;gt;নিয়মিত অভিব্যক্তি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;import java.util.*
import java.util.regex.Matcher
import java.util.regex.Pattern
import java.util.stream.Collectors
import kotlin.test.Test
import kotlin.test.assertEquals

class RegularExpressionsTest {
    @Test
    fun `expressions régulières`() {
        val p: Pattern = Pattern.compile(&amp;quot;honou?r&amp;quot;)
        val caesarUK = &amp;quot;For Brutus is an honourable man&amp;quot;
        val mUK: Matcher = p.matcher(caesarUK)
        assertEquals(true, mUK.find(), &amp;quot;Should matches UK spelling&amp;quot;)
        val caesarUS = &amp;quot;For Brutus is an honorable man&amp;quot;
        val mUS: Matcher = p.matcher(caesarUS)
        assertEquals(true, mUS.find(), &amp;quot;Should matches US spelling&amp;quot;)
    }

    @Test
    fun `expressions régulières plus complexes`() {
        //Notez que nous devons utiliser \\ car nous avons besoin d&amp;#39;un littéral \
        //et Java utilise un seul \ comme caractère d&amp;#39;échappement
        var pStr = &amp;quot;\\d&amp;quot; // Un chiffre numérique

        var text = &amp;quot;Apollo 13&amp;quot;
        var p = Pattern.compile(pStr)
        var m = p.matcher(text)
        print(pStr + &amp;quot; matches &amp;quot; + text + &amp;quot;? &amp;quot; + m.find())
        println(&amp;quot; ; match: &amp;quot; + m.group())
        pStr = &amp;quot;[a..zA..Z]&amp;quot; //N&amp;#39;importe quelle lettre

        p = Pattern.compile(pStr)
        m = p.matcher(text)
        print(pStr + &amp;quot; matches &amp;quot; + text + &amp;quot;? &amp;quot; + m.find())
        println(&amp;quot; ; match: &amp;quot; + m.group())

        //N&amp;#39;importe quel nombre de lettres, qui doivent toutes être comprises entre &amp;#39;a&amp;#39; et &amp;#39;j&amp;#39;
        //mais peut-être en majuscule ou en minuscule.
        pStr = &amp;quot;([a..jA..J]*)&amp;quot;
        p = Pattern.compile(pStr)
        m = p.matcher(text)
        print(pStr + &amp;quot; matches &amp;quot; + text + &amp;quot;? &amp;quot; + m.find())
        println(&amp;quot; ; match: &amp;quot; + m.group())
        text = &amp;quot;abacab&amp;quot;
        //&amp;#39;a&amp;#39; suivi de quatre caractères quelconques, suivi de &amp;#39;b&amp;#39;
        pStr = &amp;quot;a....b&amp;quot;
        p = Pattern.compile(pStr)
        m = p.matcher(text)
        print(pStr + &amp;quot; matches &amp;quot; + text + &amp;quot;? &amp;quot; + m.find())
        println(&amp;quot; ; match: &amp;quot; + m.group())
    }

    @Test
    fun `Quelles chaînes correspondent à la regex ?`() {
        val pStr = &amp;quot;\\d&amp;quot; // Un chiffre numérique
        val p = Pattern.compile(pStr)
        val ls: List&amp;amp;lt;String&amp;amp;gt; = Arrays.asList(&amp;quot;Cat&amp;quot;, &amp;quot;Dog&amp;quot;, &amp;quot;Ice-9&amp;quot;, &amp;quot;99 Luftballoons&amp;quot;)
        val containDigits: List&amp;amp;lt;String&amp;amp;gt; = ls.stream()
            .filter(p.asPredicate())
            .collect(Collectors.toList())
        assert(containDigits.contains(&amp;quot;Ice-9&amp;quot;))
        assert(containDigits.contains(&amp;quot;99 Luftballoons&amp;quot;))
        assertEquals(2, containDigits.size)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_রেগেক্স_মেটাকারেক্টার্সের_তালিকা&amp;quot;&amp;gt;রেগেক্স মেটাকারেক্টার্সের তালিকা&amp;lt;/h3&amp;gt;
&amp;lt;table class=&amp;quot;tableblock frame-all grid-all stretch&amp;quot;&amp;gt;
&amp;lt;colgroup&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7543%;&amp;quot;&amp;gt;
&amp;lt;col style=&amp;quot;width: 1.7592%;&amp;quot;&amp;gt;
&amp;lt;/colgroup&amp;gt;
&amp;lt;tbody&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মেটাকারেক্টার&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কার্যক্ষমতা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নোটস&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;?&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;�ঐচ্ছিক অক্ষর—শূন্য বা একটি উদাহরণ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;*&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;শূন্য বা বেশি পূর্বের অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;+&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি বা একাধিক পূর্বের অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;{M,N}&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;M এবং N উদাহরণের মধ্যে পূর্বের অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\d&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি সংখ্যা&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\D&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি সংখ্যা নয় অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\w&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি শব্দ অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;সংখ্যা, অক্ষর এবং _&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\W&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি শব্দহীন অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\s&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি স্পেসিং অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\S&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি অস্পেস অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\n&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;নতুন লাইন অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;\t&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ট্যাব অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;.&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;যে কোনো অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;জাভায় নতুন লাইন অন্তর্ভুক্ত করে না&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(No output - empty string as there was no French text to translate)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;ব্র্যাকেটের ভিতরে যে কোনো অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি অক্ষর শ্রেণি বলা হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;[^ ]&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;কবলের মধ্যে থাকা না এমন যেকোনো অক্ষর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি উল্টে দেওয়া অক্ষর শ্রেণী বলা হয়েছে&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;( )&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;মটিফ উপাদানের একটি গোষ্ঠী তৈরি করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;একটি গোষ্ঠী (বা ক্যাপচার গোষ্ঠী) বলা হয়&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;|&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;বিকল্পিক সুযোগগুলো নির্ধারণ করুন&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;লজিক্যাল OR প্রয়োগ কর&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;(Empty)&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;p class=&amp;quot;tableblock&amp;quot;&amp;gt;স্ট্রিংর শুরু $ স্ট্রিংর শেষ&amp;lt;/p&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td class=&amp;quot;tableblock halign-left valign-top&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;/tbody&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সম্পূর্ণ করাhttps://www.codeurjava.com/2015/05/les-expressions-regulieres-avec-regex.html[সাথে]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Gradle মেমো</title>
            <link >https://cheroliv.com//blog/2022/0047_memo_gradle_post.html</link>
            <pubDate>Mon, 23 May 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0047_memo_gradle_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;toc&amp;quot; class=&amp;quot;toc&amp;quot;&amp;gt;
&amp;lt;div id=&amp;quot;toctitle&amp;quot;&amp;gt;Sommaire&amp;lt;/div&amp;gt;
&amp;lt;ul class=&amp;quot;sectlevel1&amp;quot;&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_সাহায্য_দেখুন&amp;quot;&amp;gt;সাহায্য দেখুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_jvm_সিস্টেম_প্রোপার্টি_সেট_করুন_d_system_prop&amp;quot;&amp;gt;JVM সিস্টেম প্রোপার্টি সেট করুন: ` -D, --system-prop&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_বিল্ড_স্ক্রিপ্টের_জন্য_প্রকল্পের_বৈশিষ্ট্য_সেট_করুন_pmypropmyvalue&amp;quot;&amp;gt;বিল্ড স্ক্রিপ্টের জন্য প্রকল্পের বৈশিষ্ট্য সেট করুন: `-Pmyprop=myvalue&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_gradle_এর_স্টার্টআপ_ডিরেক্টরি_নির্দেশ_করে_ডিফল্ট_মান_বর্তমান_ডিরেক্টরি&amp;quot;&amp;gt;Gradle এর স্টার্টআপ ডিরেক্টরি নির্দেশ করে। ডিফল্ট মান বর্তমান ডিরেক্টরি।&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_কমান্ড_লাইন_ব্যবহার_করে_প্রোপার্টি_param_componentকে_ওভাররাইড_করুন&amp;quot;&amp;gt;কমান্ড লাইন ব্যবহার করে প্রোপার্টি &amp;#39;param_component&amp;amp;#8217;কে ওভাররাইড করুন:&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ফোল্ডারকে_একটি_সোর্স_সেটে_যুক্ত_করুন_একটি_স্বাভাবিক_প্রকল্পে_কোটলিন_dsl_ব্যবহার_করে&amp;quot;&amp;gt;একটি ফোল্ডারকে একটি সোর্স-সেটে যুক্ত করুন একটি স্বাভাবিক প্রকল্পে কোটলিন DSL ব্যবহার করে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ফোল্ডারকে_android_প্রকল্পের_source_setএ_groovy_dsl_ব্যবহার_করে_যোগ_করুন&amp;quot;&amp;gt;একটি ফোল্ডারকে Android প্রকল্পের source-set‑এ Groovy DSL ব্যবহার করে যোগ করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_उपमोड्यूल_निर्मित_एवं_परीक्षण_करने_से_बचें&amp;quot;&amp;gt;একটি उप‑मोड्यूल निर्मित एवं परीक्षण करने से बचें।&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_ফাইল_তাড়াও&amp;quot;&amp;gt;একটি ফাইল তাড়াও&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_বিল্ডের_নির্ভরতা_দেখান&amp;quot;&amp;gt;একটি বিল্ডের নির্ভরতা দেখান&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_reduce_ব্যবহার_উদাহরণ_একটি_লিস্টকে_একটি_স্ট্রিং_এ_সংযোজন&amp;quot;&amp;gt;reduce ব্যবহার উদাহরণ : একটি লিস্টকে একটি স্ট্রিং-এ সংযোজন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_নির্দিষ্ট_কাজের_বিবরণ_প্রাপ্ত_করতে&amp;quot;&amp;gt;একটি নির্দিষ্ট কাজের বিবরণ প্রাপ্ত করতে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_workingdir_root_থেকে_একটি_কাজ_চালু_করার_জন্য_তারপর_কাজটিকে_দিয়ে_প্রিফিক্স_করুন&amp;quot;&amp;gt;workingDir root থেকে একটি কাজ চালু করার জন্য, তারপর কাজটিকে &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; দিয়ে প্রিফিক্স করুন।&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_অসফল_কাজগুলো_পুনরায়_চালু_করতে_rerun_tasks_অপশন_ব্যবহার_করুন&amp;quot;&amp;gt;অসফল কাজগুলো পুনরায় চালু করতে, &amp;lt;code&amp;gt;--rerun-tasks&amp;lt;/code&amp;gt; অপশন ব্যবহার করুন&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;&amp;lt;a href=&amp;quot;#_একটি_নির্দিষ্ট_প্রকল্পে_একটি_কাজ_চালু_করুন_অন্য_একটি_ডিরেক্টরি_থেকে&amp;quot;&amp;gt;একটি নির্দিষ্ট প্রকল্পে একটি কাজ চালু করুন অন্য একটি ডিরেক্টরি থেকে&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_সাহায্য_দেখুন&amp;quot;&amp;gt;সাহায্য দেখুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew --help&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_jvm_সিস্টেম_প্রোপার্টি_সেট_করুন_d_system_prop&amp;quot;&amp;gt;JVM সিস্টেম প্রোপার্টি সেট করুন: ` -D, --system-prop&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -Dmyprop=myvalue
#ou
./gradlew --system-prop myvalue&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_বিল্ড_স্ক্রিপ্টের_জন্য_প্রকল্পের_বৈশিষ্ট্য_সেট_করুন_pmypropmyvalue&amp;quot;&amp;gt;বিল্ড স্ক্রিপ্টের জন্য প্রকল্পের বৈশিষ্ট্য সেট করুন: `-Pmyprop=myvalue&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -Pmyprop=myvalue
#ou
./gradlew --project-prop myvalue&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_gradle_এর_স্টার্টআপ_ডিরেক্টরি_নির্দেশ_করে_ডিফল্ট_মান_বর্তমান_ডিরেক্টরি&amp;quot;&amp;gt;Gradle এর স্টার্টআপ ডিরেক্টরি নির্দেশ করে। ডিফল্ট মান বর্তমান ডিরেক্টরি।&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -p ~/src/next_startup
#ou
./gradlew --project-dir ~/src/next_startup&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_কমান্ড_লাইন_ব্যবহার_করে_প্রোপার্টি_param_componentকে_ওভাররাইড_করুন&amp;quot;&amp;gt;কমান্ড লাইন ব্যবহার করে প্রোপার্টি &amp;#39;param_component&amp;amp;#8217;কে ওভাররাইড করুন:&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -Pparam_component=CUSTOM_VALUE&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_ফোল্ডারকে_একটি_সোর্স_সেটে_যুক্ত_করুন_একটি_স্বাভাবিক_প্রকল্পে_কোটলিন_dsl_ব্যবহার_করে&amp;quot;&amp;gt;একটি ফোল্ডারকে একটি সোর্স-সেটে যুক্ত করুন একটি স্বাভাবিক প্রকল্পে কোটলিন DSL ব্যবহার করে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;sourceSets {
    getByName(&amp;quot;test&amp;quot;){
        java.srcDir(&amp;quot;src/scripts/groovy&amp;quot;)
    }
    getByName(&amp;quot;test&amp;quot;){
        java.srcDir(&amp;quot;src/scripts/kscript&amp;quot;)
    }
    getByName(&amp;quot;test&amp;quot;){
        java.srcDir(&amp;quot;src/test/javascript&amp;quot;)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_ফোল্ডারকে_android_প্রকল্পের_source_setএ_groovy_dsl_ব্যবহার_করে_যোগ_করুন&amp;quot;&amp;gt;একটি ফোল্ডারকে Android প্রকল্পের source-set‑এ Groovy DSL ব্যবহার করে যোগ করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;android {
    sourceSets {
        main.java.srcDirs += &amp;quot;src/main/../../../../ceelo/domain/src/main/java/&amp;quot;
        test.java.srcDirs += &amp;quot;src/test/../../../../ceelo/domain/src/test/java/&amp;quot;
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_उपमोड्यूल_निर्मित_एवं_परीक्षण_करने_से_बचें&amp;quot;&amp;gt;একটি उप‑मोड्यूल निर्मित एवं परीक्षण करने से बचें।&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;gradle build -x :excluded-module:check -x :excluded-module:assemble -x :excluded-module:build&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;ফাইলগুলো সরান&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;tasks.register(&amp;quot;moveWebappNode&amp;quot;) {
    doLast {
        ant.withGroovyBuilder {
            &amp;quot;move&amp;quot;(
                &amp;quot;webapp/node_modules&amp;quot; to &amp;quot;$rootDir/webapp-src/node_modules&amp;quot;,
            )
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_ফাইল_তাড়াও&amp;quot;&amp;gt;একটি ফাইল তাড়াও&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;tasks.register&amp;amp;lt;Tar&amp;amp;gt;(&amp;quot;tarWebapp&amp;quot;) {
    dependsOn(&amp;quot;moveWebappNpm&amp;quot;)
    group = WEBAPP
    description = &amp;quot;tar webapp&amp;quot;
    doLast {
        setOf(
            &amp;quot;build&amp;quot;,
            &amp;quot;target&amp;quot;,
            &amp;quot;node_modules&amp;quot;
        ).forEach { dir -&amp;amp;gt; exclude { it.name .dir } }
        archiveFileName.set(&amp;quot;webapp.tar&amp;quot;)
        destinationDirectory.set(File(&amp;quot;${rootDir.absolutePath}$sep$WEBAPP_SRC&amp;quot;))
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_বিল্ডের_নির্ভরতা_দেখান&amp;quot;&amp;gt;একটি বিল্ডের নির্ভরতা দেখান&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;tasks.register(&amp;quot;printDependencies&amp;quot;) {
    description = &amp;quot;print project dependencies&amp;quot;
    group = WEBAPP
    doLast {
        println(&amp;quot;${project.name} dependencies&amp;quot;)
        mutableMapOf&amp;amp;lt;String, Map&amp;amp;lt;String, String&amp;amp;gt;&amp;amp;gt;(
            &amp;quot;buildDependencies&amp;quot; to buildDependencies,
            &amp;quot;domainDeps&amp;quot; to domainDeps,
            &amp;quot;domainTestDeps&amp;quot; to domainTestDeps,
        ).apply { putAll(appModules) }
            .forEach { module -&amp;amp;gt;
                if (module.value.isNotEmpty()) {
                    println(&amp;quot;${module.key}:&amp;quot;)
                    module.value.forEach { println(dependency(it)) }
                    println()
                }
            }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_reduce_ব্যবহার_উদাহরণ_একটি_লিস্টকে_একটি_স্ট্রিং_এ_সংযোজন&amp;quot;&amp;gt;reduce ব্যবহার উদাহরণ : একটি লিস্টকে একটি স্ট্রিং-এ সংযোজন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;tasks.register(&amp;quot;printWebappSrc&amp;quot;) {
    description = &amp;quot;print webapp sources&amp;quot;
    group = WEBAPP
    doLast {
        webAppSrc
            .reduce { acc, s -&amp;amp;gt; &amp;quot;$acc\n\t$s&amp;quot; }
            .run { println(&amp;quot;$WEBAPP_SRC: $this\n&amp;quot;) }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_নির্দিষ্ট_কাজের_বিবরণ_প্রাপ্ত_করতে&amp;quot;&amp;gt;একটি নির্দিষ্ট কাজের বিবরণ প্রাপ্ত করতে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -q help --task foo&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_workingdir_root_থেকে_একটি_কাজ_চালু_করার_জন্য_তারপর_কাজটিকে_দিয়ে_প্রিফিক্স_করুন&amp;quot;&amp;gt;workingDir root থেকে একটি কাজ চালু করার জন্য, তারপর কাজটিকে &amp;lt;code&amp;gt;:&amp;lt;/code&amp;gt; দিয়ে প্রিফিক্স করুন।&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew :foo&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_অসফল_কাজগুলো_পুনরায়_চালু_করতে_rerun_tasks_অপশন_ব্যবহার_করুন&amp;quot;&amp;gt;অসফল কাজগুলো পুনরায় চালু করতে, &amp;lt;code&amp;gt;--rerun-tasks&amp;lt;/code&amp;gt; অপশন ব্যবহার করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew check --rerun-tasks&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_একটি_নির্দিষ্ট_প্রকল্পে_একটি_কাজ_চালু_করুন_অন্য_একটি_ডিরেক্টরি_থেকে&amp;quot;&amp;gt;একটি নির্দিষ্ট প্রকল্পে একটি কাজ চালু করুন অন্য একটি ডিরেক্টরি থেকে&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিকল্পটি`-p` (ou &amp;lt;code&amp;gt;--project-dir&amp;lt;/code&amp;gt;) একটি Gradle প্রকল্পের পথ নির্দেশ করতে এবং ঐ প্রকল্পে একটি কাজ চালু করতে দেয়, এমনকি যদি বর্তমান ডিরেক্টরি ভিন্ন হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;উদাহরণে, কাজটি চালু করতে`build`প্রকল্পের অবস্থিত 에`~/projets/mon-autre-projet`অন্য একটি ডিরেক্টরilte থাকните:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;./gradlew -p ~/projets/mon-autre-projet build&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি কেন্দ্রীয় অবস্থান থেকে একাধিক প্রকল্পের জন্য স্ক্রিপ্টিং অ্যাকশন তৈরি করার জন্য খুবই উপকারী।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এও দেখুন :&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/command_line_interface.html#sec:command_line_warnings&amp;quot;&amp;gt;উল্লেখ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.gradle.org/current/userguide/command_line_interface.html#sec:command_line_options&amp;quot;&amp;gt;প্রতিচ্ছেদ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://stackoverflow.com/a/36178581/837404&amp;quot;&amp;gt;আলোচনা&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>প্রশিক্ষণ - kotlin: enum, সিলড ক্লাস</title>
            <link >https://cheroliv.com//blog/2022/0038_training_kotlin_enum_sealed_class_post.html</link>
            <pubDate>Tue, 17 May 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0038_training_kotlin_enum_sealed_class_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সিলড ক্লাসগুলো, Enum নয় (কীওয়ার্ড: enum)&amp;lt;br&amp;gt;
জাভা থেকে এসলে, আপনি আপনার ফিচার সরবরাহকারী এনামকে অতিরিক্তভাবে লোড করায় আকৃষ্ট হতে পারেন: // জাভা কোড&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-java&amp;quot; data-lang=&amp;quot;java&amp;quot;&amp;gt;enum PizzaOrderStatus {
    ORDER_RECEIVED,
    PIZZA_BEING_MADE,
    OUT_FOR_DELIVERY,
    COMPLETED;
    public PizzaOrderStatus nextStatus() {
        switch (this) {
        case ORDER_RECEIVED: return PIZZA_BEING_MADE;
        case PIZZA_BEING_MADE: return OUT_FOR_DELIVERY;
        case OUT_FOR_DELIVERY: return COMPLETED;
        case COMPLETED:return COMPLETED;
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটার বদলে, আপনি বন্ধ শ্রেণি ব্যবহার করতে পারেন:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;sealed class PizzaOrderStatus(protected val orderId: Int) {
    abstract fun nextStatus() : PizzaOrderStatus
    class OrderReceived(orderId: Int) : PizzaOrderStatus(orderId) {
        override fun nextStatus(): PizzaOrderStatus {
            return PizzaBeingMade(orderId)
        }
    }
    class PizzaBeingMade(orderId: Int) : PizzaOrderStatus(orderId) {
        override fun nextStatus(): PizzaOrderStatus {
            return OutForDelivery(orderId)
        }
    }
    class OutForDelivery(orderId: Int) : PizzaOrderStatus(orderId) {
        override fun nextStatus(): PizzaOrderStatus {
            return Completed(orderId)
        }
    }
    class Completed(orderId: Int) : PizzaOrderStatus(orderId) {
        override fun nextStatus(): PizzaOrderStatus {
            return this
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই পদ্ধতির সুবিধা হল যে আমরা এখন ডেটা পাঠাতে পারি সঙ্গে স্ট্যাটাস:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;var status: PizzaOrderStatus = OrderReceived(123)
while (status !is Completed) {
    status = when (status) {
        is OrderReceived -&amp;amp;gt; status.nextStatus()
        is PizzaBeingMade -&amp;amp;gt; status.nextStatus()
        is OutForDelivery -&amp;amp;gt; status.nextStatus()
        is Completed -&amp;amp;gt; status
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সামान्यত, sealed classes ভাল যদি আপনি সঞ্জুক্ত ডেটা চান রাজ্য।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>প্রশিক্ষণ - Kotlin</title>
            <link >https://cheroliv.com//blog/2022/0036_training_kotlin_post.html</link>
            <pubDate>Thu, 12 May 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0036_training_kotlin_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_মানসিক_নকশা&amp;quot;&amp;gt;মানসিক নকশা&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;span class=&amp;quot;image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;../../diagram/training_kotlin.png&amp;quot; alt=&amp;quot;training_kotlin&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_ফাংশনাল_প্রোগ্রামিং&amp;quot;&amp;gt;ফাংশনাল প্রোগ্রামিং&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই execrices বই থেকে নেওয়া হয়েছে:&amp;lt;br&amp;gt;
টিউটোরিয়ালের মাধ্যমে কোটলিনে ফাংশনাল প্রোগ্রামিং&amp;lt;br&amp;gt;
Massimo Carli tarafından লেখিত&amp;lt;br&amp;gt;
রিপো: &amp;lt;a href=&amp;quot;https://github.com/kodecocodes/fpk-materials&amp;quot; class=&amp;quot;bare&amp;quot;&amp;gt;https://github.com/kodecocodes/fpk-materials&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_সিনট্যাক্স&amp;quot;&amp;gt;সিনট্যাক্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_firstprogramtest&amp;quot;&amp;gt;FirstProgramTest&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;অবধারনা: স্ক্রীন ডিসপ্লে, ফাংশন&amp;lt;br&amp;gt;
FirstProgramTesthttps://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/programming/FirstProgramTest.kt[উৎস]+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_concatfunctiontest&amp;quot;&amp;gt;ConcatFunctionTest&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ধারণা: স্মৃতি, ব্যারিয়েবল, মান, অবজেক্ট, ফাংশন এক্সটেনশন&amp;lt;br&amp;gt;
(Empty)&amp;lt;a href=&amp;quot;https://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/programming/ConcatFunctionTest.kt&amp;quot;&amp;gt;উৎস&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_birthdaymessagetestoutput&amp;quot;&amp;gt;BirthdayMessageTestOutput&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ধারণা: সেট, লুপ&amp;lt;br&amp;gt;
&amp;lt;a href=&amp;quot;https://developer.android.com/codelabs/basic-android-kotlin-training-first-kotlin-program?continue=https%3A%2F%2Fdeveloper.android.com%2Fcourses%2Fpathways%2Fandroid-basics-kotlin-one%23codelab-https%3A%2F%2Fdeveloper.android.com%2Fcodelabs%2Fbasic-android-kotlin-training-first-kotlin-program&amp;quot;&amp;gt;কটলินের ভূমিকা&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
BirthdayMessageTestOutput:https://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/programming/BirthdayMessageTestOutput.kt[উৎস]+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কোটলিন_কোর্স&amp;quot;&amp;gt;কোটলিন কোর্স&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;videoblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;iframe src=&amp;quot;https://www.youtube.com/embed/YRjY3jRrQYY?rel=0&amp;quot; frameborder=&amp;quot;0&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_জাভা_সংগ্রহ_টিউটোরিয়াল&amp;quot;&amp;gt;জাভা সংগ্রহ টিউটোরিয়াল&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://docs.oracle.com/javase/tutorial/collections/index.html&amp;quot; target=&amp;quot;_blank&amp;quot; rel=&amp;quot;noopener&amp;quot;&amp;gt;সঙ্গ্রহ&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;কোলেকশন ইন্টারফেসের হৃদয়&amp;lt;br&amp;gt;
&amp;lt;span class=&amp;quot;image&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;../../img/0036_training_kotlin_post/colls-coreInterfaces.gif&amp;quot; alt=&amp;quot;সংগ্রহ&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_কার্যকর_মৌলিক&amp;quot;&amp;gt;কার্যকর মৌলিক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_ঘোষণামূলক_x_বাধ্য_পদ্ধতি&amp;quot;&amp;gt;ঘোষণামূলক X বাধ্য পদ্ধতি&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import kotlin.test.Test
import kotlin.test.assertEquals

class DeclarativeTests {
    val input = listOf(
        &amp;quot;123&amp;quot;, &amp;quot;abc&amp;quot;, &amp;quot;1ds&amp;quot;, &amp;quot;987&amp;quot;, &amp;quot;abdf&amp;quot;, &amp;quot;1d3&amp;quot;, &amp;quot;de1&amp;quot;, &amp;quot;88&amp;quot;, &amp;quot;101&amp;quot;
    )

    fun imperativeSum(list: List&amp;amp;lt;String&amp;amp;gt;): Int {
        var sum = 0
        for (item in list) {
            try {
                sum += item.toInt()
            } catch (_: NumberFormatException) {
            }
        }
        return sum
    }

    @Test
    fun `test imperative approach`() {
        imperativeSum(input).run {
            println(&amp;quot;Sum $this&amp;quot;)
            assertEquals(1299, this)
        }
    }

    fun isValidNumber(s: String) = try {
        s.toInt()
        true
    } catch (_: NumberFormatException) {
        false
    }

    fun declarativeSum(list: List&amp;amp;lt;String&amp;amp;gt;) = list
        .filter(::isValidNumber)
        .map(String::toInt)
        .sum()

    @Test
    fun `test declarative approach`() {
        assertEquals(1299, declarativeSum(input).apply {
            println(&amp;quot;Sum $this&amp;quot;)
        })
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অ্যাসাইনমেন্ট_১_১&amp;quot;&amp;gt;অ্যাসাইনমেন্ট ১.১&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;sumInRange ফাংশনটি বাস্তবায়ন করুন, যা মানগুলোকে যোগ করে&amp;lt;br&amp;gt;
একটি List&amp;amp;lt;String&amp;amp;gt; একটি নির্দিষ্ট রেঞ্জে। স্বাক্ষরটি হল :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun sumInRange(input: List&amp;amp;lt;String&amp;amp;gt;, range: IntRange): Int&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `Exercise 1_1`() {
    assertEquals(4, sumInRange(
        listOf(&amp;quot;1&amp;quot;, &amp;quot;10&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;7&amp;quot;, &amp;quot;ad2&amp;quot;, &amp;quot;3&amp;quot;),
            1..5
        ).apply { println(&amp;quot;sumInRange 1..5: $this&amp;quot;) }
    )
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি চেষ্টা করুন এবং আপনার উত্তরটি দিয়ে যাচাই করুনhttps://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/functional/DeclarativeTests.kt[সমাধান, windows=&amp;quot;_blank]।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_উচ্চ_অর্ডার_ফাংশন&amp;quot;&amp;gt;উচ্চ-অর্ডার ফাংশন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.*
import java.lang.Thread.sleep
import kotlin.math.sign
import kotlin.test.Test
import kotlin.test.assertEquals

class BasicsHOFTests {
    val ONE_SECOND = 1000L

    @Test
    fun `high order function`() {
        //capture de la sortie standard
        val standardOut: PrintStream? = out
        val outputStreamCaptor = ByteArrayOutputStream()
        setOut(PrintStream(outputStreamCaptor))

        3.times { println(&amp;quot;Hello&amp;quot;) }
        assertEquals(
            buildString {
                repeat(3) { append(&amp;quot;Hello\n&amp;quot;) }
                deleteAt(length - 1)
            }, outputStreamCaptor
                .toString()
                .trim()
        )

        //libération de la sortie standard
        setOut(standardOut)
    }

    fun Int.times1(fn: () -&amp;amp;gt; Unit) {
        for (i in 1..this) {
            fn()
        }
    }

    fun Int.times2(fn: () -&amp;amp;gt; Unit) {
        for (i in 1..this) fn()
    }

    fun Int.times3(fn: () -&amp;amp;gt; Unit) =
        (1..this).forEach { fn() }


    fun Int.times4(fn: () -&amp;amp;gt; Unit) =
        repeat((1..this).count()) { fn() }

    fun Int.times(fn: () -&amp;amp;gt; Unit) =
        (1..this).forEach { _ -&amp;amp;gt; fn() }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অ্যাসাইনমেন্ট_1_2&amp;quot;&amp;gt;অ্যাসাইনমেন্ট 1.2&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ক্রোনো বাস্তবায়ন করুন, যা একটি ফাংশন গ্রহণ করে যেকোনো প্রকারের`() &amp;amp;#8594;`&amp;lt;br&amp;gt;
ইনপুটে ইউনিট এবং এর চালানোর সময় ফেরত দেয়। সাইনেচার :&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun chrono(fn : () -&amp;amp;gt; Unité) : Long&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `Exercise 1_2`() {
    val waitOneSec = { sleep(ONE_SECOND) }
    chrono(waitOneSec).apply {
        println(&amp;quot;chrono: $this&amp;quot;)
        assertEquals(1, sign)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি চেষ্টা করুন এবং আপনার উত্তর পরীক্ষা করুনhttps://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/functional/BasicsHOFTests.kt[সমাধান, windows=&amp;quot;_blank].&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_রচনা&amp;quot;&amp;gt;রচনা&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import kotlin.test.Test
import kotlin.test.assertEquals


fun double(x: Int): Int = 2 * x
fun square(x: Int): Int = x * x
fun squareAndDouble1(x: Int) = double(square(x))

infix fun &amp;amp;lt;A, B, C&amp;amp;gt; ((A) -&amp;amp;gt; B).compose(g: (B) -&amp;amp;gt; C)
        : (A) -&amp;amp;gt; C = { a -&amp;amp;gt; g(this(a)) }

class CompositionTests {
    @Test
    fun composition_impure() {
        assertEquals(200, double(square(10)))
        assertEquals(200, squareAndDouble1(10))
    }

    @Test
    fun composition_pure() {
        val squareAndDouble = ::square compose ::double
        assertEquals(200, squareAndDouble(10))
    }

}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_শুทธ_ফাংশন_এবং_পরীক্ষণযোগ্যতা&amp;quot;&amp;gt;শুทธ ফাংশন এবং পরীক্ষণযোগ্যতা&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import java.io.ByteArrayOutputStream
import java.io.PrintStream
import java.lang.System.out
import java.lang.System.setOut
import kotlin.test.Test
import kotlin.test.assertEquals


var count = 0

//impure car une variable global subit un effet de bord
fun impure(value: Int): Int {
    count++
    return value + count
}

//impure car utilisation de la sortie standard qui fait muter le system
fun addOneAndLog(x: Int): Int {
    val result = x + 1
    println(&amp;quot;New Value is $result&amp;quot;)
    return result
}

//pure
fun addOne(x: Int) = (x + 1).run {
    Pair(this, &amp;quot;New Value is $this&amp;quot;)
}

class PureTests {
    @Test
    fun `impure fonction`() {
        assertEquals(3, impure(2))

        val standardOut = out
        val outputStreamCaptor = ByteArrayOutputStream()
        setOut(PrintStream(outputStreamCaptor))

        addOneAndLog(3)

        assertEquals(
            &amp;quot;New Value is 4&amp;quot;,
            outputStreamCaptor
                .toString()
                .trim()
        )
        setOut(standardOut)
    }

    @Test
    fun `pure fonction`() {
        addOne(3).run {
            assertEquals(4, first)
            assertEquals(&amp;quot;New Value is 4&amp;quot;, second)
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_এক্সেপশন_হ্যান্ডেলিং&amp;quot;&amp;gt;এক্সেপশন হ্যান্ডেলিং&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;package functional

import org.junit.jupiter.api.assertThrows
import kotlin.Result.Companion.failure
import kotlin.Result.Companion.success
import kotlin.test.Test
import kotlin.test.assertEquals

//NumberFormatException est un effet de bord qui rend la fonction impure
fun strToInt(str: String) = str.toInt()

//pure
fun strToIntOrNull(str: String) = try {
    str.toInt()
} catch (nfe: NumberFormatException) {
    null
}

//pure avec gestion de l&amp;#39;exception plus élégante
fun strToIntResult(str: String): Result&amp;amp;lt;Int&amp;amp;gt; =
    try {
        success(str.toInt())
    } catch (nfe: NumberFormatException) {
        failure(nfe)
    }

class ExceptionHandlingTests {
    @Test
    fun impure() {
        assertThrows&amp;amp;lt;NumberFormatException&amp;amp;gt; { strToInt(&amp;quot;foo&amp;quot;) }
        assertEquals(1, strToInt(&amp;quot;1&amp;quot;))
    }

    @Test
    fun pure() {
        assertEquals(null, strToIntOrNull(&amp;quot;foo&amp;quot;))
        assertEquals(1, strToIntOrNull(&amp;quot;1&amp;quot;))
    }

    @Test
    fun `pure avec result`() {
        assertEquals(1, strToIntResult(&amp;quot;1&amp;quot;).getOrNull())
        assertEquals(
            &amp;quot;For input string: \&amp;quot;foo\&amp;quot;&amp;quot;,
            strToIntResult(&amp;quot;foo&amp;quot;)
                .exceptionOrNull()
                ?.message
        )
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_মुख্য_বিন্দু&amp;quot;&amp;gt;মुख্য বিন্দু&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;অবজেক্ট-উকুচিত প্রোগ্রামিং মানে অবজেক্টগুলো ব্যবহার করে প্রোগ্রামিং করা,&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফাংশনাল প্রোগ্রামিং মানে ফাংশন দিয়ে প্রোগ্রাম করা। আপনি একটি সমস্যাকে একাধিক উপসমস্যায় ভাগ করেন, যা আপনি দিয়ে মডেল করেন। ফাংশনগুলো।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;উচ্চমাত্রিক ফাংশনগুলো অন্যান্য ফাংশনকে ইনপুট হিসেবে গ্রহণ করে বা অন্যান্য ফাংশন প্রদান করে&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফেরত মান হিসেবে কাজ বস্তুসিদ্ধান্তের তত্ত্ব হল গঠনের তত্ত্ব, এবং আপনি এটি বোঝার জন্য ব্যবহার করেন কীভাবে আপনার ফাংশনগুলোকে একটি কর্মসূচিে গঠন করবেন একটি পরিষ্কার ফাংশনের আউটপুট মান শুধুমাত্র এর ইনপুট প্যারামিটারগুলো দ্বারা নির্ভর করা হয়, এবং এটা কোনো পার্শ্বপ্রভাব নেই।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;একটি পার্শ্বপ্রভাব হলো যে কোনো ফাংশন বাহ্যিক পৃথিবীকে যা করে। এই&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি স্ট্যান্ডার্ড আউটপুটে একটি লগ অথবা কোনো গ্লোবাল ভ্যারিয়েবলের মান পরিবর্তন হতে পারে। ফাংশনাল প্রোগ্রামিং শুদ্ধ ফাংশনের জন্য কাজ করে, কিন্তু এটি আরও সরবরাহ করে উপকরণগুলো অশুদ্ধ ফাংশনগুলোকে শুদ্ধ ফাংশনে পরিণত করতে। আপনি একটি অসুৎস ফাংশনকে শুৎস ফাংশনে পরিণত করতে পারেন, তার ইফেক্টগুলোকে স্থানান্তরিত করে, তাদেরকেও শুৎস করতে। ফেরত মানের অংশ।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;ফাংশনাল প্রোগ্রামিং কম্পোজিশনের বিষয়।&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ত্রুটি ব্যবস্থাপনা পার্শ্বপ্রभावের একটি সাধারণ ক্ষেত্র, এবং কোটলিন আপনাকে সরঞ্জাম দেয় এগুলোকে কার্যকরভাবে পরিচালনা করতে।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_জাভা_৮_গভীরভাবে_আলোচনা_ল্যাম্বডা_এক্সপ্রেশন_এবং_ফাংশনাল_ইন্টারফেস&amp;quot;&amp;gt;জাভা ৮ গভীরভাবে আলোচনা: ল্যাম্বডা এক্সপ্রেশন এবং ফাংশনাল ইন্টারফেস&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;videoblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;iframe src=&amp;quot;https://www.youtube.com/embed/20waNRw6wMA?rel=0&amp;amp;amp;list=PLzzeuFUy_Cng0wZhqbnkvWAW0d2fdVfyQ&amp;quot; frameborder=&amp;quot;0&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিভাগ_তত্ত্ব&amp;quot;&amp;gt;বিভাগ তত্ত্ব&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ব্র্যাকেটের গাণিতিক তত্ত্ব:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;videoblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;iframe src=&amp;quot;https://www.youtube.com/embed/LVHoROSF3KA?rel=0&amp;quot; frameborder=&amp;quot;0&amp;quot; allowfullscreen&amp;gt;&amp;lt;/iframe&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_ফাংশনের_মৌলিক&amp;quot;&amp;gt;ফাংশনের মৌলিক&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অ্যাসাইনমেন্ট_2_1&amp;quot;&amp;gt;অ্যাসাইনমেন্ট 2.1&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আপনি কি একটি ভিন্ন মানগুলোকে মানচিত্রণকারী ফাংশনের উদাহরণ লিখতে পারেন?&amp;lt;br&amp;gt;
যের ডোমেইন রেঞ্জে অস্বতন্ত্র মান আছে, যেমন f(b) এবং f(c) নিম্নোক্ত চিত্রে ?&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটা চেষ্টা কর, তারপর চ্যালেঞ্জ প্রকল্পটি পরীক্ষা কর একটি সমাধানের জন্য যাতে দেখে কিভাবে তুমি&amp;lt;br&amp;gt;
আপনি লিঙ্ক অনুসরণ করে পরামর্শ ও ব্যাখ্যা খুঁজে পাবেন &amp;lt;a href=&amp;quot;https://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/functional/BasicsHOFTests.kt&amp;quot;&amp;gt;সমাধান&amp;lt;/a&amp;gt;.&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_অ্যাসাইনমেন্ট_২_২&amp;quot;&amp;gt;অ্যাসাইনমেন্ট ২.২&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;তুই দোগুন ফাংশনের উলটো ফাংশন লিখতে পারো ?&amp;lt;br&amp;gt;
প্রতিলোম ফাংশনের ডোমেইন এবং রেঞ্জ কী?&amp;lt;br&amp;gt;
চ্যালেঞ্জ প্রজেক্ট এবং অ্যাপেনডিক্স B দেখে সমাধান খুজে বের করুন।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;fun chrono(fn : () -&amp;amp;gt; Unité) : Long&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;@Test
fun `Exercise 1_2`() {
    val waitOneSec = { sleep(ONE_SECOND) }
    chrono(waitOneSec).apply {
        println(&amp;quot;chrono: $this&amp;quot;)
        assertEquals(1, sign)
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এটি চেষ্টা করুন এবং আপনার উত্তর যাচাই করুন সঙ্গেhttps://github.com/cheroliv/cheroliv.com/blob/master/codes/src/test/kotlin/functional/BasicsHOFTests.kt[solution, windows=&amp;quot;_blank]।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>মিমো ডিজাইন সিস্টেম</title>
            <link >https://cheroliv.com//blog/2022/0031_memo_design_system_post.html</link>
            <pubDate>Sun, 9 Jan 2022 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2022/0031_memo_design_system_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_যંત্রপাতি&amp;quot;&amp;gt;যંત্রপাতি&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;আঁকা&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://undraw.co/&amp;quot;&amp;gt;undraw.co&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ওপেন-সোর্স ইলাস্ট্রেশন যা আপনি কল্পনা করতে পারেন এবং তৈরি করতে পারেন এমন সমস্ত ধারণার জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://absurd.design/&amp;quot;&amp;gt;অবাস্তব.ডিজাইন&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;বেলহালা চিত্র যা অর্থবান.&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://drawkit.com/&amp;quot;&amp;gt;drawkit.com&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অদ্ভুত বিনামূল্যে আঁকনি. সাপ্তাহিক আপডেট.&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://icons8.com/&amp;quot;&amp;gt;icons8.com&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;আইকন, ইলাস্ট্রেশন, ছবি, সঙ্গীত এবং ডিজাইন টুলস।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://blush.design/&amp;quot;&amp;gt;blush.design&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;আইকন, ইলস্ট্রেশন, ছবি, সঙ্গীত ও ডিজাইন টুল।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.humaaans.com/&amp;quot;&amp;gt;humaaans.com&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;মিশ্রণ ও মেলানো মানুষের ইলাস্ট্রেশন একটি ডিজাইন লাইব্রেরি এর সাথে&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;রং&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://coolors.co/&amp;quot;&amp;gt;coolors.co&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অতির্কত দ্রুত রঙ স্কিম জেনারেটর!&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;প্রবণতাগুলো&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://fr.pinterest.com&amp;quot;&amp;gt;pinterest&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ধারনাকে ভিজুয়ালি আবিষ্কার: ছবি, ভিডিও, বিষয়বস্তু সংগ্রহ।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://dribbble.com&amp;quot;&amp;gt;ড্রিবল&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ডিজাইনারদের জন্য প্ল্যাটফর্ম যেখানে তারা নিজের সৃষ্টি শেয়ার করে এবং একে অপরের সাথে যোগাযোগ করে।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;UX/UI এবং Design Systems&amp;lt;/strong&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://material.io/&amp;quot;&amp;gt;গুগল Material Design&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;Google-এর ডিজাইন সিস্টেম একীভূত ও অ্যাড্যাপ্টেবল ব্যবহারকারী ইন্টারফেসের জন্য।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://developer.apple.com/design/human-interface-guidelines/&amp;quot;&amp;gt;Apple মানব-ইন্টারফেইস নির্দেশিকা&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;সহজে ব্যবহারযোগ্য iOS এবং macOS অ্যাপ্লিকেশন তৈরি করার জন্য Apple-এর সুপারিশ।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.uxpin.com/&amp;quot;&amp;gt;UXPin&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ডিজাইন ও সহযোগ্য প্ল্যাটফর্ম যা প্রোটোটাইপ এবং ডিজাইন সিস্টেম তৈরি করতে ব্যবহৃত হয়।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.frontify.com/&amp;quot;&amp;gt;ফ্রন্টিফাই&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ব্র্যান্ড ও ডিজাইন সিস্টেমের পরিচালনার জন্য একটি প্ল্যাটফর্ম যা সামঞ্জস্যতা নিশ্চিত করে।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://designsystemsrepo.com/design-systems/&amp;quot;&amp;gt;ডিজাইন সিস্টেম রেপো&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;উৎসাহনের জন্য সংস্থান এবং ডিজাইন সিস্টেমের উদাহরণের সংগ্রহ।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফ্রন্টএন্ড ডেভেলপমেন্ট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://htmlcheatsheet.com&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;htmlcheatsheet.com&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;HTML চিটশীট&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://fontawesome.com&amp;quot;&amp;gt;fontawesome.com&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;আইকন লাইব্রেরী&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.toptal.com/designers/htmlarrows/symbols/&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;toptal.com/designers/htmlarrows/symbols&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;HTML-এ নেটিভ আইকন&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://css-tricks.com/&amp;quot;&amp;gt;CSS-Tricks&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;CSS এর জন্য অপরিহার্য, আধুনিক ফ্রন্টএন্ড নিবন্ধ, টিউটোরিয়াল এবং টিপস সহ।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.frontendmentor.io/&amp;quot;&amp;gt;ফ্রন্টএন্ড মেনটর&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ফ্রন্টএন্ড কোড চ্যালেঞ্জ বাস্তব প্রকল্পের ভিত্তে আপনার দক্ষতা উন্নত করার জন্য&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://dev.to/&amp;quot;&amp;gt;Dev.to&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;ডেভেলপারদের সম্প্রদায়, য যেখানে নিবন্ধ, টিউটোরিয়াল এবং প্রজেক্ট শেয়ার করা যায়।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://codepen.io/&amp;quot;&amp;gt;CodePen&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;অনলাইন কোড এডিটর এবং কোড স্নিপেট ও ডেমো শেয়ারের জন্য সম্প্রদায়।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AI-সাহায্যকৃত ফ্রন্টএন্ড ডেভেলপমেন্ট&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;dlist&amp;quot;&amp;gt;
&amp;lt;dl&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://v0.dev/&amp;quot;&amp;gt;v0.dev&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;v0 প্রাকৃতিক ভাষার বিবরণগুলোকে কোড এবং ব্যবহারকারী ইন্টারফেসে রূপান্তর করে।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://uizard.io/&amp;quot;&amp;gt;Uizard&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;Uizard মকআপ (ছবি, স্কেচ)কে HTML, CSS এবং রিএ্যাক্ট কোডে রূপান্তরিত করার দিকে মনোযোগ দেয়।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://www.usegalileo.ai/explore&amp;quot;&amp;gt;usegalileo.ai&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;Galileo AI আপনাকে স্বাভাবিক ভাষায় আপনার চাহিদা অনুযায়ী ইন্টারফেস বর্ণনা করতে দেয়, এবং AI ফিগমা ডিজাইন সম্পাদনযোগ্য তৈরি করে।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;dt class=&amp;quot;hdlist1&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://play.teleporthq.io/&amp;quot;&amp;gt;TeleportHQ&amp;lt;/a&amp;gt;&amp;lt;/dt&amp;gt;
&amp;lt;dd&amp;gt;
&amp;lt;p&amp;gt;TeleportHQ হল একটি লো-কোড ফ্রন্টএন্ড ডেভেলপমেন্ট প্ল্যাটফর্ম যা কৃত্রিম বুদ্ধিমত্তা ব্যবহার করে আপনাকে ভিজ্যুয়ালি ওয়েবসাইট তৈরি ও স্থাপন করতে সাহায্য করে।&amp;lt;/p&amp;gt;
&amp;lt;/dd&amp;gt;
&amp;lt;/dl&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Kubernetes, Microk8s, Docker: প্রথম পদক্ষেপ</title>
            <link >https://cheroliv.com//blog/2020/0029_kubernetes_microk8s_docker_premiers_pas_post.html</link>
            <pubDate>Tue, 3 Nov 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0029_kubernetes_microk8s_docker_premiers_pas_post.html</guid>
            <description>&amp;lt;div id=&amp;quot;preamble&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://microk8s.io/docs/&amp;quot;&amp;gt;মাইক্রোকেটসের অফিসিয়াল ডকুমেন্ট&amp;lt;/a&amp;gt;+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_microk8s_প্যাকেটের_ইনস্টলেশন&amp;quot;&amp;gt;microk8s প্যাকেটের ইনস্টলেশন:&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Gradle: একটি gradle কাজ থেকে একটি বাহ্যিক প্রক্রিয়া নিষ্পাদন করা</title>
            <link >https://cheroliv.com//blog/2020/0028_gradle_executer_un_processus_externe_depuis_une_tache_gradle_post.html</link>
            <pubDate>Mon, 28 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0028_gradle_executer_un_processus_externe_depuis_une_tache_gradle_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_gradle_kotlin_dsl&amp;quot;&amp;gt;Gradle-Kotlin-DSL:&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-kotlin&amp;quot; data-lang=&amp;quot;kotlin&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Kotlin: NotImplementedException, NotImplementedError</title>
            <link >https://cheroliv.com//blog/2020/0027_kotlin_not_implemented_exception_not_implemented_error_post.html</link>
            <pubDate>Sun, 27 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0027_kotlin_not_implemented_exception_not_implemented_error_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;NotImplementedException NotImplementedError, পরীক্ষার জন্য উপযোগী, আমাদের বুঝতে সহায়তা করে আমরা কোথায় এসেছি এবং ব্যর্থতার原因।&amp;lt;br&amp;gt;
এখনো বাস্তবায়িত হয়নি, সঠিক ব্যতিক্রম ফেলে দেয়।&amp;lt;br&amp;gt;
Il y a :&amp;lt;br&amp;gt;
&amp;lt;a href=&amp;quot;http://commons.apache.org/proper/commons-lang/javadocs/api-release/org/apache/commons/lang3/NotImplementedException.html&amp;quot;&amp;gt;org.apache.commons.lang3.NotImplementedException&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;a href=&amp;quot;https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-not-implemented-error/&amp;quot;&amp;gt;kotlin.NotImplementedError&amp;lt;/a&amp;gt;&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Untar</title>
            <link >https://cheroliv.com//blog/2020/0026_untar_post.html</link>
            <pubDate>Sat, 26 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0026_untar_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_সংযোগ_interserver_net&amp;quot;&amp;gt;সংযোগ: &amp;lt;a href=&amp;quot;https://www.interserver.net/tips/kb/extract-tar-gz-files-using-linux-command-line/&amp;quot;&amp;gt;interserver.net&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Gradle: পরীক্ষাগুলি UP-TO-DATE হলেও পরীক্ষাগুলি পুনরায় চালান</title>
            <link >https://cheroliv.com//blog/2020/0025_gradle_rejouer_les_tests_meme_lorsque_les_tests_sont_UP-TO-DATE_post.html</link>
            <pubDate>Fri, 25 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0025_gradle_rejouer_les_tests_meme_lorsque_les_tests_sont_UP-TO-DATE_post.html</guid>
            <description></description>
        </item><item>
            <title>ডকার অ্যাপ্লিকেশনটি ইনস্টল করে না, বরং তা টেনে আন।</title>
            <link >https://cheroliv.com//blog/2020/0024_docker_n_installe_pas_l_application_mais_tire_la_plutot_post.html</link>
            <pubDate>Thu, 24 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0024_docker_n_installe_pas_l_application_mais_tire_la_plutot_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_hackernoon_com&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;https://hackernoon.com/dont-install-postgres-docker-pull-postgres-bee20e200198&amp;quot;&amp;gt;hackernoon.com&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>gherkin (বাংলায়) :</title>
            <link >https://cheroliv.com//blog/2020/0023_gherkin_en_francais_post.html</link>
            <pubDate>Wed, 23 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0023_gherkin_en_francais_post.html</guid>
            <description></description>
        </item><item>
            <title>Gradle cli: একটি প্যারামিটার অতিক্রম</title>
            <link >https://cheroliv.com//blog/2020/0022_gradle_cli_surcharger_un_parametre_post.html</link>
            <pubDate>Tue, 22 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0022_gradle_cli_surcharger_un_parametre_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code&amp;gt;----
----
$ ./gradlew -Pparam_component=CUSTOM
----
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গিট মেমো</title>
            <link >https://cheroliv.com//blog/2020/0021_memo_git_post.html</link>
            <pubDate>Mon, 21 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0021_memo_git_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_সূত্র&amp;quot;&amp;gt;সূত্র:&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;*https://xenovation.com/blog/source-control-management/git/how-to-change-remote-git-repository[xenovation] *https://intellipaat.com/community/3102/git-show-remote-url-how-can-i-determine-the-url-that-a-local-git-repository-was-originally-cloned-from[ইন্টেলিপ্যাট]&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_git_এ_দূরবর্তী_রেপো_পরিবর্তন_করুন&amp;quot;&amp;gt;git-এ দূরবর্তী রেপো পরিবর্তন করুন&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বর্তমান রিমোট রেপো এর URL দেখান:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি URL থেকে ডাউনলোড</title>
            <link >https://cheroliv.com//blog/2020/0021_aspirer_depuis_une_URL_post.html</link>
            <pubDate>Sun, 20 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0021_aspirer_depuis_une_URL_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code&amp;gt;----
----
$ wget -r -k -np http://site.com/docs/manual/
----

একটি লক্ষ্য ফোল্ডার নির্ধারণ করতে -P আর্গুমেন্ট যোগ করুন এবং তারপর পাথটি দিন।
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>বুটযোগ্য ডিস্ক তৈরি করুন</title>
            <link >https://cheroliv.com//blog/2020/0020_creer_un_disk_bootable_post.html</link>
            <pubDate>Sat, 19 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0020_creer_un_disk_bootable_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_লিংক_etcher&amp;quot;&amp;gt;লিংক: &amp;lt;a href=&amp;quot;https://www.balena.io/etcher/&amp;quot;&amp;gt;etcher&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>CLI-এ একটি লক্ষ্য ফোল্ডারে জিপ ফাইল খুলুন</title>
            <link >https://cheroliv.com//blog/2020/0019_dezipper_en_CLI_dans_un_dossier_cible_post.html</link>
            <pubDate>Fri, 18 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0019_dezipper_en_CLI_dans_un_dossier_cible_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_লিঙ্ক_askubuntu&amp;quot;&amp;gt;লিঙ্ক: &amp;lt;a href=&amp;quot;https://askubuntu.com/questions/86849/how-to-unzip-a-zip-file-from-the-terminal&amp;quot;&amp;gt;askubuntu&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;যদি আপনি কোনো নির্দিষ্ট গন্তব্য ফোল্ডারে কোনো কিছু বের করতে চান, তাহলে আপনি ব্যবহার করতে পারেন: &amp;lt;code&amp;gt;` $ unzip ফাইল.zip -d ফোল্ডার_গন্তব্য &amp;lt;/code&amp;gt;` উৎস এবং গন্তব্য ডিরেক্টরি একই হলে, আপনি শুধু করতে পারেন: &amp;lt;code&amp;gt;`&amp;lt;/code&amp;gt; $ unzip file.zip (Empty)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>ডিরেক্টরির তালিকায় ফাইল আকারের মোট দেখান</title>
            <link >https://cheroliv.com//blog/2020/0018_Afficher_la_somme_des_tailles_de_fichier_dans_la_liste_des_r%C3%A9pertoires_post.html</link>
            <pubDate>Thu, 17 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0018_Afficher_la_somme_des_tailles_de_fichier_dans_la_liste_des_r%C3%A9pertoires_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_সংযোগ_stackexchange&amp;quot;&amp;gt;সংযোগ: &amp;lt;a href=&amp;quot;https://unix.stackexchange.com/questions/72661/show-sum-of-file-sizes-in-directory-listing&amp;quot;&amp;gt;stackexchange&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code&amp;gt;----
----
$ du -ach --exclude &amp;quot;./.*&amp;quot; /home/troll/
----
----&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গিটহ্যাবে একটি برنچ ধ্বংস করুন</title>
            <link >https://cheroliv.com//blog/2020/0017_detruire_une_branch_sur_github_post.html</link>
            <pubDate>Wed, 16 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0017_detruire_une_branch_sur_github_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_গিটহ্যাবে_একটি_ব্রাঞ্চ_ধ্বংস_করা&amp;quot;&amp;gt;গিটহ্যাবে একটি ব্রাঞ্চ ধ্বংস করা&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_লিংক_gist&amp;quot;&amp;gt;লিংক: &amp;lt;a href=&amp;quot;https://gist.github.com/cheroliv/921a13ed23ae6d4d66af8d43dd536987&amp;quot;&amp;gt;gist&amp;lt;/a&amp;gt;&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Asciidoc/Markdown মেমো</title>
            <link >https://cheroliv.com//blog/2020/0016_asciidoc_markdown_memo_post.html</link>
            <pubDate>Tue, 15 Sep 2020 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2020/0016_asciidoc_markdown_memo_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;এসসিআইডক বা মার্কডাউন কেন? এখানে, আমি asciidoc-কেன்மুখি হচ্ছি, কারণ আমার কাছে ইতিমধ্যে কিছু টিকেট asciidoc-এ লেখা আছে।&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;Asciidoc একটি মার্কআপ ভাষা, যা কন্টেন্ট উৎপন্ন করতে সক্ষম, একটি বিন্যাস দিয়ে যা মানব পাঠকে পাঠযোগ্য রাখে।&amp;lt;br&amp;gt;
এটি অতিরিক্ত সফটওয়্যার ছাড়াই মৌলিক কন্টেন্টের জন্য পাঠ্য প্রক্রিয়াকরণকে মানদণ্ডে আনে একটি পদ্ধতি।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;ulist&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;লিংক :&amp;lt;/div&amp;gt;
&amp;lt;ul&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://blog.oxiane.com/2018/06/13/asciidoc-documentation-as-code/&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;@jmdoudoux blog.oxiane.com-এ&amp;lt;/a&amp;gt;[asciidoc]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://powerman.name/doc/asciidoc&amp;quot; target=&amp;quot;&amp;quot;_blank&amp;quot;&amp;gt;powerman.name&amp;lt;/a&amp;gt;[asciidoc]&amp;lt;/p&amp;gt;
&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Debian : একটি .deb ফাইল কমান্ড লাইনে ইনস্টল করুন</title>
            <link >https://cheroliv.com//blog/2019/0013_how-to-install-a-deb-file_post.html</link>
            <pubDate>Mon, 19 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0013_how-to-install-a-deb-file_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেবিয়ান প্যাকেজকে .deb ফাইল থেকে কমান্ড লাইনে ইনস্টল করতে।&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo dpkg -i /chemin/du/fichier/deb/&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে দেখুনhttps://unix.stackexchange.com/questions/159094/how-to-install-a-deb-file-by-dpkg-i-or-by-apt[রেফারেন্স]+&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Gradle: রিসোর্স ফোল্ডার IDE-এ দৃশ্যমান</title>
            <link >https://cheroliv.com//blog/2019/0011_gradle_configuration_ide_jbake_content_post.html</link>
            <pubDate>Fri, 16 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0011_gradle_configuration_ide_jbake_content_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;একটি Gradle বিল্ড ম্যানেজার द्वारा চালিত অ্যাপ্লিকেশন প্রকল্পে&amp;lt;br&amp;gt;
সব ফোল্ডার দেখতে পারা আরও ভালো লাগে&amp;lt;br&amp;gt;
অ্যাপ্লিকেশনের উন্নয়নে অংশগ্রহণকারী,&amp;lt;br&amp;gt;
যেমন সংস্থান ফোল্ডার যা নেই&amp;lt;br&amp;gt;
পথগুলো সম্মতির ভিত্তিতে&amp;lt;br&amp;gt;
উদাহরণস্বরূপ, আমি চাই যে ফোল্ডার src/jbake,&amp;lt;br&amp;gt;
যে ‘resource folder’-এর মতো দৃশ্যমান হোক,&amp;lt;br&amp;gt;
এটি প্রকল্পের কনফিগারেশনে প্রবেশ করে করা যায়&amp;lt;br&amp;gt;
আইডির উইজার্ডের মধ্যে。 হয়েও এই অপশনটি পরবর্তী রিলোডে সংরক্ষিত হয় না।&amp;lt;br&amp;gt;
Gradle প্রকল্পটি IDE-তে। এই কনফিগারেশনটি স্থায়ীভাবে প্রদান করতে&amp;lt;br&amp;gt;
সমাধান হল উৎস পাথের কনফিগারেশন ওভারলোড করা।&amp;lt;br&amp;gt;
build.gradle কনফিগারেশন ফাইলে, যেমন ১৮, ১৯, ২০ এবং ২১ নম্বর লাইনে :&amp;lt;br&amp;gt;
build.gradle&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;plugins {
    id &amp;quot;java&amp;quot;
    id &amp;quot;groovy&amp;quot;
    id &amp;quot;org.jbake.site&amp;quot; version &amp;quot;5.0.0&amp;quot;
    id &amp;quot;org.ajoberstar.git-publish&amp;quot; version &amp;quot;2.1.1&amp;quot;
}
repositories {
    mavenCentral()
    jcenter()
}
group project_group
version project_version
sourceSets {
    main {
        java { srcDirs = [] }
        groovy { srcDirs =[&amp;quot;src/main/java&amp;quot;, &amp;quot;src/main/groovy&amp;quot;] }
        resources {
            srcDirs =[
                    &amp;quot;src/main/resources&amp;quot;,
                    &amp;quot;src/jbake&amp;quot;//in order to get site src content in the IDE
            ]
        }
    }
    test {
        java { srcDirs = [] }
        groovy { srcDirs =[&amp;quot;src/test/java&amp;quot;, &amp;quot;src/test/groovy&amp;quot;] }
    }
}
test {
    useJUnitPlatform()
}
configurations {
    ivy
}
dependencies {
    ivy &amp;quot;org.apache.ivy:ivy:$ivy_version&amp;quot;
    implementation &amp;quot;org.codehaus.groovy:groovy-all:$groovy_version&amp;quot;
    implementation &amp;quot;org.asciidoctor:asciidoctor-java-integration:$asciidoctor_java_integration_version&amp;quot;
    implementation &amp;quot;org.freemarker:freemarker:$freemarker_version&amp;quot;
    testImplementation &amp;quot;org.junit.jupiter:junit-jupiter-api:$junit5_version&amp;quot;
    testRuntimeOnly &amp;quot;org.junit.jupiter:junit-jupiter-engine:$junit5_version&amp;quot;
}
gitPublish {
    repoUri = github_pages_blog_repository
    branch = git_branch
    contents {
        from(file(jbake_content_from)) {
            into jbake_content_to
        }
    }
}
tasks.withType(GroovyCompile) {
    groovyClasspath += configurations.ivy
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গ্রুবি স্ক্রিপ্ট, গ্যাব এবং আইভি কনফিগারেশন</title>
            <link >https://cheroliv.com//blog/2019/0010_gradle_groovy_script_grab_ivy_configuration_post.html</link>
            <pubDate>Wed, 14 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0010_gradle_groovy_script_grab_ivy_configuration_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;টিকিটের বিষয় হল Gradle বিল্ড স্ক্রিপ্টের কনফিগারেশন।&amp;lt;br&amp;gt;
আমি রেফারেন্স না করে একটি Groovy স্ক্রিপ্ট ব্যবহার করতে চাই&amp;lt;br&amp;gt;
গ্রেডল প্রকল্পে, যেখানে আমি তা সংযুক্ত করেছি।&amp;lt;br&amp;gt;
আমি এই গ্রাভি স্ক্রিপ্টকে গ্রেডল বাইরে চালাতে সক্ষমতা চাই&amp;lt;br&amp;gt;
বাহ্যিক নির্ভরতা পুনruder기의 জন্য Ivy অ্যানোটেশন ছাড়া&amp;lt;br&amp;gt;
এগুলো কর্মক্ষমতা বা কম্পাইলেশনের সমস্যা তৈরি করতে আসেন না&amp;lt;br&amp;gt;
Gradle বিল্ড স্ক্রিপ্টের.&amp;lt;br&amp;gt;
কনফিগারেশনকে উদাহরণ দেওয়ার জন্য, আমি দুটি স্ক্রিপ্টে নির্ভর করি:&amp;lt;br&amp;gt;
একটি Gradle বিল্ড স্ক্রিপ্ট এবং একটি গ্রুভি স্ক্রিপ্ট।&amp;lt;br&amp;gt;
গ্রুভি স্ক্রিপ্টের প্রথমে লাইন ২-এ আছে,&amp;lt;br&amp;gt;
একটি বাহ্যিক নির্ভরতা টариে নেওয়ার নির্দেশনা&amp;lt;br&amp;gt;
আইভি নির্ভরতা ব্যবস্থাপক ব্যবহার করে।&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-Groovy&amp;quot; data-lang=&amp;quot;Groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
@Grab(&amp;quot;commons-io:commons-io:2.6&amp;quot;)

import org.apache.commons.io.FileUtils

static String getSeparator() {
    System.getProperty(&amp;quot;file.separator&amp;quot;)
}

String from = &amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}${separator}.config${separator}transmission${separator}torrents&amp;quot;
String to = &amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}${separator}Documents${separator}torrents_completed&amp;quot;

File fromDlDir = new File(&amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}${separator}Téléchargements&amp;quot;)
File fromDir = new File(from)
File toDir = new File(to)

Collection&amp;amp;lt;File&amp;amp;gt; torrentFiles = FileUtils.listFiles(
        fromDir,
        [&amp;quot;torrent&amp;quot;] as String[],
        false)
torrentFiles.addAll(FileUtils.listFiles(
        fromDlDir,
        [&amp;quot;torrent&amp;quot;, &amp;quot;torrent.added&amp;quot;] as String[],
        false))


torrentFiles.empty ?: torrentFiles.each { it -&amp;amp;gt;
    FileUtils.copyFileToDirectory(it, toDir)
}
println torrentFiles.size()&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;বিল্ড.gradle ফাইলে, এখন আসুন দেখি কীভাবে সমন্বয় করতে হয়&amp;lt;br&amp;gt;
দুইটি নির্ভরতা ব্যবস্থাপক, ivy এবং Gradle. দুইয়ের মধ্যে চুক্তি লাইনে করা হয়:&amp;lt;br&amp;gt;
26, 30, 37, 38 et 39&amp;lt;br&amp;gt;
এভাবে আমি হাতে আমার গ্রুভি স্ক্রিপ্ট চালাতে পারি,&amp;lt;br&amp;gt;
এবং Gradle কম্পাইলেশন @Grab দ্বারা বাধিত নয়।&amp;lt;br&amp;gt;
গ্রুভি স্ক্রিপ্টের নির্ভরতাগুলো Gradle-এ প্রদান করতে হবে না।&amp;lt;br&amp;gt;
তবে আমি gradle থেকে groovy স্ক্রিপ্ট চালাতে পারি না.&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-Groovy&amp;quot; data-lang=&amp;quot;Groovy&amp;quot;&amp;gt;plugins {
    id &amp;quot;java&amp;quot;
    id &amp;quot;groovy&amp;quot;
}

repositories {
    mavenCentral()
    jcenter()
}

sourceSets {
    main {
        java { srcDirs = [] }
        groovy { srcDirs =[&amp;quot;src/main/java&amp;quot;, &amp;quot;src/main/groovy&amp;quot;] }
        resources {
            srcDirs =[&amp;quot;src/main/resources&amp;quot;]
        }
    }
    test {
        java { srcDirs = [] }
        groovy { srcDirs =[&amp;quot;src/test/java&amp;quot;, &amp;quot;src/test/groovy&amp;quot;] }
    }
}

configurations {
    ivy
}

dependencies {
    ivy &amp;quot;org.apache.ivy:ivy:$ivy_version&amp;quot;
    implementation &amp;quot;org.codehaus.groovy:groovy-all:$groovy_version&amp;quot;
}



tasks.withType(GroovyCompile) {
    groovyClasspath += configurations.ivy
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;রেফারেন্স er টিকirot &amp;amp;lt;/tool_call&amp;amp;gt;&amp;lt;a href=&amp;quot;https://stackoverflow.com/a/18174033/837404&amp;quot;&amp;gt;স্ট্যাক ওভারফ্লো&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Groovy: একটু বীজগণিত, মহতম সাধারণ গুণক এবং লঘুতম সাধারণ গুণক</title>
            <link >https://cheroliv.com//blog/2019/0009_groovy_algebre_pgcd_ppmc_post.html</link>
            <pubDate>Tue, 13 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0009_groovy_algebre_pgcd_ppmc_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_এটি_ppmc&amp;quot;&amp;gt;এটি PPMC&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;https://fr.wikipedia.org/wiki/Plus_petit_commun_multiple&amp;quot;&amp;gt;wiki PPMC বা ছোটতম সাধারণ গুণিতক&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;AlgebraUtils.groovy&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;package com.cheroliv.misc

import groovy.transform.CompileStatic

@CompileStatic
class AlgebraUtils {

    /**
     * Great common divisor
     * Plus grand commun diviseur(pgcd)
     * Great Common Divisor
     * @param a
     * @param b
     * @return
     */
    static Integer gcd(Integer a, Integer b) {
        !b ? a : gcd(b, a % b)
    }


    /**
     * Least common multiple
     * Plus petit commun multiplicateur(ppmc)
     * @param a
     * @param b
     * @return
     */
    static BigInteger lcm(Integer a, Integer b) {
        (a * b / gcd(a, b)) as BigInteger
    }

    static void main(String... args) {
        Integer a = 96
        Integer b = 28
        println &amp;quot;gcd($a, $b) = ${gcd(a, b)}&amp;quot;
        a = 790
        b = 990
        println &amp;quot;lcm($a, $b) = ${lcm(a, b)}&amp;quot;
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফলাফল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;gcd(96, 28) = 4 lcm(790, 990) = 78210&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>বাশ: এক্সটেনশন অনুযায়ী ফাইল খুঁজে বের করা এবং find ব্যবহার করে ফাইলে আউটপুট</title>
            <link >https://cheroliv.com//blog/2019/0008_bash_find_trouver_fichiers_par_extension_post.html</link>
            <pubDate>Mon, 12 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0008_bash_find_trouver_fichiers_par_extension_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি নামের মানদণ্ডে ফাইলগুলো খুঁজছি: .h এবং .cpp এক্সটেনশন সহ ফাইলদের তালিকা&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ find . -name &amp;#39;*.h&amp;#39; -o -name &amp;#39;*.cpp&amp;#39; + +&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;title&amp;quot;&amp;gt;h ও .cpp এক্সটেনশনযুক্ত ফাইলগুলোর তালিকা&amp;lt;br&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;p&amp;gt;ফলটি list_of_txt_files.list ফাইলে সংরক্ষিত করা হয়।&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ find . -name &amp;#39;*.h&amp;#39; -o -name &amp;#39;*.cpp&amp;#39; -print &amp;amp;gt; list_of_txt_files.list&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি .chm এক্সটেনশন সহ ফাইলদের তালিকা খোঁজছি&amp;lt;br&amp;gt;
এবং আমি এই তালিকাটি ধ্বংস করি।&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ find . -name &amp;quot;*.chm&amp;quot; -type f -delete&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি ডিজিটাল প্রকল্প ক্রমশঃ পদ্ধতির সাথে পরিচালনা করুন</title>
            <link >https://cheroliv.com//blog/2019/0015_projet_avec_methodologie_en_cascade_post.html</link>
            <pubDate>Thu, 1 Aug 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0015_projet_avec_methodologie_en_cascade_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশ্লেষণ_করুন_এবং_প্রয়োজন_সংগ্রহ_করুন&amp;quot;&amp;gt;বিশ্লেষণ করুন এবং প্রয়োজন সংগ্রহ করুন&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রজেক্ট_ম্যানেজমেন্ট_সংজ্ঞা_দিন&amp;quot;&amp;gt;প্রজেক্ট ম্যানেজমেন্ট সংজ্ঞা দিন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../diagram/definir_projet.png&amp;quot; alt=&amp;quot;definir la gestion de projet&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/triangle_qcd.png&amp;quot; alt=&amp;quot;triangle_qcd&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রকল্পকে_প্রেক্ষাপটে_স্থাপন_করুন&amp;quot;&amp;gt;প্রকল্পকে প্রেক্ষাপটে স্থাপন করুন&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশ্লেষণ_এবং_প্রয়োজন_সংগ্রহ_করা&amp;quot;&amp;gt;বিশ্লেষণ এবং প্রয়োজন সংগ্রহ করা&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;sect3&amp;quot;&amp;gt;
&amp;lt;h4 id=&amp;quot;_উদ্দেশ্য_এবং_ডেলিভারবলগুলোকে_তৈরি_করা&amp;quot;&amp;gt;উদ্দেশ্য এবং ডেলিভারবলগুলোকে তৈরি করা&amp;lt;/h4&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_একটি_পড়াশোনা_গ্রিড_ডিক্রিপ্ট_করা&amp;quot;&amp;gt;একটি পড়াশোনা গ্রিড ডিক্রিপ্ট করা&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect1&amp;quot;&amp;gt;
&amp;lt;h2 id=&amp;quot;_আপনার_টিমের_সাথে_প্রজেক্টকে_ফ্রেম_করুন&amp;quot;&amp;gt;আপনার টিমের সাথে প্রজেক্টকে ফ্রেম করুন&amp;lt;/h2&amp;gt;
&amp;lt;div class=&amp;quot;sectionbody&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/conductor.png&amp;quot; alt=&amp;quot;chef d&amp;amp;#8217;orchestre&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_বিশেষজ্ঞদের_সাথে_পরামর্শ_করুন_সমাধান_খুঁজে_পেতে&amp;quot;&amp;gt;বিশেষজ্ঞদের সাথে পরামর্শ করুন সমাধান খুঁজে পেতে&amp;lt;/h3&amp;gt;

&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;sect2&amp;quot;&amp;gt;
&amp;lt;h3 id=&amp;quot;_প্রকল্প_ব্যবস্থাপনার_পদ্ধতি_বেছে_নিন&amp;quot;&amp;gt;প্রকল্প ব্যবস্থাপনার পদ্ধতি বেছে নিন&amp;lt;/h3&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/cascading_planning.png&amp;quot; alt=&amp;quot;planning en cascade&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;imageblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;img src=&amp;quot;../../img/Cycle_V_details.jpeg&amp;quot; alt=&amp;quot;cycle en V&amp;quot;&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>একটি পোস্টgresকিউএল ইনস্ট্যান্সে ডেটাবেসগুলো তালিকা করুন</title>
            <link >https://cheroliv.com//blog/2019/0014_list_all_databases_in_postgresql_post.html</link>
            <pubDate>Tue, 30 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0014_list_all_databases_in_postgresql_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি ইন্সটল করতে চাই নাhttps://www.pgadmin.org/[pgAdmin] ou &amp;lt;a href=&amp;quot;http://phppgadmin.sourceforge.net/&amp;quot;&amp;gt;phppgadmin&amp;lt;/a&amp;gt; যে সকলই কমান্ড লাইনে উপস্থিত আছে।&amp;lt;br&amp;gt;
এই জন্য আমাদের টার্মিনাল চালু করতে হবে এবং postgres ব্যবহারকারীর guise সংuidas করতে হবে&amp;lt;br&amp;gt;
postgres ব্যবহারকারীটি ডিফল্টভাবে psql অ্যাপ্লিকেশন চালু করার অনুমতি পাওয়া একক ব্যবহারকারী, যা কমান্ড-লাইন ক্লায়েন্ট। (&amp;lt;a href=&amp;quot;https://fr.wikipedia.org/wiki/Interface_en_ligne_de_commande&amp;quot;&amp;gt;CLI&amp;lt;/a&amp;gt;) postgresql,&amp;lt;br&amp;gt;
টারমিনাল থেকে কমান্ড লাইন ব্যবহার করে ডেটাবেজের সাথে কথা বলতে সক্ষম হওয়ার জন্য।&amp;lt;br&amp;gt;
সংযুক্ত হওয়ার জন্য, টার্মিনাল খুলুন এবং নিম্নলিখিতটি টাইপ করুন:&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo -i -u postgres&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এতে সংযোগ করতে এবং সরাসরি পোস্টগ্রেস কমান্ড প্রম্পটে পৌঁছানোর জন্য, এই কমান্ডটি টাইপ করুন :&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ sudo -i -u postgres psql&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;পোস্টগ্রেসকিউএল একটি ইনস্ট্যান্সের ডাটাবেস তালিকাভুক্ত করতে, এখানে কমান্ডটি:&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-SQL&amp;quot; data-lang=&amp;quot;SQL&amp;quot;&amp;gt;postgres=# \l&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ডেটাবেসের তালিকা নাম    | মালিক | এনকোডিং | কোলেশন | অক্ষরের ধরন |    অ্যাক্সেসের অনুমতি&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;fiber     | tech         | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =Tc/tech&amp;lt;br&amp;gt;
|              |          |                 |              | tech=CTc/tech fiberdev  | tech         | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =Tc/tech&amp;lt;br&amp;gt;
|              |          |                 |              | tech=CTc/tech fiberweb  | tech         | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =Tc/tech&amp;lt;br&amp;gt;
tech=CTc/tech postgres  | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | template0 | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =c/postgres&amp;lt;br&amp;gt;
|              |          |                 |              | postgres=CTc/postgres template1 | postgres     | UTF8     | fr_FR.UTF-8     | fr_FR.UTF-8  | =c/postgres&amp;lt;br&amp;gt;
|              |          |                 |              | postgres=CTc/postgres (৬ সারি)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;q চাপিয়ে ফলাফলের প্রদর্শন থেকে বেরিয়ে যান&amp;lt;br&amp;gt;
&amp;lt;br&amp;gt;
postgresl-এ একটি উদাহরণের স্কিমাগুলো তালিকাভুক্ত করতে&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-sql&amp;quot; data-lang=&amp;quot;sql&amp;quot;&amp;gt;postgres=# SELECT schema_name FROM information_schema.schemata;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;সার্বজনীন ইনফরমেশন_স্কিমা pg_catalog pg_toast_temp_1 pg_temp_1 pg_toast (6 লাইন)&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ou&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-sql&amp;quot; data-lang=&amp;quot;sql&amp;quot;&amp;gt;postgres=# SELECT nspname FROM pg_catalog.pg_namespace;&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;pg_toast pg_temp_1 pg_toast_temp_1 pg_catalog ইনফরমেশন স্কিমা সাধারণ Please provide the French text you would like translated to Bengali.&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>গ্রুভি: রিকার্সিভভাবে ফাইলগুলোর নাম পরিবর্তন করুন</title>
            <link >https://cheroliv.com//blog/2019/0007_groovy_rename_recursively_files_post.html</link>
            <pubDate>Mon, 29 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0007_groovy_rename_recursively_files_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমার টিভি ভিডিও প্লেয়ারের নিজের একটি পদ্ধতি চলছে।&amp;lt;br&amp;gt;
একটি ফাইল থেকে অন্য ফাইলে সতত পড়াশোনা&amp;lt;br&amp;gt;
এবং তার চালানোর পদ্ধতি 1&amp;amp;#8230;&amp;amp;#8203;..mp4 থেকে 10&amp;amp;#8230;&amp;amp;#8203;.mp4-এ যাওয়া,&amp;lt;br&amp;gt;
এবং 1&amp;amp;#8230;&amp;amp;#8203;mp4 থেকে 2&amp;amp;#8230;&amp;amp;#8203;.mp4 নয়&amp;lt;br&amp;gt;
সমস্যা হল যে প্রায় 900টি ফাইল এবং ফোল্ডার আছে।&amp;lt;br&amp;gt;
বি�িঙ্গো গ্রুভি ব্যবহার করে কিছুকে ম্যানিপুলেট করার একটি দুর্দান্ত উদাহরণ&amp;lt;br&amp;gt;
ফাইলগুলো, নাম পরিবর্তন, ফাইলের নামে প্যাটার্ন অনুসন্ধান&amp;lt;br&amp;gt;
অথবা ফাইল.&amp;lt;br&amp;gt;
এখানে লক্ষ্য হলো &amp;lt;em&amp;gt;&amp;lt;em&amp;gt;&amp;lt;/em&amp;gt;__&amp;lt;/em&amp;gt; দিয়ে শুরু হওয়া নামগুলো পরিবর্তন করা&amp;lt;br&amp;gt;
একটি সংখ্যা এবং যের নামের দ্বিতীয় অক্ষর&amp;lt;br&amp;gt;
এটি অংক নয়, আমি এই নামের شروعে একটি শূন্য যোগ করবো&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;renameFilesToStartWithTwoDigit.groovy&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
/**
 * get a crossplateform separator
 * @return
 */
static String getSeparator() {
    System.getProperty(&amp;quot;file.separator&amp;quot;)
}
/**
 * rename file
 * @param file
 * @param newName
 * @return the renamed file
 */
static File rename(File file, String newName) {
    assert file.renameTo(file
            .parentFile.path +
            getSeparator() +
            newName)
    new File(file
            .parentFile.path +
            getSeparator() +
            newName)
}

String rootFolderPath = System.getProperty(&amp;quot;user.home&amp;quot;) +
        &amp;quot;/Bureau/ng-courses/Udemy - Angular 7 &amp;quot; +
        &amp;quot;(formerly Angular 2) - The Complete Guide&amp;quot;

File rootFolder = new File(rootFolderPath)
assert rootFolder.exists()
assert rootFolder.directory
assert rootFolder.canRead()

List&amp;amp;lt;File&amp;amp;gt; dirList = new ArrayList&amp;amp;lt;&amp;amp;gt;()

//Adding rootFolder in dirList
// just in case there is some files in it
dirList.add(rootFolder)

//looping to get list of directories
//recursively inside rootFolder
rootFolder.traverse { File file -&amp;amp;gt;
    !file.directory ?: dirList.add(file)
}

//looping through dirList
//to rename directories filling criterias
for (int i = dirList.size() - 1; i &amp;amp;gt;= 0; i--) {
    Character[] chars = dirList.get(i).name.chars
    !(chars[0].digit &amp;amp;amp;&amp;amp;amp; !chars[1].digit) ?:
            dirList.set(i, rename(dirList.get(i),
                    &amp;quot;0${dirList.get(i).name}&amp;quot;))
    if (dirList.get(i).directory) {
        //looping through directory
        //to rename file filling criterias
        dirList.get(i).listFiles().each { File f -&amp;amp;gt;
            Character[] cs = f.name.chars
            !(cs[0].digit &amp;amp;amp;&amp;amp;amp; !cs[1].digit) ?:
                    rename(f, &amp;quot;0${f.name}&amp;quot;)
        }
    }
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Groovy: শর্তসাপেক্ষে ফাইলের অনুসন্ধান,</title>
            <link >https://cheroliv.com//blog/2019/0006_groovy_find_files_copy_to_post.html</link>
            <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0006_groovy_find_files_copy_to_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এই স্ক্রিপ্টের লক্ষ্য ফাইল খোঁজা,&amp;lt;br&amp;gt;
একটি পিতৃ ডিরেক্টরি থেকে; নির্বাচনটি পুনরুদ্ধার করা&amp;lt;br&amp;gt;
একটি তালিকায়। শেষে এই ফাইলের তালিকা কপি করুন।&amp;lt;br&amp;gt;
একটি গন্তব্য ডিরেক্টরিতে এইটিকে Groovy-এ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;findCopyTo.groovy&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
@Grab(&amp;quot;commons-io:commons-io:2.6&amp;quot;)

import groovy.io.FileType
import org.apache.commons.io.FileUtils

/**
 * un separateur OS independant
 * @return
 */
static String getSep() {
    System.getProperty(&amp;quot;file.separator&amp;quot;)
}
/**
 * la liste des fichiers dont le titre contient un item
 * de la liste des motifs
 *
 * @param path
 * @param motifs
 * @return la liste des chemins complet de fichiers
 */
static List&amp;amp;lt;String&amp;amp;gt; findFilesContainingMotifs(
        String path,
        List&amp;amp;lt;String&amp;amp;gt; motifs) {
    List&amp;amp;lt;String&amp;amp;gt; filePathResultList = new ArrayList&amp;amp;lt;&amp;amp;gt;()
    new File(path)
            .eachFileRecurse(FileType.FILES) {
                if (it.name.toLowerCase().contains(&amp;#39;cucumber&amp;#39;)) {
                    filePathResultList.add it.path
                }
            }
    filePathResultList
}

/**
 * copy vers la liste des fichiers
 * @param files
 * @param to
 */
static void copyFilesTo(List&amp;amp;lt;String&amp;amp;gt; files, String to) {
    File toDirDest = new File(to)
    files.each { String filepath -&amp;amp;gt;
        File file = new File(filepath)
        //si le dernier caractere de to n&amp;#39;est pas un separateur
        // alors ajoute le a la chaine
        (to.substring(to.length() - 1) == sep) ?: to.concat(sep)
        if (to + file.name != filepath) {
            FileUtils.copyFileToDirectory(file, toDirDest)
            file.delete()
        }
    }
}
/**
 * la list des arguments
 */
String userName = System.getProperty(&amp;quot;user.name&amp;quot;)
List&amp;amp;lt;String&amp;amp;gt; motifs = [&amp;#39;cucumber&amp;#39;]
String path = &amp;quot;/media/$userName/320/Books/&amp;quot;
String to = &amp;quot;/media/$userName/320/Books/bdd/&amp;quot;
/**
 * lappel aux methodes
 */
copyFilesTo(findFilesContainingMotifs(path, motifs), to)

//affiche moi les fichiers déplacés
findFilesContainingMotifs(path, motifs).each {
    println it
}&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Groovy: ফাইল ম্যানিপুলেশন, অনুসন্ধান এবং মুছে ফেলা</title>
            <link >https://cheroliv.com//blog/2019/0005_groovy_manipulation_files_post.html</link>
            <pubDate>Thu, 18 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0005_groovy_manipulation_files_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি এখানে একটি প্রকল্পের বিল্ডে একটি প্রপার্টি লোড করতে মনোযোগ দেবhttps://docs.gradle.org/current/userguide/userguide.html[gradle]&amp;lt;br&amp;gt;
কোডে তা উপলব্ধ না হলে.&amp;lt;br&amp;gt;
সম্পত্তি জানিয়া দেওয়া হবে gradle.properties ~/.gradle/gradle.properties ডিরেক্টরির ফাইলে&amp;lt;br&amp;gt;
~ একটি সংক্ষিপ্ত রূপ HOME_PATH প্রতীকী ভেরিয়েবলের, যা সেশন ব্যবহারকারীর মূল ডিরেক্টরি প্রতিনিধিত্ব করে: এইhttps://fr.wikipedia.org/wiki/R%C3%A9pertoire_personnel[ব্যক্তিগত ডিরেক্টরি].&amp;lt;br&amp;gt;
একইভাবে একটি প্রজেক্ট বিল্ডেhttps://maven.apache.org/guides/index.html[maven], সাথে ~/.m2/settings.xml এই স্ক্রিপ্টের লক্ষ্য হলো উল্লিখিত প্যাটার্নে মেলে যাওয়া ফাইলগুলি মুছে ফেলা।&amp;lt;br&amp;gt;
strCriteria ভেরিয়েবলে। এই জন্য আমি ব্যবহার করবhttps://fr.wikipedia.org/wiki/Fermeture_(informatique)[বন্ধন]: each, findAll,  collect&amp;lt;br&amp;gt;
এবং StringTokenizer ক্লাস যা আমার মানদণ্ডের স্ট্রিংকে টুকরো টুকরোে কেটে দেবে&amp;lt;br&amp;gt;
একটি স্ট্রিংগুলোর তালিকা পেতে। যদি আমার পরিষ্কার করতে যাওয়া ফোল্ডারের কোনো ফাইলের নামে কোনো প্যাটার্ন উপস্থিত থাকে&amp;lt;br&amp;gt;
তাহলে它将成为破坏的候选人，通过被添加到结果列表。&amp;lt;br&amp;gt;
এবং শেষ লাইনে একটি ছোট উদাহরণhttps://en.wikipedia.org/wiki/Elvis_operator[এলভিস অপারেটর]&amp;lt;br&amp;gt;
filemanip.groovy&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
//Mes criteres de selection des fichiers à detruire
String strCriteria = &amp;quot;Dummies Dummie ajax Objective-C Windows blackberry &amp;quot; +
        &amp;quot;wordpress joomla ios c# f# rails ruby flex asp flash Dreamweaver adobe &amp;quot; +
        &amp;quot;CoffeeScript c++ .chm .epub .rar .zip .tar drupal drupals .net php javascript &amp;quot; +
        &amp;quot;.js iphone ipad js _js facebook gwt vaadin linq python py zope window &amp;quot; +
        &amp;quot;3D scala gaming active_directory tomcat jboss glassfish microsoft 2d &amp;quot; +
        &amp;quot;lego blogger blog cocoa dojo dom dotnetnuke eclipse .gz unity sharepoint &amp;quot; +
        &amp;quot;.tgz iwork filemaker .doc .txt&amp;quot;


//repertoire personnel
String userDir = System.getProperty(&amp;quot;user.home&amp;quot;)
//un separateur de chemin crossplatform
String sep = System.getProperty(&amp;quot;file.separator&amp;quot;)
//la variable symbolique
String sym_books_vrac_path = &amp;quot;books_vrac_path&amp;quot;

//le chemin de mon fichier gradle.properties hors projet
String propertiesFilePath = userDir
        .concat(&amp;quot;${sep}.gradle${sep}gradle.properties&amp;quot;)


File propertiesFile = new File(propertiesFilePath)


//je m&amp;#39;aassure que le fichier existe et que ce n&amp;#39;est pas un dossier
assert propertiesFile.exists() &amp;amp;amp;&amp;amp;amp; !propertiesFile.directory

Properties gradleProperties = new Properties()

//on boucle avec un inpustream sur le fichier
//gradle.properties pour peupler ma variable gradleProperties
propertiesFile.withInputStream { InputStream it -&amp;amp;gt;
    gradleProperties.load(it)
}

//le chemin du dossier books_vrac est la valeur de notre clé books_vrac_path
String pathVracDir = gradleProperties.get(sym_books_vrac_path)

//j&amp;#39;ai récuperé tous ces livres en tapant cette commande dans le terminal
//wget -m -np -c -R &amp;quot;index.html*&amp;quot; &amp;quot;http://the-eye.eu/public/Books/IT%20Various/&amp;quot;

//on ouvre le dossier dont le chemin est dans la variable pathVracDir
// on s&amp;#39;assure qu&amp;#39;il existe et que c&amp;#39;est un dossier
File vracDir = new File(pathVracDir)
assert vracDir.exists() &amp;amp;amp;&amp;amp;amp; vracDir.directory


//separer les élèments de ma liste de critère
StringTokenizer tokenizer = new StringTokenizer(strCriteria)

//la liste de critere
List&amp;amp;lt;String&amp;amp;gt; criteriaList = new ArrayList&amp;amp;lt;&amp;amp;gt;()

//j&amp;#39;itère sur les tokens et je construit ma liste de token,
// mot clef critère de recherche
tokenizer.each { String it -&amp;amp;gt;
    criteriaList.add(it.toLowerCase())
}

//je collect tous les noms de fichier dans le dossier
List&amp;amp;lt;String&amp;amp;gt; fileNameList = vracDir
        .listFiles()
        .collect { File it -&amp;amp;gt;
            it.directory ?: it.name
        }

// je collect les noms de fichier qui contiendraient un des criteres
List&amp;amp;lt;String&amp;amp;gt; resultList = fileNameList.findAll { String name -&amp;amp;gt;
    criteriaList.findAll { String crit -&amp;amp;gt;
        name.toLowerCase().contains(crit)
    }
}

// je parcours ma liste de résultat pour les effacer
resultList.each { String fileName -&amp;amp;gt;
    assert new File(vracDir.path + sep + fileName).delete()
}

println fileNameList.size()
println resultList.size()
resultList.empty ?: println(vracDir.path + sep + resultList.first())&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Groovy: একটি String-এ একটি অক্ষর ক্রমটি প্রতিস্থাপন করুন এবং একটি ফাইল থেকে একটি Properties লোড করুন</title>
            <link >https://cheroliv.com//blog/2019/0004_groovy_replace_string_load_properties_post.html</link>
            <pubDate>Wed, 17 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0004_groovy_replace_string_load_properties_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে গ্রুভির একটি কার্যকর কোড টুকরা,&amp;lt;br&amp;gt;
একটি স্ট্রিংরের一个 অক্ষর-ক্রমের সমস্ত উদাহরণ পরিবর্তন করার জন্য&amp;lt;br&amp;gt;
এবং একটি .properties ফাইলটি একটি properties অবজেক্টে লোড করুন।&amp;lt;br&amp;gt;
একটি স্ট্রিং-এ একটি কমান্ড চালু করুন।&amp;lt;br&amp;gt;
replaceTextinFile.groovy&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
println System.getProperty(&amp;quot;user.home&amp;quot;)

static String getSeparator_() {
    System.getProperty(&amp;quot;file.separator&amp;quot;)
}

String separator = separator_

String path = System.getProperty(&amp;quot;user.home&amp;quot;)
        .concat(&amp;quot;${separator}.gradle&amp;quot; +
                separator +
                &amp;quot;gradle.properties&amp;quot;)

File propertiesFile = new File(path)

assert propertiesFile.exists() &amp;amp;amp;&amp;amp;amp; !propertiesFile.directory

Properties gradleProperties = new Properties()

propertiesFile.withInputStream { InputStream it -&amp;amp;gt;
    gradleProperties.load(it)
}

String user_name = gradleProperties.getProperty(&amp;quot;user_name&amp;quot;)

String text
String resultText
text = new File(&amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}&amp;quot; +
        separator +
        &amp;quot;src&amp;quot; +
        separator +
        &amp;quot;cheroliv.github.io&amp;quot; +
        separator +
        &amp;quot;src&amp;quot; +
        separator +
        &amp;quot;main&amp;quot; +
        separator +
        &amp;quot;resources&amp;quot; +
        separator +
        &amp;quot;eco_space.txt&amp;quot;).text

String to = separator +
        &amp;quot;media&amp;quot; +
        separator +
        &amp;quot;${user_name}&amp;quot; +
        separator +
        &amp;quot;320&amp;quot; +
        separator +
        &amp;quot;videoCours&amp;quot; +
        separator
String from = &amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}&amp;quot; +
        separator +
        &amp;quot;p2p&amp;quot; +
        separator

resultText = text.replace(to, from)

println resultText

//execute command line in a string
println &amp;quot;rsync -avr ${resultText} ${to}&amp;quot;.execute().text&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item><item>
            <title>Groovy: ASCII অক্ষর</title>
            <link >https://cheroliv.com//blog/2019/0003_groovy_char_ascci_post.html</link>
            <pubDate>Wed, 10 Jul 2019 00:00:00 +0000</pubDate>
            <guid isPermaLink="false">blog/2019/0003_groovy_char_ascci_post.html</guid>
            <description>&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;এখানে Groovy-এ একটি কাজ্য কোডের টুকরা, যা একটি পাঠ্য ফাইল তৈরি করে,&amp;lt;br&amp;gt;
ASCII টেবিলের প্রথম ২৫৬টি পঠনযোগ্য অক্ষরের সাথে&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-groovy&amp;quot; data-lang=&amp;quot;groovy&amp;quot;&amp;gt;#!/usr/bin/env groovy
import java.nio.charset.StandardCharsets

List&amp;amp;lt;Character&amp;amp;gt; chars = new ArrayList&amp;amp;lt;&amp;amp;gt;()
int j = 0
Character jumpLine = &amp;#39;\n&amp;#39;

256.times { Integer idx -&amp;amp;gt;
    if (Character.isAlphabetic(idx) || Character.isDigit(idx)) {
        if (j % 10 == 0 &amp;amp;amp;&amp;amp;amp; j != 0) {
            chars.add(jumpLine)
            chars.add(idx as char)
        } else chars.add(idx as char)
        j++
    }
}

String seperator = System.getProperty(&amp;quot;file.separator&amp;quot;)

String path = &amp;quot;${System.getProperty(&amp;quot;user.home&amp;quot;)}${seperator}ascii.txt&amp;quot;
File speCharFile = new File(path)

if (speCharFile.exists() &amp;amp;amp;&amp;amp;amp; !speCharFile.directory) {
    speCharFile.text = &amp;quot;&amp;quot;
} else {
    speCharFile.createNewFile()
}

String text = new String()

chars.each { Character it -&amp;amp;gt;
    text = it == jumpLine ? &amp;quot;$text$it&amp;quot; : &amp;quot;$text $it &amp;quot;
}

speCharFile.setText(text, StandardCharsets.UTF_8.toString())&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;আমি ফাইলটি spe_char.groovy নামে নাম দিয়েছি,&amp;lt;br&amp;gt;
ফাইলের থাকা ফোল্ডার থেকে&amp;lt;br&amp;gt;
একটি টার্মিনাল খুলুন এবং কপি পেস্ট করে স্ক্রিপ্টটি চালান&amp;lt;br&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;listingblock&amp;quot;&amp;gt;
&amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;
&amp;lt;pre class=&amp;quot;highlight&amp;quot;&amp;gt;&amp;lt;code class=&amp;quot;language-bash&amp;quot; data-lang=&amp;quot;bash&amp;quot;&amp;gt;$ groovy spe_char.groovy&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;ফল:&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;
&amp;lt;div class=&amp;quot;paragraph&amp;quot;&amp;gt;
&amp;lt;p&amp;gt;0  1  2  3  4  5  6  7  8  9 A  B  C  D  E  F  G  H  I  J K  L  M  N  O  P  Q  R  S  T U  V  W  X  Y  Z  a  b  c  d e  f  g  h  i  j  k  l  m  n o  p  q  r  s  t  u  v  w  x y  z  ª  µ  º  À  Á  Â  Ã  Ä Å  Æ  Ç  È  É  Ê  Ë  Ì  Í  Î Ï  Ð  Ñ  Ò  Ó  Ô  Õ  Ö  Ø  Ù Ú  Û  Ü  Ý  Þ  ß  à  á  â  ã ä  å  æ  ç  è  é  ê  ë  ì  í î  ï  ð  ñ  ò  ó  ô  õ  ö  ø ù  ú  û  ü  ý  þ  ÿ&amp;lt;/p&amp;gt;
&amp;lt;/div&amp;gt;</description>
        </item>

    </channel>
</rss>
