<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Xtadalafix</title>
	<atom:link href="https://xtadalafix.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://xtadalafix.com</link>
	<description>Xtadalafix</description>
	<lastBuildDate>Fri, 11 Sep 2026 09:18:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	
	<item>
		<title>Give AI Agents Long-Term Memory: LLM Wiki Pattern in Symfony</title>
		<link>https://xtadalafix.com/give-ai-agents-long-term-memory-llm-wiki-pattern-in-symfony/</link>
					<comments>https://xtadalafix.com/give-ai-agents-long-term-memory-llm-wiki-pattern-in-symfony/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Fri, 11 Sep 2026 09:18:06 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/give-ai-agents-long-term-memory-llm-wiki-pattern-in-symfony/</guid>

					<description><![CDATA[To cure this chronic amnesia without setting up heavy RAG (Retrieval-Augmented Generation) pipelines, complex MCP servers, or relying on proprietary cloud chat histories, there’s a simple, universal, and incredibly effective approach: pairing a global AGENTS.md setup with the LLM Wiki pattern. This concept was popularized by Andrej Karpathy, former Director of AI at Tesla and [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="content" data-sticky-nav-target="content">
<p><span>To cure this chronic amnesia without setting up heavy RAG (Retrieval-Augmented Generation) pipelines, complex MCP servers, or relying on proprietary cloud chat histories, there’s a simple, universal, and incredibly effective approach: pairing a global </span><span>AGENTS.md</span><span> setup with the <strong>LLM Wiki</strong> pattern. This concept was popularized by </span><span><u>Andrej Karpathy</u></span><span>, former Director of AI at Tesla and co-founder of OpenAI.</span></p>
<h2 id="The-Trap-of-Disposable-Context-in-PHP-Development"><span>The Trap of Disposable Context in PHP Development</span></h2>
<p><span>When you ask an AI agent to implement a component—say, a caching system on an external HTTP client—your first instinct is to write a massive, detailed prompt. Without any existing context, you have to specify the PHP version, the dependency injection rules, the chosen Symfony cache component (</span><span>cache.app</span><span>, Redis, a custom Adapter), and how your PHPUnit tests should be structured.</span></p>
<p><span>Multiply that by dozens of daily interactions, and your productivity takes a massive hit. The goal is to <strong>give the agent persistent, portable memory that&#8217;s completely decoupled from the underlying LLM model</strong>.</span></p>
<h2 id="Step-1-Structuring-Instructions-with-a-Dual-Layer-AGENTS-md"><span>Step 1: Structuring Instructions with a Dual-Layer AGENTS.md</span></h2>
<p><span>The </span><span>AGENTS.md</span><span> file format has quickly become the go-to standard for guiding coding assistants right from your repo&#8217;s root. It defines your stack, your test commands, and your team&#8217;s guidelines. However, keeping this file strictly at the project level doesn&#8217;t solve the issue of your own personal developer context.</span></p>
<p><span>The first step is to leverage two distinct instruction layers:</span></p>
<ul>
<li>
<p><span><strong>The project level (</strong></span><strong><span>./AGENTS.md</span><span>):</span></strong><span> Specific to the Symfony app you&#8217;re currently working on. It contains project conventions, language preferences, team CI/CD rules, etc.</span></p>
</li>
</ul>
<p>Example:</p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="markdown">
<pre><code>## Stack
- Symfony 7, PHP 8.3, Doctrine, Twig, PostgreSQL.

## Conventions
- Skinny controllers, logic kept in autowired services.
- Doctrine migrations; never use schema:update.

## Quality
- Run everything through the Makefile: make test, make stan.
- PHPStan level 8, php-cs-fixer. Zero warnings.</code></pre>
</div>
<ul>
<li>
<p><span><strong>The user level (your agents global instruction files):</strong> Shared across all your projects. Every agent has its own entry point: </span><span>~/.codex/AGENTS.md</span><span>, </span><span>~/.claude/CLAUDE.md</span><span>, or </span><span>~/.gemini/GEMINI.md</span><span>.</span></p>
</li>
</ul>
<p><span>This is where you define your personal preferences. For example: using PHP 8 attributes, forcing strict types (</span><span>declare(strict_types=1)</span><span>), Git conventions, or requiring the agent to ask for confirmation before running destructive database commands like </span><span>doctrine:schema:drop</span><span>.</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="markdown">
<pre><code>## About me
- Clément, Tech Lead. Reply to me in French.

## Defaults (Everywhere)
- Write code and documentation in English.
- PHP/Symfony, simple monolith. PHPStan level 4 minimum.
- Never push to git without my green light.</code></pre>
</div>
<p><span>The best part? These files can all be symlinks pointing to a single source file that you only have to maintain once:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="bash">
<pre><code>➜  ls -l ~/.codex/AGENTS.md ~/.claude/CLAUDE.md ~/.gemini/GEMINI.md

/Users/cb/.claude/CLAUDE.md -&gt; /Users/cb/.config/AGENTS.md
/Users/cb/.codex/AGENTS.md  -&gt; /Users/cb/.config/AGENTS.md
/Users/cb/.gemini/GEMINI.md -&gt; /Users/cb/.config/AGENTS.md</code></pre>
</div>
<p><span>However, you’ll quickly hit a technical ceiling: the context window. This is the limited amount of data an AI can hold in its active memory to process and respond to queries. Anthropic and OpenAI recommend keeping these </span><span>AGENTS.md</span><span> files under 200 to 300 lines to prevent model saturation or the risk of hallucination from instruction overload.</span></p>
<h2 id="Step-2-Scaling-Up-with-the-LLM-Wiki-Pattern"><span>Step 2: Scaling Up with the LLM Wiki Pattern</span></h2>
<p><span>To store a larger volume of knowledge without cluttering your main instruction file, Karpathy formalized the <strong>LLM Wiki</strong> pattern.</span></p>
<p><span>The core idea is simple: build a Markdown-based knowledge base structured like a Wiki, stored locally, and maintained/referenced by the agent itself. No new tools to install—just a clean folder structure of text files that you can track with Git.</span></p>
<p><span>This pattern works beautifully for a Symfony project, and it&#8217;s just as powerful for a developer&#8217;s personal knowledge base. It can be organized like this:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="bash">
<pre><code>~/knowledge/
├── projects/      # App contexts (ProjetA, API-Core, Legacy-App)
├── tech/          # PHP 8 conventions, Symfony best practices, test patterns
├── people/        # Contacts, team members, stakeholder roles
├── index.md       # Global map and entry point
└── log.md         # Date-stamped changelog managed by the AI</code></pre>
</div>
<p><span><strong>Example index.md</strong></span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="markdown">
<pre><code># Personal Knowledge Index

Durable personal base, maintained as a lightweight LLM Wiki-style knowledge layer. **Do not load the whole directory** -- read this index, then open only the files relevant to the question.

## Profile
- `profile/about-me.md` -- who I am, background, side projects.
- `profile/roles-and-context.md` -- SensioLabs roles, client missions, mandates, durable context.

## Projects
- `projects/index.md` -- map of local projects and repositories, mostly under `~/Sites/`.

## People
- `people/contacts.md` -- durable professional relationship context, contact importance signals, and domain heuristics for calendar/mail prioritization.

## Tech
- `tech/php-symfony-style.md` -- durable PHP/Symfony preferences, patterns I like/refuse, architectural posture.
- `tech/code-review-preferences.md` -- recurring review criteria.
- `tech/makefile-task-runner.md` -- preference for self-documented Makefiles as project task runners and operational maps.
- `tech/docs-methodology.md` -- index of documentation surfaces (ADR, plans, audits, wiki, handoffs, articles) and where each goes; read this first, it points to the richer plan doc below.
- `tech/agent-executable-plans.md` -- global convention for where to store agent execution plans, how to number them, and how to track them with lightweight indexes.
- `tech/agentic-tools.md` -- cross-project inventory of agent-accessible tools, integrations, MCP endpoints, and usage conventions.
…</code></pre>
</div>
<h2 id="Orchestration-On-Demand-Injection"><span>Orchestration: On-Demand Injection</span></h2>
<p><span>To get your assistants to leverage this local Wiki, you only need a single line in your </span><span>~/.config/AGENTS.md</span><span> file:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="bash">
<pre><code>- Durable personal context: `~/knowledge/` (read the index before opening anything else).</code></pre>
</div>
<p><span>When starting a new session, the agent reads the Wiki index (</span><span>~/knowledge/index.md</span><span>) first. Think of this index as a routing table. Depending on your current task, the agent only loads the two or three files it actually needs, rather than clogging its workspace memory with the entire folder.</span></p>
<p><span>Another massive benefit is maintenance. After a deep refactoring session or when nailing down a complex architectural fix, the agent can update the relevant tech doc in </span><span>~/knowledge/tech/</span><span> itself and log the change in </span><span>log.md</span><span>. You retain full control via simple Git commits.</span></p>
<h2 id="In-Practice-The-Power-of-Minimalist-Prompts"><span>In Practice: The Power of Minimalist Prompts</span></h2>
<p><span>Once this setup is live, how you write prompts changes completely. A super concise prompt is now fully understood by your assistant:</span></p>
<p><span>The agent uses automatic navigation within your local Wiki to resolve each context. For each element in the prompt, the agent locates the relevant context in the specified file:</span></p>
<p>&#x1f535; <strong>Project1/Project2</strong> -&gt; <span>knowledge/projects/index.md</span></p>
<p>&#x1f7e2; <strong>Symfony preferences</strong> -&gt; <span>knowledge/tech/php-symfony-style.md</span></p>
<p>&#x1f7e1; <strong>todo</strong> -&gt; <span>knowledge/todo/index.md</span></p>
<p>&#x1f7e3; <strong>my CTO</strong> -&gt; <span>knowledge/people/contacts.md</span></p>
<p>&#x1f534; <strong>Jira </strong>-&gt; <span>shared configuration, skills and MCP</span></p>
<h2 id="Tailored-Memory-for-Cleaner-Code"><span>Tailored Memory for Cleaner Code</span></h2>
<p><span>By pairing the clarity of a global </span><span>AGENTS.md</span><span> file with the flexibility of the LLM Wiki pattern, you give your coding assistants genuine long-term memory without compromising data sovereignty.</span></p>
<p><span>This approach perfectly aligns with the clean, maintainable philosophy of the Symfony ecosystem: no black boxes, no hidden dependencies—just plain, version-controlled text that’s human-readable and ready for any current or future LLM.</span></p>
</p></div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/give-ai-agents-long-term-memory-llm-wiki-pattern-in-symfony/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Week in Charts (9/5/26)</title>
		<link>https://xtadalafix.com/the-week-in-charts-9-5-26/</link>
					<comments>https://xtadalafix.com/the-week-in-charts-9-5-26/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Wed, 09 Sep 2026 08:58:10 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/the-week-in-charts-9-5-26/</guid>

					<description><![CDATA[View the video of this post here. Managing your wealth involves much more than choosing investments. Creative Planning brings financial planning, investment management, tax strategy, estate planning and insurance together under one roof, with a dedicated team focused on your unique goals. At Creative Planning, we’re proud to help clients experience a richer way to wealth [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<p class="wp-block-paragraph">View the <strong>video of this post here</strong>.</p>
<p><iframe loading="lazy" title="The Rate Hikes Are Coming | The Week in Charts (8/31/26) | Charlie Bilello | Creative Planning" width="640" height="360" src="https://www.youtube.com/embed/9M5N3lQG9IM?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph">Managing your wealth involves much more than choosing investments.</p>
<p class="wp-block-paragraph">Creative Planning brings financial planning, investment management, tax strategy, estate planning and insurance together under one roof, with a dedicated team focused on your unique goals.</p>
<p class="wp-block-paragraph">At Creative Planning, we’re proud to help clients experience a richer way to wealth in all 50 states and abroad, with over $780 billion in assets under management and advisement. </p>
<p class="wp-block-paragraph"><strong>Click here to learn how our team at Creative Planning can help you today.</strong></p>
<figure class="wp-block-image is-resized"></figure>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph"><strong>The most important charts and themes in markets and investing</strong>…</p>
<p class="wp-block-paragraph"><strong>1) The Rate Hikes Are Coming</strong></p>
<p class="wp-block-paragraph">Kevin Warsh’s Jackson Hole speech was yet another reminder that he is not going to be the extremely dovish Fed chairman that President Trump was looking for.</p>
<p class="wp-block-paragraph">Quite the opposite.</p>
<p class="wp-block-paragraph">He reinforced the Fed’s 2% inflation target as a “firm, fixed target” and stated unequivocally that it was “the Fed’s job to deliver stable prices.”</p>
<p class="wp-block-paragraph">Have they been delivering it?</p>
<p class="wp-block-paragraph">Absolutely not, as Warsh plainly acknowledged in saying the Fed bears “responsibility for 65 months of sustained, elevated inflation.”</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="607" src="https://bilello.blog/wp-content/uploads/2026/09/core-pce-yoy-8-26-26-1024x607.png" alt="" class="wp-image-16930" srcset="https://bilello.blog/wp-content/uploads/2026/09/core-pce-yoy-8-26-26-1024x607.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/core-pce-yoy-8-26-26-300x178.png 300w, https://bilello.blog/wp-content/uploads/2026/09/core-pce-yoy-8-26-26-766x454.png 766w, https://bilello.blog/wp-content/uploads/2026/09/core-pce-yoy-8-26-26.png 1283w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">And unless they are confident that underlying inflation is moving back to 2% at “sufficient speed,” Warsh believes they “have work to do.”</p>
<p class="wp-block-paragraph">Translation: the rate the hikes are coming. The market is now pricing in a 60% chance of a Fed hike at the September 16 meeting, with the odds going up to 70% by the October meeting and 85% by year-end.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="562" src="https://bilello.blog/wp-content/uploads/2026/09/market-expectations-fed-funds-9-4-26-1024x562.png" alt="" class="wp-image-16929" srcset="https://bilello.blog/wp-content/uploads/2026/09/market-expectations-fed-funds-9-4-26-1024x562.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/market-expectations-fed-funds-9-4-26-300x165.png 300w, https://bilello.blog/wp-content/uploads/2026/09/market-expectations-fed-funds-9-4-26-768x421.png 768w, https://bilello.blog/wp-content/uploads/2026/09/market-expectations-fed-funds-9-4-26.png 1271w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">Will the Fed stop after one hike?</p>
<p class="wp-block-paragraph">That seems unlikely if they want to send the message that they are actually serious about fighting inflation. The 2-Year Treasury yield has been a pretty good <em>leading</em> indicator of the Fed Funds Rate over the last decade, and it currently sits at 0.74% higher than the Fed Funds Rate. </p>
<p class="wp-block-paragraph">The bond market is currently pricing in 2-3 rate hikes over the next year, and with Fed set to update their projections for 2027 at the September meeting, that number could increase if the Fed raises their projections.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="839" height="578" src="https://bilello.blog/wp-content/uploads/2026/09/fed-funds-vs.-2-year-yield.png" alt="" class="wp-image-16934" srcset="https://bilello.blog/wp-content/uploads/2026/09/fed-funds-vs.-2-year-yield.png 839w, https://bilello.blog/wp-content/uploads/2026/09/fed-funds-vs.-2-year-yield-300x207.png 300w, https://bilello.blog/wp-content/uploads/2026/09/fed-funds-vs.-2-year-yield-768x529.png 768w" sizes="auto, (max-width: 839px) 100vw, 839px"/></figure>
<p class="wp-block-paragraph"><strong>2) “Money Matters”</strong></p>
<p class="wp-block-paragraph">The US Money Supply (M2) increased by over $9 trillion during Jerome Powell’s tenure and there wasn’t a single mention by him on how that contributed to the 4% inflation we saw in the last 6 years under his leadership.</p>
<p class="wp-block-paragraph">Which it was why it was encouraging to hear Kevin Warsh say the following at Jackson Hole:</p>
<p class="wp-block-paragraph">“Money matters. It’s not fashionable these days, but my view is that money has something important to do with monetary policy. We should pay attention to money created by the central bank and money that comes from the banking and financial systems.”</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="840" height="568" src="https://bilello.blog/wp-content/uploads/2026/09/m2-money-supply-august-2026.png" alt="" class="wp-image-16925" srcset="https://bilello.blog/wp-content/uploads/2026/09/m2-money-supply-august-2026.png 840w, https://bilello.blog/wp-content/uploads/2026/09/m2-money-supply-august-2026-300x203.png 300w, https://bilello.blog/wp-content/uploads/2026/09/m2-money-supply-august-2026-768x519.png 768w" sizes="auto, (max-width: 840px) 100vw, 840px"/></figure>
<p class="wp-block-paragraph">What could the Fed do immediately?</p>
<p class="wp-block-paragraph">End QE and stop expanding their balance sheet, a policy at odds with their stated desire to fight inflation.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="839" height="568" src="https://bilello.blog/wp-content/uploads/2026/09/fed-total-assets-8-14-26.png" alt="" class="wp-image-16937" srcset="https://bilello.blog/wp-content/uploads/2026/09/fed-total-assets-8-14-26.png 839w, https://bilello.blog/wp-content/uploads/2026/09/fed-total-assets-8-14-26-300x203.png 300w, https://bilello.blog/wp-content/uploads/2026/09/fed-total-assets-8-14-26-767x519.png 767w" sizes="auto, (max-width: 839px) 100vw, 839px"/></figure>
<p class="wp-block-paragraph">After that, all of their mortgage bond holdings should be immediately sold and they should acknowledge the damage they caused: by artificially driving rates down to unnatural levels in 2020/2021, they artificially inflated home prices which effectively froze the housing market for a generation. Congress should pass a law to ensure the Fed is never again allowed to manipulate the mortgage market and engineer an affordability crisis.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="755" src="https://bilello.blog/wp-content/uploads/2026/09/m2-vs.-us-home-price-july-2026-1024x755.png" alt="" class="wp-image-16938" srcset="https://bilello.blog/wp-content/uploads/2026/09/m2-vs.-us-home-price-july-2026-1024x755.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/m2-vs.-us-home-price-july-2026-300x221.png 300w, https://bilello.blog/wp-content/uploads/2026/09/m2-vs.-us-home-price-july-2026-767x566.png 767w, https://bilello.blog/wp-content/uploads/2026/09/m2-vs.-us-home-price-july-2026.png 1300w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph"><strong>3) The Iran War at 6 Months</strong></p>
<p class="wp-block-paragraph">We are now 6 months into the Iran war.</p>
<p class="wp-block-paragraph">The impact on inflation has been felt by everyone around the world, with the prices of food and energy spiking since the start of the War.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="582" src="https://bilello.blog/wp-content/uploads/2026/09/iran-war-price-increases-9-4-26-1024x582.png" alt="" class="wp-image-16939" srcset="https://bilello.blog/wp-content/uploads/2026/09/iran-war-price-increases-9-4-26-1024x582.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/iran-war-price-increases-9-4-26-300x170.png 300w, https://bilello.blog/wp-content/uploads/2026/09/iran-war-price-increases-9-4-26-767x436.png 767w, https://bilello.blog/wp-content/uploads/2026/09/iran-war-price-increases-9-4-26.png 1313w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">In the US, we saw a painful new record for American drivers: for the first time in history, the national average price of gasoline was above $4.00/gallon every single day in August. And heading into Labor Day at $4.15 per gallon, this will be the highest level ever on the holiday (prior record was $3.82/gallon set in 2012).</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="681" src="https://bilello.blog/wp-content/uploads/2026/09/aaa-gas-prices-9-14-26-1024x681.png" alt="" class="wp-image-16940" srcset="https://bilello.blog/wp-content/uploads/2026/09/aaa-gas-prices-9-14-26-1024x681.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/aaa-gas-prices-9-14-26-300x200.png 300w, https://bilello.blog/wp-content/uploads/2026/09/aaa-gas-prices-9-14-26-767x510.png 767w, https://bilello.blog/wp-content/uploads/2026/09/aaa-gas-prices-9-14-26.png 1114w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">So why was the stock market up 13% in the first 6 months of the war?</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="809" height="579" src="https://bilello.blog/wp-content/uploads/2026/09/war-returns-updated-8-28-26.png" alt="" class="wp-image-16926" srcset="https://bilello.blog/wp-content/uploads/2026/09/war-returns-updated-8-28-26.png 809w, https://bilello.blog/wp-content/uploads/2026/09/war-returns-updated-8-28-26-300x215.png 300w, https://bilello.blog/wp-content/uploads/2026/09/war-returns-updated-8-28-26-767x549.png 767w" sizes="auto, (max-width: 809px) 100vw, 809px"/></figure>
<p class="wp-block-paragraph">I’ll repost what I wrote at the start of the war and again at the 3-month mark…</p>
<p class="wp-block-paragraph">The best we can say in studying past military conflicts is that with the passage of time, the stock market has tended to rise – and the more time that has passed, the more it has risen.</p>
<p class="wp-block-paragraph">There’s two reasons for this: 1) all wars eventually come to an end, and 2) the economy and earnings, even if impaired in the short run, still tended to grow in the long run despite these conflicts.</p>
<p class="wp-block-paragraph"><strong>4) Nvidia Caps off Historic Earnings Season</strong></p>
<p class="wp-block-paragraph">Once again, all eyes were on Nvidia when they reported earnings and once again, they didn’t disappoint.</p>
<p class="wp-block-paragraph">In fact, this was the 16th straight quarter in which Nvidia surpassed analyst expectations. Which means that Wall Street has consistently underestimated its growth for four years.</p>
<p class="wp-block-paragraph">The reason for that is simple: we’ve never in history seen a company grow this fast, and we may never see this type of exponential growth again in our lifetimes.</p>
<p class="wp-block-paragraph">Nvidia Q2 revenues surged to a record $96 billion, up 106% over the prior year.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="577" src="https://bilello.blog/wp-content/uploads/2026/09/nvda-revs-1024x577.png" alt="" class="wp-image-16942" srcset="https://bilello.blog/wp-content/uploads/2026/09/nvda-revs-1024x577.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/nvda-revs-300x169.png 300w, https://bilello.blog/wp-content/uploads/2026/09/nvda-revs-767x432.png 767w, https://bilello.blog/wp-content/uploads/2026/09/nvda-revs.png 1038w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">Their revenue projection for Q3 2026 is $108 billion, which would be an 89% YoY increase.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="1008" height="620" src="https://bilello.blog/wp-content/uploads/2026/09/nvda-rev-yoy-8-27-26.png" alt="" class="wp-image-16943" srcset="https://bilello.blog/wp-content/uploads/2026/09/nvda-rev-yoy-8-27-26.png 1008w, https://bilello.blog/wp-content/uploads/2026/09/nvda-rev-yoy-8-27-26-300x185.png 300w, https://bilello.blog/wp-content/uploads/2026/09/nvda-rev-yoy-8-27-26-767x472.png 767w" sizes="auto, (max-width: 1008px) 100vw, 1008px"/></figure>
<p class="wp-block-paragraph">Net Income hit a record $59.7 billion, up 126% YoY.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="610" src="https://bilello.blog/wp-content/uploads/2026/09/nvda-net-income-8-27-26-1024x610.png" alt="" class="wp-image-16944" srcset="https://bilello.blog/wp-content/uploads/2026/09/nvda-net-income-8-27-26-1024x610.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-income-8-27-26-300x179.png 300w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-income-8-27-26-768x457.png 768w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-income-8-27-26.png 1095w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">And Nvidia’s net profit margin of 66% so far this year is another all-time high.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="602" src="https://bilello.blog/wp-content/uploads/2026/09/nvda-net-profit-margin-8-27-26-1024x602.png" alt="" class="wp-image-16945" srcset="https://bilello.blog/wp-content/uploads/2026/09/nvda-net-profit-margin-8-27-26-1024x602.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-profit-margin-8-27-26-300x176.png 300w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-profit-margin-8-27-26-767x451.png 767w, https://bilello.blog/wp-content/uploads/2026/09/nvda-net-profit-margin-8-27-26.png 1129w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">The AI capex boom has made Nvidia the largest company in the world, with a market cap of $5.6 trillion. That’s over $1 trillion more than the market cap of all the companies in Germany and Italy … combined.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="649" src="https://bilello.blog/wp-content/uploads/2026/09/nvidia-vs.-countries-9-4-26-1024x649.png" alt="" class="wp-image-16948" srcset="https://bilello.blog/wp-content/uploads/2026/09/nvidia-vs.-countries-9-4-26-1024x649.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/nvidia-vs.-countries-9-4-26-300x190.png 300w, https://bilello.blog/wp-content/uploads/2026/09/nvidia-vs.-countries-9-4-26-767x486.png 767w, https://bilello.blog/wp-content/uploads/2026/09/nvidia-vs.-countries-9-4-26.png 1357w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">As for the the S&amp;P 500 as a whole, it was a historic quarter, with the biggest upside surprise in history (52% YoY earnings growth vs. 23% expected entering the quarter) and a new record high for net profit margins (17%).</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="719" src="https://bilello.blog/wp-content/uploads/2026/09/SP-eps-growth-8-28-26-1024x719.png" alt="" class="wp-image-16946" srcset="https://bilello.blog/wp-content/uploads/2026/09/SP-eps-growth-8-28-26-1024x719.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/SP-eps-growth-8-28-26-300x211.png 300w, https://bilello.blog/wp-content/uploads/2026/09/SP-eps-growth-8-28-26-767x538.png 767w, https://bilello.blog/wp-content/uploads/2026/09/SP-eps-growth-8-28-26.png 1083w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="703" src="https://bilello.blog/wp-content/uploads/2026/09/factset-profit-margins-8-28-26-1-1024x703.png" alt="" class="wp-image-16949" srcset="https://bilello.blog/wp-content/uploads/2026/09/factset-profit-margins-8-28-26-1-1024x703.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/factset-profit-margins-8-28-26-1-300x206.png 300w, https://bilello.blog/wp-content/uploads/2026/09/factset-profit-margins-8-28-26-1-767x527.png 767w, https://bilello.blog/wp-content/uploads/2026/09/factset-profit-margins-8-28-26-1.png 1156w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">At the start of the year, analysts were forecasting 15% earnings growth for the S&amp;P 500 in 2026. The current project: a 34% increase, which would be unprecedented growth this far into an economic expansion (6 years). </p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="568" src="https://bilello.blog/wp-content/uploads/2026/09/SP-500-annual-eps-growth-updated-9-4-26-1024x568.png" alt="" class="wp-image-16950" srcset="https://bilello.blog/wp-content/uploads/2026/09/SP-500-annual-eps-growth-updated-9-4-26-1024x568.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/SP-500-annual-eps-growth-updated-9-4-26-300x166.png 300w, https://bilello.blog/wp-content/uploads/2026/09/SP-500-annual-eps-growth-updated-9-4-26-768x426.png 768w, https://bilello.blog/wp-content/uploads/2026/09/SP-500-annual-eps-growth-updated-9-4-26.png 1231w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph">And that’s it for this week. Thanks for reading!</p>
<p class="wp-block-paragraph">Every week I do a video breaking down the most important charts and themes in markets and investing. <strong>Subscribe to our YouTube channel HERE</strong> for the latest content.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="517" src="https://bilello.blog/wp-content/uploads/2026/09/etf-returns-9-4-26-1024x517.png" alt="" class="wp-image-16941" srcset="https://bilello.blog/wp-content/uploads/2026/09/etf-returns-9-4-26-1024x517.png 1024w, https://bilello.blog/wp-content/uploads/2026/09/etf-returns-9-4-26-300x152.png 300w, https://bilello.blog/wp-content/uploads/2026/09/etf-returns-9-4-26-766x387.png 766w, https://bilello.blog/wp-content/uploads/2026/09/etf-returns-9-4-26.png 1095w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">Disclaimer: All information provided is for educational purposes only and does not constitute investment, legal or tax advice, or an offer to buy or sell any security. Read our full disclosures <strong>here</strong>.</p>
</div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/the-week-in-charts-9-5-26/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Apple DDM App Deployment and Self-Healing Policies</title>
		<link>https://xtadalafix.com/apple-ddm-app-deployment-and-self-healing-policies/</link>
					<comments>https://xtadalafix.com/apple-ddm-app-deployment-and-self-healing-policies/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Mon, 07 Sep 2026 08:49:09 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/apple-ddm-app-deployment-and-self-healing-policies/</guid>

					<description><![CDATA[The Case of the Self-Healing Device The evidence board Apple’s Declarative Device Management (DDM) now extends to app deployment, letting devices detect and fix their own failed installs without a technician stepping in. Instead of a server repeatedly polling for status, the device compares itself against its own manifest and reports back the moment something [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<h2>The Case of the Self-Healing Device</h2>
<h2>The evidence board</h2>
<ul>
<li>Apple’s Declarative Device Management (DDM) now extends to app deployment, letting devices detect and fix their own failed installs without a technician stepping in.</li>
<li>Instead of a server repeatedly polling for status, the device compares itself against its own manifest and reports back the moment something changes.</li>
<li>New Managed App Controls give admins auto-update, Wi-Fi-only or cellular-allowed installs, and lock/hide toggles, all from the same policy engine they already use.</li>
<li>Auto Update set to “Always On” overrides the end user’s own device settings, so an app can’t drift out of date because of a personal preference.</li>
<li>These capabilities require devices to be enrolled in DDM and running OS 26 or later; older devices keep working exactly as they do today.</li>
<li>When a DDM declaration and a traditional MDM command conflict, the DDM declaration always wins.</li>
</ul>
<p>Every IT administrator has had a similar case before. A policy pushes an app and somewhere between the command and the device, something goes wrong. Somewhere in transit, the trail goes cold: a dropped connection, a busy device, and the install never happens. No warnings or sirens, no whistles. The app is just not on the device and it sits quietly out of compliance until someone notices. It could be the end user filing a ticket, sending a chat, or an overworked IT admin noticing that some of the fleet is missing a critical app. However, it’s usually the user, so the IT admin has to reactively investigate in the console to see what happened.</p>
<p>Multiply that over thousands of devices in the fleet, with many different OS versions and apps and you don’t have a mystery anymore, you have a serious compliance drift which needs to be poked and prodded to get to the bottom of it. It’s a slow burn and nobody is watching, reactive IT detectives are on the case, hunting down the culprit to figure out why it’s not just “working” the way we asked. It’s not a detective movie, it’s 2026, and devices shouldn’t need a human standing over them to notice something’s wrong before they fix it.</p>
<p>NinjaOne has something new. Now the device can proactively solve its own case. It’s on the job.</p>
<h2>The case for a new kind of detective work</h2>
<p>To understand the change, you can look at how this process used to run.</p>
<p>Apple built Declarative Device Management (DDM) as an extension of the existing MDM protocol, not as a replacement. It works along with the device management that NinjaOne already does but the way it investigates is very different!</p>
<p>Previously, the “detective” was the MDM server. It would send a command, then poll the device. Over and over again. Asking and asking “Did it install?” “Did it install?” “What’s the status?” This is reactive behavior and creates heavy bandwidth over time with hundreds of devices. It’s an exhausting and unproductive process, occurring one check in at a time. With DDM, the device becomes the detective. It compares its own state to a manifest file and compares itself to what it should look like. If something doesn’t add up it picks up a dedicated “red phone” so to speak, and calls in along the dedicated status channel as soon as something changes to report to the MDM. Elementary, my dear Watson.</p>
<p>For apps, this means that the Apple DDM protocol is handling distribution and enforcement for every app that is defined in a NinjaOne policy on devices that support DDM. If the app install has failed, the device doesn’t wait. It’s on the case. The device reopens the files and tries again on its own. And if a traditional MDM command and a DDM declaration ever give conflicting instructions, there’s no ambiguity about who’s the senior detective on the case: the DDM declaration wins, every time.</p>
<h2>The biggest break in the case, managed app controls</h2>
<p>Every good detective story needs new tools, and this release hands the admins a few, including:</p>
<ul>
<li>Auto Update, so apps stay current without a technician pushing new versions. Set to “Always On,” it overrides even the end user’s own device settings, so the app can’t quietly slip out of date just because someone selected a personal preference.</li>
<li>Wi-fi Only or Cellular-allowed installs will protect data plans on cellular devices</li>
<li>Lock or Hide Toggles let the admin decide how much control end users have over managed apps.</li>
</ul>
<p>The methods are simple. An admin sets the policy and configures these options. The device takes the case from there to reach the desired state. Failed installs will retry themselves, updates apply on schedule and compliance holds without anyone watching through a magnifying glass or checking in. If this section has a tagline, it’s that the device manages itself.</p>
<blockquote>
<p>A quick note on requirements: these declarative capabilities require devices to be enrolled in DDM and running OS 26 or later. Devices on earlier versions keep working exactly as they do today, no disruption, they just don’t get the new self-healing behavior yet.</p>
</blockquote>
<h2>Three cases closed without a tech on the scene</h2>
<p><strong>Case 1 –</strong> The manual resync loop. Technicians used to be the entire detective office. Spot the out of compliance device, investigate the why, manually resync, hope it solves. Now the device wil catch its own failed install and retry, no follow up or prodding needed. <strong>The verdict: no manual resync required. This applies to new and modified app assignments going forward. Apps already installed before DDM was enabled still need a one-time policy resync to bring them under DDM management.</strong></p>
<p><strong>Case 2 –</strong> The app that never updates. The detective doesn’t have to remember or check in, Auto update keeps devices on the latest version as a matter of policy. That shrinks the window a device spends running outdated, potentially vulnerable software, and means fewer tickets that ask “Why is this still on an old version?” <strong>The verdict: fewer vulnerable devices, fewer tickets.</strong></p>
<p><strong>Case 3 –</strong> The MSP managing a dozen “crime” scenes at once. Every client environment has its own bandwidth reality. Wi-Fi-only installs protect cellular-connected devices from unusual data charges. Auto-retry keeps compliance consistent across every client without technicians canvasing the failed installs one-by-one or site-by-site. <strong>The verdict: consistent compliance, without the manual chase.</strong></p>
<h2>Where this all fits in the bigger investigation</h2>
<p>These controls exist inside the same policy engine that admins already use for the rest of the Apple device management. No new console or workflows to learn. It’s one more bit of evidence pointing to the dotted line of where NinjaOne’s Apple management is leading, a model where devices increasingly investigate and resolve their own cases, and techs spend less time searching for clues about problems that already fixed themselves.</p>
<h2>Case closed (for now)</h2>
<p>Declarative Device Management doesn’t just push an app to a device and hope for the best. It hands the device a badge, a case file, and the authority to close its own investigations, no backup required.</p>
<p>App deployment is just the first case file. Stay tuned as Declarative Device Management opens more files across the Apple management experience.</p>
<p><strong>Declarative Device Management available for NinjaOne MDM with the 15.0 Release.</strong></p>
</div>
<p><script id="meta-pixel" type="text/javascript" class="optanon-category-C0004"> window.addEventListener('load', () => { ! function(f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function() { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', ' fbq('init', '148315452373934'); fbq('track', 'PageView'); var currentURL = window.location.href; if (currentURL.indexOf('thankyou') !== -1 || currentURL.indexOf('thank-you') !== -1) { fbq('track', 'Lead'); } }); </script><br />
</p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/apple-ddm-app-deployment-and-self-healing-policies/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How To Prioritize Messages When Building Asynchronous Applications With Symfony Messenger</title>
		<link>https://xtadalafix.com/how-to-prioritize-messages-when-building-asynchronous-applications-with-symfony-messenger/</link>
					<comments>https://xtadalafix.com/how-to-prioritize-messages-when-building-asynchronous-applications-with-symfony-messenger/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Sat, 05 Sep 2026 08:43:31 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/how-to-prioritize-messages-when-building-asynchronous-applications-with-symfony-messenger/</guid>

					<description><![CDATA[Going asynchronous sounds like a dream: decoupled processes, faster response times, and no more users staring at spinning wheels. But pretty quickly, reality hits — some messages take forever, others are way too important to be delayed, and suddenly you’re drowning in a swamp of priorities. Whether you&#8217;re firing off password reset emails or triggering [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="content" data-sticky-nav-target="content">
<p><span>Going asynchronous sounds like a dream: decoupled processes, faster response times, and no more users staring at spinning wheels. But pretty quickly, reality hits — some messages take forever, others are way too important to be delayed, and suddenly you’re drowning in a swamp of priorities.</span></p>
<p><span>Whether you&#8217;re firing off password reset emails or triggering complex exports, you need to make sure the right messages get through at the right time. This article dives into the problems you’ll face — and how to solve them using Symfony Messenger, without rewriting your app from scratch or crying into your logs at 3 AM.</span></p>
<h2 id="The-problem-prioritize-dynamically-every-message"><span>The problem: prioritize dynamically every message</span></h2>
<p>When you start queueing messages in your Symfony app, one thing becomes obvious real fast: not all messages are equal. Some are critical and time-sensitive. Others… not so much.</p>
<p>Some transports already offer a way to handle priorities like:</p>
<p>&#x1f430; RabbitMQ has x-priority</p>
<p>&#x1f331; Beanstalkd has built-in tube priority</p>
<p>Nice — but what if I want to switch to another transport tomorrow without rewriting half my code?</p>
<h3>Symfony Messenger has a way</h3>
<p><span>The </span><span><u>official documentation</u></span><span> shows how to split messages into multiple transports based on priority. Think of it like assigning lanes on a highway: one for ambulances, one for scooters.</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>framework:
    messenger:
        transports:
            async_priority_high:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                options:
                    queue_name: high
            async_priority_medium:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                options:
                    queue_name: medium
            async_priority_low:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                options:
                    queue_name: low
            async_priority_very_low:
                dsn: '%env(MESSENGER_TRANSPORT_DSN)%'
                options:
                    queue_name: very_low

        routing:
            'App\Message\ExportMessage': async_priority_low
            'App\Message\UpdateStateMessage': async_priority_high</code></pre>
</div>
<p>&#x1f4a1;<em><span> Note: The queue names are up to you — just make sure they reflect your actual use case. These are fictional examples.</span></em></p>
<p><span>Now that we’ve split messages by priority, consuming them in the right order is just as important. Thankfully, Symfony Messenger makes this super easy:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>php bin/console messenger:consume async_priority_high async_priority_medium async_priority_low async_priority_very_low</code></pre>
</div>
<p><span>The worker will first consume from </span><code class="code">async_priority_high</code><span>. If it’s empty, it will try the next one. And so on. So even if there’s a backlog of non-urgent messages, high-priority ones don&#8217;t get stuck waiting behind them.</span></p>
<h3><span>How do I choose the right queue?</span></h3>
<p><span>This was honestly the trickiest part for me. There’s no one-size-fits-all formula, and this table is crucial — everything else in this article depends on it.</span></p>
<p>&#x1f449;<em><span> It obviously needs to be filled with the client or the product owner and not just dev gut feelings.</span></em></p>
<p><span>The question you’re answering here is simple, but powerful:</span></p>
<blockquote>
<p><span>“What’s the maximum acceptable delay (including queue time and actual handling) for each kind of message?”</span></p>
</blockquote>
<p><span>And from there, you get your priority mapping:</span></p>
<table>
<tbody>
<tr>
<td rowspan="1" colspan="1">
<p><strong><span>Priority</span></strong></p>
</td>
<td rowspan="1" colspan="1">
<p><span>High</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>Medium</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>Low</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>Very low</span></p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
<p><strong><span>Time before handling</span></strong></p>
</td>
<td rowspan="1" colspan="1">
<p><span>1 minute</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>10 minutes</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>1 hour</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>1 day</span></p>
</td>
</tr>
<tr>
<td rowspan="1" colspan="1">
<p><strong><span>Example</span></strong></p>
</td>
<td rowspan="1" colspan="1">
<p><span>&#8211; State update</span></p>
<p><span>&#8211; Email</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>CMS update</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>&#8211; Prices update</span></p>
<p><span>&#8211; Analytics processing</span></p>
</td>
<td rowspan="1" colspan="1">
<p><span>&#8211; Export</span></p>
<p><span>&#8211; Anonymization</span></p>
</td>
</tr>
</tbody>
</table>
<p><span>Now that I’ve split the messages into queues, everything should be perfect, right?</span></p>
<p><span>Well… not quite.</span></p>
<h3>&#x1f643;<span> One problem remains: message types can be too generic</span></h3>
<p><span>Let’s say I have an EmailMessage. Sounds fine. But I might use it for:</span></p>
<ul>
<li>
<p><span>A password reset </span>&#x1f7e5;<span> High priority</span></p>
</li>
<li>
<p><span>A delivery notification </span>&#x1f7e8;<span> Medium</span></p>
</li>
<li>
<p><span>A “rate your purchase” ping </span>&#x1f7e6;<span> Low or very low</span></p>
</li>
</ul>
<p><span>So&#8230; how do I assign a transport when the same message class can represent totally different levels of urgency?</span></p>
<h2 id="Another-problem-A-message-should-be-able-to-have-more-than-one-priority">Another problem : A message should be able to have more than one priority</h2>
<h3><span>Enter: TransportNamesStamp and our custom PriorityStamp</span></h3>
<p><span>Luckily, Symfony Messenger already has a built-in way to force a message to go to a specific transport: </span><code class="code">TransportNamesStamp</code><span>. But to make things cleaner (and more semantic), let’s introduce our own </span><code class="code">PriorityStamp</code><span>:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>namespace App\Messenger\Stamp;

use Symfony\Component\Messenger\Stamp\StampInterface;

readonly class PriorityStamp implements StampInterface
{
    public function __construct(private string $priority) {}

    public function getPriority(): string
    {
        return $this-&gt;priority;
    }
}</code></pre>
</div>
<p>And now, a custom middleware to hook into the dispatch flow:</p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>readonly class PriorityRoutingMiddleware implements MiddlewareInterface
{
    public function handle(Envelope $envelope, StackInterface $stack): Envelope
    {
        // Check if the message has a PriorityStamp
        $priorityStamp = $envelope-&gt;last(PriorityStamp::class);

        if ($priorityStamp instanceof PriorityStamp) {
            $priority = $priorityStamp-&gt;getPriority();

            // Determine the transport based on priority
            $transport = match ($priority) {
                'high' =&gt; 'high_priority',
                'medium' =&gt; 'medium_priority',
                'low' =&gt; 'low_priority',
                'very_low' =&gt; 'very_low_priority',
                default =&gt; throw new \RuntimeException('Unknow priority level')
            };

            // Add a TransportNamesStamp to redirect the message
            $envelope = $envelope-&gt;with(new TransportNamesStamp([$transport]));
        }

        return $stack-&gt;next()-&gt;handle($envelope, $stack);
    }
}</code></pre>
</div>
<p>Then, don’t forget to add our new custom middleware to the messenger configuration:</p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="yaml">
<pre><code>framework:
    messenger:
      # ...
      buses:
        messenger.bus.default:
          middleware:
            - 'App\Messenger\Middleware\PriorityRoutingMiddleware'</code></pre>
</div>
<p>Now, when sending a message, I can easily override its priority — no need to create a new message class or refactor everything.</p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>$this-&gt;messageBus-&gt;dispatch(
    new SendEmailMessage($notificationEmail),
    [new PriorityStamp('medium')],
)</code></pre>
</div>
<p>In this case, we’re saying:</p>
<blockquote>
<p><span>“Hey, this email isn’t that urgent — 10 minutes is fine.”</span></p>
</blockquote>
<p>This keeps critical messages flowing fast, without flooding your high-priority queue with lower-stakes noise.</p>
<p>So where are we now?</p>
<p>&#x2705; I can dynamically choose the transport</p>
<p>&#x2705; I can adjust the priority at dispatch time</p>
<p>&#x274c; I can ensure every message is handled within its max allowed time ← Still not there yet.</p>
<h3>So… what’s the problem now?</h3>
<p><span>Let’s say I send a message to update the price of every product variant in my catalog — or a large subset.</span></p>
<p><span>Not a big deal if I’ve got a few product variants. But if I have 100,000 variants? 500,000 variants? A million ? And each one makes a remote API call to fetch the price?</span></p>
<p><strong><span>Here what happens:</span></strong></p>
<p>&#x1f4e8;<span> A message enters the queue.</span></p>
<p>&#x1f9e0;<span> It starts processing.</span></p>
<p>&#x23f3;<span> It takes 5, 10, 30… 60 minutes.</span></p>
<p>&#x1f9f5;<span> Meanwhile, one PHP worker is stuck.</span></p>
<p><img decoding="async" src="https://sensiolabs.com/f/5e63ee51357d851b/400x275-moone_boy.gif" alt="Moone Boy watching his watch sitting on the ground with a suitcase next to him"/><span>I could try to batch those API calls. Sure, that helps — but it only reduces the problem. It doesn’t solve it. Not in a way that truly scales.</span></p>
<p><span>And that’s a problem, even with all our beautiful prioritization logic — because long-running messages don’t play well in this model.</span></p>
<h2 id="Last-problem-Some-messages-take-ages-to-be-handled"><span>Last problem: Some messages take ages to be handled</span></h2>
<p><span>Let’s say I have this message and corresponding handler in my project corresponding to the variant price update process:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>readonly class UpdatePrices
{
    public function __construct(
        public array $filters,
    ) {
    }
}</code></pre>
</div>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>#[AsMessageHandler]
readonly class UpdatePricesHandler
{
    public function __invoke(UpdatePrices $message): void
    {
        foreach ($this-&gt;productVariantRepository-&gt;findAllByRegex($message-&gt;filters) as $product) {
            $this-&gt;priceUpdater-&gt;updatePriceForVariant($variant);
        }
        
        $this-&gt;em-&gt;flush();
    }
}</code></pre>
</div>
<p><span>Let’s be honest: the problem screams at us.</span></p>
<p><span>If 200,000 variants match this regex, and each update takes 0.1 second, that’s ~5 hours of processing in one go — way beyond our 1-hour limit.</span></p>
<p><span>To avoid jamming the queue, we’ll break this job into smaller messages. Let’s go to the extreme: one message = one variant update.</span></p>
<p><span>Keep the main message:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>readonly class UpdatePrices
{
    public function __construct(
        public array $filters,
    ) {
    }
}</code></pre>
</div>
<p><span>Add a unitary one:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>readonly class UpdateVariantPrice
{
    public function __construct(
        public int $variantId,
    ) {
    }
}</code></pre>
</div>
<p><span>Now change the handler to dispatch one message per variant:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>public function __invoke(UpdatePrices $message): void
{
	foreach ($this-&gt;variantRepository-&gt;findByComplexQuery($message-&gt;filters) as $variant) {
        $this-&gt;messageBus-&gt;dispatch(new UpdateVariantPrice($product-&gt;getId()));
    }
}</code></pre>
</div>
<p><span>Bonus: we can even plug in our dynamic priority logic:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>public function __invoke(UpdatePrices $message): void
{
	foreach ($this-&gt;variantRepository-&gt;findByComplexQuery($message-&gt;filters) as $variant) {
    	if($variant-&gt;isSoldVeryOften()) {
        	$this-&gt;messageBus-&gt;dispatch(
            	new UpdateVariantPrice($variant-&gt;getId()),
            	[new PriorityStamp('medium')]
            );
        } else {
        	$this-&gt;messageBus-&gt;dispatch(new UpdateVariantPrice($variant-&gt;getId()));
        }
    }
}</code></pre>
</div>
<p><span>And the new handler for the unitary message:</span></p>
<div data-controller="code-highlight" data-code-highlight-target="code" data-code-highlight-language-value="php">
<pre><code>public function __invoke(UpdateVariantPrice $message): void
{
    $variant = $this-&gt;variantRepository-&gt;find($message-&gt;variantId);
    if (!$variant instanceof ProductVariant) {
        throw new UnrecoverableMessageHandlingException("Impossible to find the variant");
    }
    
    $this-&gt;priceUpdater-&gt;update($variant);
    $this-&gt;em-&gt;flush();
}</code></pre>
</div>
<p><span>Sure, the total time may increase slightly, but the queue stays fluid. If a higher-priority message comes in, it’s picked up right away.</span></p>
<p><span>So what about now :</span></p>
<p>&#x2705;<span> I can dynamically choose the transport</span></p>
<p>&#x2705;<span> I can adjust the priority at dispatch time</span></p>
<p>&#x274c;<span> I can ensure every message is handled within its max allowed time ← Still not there yet.</span></p>
<p><span>…Wait. Nothing changed?</span></p>
<p><img decoding="async" src="https://sensiolabs.com/f/5b25f57860171fea/268x150-liar-anakin-skywalker.gif" alt="Anakin Skywalker angry screaming &quot;Liar&quot;"/><span>Let’s say I’ve sent:</span></p>
<h3><span>Do we need to scale?</span></h3>
<p><span>Probably. But that’s a topic for another article — others are way more qualified than me to go deep on scaling strategies.</span></p>
<p><span>Still, here’s my two cents:</span></p>
<ul>
<li>
<p><span>If you scale based on the number of pending messages, assign a weight per priority. (E.g. I count 1 high message as 1,200 very low ones.)</span></p>
</li>
<li>
<p><span>It won’t be perfect at first. Monitoring is your friend.</span></p>
</li>
<li>
<p><span>When downscaling, use hysteresis to avoid flapping between too many and too few workers.</span></p>
</li>
</ul>
<h3><span>Now we&#8217;re talking</span></h3>
<p><span>Now I can finally say it, for real:</span></p>
<blockquote>
<p><span>I am able to prioritize dynamically and ensure that every message is handled during a given time period.</span></p>
</blockquote>
<h2 id="Prioritization-cheat-sheet"><span>Prioritization cheat sheet</span></h2>
<p><span>You want your messages to be processed in time? Prioritize.</span></p>
<ul>
<li>
<p><strong><span>Split your messages by priority</span></strong><span>: Define queues like high, medium, low, and very_low. Consume them in order.</span></p>
</li>
<li>
<p><strong><span>Route dynamically with a stamp</span></strong><span>: Using </span><code class="code">TransportNamesStamp</code><span> or a custom one.</span></p>
</li>
<li>
<p><strong><span>Break big tasks into small ones</span></strong><span>: Don’t let a single message hog a worker for hours. Split it into smaller ones, and dispatch them.</span></p>
</li>
</ul>
<h2 id="In-conclusion"><span>In conclusion</span></h2>
<p><span>Prioritizing messages in Symfony Messenger isn’t plug-and-play, but it’s not rocket science either. With a bit of planning, some custom code, and a mindset focused on time-to-handle (not just throughput), you can build a system where important things get done first — without choking the rest.</span></p>
<p><span>And once you’ve got that running? <strong>You’re not just dispatching messages anymore — you’re orchestrating flow.</strong></span></p>
</p></div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/how-to-prioritize-messages-when-building-asynchronous-applications-with-symfony-messenger/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>DB Sorting, Indexing, and Temporary Storage</title>
		<link>https://xtadalafix.com/db-sorting-indexing-and-temporary-storage/</link>
					<comments>https://xtadalafix.com/db-sorting-indexing-and-temporary-storage/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Thu, 03 Sep 2026 08:28:15 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/db-sorting-indexing-and-temporary-storage/</guid>

					<description><![CDATA[Key Points Imbalances between indexing, sorting, and temporary storage are a leading cause of performance problems in production database systems. Indexes reduce disk reads and can help databases avoid full table scans by providing a more efficient way to locate records. Sorting consumes CPU and memory, and spills to disk when datasets exceed available memory [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<div class="in-context-cta">
<h2 style="margin-top:0">Key Points</h2>
<ul>
<li>Imbalances between indexing, sorting, and temporary storage are a leading cause of performance problems in production database systems.</li>
<li>Indexes reduce disk reads and can help databases avoid full table scans by providing a more efficient way to locate records.</li>
<li>Sorting consumes CPU and memory, and spills to disk when datasets exceed available memory limits.</li>
<li>Indexes aligned with query patterns can eliminate unnecessary sorting and reduce temporary storage usage during query execution.</li>
<li>Every indexing, sorting, or storage adjustment introduces tradeoffs that must be evaluated against actual workload patterns.</li>
<li>Optimizing database performance requires analyzing read and write frequency, query patterns, data growth, and available memory first.</li>
</ul>
</div>
<p>Many database (DB) queries rely on indexing, sorting, and temporary storage during query execution. These elements need to be well-aligned to ensure queries return results quickly and reduce unnecessary CPU, memory, and disk usage. For IT professionals managing production systems, understanding these metrics is a practical way to <strong>improve DB performance</strong> without needing to change the entire infrastructure.</p>
<p>Keep reading to learn more about how sorting, indexing, and temporary storage interact during database query execution, and how that should influence day-to-day decisions.</p>
<h2>What role database indexing plays in query execution</h2>
<p>Indexing is one of the main mechanisms that databases use to retrieve data efficiently. An index gives the database a faster path to the rows that it needs, as compared to reading through an entire table to find a specific entry.</p>
<p>Indexes function as lookup structures that help the database do several things:</p>
<ul>
<li>Quickly find records without scanning unrelated rows</li>
<li>Cut down on the number of disk reads required</li>
<li>Avoid some full table scans when a suitable index exists</li>
</ul>
<p>When no index is available, the database must go through every single row in a table to find what it’s looking for, which can turn simple queries into slow and resource-heavy operations, especially for larger datasets.</p>
<h2>How sorting affects performance</h2>
<p>Databases constantly sort data to organize it into a specific order. This is a necessary operation when fulfilling an ORDER BY clause or grouping results for aggregation.</p>
<p>However, sorting is not a cheap operation, often putting strain on the system in a few key ways:</p>
<ul>
<li>It draws heavily on CPU and memory resources during execution.</li>
<li>Processing time increases noticeably as the dataset size grows larger.</li>
<li>Large sorts that exceed available memory spill over to disk, adding storage overhead.</li>
</ul>
<p>However, sorting can be avoided if the data is already stored in the order a query needs, which makes index design and query patterns worth aligning early on.</p>
<h2>When temporary storage is used</h2>
<p>Temporary storage is used when query operations exceed available memory. In these situations, the database may move intermediate processing tasks to disk, which can increase query execution time.</p>
<p>Some common situations that push queries into temporary storage include:</p>
<ul>
<li>Sorting datasets that are too large to process in memory</li>
<li>Running joins on tables that lack the right indexes</li>
<li>Managing intermediate results as a query works through multiple stages</li>
</ul>
<p>Once temporary storage kicks in, performance declines, usually resulting in:</p>
<ul>
<li>A shift from fast memory reads to slower disk operations</li>
<li>Increased overall query execution time</li>
<li>Rising I/O activity that puts additional load on the system</li>
</ul>
<p>For these reasons, heavy reliance on temporary storage is generally considered a costly operation because it increases query execution time.</p>
<h2>How indexing helps in improving the performance of a query</h2>
<p>A well-designed index can reduce the need for additional sorting and lower the use of temporary storage in some queries. When indexes are designed around common query patterns, the database may be able to return results in the required order with less additional processing.</p>
<p>This alignment offers performance gains in the following ways:</p>
<ul>
<li>Data comes back in sorted order because the index already stores it that way.</li>
<li>Queries can pull results directly without additional processing steps.</li>
<li>CPU and memory usage drop because the database isn’t doing redundant work.</li>
</ul>
<p>Therefore, when an index already reflects the order a query needs, the database can return results directly without extra sorting or disk spillover.</p>
<h2>Tradeoffs between indexing, sorting, and storage</h2>
<p>Note that improving the performance of a database is not as easy as simply adding more indexes or allocating more memory, as adjustments in one area tend to shift the burden somewhere else. It’s important to know where displaced pressures will land to ensure thoughtful optimization.</p>
<p>Keep in mind these common tradeoffs:</p>
<ul>
<li>Adding indexes makes reads faster, but introduces overhead on every write operation.</li>
<li>Removing indexes frees up storage, but pushes more work onto sorting during query execution.</li>
<li>Leaning on sorting to compensate for missing indexes drives up memory consumption and risks spilling to disk.</li>
</ul>
<p>Indexes are really useful for query speed, but each one requires storage space and has to be maintained properly whenever data is inserted, updated, or deleted.</p>
<h2>Common performance issues caused by imbalance</h2>
<p>When the three processes aren’t in sync, performance problems can appear over time as query patterns change or data volumes grow beyond system capacity.</p>
<p>Some of the most commonly found issues include:</p>
<ul>
<li>Sorting overhead that accumulates when key indexes are missing</li>
<li>Gradually increasing disk usage as queries rely more and more on temporary storage</li>
<li>Write performance that degrades when too many indexes have to be updated with each transaction</li>
<li>Query plans that become inefficient as the database struggles to find a clean execution path</li>
</ul>
<p>Left unaddressed, these issues can start small but will eventually affect the broader system, especially under load.</p>
<h2>How to approach optimization decisions</h2>
<p>Not every database works the same way, so optimization decisions must always be grounded in how the system is being used. This means looking at workload patterns before making any changes.</p>
<p>Consider these factors that should inform those decisions:</p>
<ul>
<li>How often reads occur relative to writes, since this affects how aggressively you should index</li>
<li>What query patterns and filtering conditions look like, since indexes need to match how data is actually being queried</li>
<li>How large the dataset is and how fast it’s growing, since strategies that work today might not hold up a few months later</li>
<li>What memory and storage resources are available, since these set the limit on what’s feasible without additional infrastructure</li>
</ul>
<p>Getting this balance right requires some upfront analysis, but it pays off in the long run by solving problems without creating new ones.</p>
<h2>How to improve the performance of database systems through smarter query design</h2>
<p>Sorting, indexing, and temporary storage each have a distinct role in how a database handles query execution, but they all work together to make the process work. What database administrators must monitor is how these factors interact, which determines if the system runs efficiently or not. Remember, the goal is not to eliminate tradeoffs, but to understand them well enough to make deliberate decisions for building a database environment that holds up as demands grow.</p>
<p><strong>Related topics</strong>:</p>
</div>
<p><script id="meta-pixel" type="text/javascript" class="optanon-category-C0004"> window.addEventListener('load', () => { ! function(f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function() { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', ' fbq('init', '148315452373934'); fbq('track', 'PageView'); var currentURL = window.location.href; if (currentURL.indexOf('thankyou') !== -1 || currentURL.indexOf('thank-you') !== -1) { fbq('track', 'Lead'); } }); </script><br />
</p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/db-sorting-indexing-and-temporary-storage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The SensioLabs Fall 2026 Roadmap: Where to Catch Us This Autumn!</title>
		<link>https://xtadalafix.com/the-sensiolabs-fall-2026-roadmap-where-to-catch-us-this-autumn/</link>
					<comments>https://xtadalafix.com/the-sensiolabs-fall-2026-roadmap-where-to-catch-us-this-autumn/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Tue, 01 Sep 2026 08:00:37 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/the-sensiolabs-fall-2026-roadmap-where-to-catch-us-this-autumn/</guid>

					<description><![CDATA[As the creator of the framework and active members of the ecosystem, we&#8217;ll be there to support these community initiatives, deliver technical talks, and connect with you. We can&#8217;t wait to meet you at our experts&#8217; presentations (which focus mainly on AI and security this year), at our booths over a cup of coffee &#x2615;, [&#8230;]]]></description>
										<content:encoded><![CDATA[<p></p>
<div id="content" data-sticky-nav-target="content">
<p><span>As the creator of the framework and active members of the ecosystem, we&#8217;ll be there to support these community initiatives, deliver technical talks, and connect with you. We can&#8217;t wait to meet you at our experts&#8217; presentations (which focus mainly on AI and security this year), at our booths over a cup of coffee </span>&#x2615;<span>, or during community social events. Check out the full lineup (with links to all events) for our autumn tour below!</span></p>
<h2 id="September-Kicking-off-with-security-and-accessibility"><span>September: Kicking off with security and accessibility</span></h2>
<h3><span><u>API Platform Con</u></span><span> 2026 in Lille, France (September 17–18) </span>&#x1f578;</h3>
<p><span>To kick off the season, we&#8217;re heading to Lille for the flagship event of the API Platform ecosystem. As a Silver sponsor, come stop by our booth anytime during the conference! On stage, our experts will be taking the mic:</span></p>
<ul>
<li>
<p><span><strong>Mathieu Santostefano</strong> (Tech Expert) will present <em>“Securing APIs Without Losing Your Mind”</em> (Thursday, September 17, 4:50 PM – 5:30 PM)</span></p>
</li>
<li>
<p><span><strong>Benjamin Georgeault</strong> (Lead Dev) and <strong>Imen Ezzine</strong> (Developer) will co-present <em>“Moving from Monolith to a Galaxy of Apps: Successfully Transitioning with API Platform”</em> (Friday, September 18, 9:00 AM – 9:40 AM)</span></p>
</li>
</ul>
<h3><span><u>Symfony &amp; PHP Meetup</u></span><span> in Cologne (September 24, Evening) </span>&#x1f37b;</h3>
<p><span>In partnership with the Cologne Symfony User Group and Kaufland e-commerce, we&#8217;re meeting up in Germany for a casual evening of talks and networking in German on the latest framework features—one year ahead of </span><span><u>SymfonyLive Germany 2027</u></span><span>.</span></p>
<h3><span>AGEFIPH Workshop at Our Asnières HQ (September 24, 9:00 AM – 1:00 PM) </span>&#x1f3b2;</h3>
<p><span>That same day, as part of our Qualiopi commitments and ongoing dedication to making Symfony training accessible to everyone, we&#8217;re hosting an interactive workshop at our office: <em>“From Accommodation to Accessibility: The Great Accessibility Game,”</em> created by </span><span><u>AGEFIPH</u></span><span> (the French association managing funds for the integration of people with disabilities).</span></p>
<h2 id="October-An-action-packed-month-in-the-ecosystem"><span>October: An action-packed month in the ecosystem</span></h2>
<h3><span><u>Volcamp</u></span><span> in Clermont-Ferrand, France (October 1–2) </span>&#x1f30b;</h3>
<p><span>We&#8217;re returning to the heart of the Auvergne volcanoes as a <strong>Silver sponsor</strong>! Come meet our team at the booth and be sure to check out <strong>Benjamin Georgeault</strong>&#8216;s talk:</span></p>
<ul>
<li>
<p><span><em>“Zero Trust: Why (and How) to Encrypt Your Data Before Sending It to the DBMS”</em> (Friday, October 2, 4:45 PM – 5:30 PM)</span></p>
</li>
</ul>
<h3><span><u>Forum PHP</u></span><span> at Disneyland Paris (October 8–9) </span>&#x1f3f0;</h3>
<p><span>A staple event hosted by AFUP, this year&#8217;s Forum PHP takes place at Disney Hotel New York – The Art of Marvel. Continuing our longtime support, SensioLabs is proud to be a Silver sponsor. <strong>This special edition focuses on how AI is transforming our industry</strong> and features special guest appearances from the PHP Foundation! Our speakers will be sharing their insights on stage:</span></p>
<ul>
<li>
<p><span><strong>Benjamin Georgeault</strong> will present his <em>Zero Trust</em> talk.</span></p>
</li>
<li>
<p><span><strong>Marilena Ruffelaere</strong> (Developer) will present <em>“Beyond AbstractVoter: Tame Your Symfony Permissions and Access Control Strategies!”</em></span></p>
</li>
</ul>
<h3><span><u>Experience by Klee</u></span><span> at Station F, Paris (October 8) </span>&#x1f6f0;</h3>
<p><span>We&#8217;re strengthening our partnership with Klee Group by supporting the second edition of their event focused on AI, cybersecurity, and digital sovereignty. Stop by to chat with us about building custom, sovereign business applications using Symfony.</span></p>
<h3><span><u>Evolve by Upsun</u></span><span> at Cloud Business Center, Paris (October 8) </span>&#x1f305;</h3>
<p><span>Alongside our long-standing partner Upsun (formerly Platform.sh, the company behind SymfonyCloud), we&#8217;ll be engaging with partner ecosystems on the future of cloud infrastructure and AI. Fabien Potencier, our co-founder and current CTO at Upsun, will also be presenting Upsun Dispatch.</span></p>
<h3><span><u>International PHP Conference</u></span><span> in Munich (October 26–30) </span>&#x1f968;</h3>
<p><span>For the first time, SensioLabs is joining IPC Munich as a Silver sponsor for this <strong>iconic PHP community event</strong>, held this year as part of Agentic Web Week Munich.</span></p>
<h2 id="November-The-grand-finale-in-Warsaw"><span>November: The grand finale in Warsaw!</span></h2>
<h3><span><u>SymfonyCon Warsaw 2026</u></span><span> in Warsaw (November 26–27) </span>&#x1f9dc;&#x200d;&#x2640;</h3>
<p><span>This is <strong>THE global gathering of the year! </strong>SymfonyCon returns to Warsaw for the first time since 2013, when the very first edition was held there. It&#8217;s a great opportunity to celebrate Poland&#8217;s vibrant developer community. As always, SensioLabs is proud to be a Diamond sponsor </span>&#x1f48e;</p>
<p><span>Here&#8217;s what you can expect at our booth: fun activities, games, swag, and our team ready to answer all your questions. Plus, don&#8217;t miss the community party at Nine&#8217;s Restaurant, owned by soccer star </span>&#x26bd;<span> Robert Lewandowski—it&#8217;s going to be unforgettable!</span></p>
</p></div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/the-sensiolabs-fall-2026-roadmap-where-to-catch-us-this-autumn/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The End User Portal and NinjaOne Assist Mobile App</title>
		<link>https://xtadalafix.com/the-end-user-portal-and-ninjaone-assist-mobile-app/</link>
					<comments>https://xtadalafix.com/the-end-user-portal-and-ninjaone-assist-mobile-app/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Sun, 30 Aug 2026 07:52:59 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/the-end-user-portal-and-ninjaone-assist-mobile-app/</guid>

					<description><![CDATA[Most conversations about NinjaOne center around what technicians can do. The end user portal flips that. It’s a dedicated, self-service space for the people using the devices you manage, giving them direct access to their own devices, tickets, files, and shared content, all scoped to exactly what you allow. Key Points The End user portal gives your users [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<p>Most conversations about NinjaOne center around what technicians can do. The end user portal flips that. It’s a dedicated, self-service space for the people using the devices you manage, giving them direct access to their own devices, tickets, files, and shared content, all scoped to exactly what you allow.</p>
<div class="in-context-cta">
<h2>Key Points</h2>
<ul>
<li>The End user portal gives your users a self-service place to connect to their own devices, submit tickets, view shared documentation, and restore from their own backups.</li>
<li>Access is controlled through roles, so what a user can see and do is scoped to exactly what you allow.</li>
<li>Documentation and folders can be shared directly with end users, cutting down on requests for information that already exists.</li>
<li>The NinjaOne Assist mobile app extends that same self-service access to iOS and Android.</li>
<li>Syncing users in through Microsoft Entra ID or another SCIM-supported IDP keeps accounts, roles, and organization mapping accurate automatically, no manual account creation required.</li>
<li>The portal can be fully branded to match your environment, whether that’s your company’s internal look or a client-facing identity.</li>
</ul>
</div>
<h2>What the end user portal is</h2>
<p>The end user portal is a separate login experience built for the people using the devices you manage. Once an end user has an account, they log into the NinjaOne instance through a browser, or through the NinjaOne Assist mobile app, and see a list of devices they have access to along with each device’s status.</p>
<p>Getting a user into the portal starts with creating an account for them and granting them access to specific devices, which is a separate action from making them the device owner. You can add as many devices as needed to a user’s access list, and multiple users can be granted access to the same device.</p>
<p>Access itself is governed by roles, the same permission structure technicians use. You decide what a given role can see and do, and if a user belongs to multiple roles, NinjaOne applies the highest level of access across all of them. A user in a role without remote access permissions who’s also in a role that grants them remote access will end up with remote access, not the more restrictive setting.</p>
<p>Users only get what’s explicitly turned on for their role, regardless of whether they log in through a browser or through NinjaOne Assist.</p>
<p></p>
<h2>What end users can do</h2>
<p><strong>Remote access to their own devices:</strong><br />Once granted access, end users can connect to their devices using whichever remote access tool you’ve enabled for that operating system. No waiting on a technician to remote in for something they could do themselves.</p>
<p>Across Windows, macOS, and Linux, NinjaOne supports multiple connection types, and you decide which ones a given role can use:</p>
<ul>
<li>NinjaOne Remote – a full remote control session</li>
<li>User command line – a terminal session running in the context of the logged-in-user</li>
<li>System command line – a terminal session running with system-level privileges</li>
</ul>
<p>Since these are set per role and per operating system, you can be as narrow or as broad as needed. A general staff role might only get NinjaOne Remote, while a more technical role, like an internal developer, might also get command line access.</p>
<p><strong>Submit and track tickets with NinjaOne Ticketing:</strong><br />Users can create, update, and respond to NinjaOne tickets straight from the portal. You control what forms they see, and within those forms, you can control whether any fields are required to submit, ensuring you get the information needed on initial submission.</p>
<p>By default, users can only see the tickets they personally submitted. With ticketing permissions, you can also grant organization-wide access, giving visibility into every ticket tied to their organization, regardless of who reported it. That’s useful for someone like an office manager or department lead who needs to track every open request across their location, not just the ones they personally filed.</p>
<p><strong>Restore their own backups:</strong><br />If backup is enabled and the permission is granted, users can open the backup manager, browse through completed backup plans for their device, and download the files or folders they need. No ticket required to get a file back.</p>
<p>This is one of the more overlooked self-service wins. A user who accidentally deletes a file or overwrites something usually files a ticket, waits for the technician to pick it up, and waits again for the restore. Giving them direct access to their own backup history turns that into something they resolve in a couple of minutes on their own, without anyone on your team touching it.</p>
<p><strong>Access shared documentation:</strong><br />Folders can be shared directly with end user roles from the system dashboard, giving users a place to find setup guides, policies and procedures, or reference material without asking IT where to look.</p>
<p>When you share a folder, you can choose to make it available to all end-user roles or scope it to specific ones, and you can display the folder’s contents directly rather than requiring users to click into it. This is useful if you’re sharing multiple folders at once and want to keep things organized. Shared folders also show on the End User Roles tab inside the documentation app’s configuration page, giving you a central place to see and manage what’s been shared with whom.</p>
<p>This can be found by navigating to Administration &gt; Apps &gt; Documentation &gt; End User Roles.</p>
<p>Note that this sharing option is only available from the system dashboard.</p>
<p><strong>Wake devices remotely:</strong><br />End users can use Wake-on-LAN to bring a sleeping device back online, as long as it’s connected to the same network as another online device.</p>
<h2>Extending access with the NinjaOne Assist mobile app</h2>
<p>For end users who split their time between office and remote work, or who just need to check a device while away from a desktop, NinjaOne Assist removes the dependency on being at a specific computer to get help or get connected. It’s the same self-service access as the portal: connect to a device, check details and status, submit and update tickets, all from a phone or mobile device with access to the iOS App Store or Google Play Store.</p>
<p>The app carries over the same role-based permissions as the browser portal. A user doesn’t gain broader access by switching to mobile, and they don’t lose functionality either. If their role has NinjaOne Remote enabled, they can launch a remote session from their phone. It’s the same experience, just built for a smaller screen and a different context.</p>
<p>That consistency matters for deployment. You’re not managing two separate permission sets or explaining two different tools to your users, mobile is just another way in. For distributed teams, field staff, or anyone more likely to notice a device problem away from their desk than at it, that matters.</p>
<h2>Keeping accounts accurate with SCIM</h2>
<p>Manually creating end user accounts works fine for a handful of users. It falls apart fast once you’re managing dozens or hundreds of them, whether that’s across departments in a single company or across multiple client organizations.</p>
<p>Syncing NinjaOne with Microsoft Entra ID (or another IDP) through SCIM solves that. You set up user roles in Entra ID, map them to groups, and NinjaOne provisions the matching end user and technician accounts automatically as those groups change. Add someone to the right group in Entra ID and they show up in NinjaOne with the correct role and organization already assigned. Remove them, and their access goes with it.</p>
<p>For internal IT, this is usually simple since most users sit in a single organization, sometimes split by department. For MSPs, it’s the mechanism that keeps each client’s users mapped to the right organization automatically. Either way, each synced user needs an OrganizationID attribute so NinjaOne knows where they belong, and for users who need access across every organization, that attribute can be set to “All.”</p>
<p>The result is an end user provisioning process that scales with your environment instead of adding a manual step every time someone joins, changes roles, or leaves.</p>
<h2>The end user journey</h2>
<p>It’s worth walking through what this looks like from the end user’s side, since that’s usually the part that’s hardest to picture from the admin view.</p>
<p><strong>Getting an account:</strong><br />An end user’s account gets created one of two ways: manually, when you add them and grant device access yourself, or automatically, when they’re synced in through Entra ID or another SCIM-supported identity provider. Either way, the user doesn’t do anything to trigger this step. It happens on your side.</p>
<p><strong>Getting invited:</strong><br />Once the account exists, a manually created user receives an email invitation to set up their login. A user created through a SCIM sync doesn’t receive an invite email, but can still navigate to the portal and log in directly.</p>
<p><strong>Visibility in the portal:<br /></strong>Once logged in, the user sees a straightforward list of devices they have access to, along with each device’s current status. No admin panels, no unrelated organization data, just what’s relevant to them that you allowed.</p>
<p><strong>Taking action:</strong><br />From there, whatever’s turned on for their role is available directly: connecting to a device, submitting or checking a ticket, pulling a file from a backup, browsing shared documentation, or waking a sleeping device. All of it happens without a support request, and all of it stays inside the boundaries you’ve set for that role.</p>
<p><img decoding="async" class="alignnone size-full wp-image-859763" src="https://www.ninjaone.com/wp-content/uploads/2026/08/image002-scaled.png" alt="" width="400" srcset="https://www.ninjaone.com/wp-content/uploads/2026/08/image002-scaled.png 1177w, https://www.ninjaone.com/wp-content/uploads/2026/08/image002-138x300.png 138w, https://www.ninjaone.com/wp-content/uploads/2026/08/image002-471x1024.png 471w, https://www.ninjaone.com/wp-content/uploads/2026/08/image002-768x1670.png 768w, https://www.ninjaone.com/wp-content/uploads/2026/08/image002-706x1536.png 706w, https://www.ninjaone.com/wp-content/uploads/2026/08/image002-942x2048.png 942w" sizes="(max-width: 1177px) 100vw, 1177px"/></p>
<h2>Why this matters</h2>
<p>Without a sanctioned self-service option, users find their own way around IT anyway. They install their own remote access tools, email files to themselves instead of restoring from backup, or ask a coworker for help instead of opening a ticket. None of that is logged, none of it is controlled, and none of it is visible to you until something goes wrong. The end user portal gives users a legitimate channel for the things they’re going to try to do regardless, and keeps every action inside a system you control.</p>
<p>Paired with IDP sync, it also removes the administrative overhead of keeping end user accounts current by hand. Access follows your identity provider, roles stay accurate, and your team spends less time on account management and more time on the work only they can do.</p>
</div>
<p><script id="meta-pixel" type="text/javascript" class="optanon-category-C0004"> window.addEventListener('load', () => { ! function(f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function() { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', ' fbq('init', '148315452373934'); fbq('track', 'PageView'); var currentURL = window.location.href; if (currentURL.indexOf('thankyou') !== -1 || currentURL.indexOf('thank-you') !== -1) { fbq('track', 'Lead'); } }); </script><br />
</p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/the-end-user-portal-and-ninjaone-assist-mobile-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Symfony and AI: the video is now available</title>
		<link>https://xtadalafix.com/symfony-and-ai-the-video-is-now-available/</link>
					<comments>https://xtadalafix.com/symfony-and-ai-the-video-is-now-available/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Fri, 28 Aug 2026 07:49:06 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/symfony-and-ai-the-video-is-now-available/</guid>

					<description><![CDATA[Artificial intelligence is all over the news. Last month, France hosted the AI Action Summit, where leaders from around the world met to discuss the challenges of the technology. SensioLabs didn&#8217;t wait long to ask about how to apply artificial intelligence in Symfony development projects. Did you know that it is possible to integrate AI [&#8230;]]]></description>
										<content:encoded><![CDATA[<div id="content" data-sticky-nav-target="content">
<p><span>Artificial intelligence is all over the news. Last month, France hosted the <strong>AI Action Summit</strong>, where leaders from around the world met to discuss the challenges of the technology.</span></p>
<p><span>SensioLabs didn&#8217;t wait long to ask about how to apply artificial intelligence in Symfony development projects. <strong>Did you know that it is possible to integrate AI into Symfony</strong>?</span></p>
<h2 id="Talking-Symfony-and-AI"><span>Talking Symfony and AI</span></h2>
<p><span>On October 3rd, Symfony and AI converged on the rooftops of Paris for an exclusive event at Morning Laffitte, near the Opéra Garnier.</span></p>
<p><span>We had some fascinating conversations about these two technologies and their challenges, with Nicolas Grekas, Principal Core Team Member for Symfony, the team from our partner Codéin, and OPPBTP, the professional prevention organization for the building and public works sector. OPPBTP has used artificial intelligence in a Symfony-based development project.</span></p>
<p><span>We covered a few topics during the evening:</span></p>
<ul>
<li>
<p>The latest features in Symfony 7.2 to optimize developer experience.</p>
</li>
<li>
<p>Tips for optimizing AI integration in your Symfony projects.</p>
</li>
<li>
<p>Using AI to extract data from a Symfony application with a Python script and ChatGPT.</p>
</li>
</ul>
<p><span>Using AI in a Symfony application raises some key <strong>questions about data</strong>, its confidentiality, and how it will be managed by the framework. On top of that, there is also the question of <strong>interoperability of AI models</strong>, as several competing models are under development right now.</span></p>
<p><span>It was also a chance to learn that <strong>Symfony and AI can be used to develop very specific projects for enterprise applications</strong>. Like here for OPPBTP with info on chemical products to improve accident prevention in the building and construction sector.</span></p>
<h2 id="Watch-the-full-video-of-the-event"><span>Watch the full video of the event</span></h2>
<p><span>A lot of you asked on social media if the event was filmed. We&#8217;re happy to <strong>share the video with you on our YouTube channel</strong>. If you missed the event, you can now watch it again in its entirety in a high-quality, subtitled video in French. </span></p>
<p><span>Here is the URL to go to the video, or you can just click on the image below: </span><span>https://youtu.be/b-shilFNkI8</span><span>. </span>You can add automatic English subtitles directly on Youtube.</p>
<p><span>The video is about an hour long and includes speeches by Nicolas Grekas, Damien Piquet (the head of OPPBTP&#8217;s Digital Factory), Nicolas Fernandez (PHP/Symfony Lead Developer), and Romain Bonnal (Associate Director of Codéin).</span></p>
<p><span>We hope the video answers some of the questions you may have about Symfony and AI.</span></p>
<p><strong><span>If you are thinking about using artificial intelligence with your Symfony or PHP application</span></strong><span>, our team would love to hear about it. As the creator of Symfony, we are closely watching community projects related to this technology. We would be happy to share our knowledge.</span></p>
</p></div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/symfony-and-ai-the-video-is-now-available/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The Week in Charts (8/25/26)</title>
		<link>https://xtadalafix.com/the-week-in-charts-8-25-26/</link>
					<comments>https://xtadalafix.com/the-week-in-charts-8-25-26/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 07:44:00 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/the-week-in-charts-8-25-26/</guid>

					<description><![CDATA[View the video of this post here. Enjoying this newsletter? Don’t miss the next one. Subscribe to The Week in Charts Here to get it directly in your inbox. The most important charts and themes in markets and investing… 1) Moving One Step Closer to a Debt Crisis The US National Debt is now $40 trillion. [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<p class="wp-block-paragraph">View the <strong>video of this post here</strong>.</p>
<p><iframe loading="lazy" title="Moving Closer to a Debt Crisis | The Week in Charts (8/22/26) | Charlie Bilello | Creative Planning" width="640" height="360" src="https://www.youtube.com/embed/TT9ajz9PG5k?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph">Enjoying this newsletter?</p>
<p class="wp-block-paragraph">Don’t miss the next one.</p>
<p class="wp-block-paragraph">Subscribe to <strong>The Week in Charts Here</strong> to get it directly in your inbox.</p>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph"><strong>The most important charts and themes in markets and investing</strong>…</p>
<p class="wp-block-paragraph"><strong>1)</strong> <strong>Moving One Step Closer to a Debt Crisis</strong></p>
<p class="wp-block-paragraph">The US National Debt is now $40 trillion.</p>
<figure class="wp-block-image size-full"></figure>
<p class="wp-block-paragraph">How did we get here? </p>
<p class="wp-block-paragraph">Washington’s solution to every problem remains the same:</p>
<p class="wp-block-paragraph">Borrow more. Spend more. Let our children and grandchildren deal with the consequences.</p>
<p class="wp-block-paragraph">There is simply no fiscal discipline in sight. Unfortunately, it will take a crisis before anything changes.</p>
<p class="wp-block-paragraph"><strong>2)</strong> <strong>A Desperate Attempt at Financial Repression</strong></p>
<p class="wp-block-paragraph">As the National Debt hit $40 trillion, long-term government bond yields hit their highest level since June 2007, with the 30-year rising above 5.3%.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="838" height="567" src="https://bilello.blog/wp-content/uploads/2026/08/30-year-yield-8-17-26-1.png" alt="" class="wp-image-16905" srcset="https://bilello.blog/wp-content/uploads/2026/08/30-year-yield-8-17-26-1.png 838w, https://bilello.blog/wp-content/uploads/2026/08/30-year-yield-8-17-26-1-300x203.png 300w, https://bilello.blog/wp-content/uploads/2026/08/30-year-yield-8-17-26-1-767x519.png 767w" sizes="auto, (max-width: 838px) 100vw, 838px"/></figure>
<p class="wp-block-paragraph">The very next day, the Treasury announced that it would be doubling the size of their “debt buybacks” to $4 billion. But this is not a debt reduction, just a debt reshuffling, with the Treasury buying longer-dated bonds and issuing more shorter-dated bills.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="754" height="562" src="https://bilello.blog/wp-content/uploads/2026/08/image-4.png" alt="" class="wp-image-16906" srcset="https://bilello.blog/wp-content/uploads/2026/08/image-4.png 754w, https://bilello.blog/wp-content/uploads/2026/08/image-4-300x224.png 300w" sizes="auto, (max-width: 754px) 100vw, 754px"/></figure>
<p class="wp-block-paragraph">When yields barely budged, they announced that they would consider tapping the $1 trillion General Account in an attempt to suppress bond yields.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="797" height="494" src="https://bilello.blog/wp-content/uploads/2026/08/bessent-general-account-1-trillion.png" alt="" class="wp-image-16907" srcset="https://bilello.blog/wp-content/uploads/2026/08/bessent-general-account-1-trillion.png 797w, https://bilello.blog/wp-content/uploads/2026/08/bessent-general-account-1-trillion-300x186.png 300w, https://bilello.blog/wp-content/uploads/2026/08/bessent-general-account-1-trillion-768x476.png 768w" sizes="auto, (max-width: 797px) 100vw, 797px"/></figure>
<p class="wp-block-paragraph">So instead of cutting spending and reducing deficits – which would actually be a long-term solution to the problem – they are resorting to financial engineering.</p>
<p class="wp-block-paragraph">Step 1: Create the problem.</p>
<p class="wp-block-paragraph">Step 2: Refuse to fix the problem.</p>
<p class="wp-block-paragraph">Step 3: Manipulate the market to hide the problem.</p>
<p class="wp-block-paragraph">Will this help bring long-term bond yields down?</p>
<p class="wp-block-paragraph">Perhaps in the short run, if they throw enough money at it.</p>
<p class="wp-block-paragraph">But as <strong>Stan Druckenmiller said:</strong></p>
<p class="wp-block-paragraph">“Governments defending prices against fundamentals always lose. The only variable is how much they spend before conceding.”</p>
<p class="wp-block-paragraph"><strong>3) The “Debasement Trade”</strong> <strong>Is Back</strong></p>
<p class="wp-block-paragraph">Immediately after the Treasury buyback announcement, we saw a resurgence in the so-called “debasement trade.”</p>
<p class="wp-block-paragraph">Bitcoin spiked 19%, Gold rallied 6%, and the US Dollar fell 1%.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="837" height="598" src="https://bilello.blog/wp-content/uploads/2026/08/3-day-returns-ibit-gld-uup.png" alt="" class="wp-image-16908" srcset="https://bilello.blog/wp-content/uploads/2026/08/3-day-returns-ibit-gld-uup.png 837w, https://bilello.blog/wp-content/uploads/2026/08/3-day-returns-ibit-gld-uup-300x214.png 300w, https://bilello.blog/wp-content/uploads/2026/08/3-day-returns-ibit-gld-uup-767x548.png 767w" sizes="auto, (max-width: 837px) 100vw, 837px"/></figure>
<p class="wp-block-paragraph">Washington won’t get its fiscal house in order, so investors are buying alternatives to the Dollar.</p>
<p class="wp-block-paragraph"><strong>4)</strong> <strong>The Housing Market Still Has an Affordability Problem</strong></p>
<p class="wp-block-paragraph">10 years ago, the 30-year mortgage rate was 3.4% and the median existing home price in the U.S. was $243k.</p>
<p class="wp-block-paragraph">Today, the 30-year mortgage rate is 6.7% and the median existing home price is $434k.</p>
<p class="wp-block-paragraph">The result: a $38k increase in the required down payment (assuming 20% down) and 160% increase in the monthly mortgage payment (from $862 to $2,240).</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="660" src="https://bilello.blog/wp-content/uploads/2026/08/median-monthly-mortgage-payment-july-2016-vs.-july-2026-1024x660.png" alt="" class="wp-image-16909" srcset="https://bilello.blog/wp-content/uploads/2026/08/median-monthly-mortgage-payment-july-2016-vs.-july-2026-1024x660.png 1024w, https://bilello.blog/wp-content/uploads/2026/08/median-monthly-mortgage-payment-july-2016-vs.-july-2026-300x193.png 300w, https://bilello.blog/wp-content/uploads/2026/08/median-monthly-mortgage-payment-july-2016-vs.-july-2026-767x494.png 767w, https://bilello.blog/wp-content/uploads/2026/08/median-monthly-mortgage-payment-july-2016-vs.-july-2026.png 1310w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">Needless to say, incomes are not up anywhere near 160% in the past decade, leading to a collapse in affordability.</p>
<p class="wp-block-paragraph">The good news: supply is slowly coming back to the market. There are now over 1.1 million homes for sale in the US, the highest inventory since 2019.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="718" height="453" src="https://bilello.blog/wp-content/uploads/2026/08/housing-inventory-highest-since-2019.png" alt="" class="wp-image-16910" srcset="https://bilello.blog/wp-content/uploads/2026/08/housing-inventory-highest-since-2019.png 718w, https://bilello.blog/wp-content/uploads/2026/08/housing-inventory-highest-since-2019-300x189.png 300w" sizes="auto, (max-width: 718px) 100vw, 718px"/></figure>
<p class="wp-block-paragraph"><strong>5)</strong> <strong>The Most Overpriced Product in America?</strong></p>
<p class="wp-block-paragraph">Here’s an absolutely insane stat: 15 U.S. colleges now cost more than $100,000 per year…</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="805" height="729" src="https://bilello.blog/wp-content/uploads/2026/08/colleges-costing-over-100k-per-year.png" alt="" class="wp-image-16898" srcset="https://bilello.blog/wp-content/uploads/2026/08/colleges-costing-over-100k-per-year.png 805w, https://bilello.blog/wp-content/uploads/2026/08/colleges-costing-over-100k-per-year-300x272.png 300w, https://bilello.blog/wp-content/uploads/2026/08/colleges-costing-over-100k-per-year-767x695.png 767w" sizes="auto, (max-width: 805px) 100vw, 805px"/></figure>
<p class="wp-block-paragraph">That’s $400,000+ for a four-year degree.</p>
<p class="wp-block-paragraph">Most students are not getting anywhere near $400,000 worth of value from these schools.</p>
<p class="wp-block-paragraph">Which means that higher education may be the most overpriced product in America, and one that is ripe for disruption.</p>
<p class="wp-block-paragraph">Over the last 40 years, College Tuition and Fees in the US have increased by 655% (7.5x) while overall Consumer Prices (US CPI) are up 204% (3x).</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="838" height="579" src="https://bilello.blog/wp-content/uploads/2026/08/college-tuition-vs.-cpi-last-40-years.png" alt="" class="wp-image-16900" srcset="https://bilello.blog/wp-content/uploads/2026/08/college-tuition-vs.-cpi-last-40-years.png 838w, https://bilello.blog/wp-content/uploads/2026/08/college-tuition-vs.-cpi-last-40-years-300x207.png 300w, https://bilello.blog/wp-content/uploads/2026/08/college-tuition-vs.-cpi-last-40-years-767x530.png 767w" sizes="auto, (max-width: 838px) 100vw, 838px"/></figure>
<p class="wp-block-paragraph">The next 40 years will likely look very different given economics, changing demographics, and technological forces. More and more students are questioning the value they are getting and <strong>enrollment is expected to drop 13% by 2041 </strong>due to a projected decline in the number of 18-year-olds.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="682" height="435" src="https://bilello.blog/wp-content/uploads/2026/08/us-residents-18-24-census.png" alt="" class="wp-image-16911" srcset="https://bilello.blog/wp-content/uploads/2026/08/us-residents-18-24-census.png 682w, https://bilello.blog/wp-content/uploads/2026/08/us-residents-18-24-census-300x191.png 300w" sizes="auto, (max-width: 682px) 100vw, 682px"/></figure>
<p class="wp-block-paragraph">With the advent of AI, the cost of delivering a high-quality education should fall dramatically. How quickly colleges will pass those savings on to students is another question, but the current trend is not sustainable.</p>
<p class="wp-block-paragraph"><strong>6)</strong> <strong>The Off-Balance Sheet Surge</strong></p>
<p class="wp-block-paragraph">Big Tech’s AI spending spree is much bigger than it looks.</p>
<p class="wp-block-paragraph">Nine major tech companies have roughly $3 trillion in off-balance-sheet commitments, far above reported capex ($600 billion).</p>
<p class="wp-block-paragraph">The AI arms race is creating enormous obligations investors may be underestimating.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="785" height="429" src="https://bilello.blog/wp-content/uploads/2026/08/off-balance-sheet-obligations-.png" alt="" class="wp-image-16902" srcset="https://bilello.blog/wp-content/uploads/2026/08/off-balance-sheet-obligations-.png 785w, https://bilello.blog/wp-content/uploads/2026/08/off-balance-sheet-obligations-300x164-1.png 300w, https://bilello.blog/wp-content/uploads/2026/08/off-balance-sheet-obligations-767x419-1.png 767w" sizes="auto, (max-width: 785px) 100vw, 785px"/></figure>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="789" height="468" src="https://bilello.blog/wp-content/uploads/2026/08/ai-off-balance-sheet-obligations.png" alt="" class="wp-image-16903" srcset="https://bilello.blog/wp-content/uploads/2026/08/ai-off-balance-sheet-obligations.png 789w, https://bilello.blog/wp-content/uploads/2026/08/ai-off-balance-sheet-obligations-300x178.png 300w, https://bilello.blog/wp-content/uploads/2026/08/ai-off-balance-sheet-obligations-767x455.png 767w" sizes="auto, (max-width: 789px) 100vw, 789px"/></figure>
<p class="wp-block-paragraph">When Nvidia reports earnings this week, a bigger focus will be placed on those obligations. Nvidia is increasingly tying its own fortunes to those of its customers. Rather than simply selling its chips and letting demand stand on its own, the company is helping to finance, backstop, and guarantee the very investments driving that demand.</p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="352" height="460" src="https://bilello.blog/wp-content/uploads/2026/08/nvidia-financing-deals.png" alt="" class="wp-image-16912" srcset="https://bilello.blog/wp-content/uploads/2026/08/nvidia-financing-deals.png 352w, https://bilello.blog/wp-content/uploads/2026/08/nvidia-financing-deals-230x300.png 230w" sizes="auto, (max-width: 352px) 100vw, 352px"/></figure>
<p class="wp-block-paragraph"><strong>7)</strong> <strong>A Few Interesting Stats…</strong></p>
<p class="wp-block-paragraph"><strong>a) The total amount wagered on sports in the US has increased by 25x over the past 7 years.</strong></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="594" src="https://bilello.blog/wp-content/uploads/2026/08/total-wagered-on-sports-2018-2025-1024x594.png" alt="" class="wp-image-16895" srcset="https://bilello.blog/wp-content/uploads/2026/08/total-wagered-on-sports-2018-2025-1024x594.png 1024w, https://bilello.blog/wp-content/uploads/2026/08/total-wagered-on-sports-2018-2025-300x174.png 300w, https://bilello.blog/wp-content/uploads/2026/08/total-wagered-on-sports-2018-2025-767x445.png 767w, https://bilello.blog/wp-content/uploads/2026/08/total-wagered-on-sports-2018-2025.png 1276w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph"><strong>Related: More than half of Gen Z investors redirected investing dollars into sports betting over the last year. And 26% now consider betting part of their long-term financial strategy.</strong></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="713" height="1024" src="https://bilello.blog/wp-content/uploads/2026/08/sports-betting-survey-713x1024.png" alt="" class="wp-image-16918" srcset="https://bilello.blog/wp-content/uploads/2026/08/sports-betting-survey-713x1024.png 713w, https://bilello.blog/wp-content/uploads/2026/08/sports-betting-survey-209x300.png 209w, https://bilello.blog/wp-content/uploads/2026/08/sports-betting-survey-768x1102.png 768w, https://bilello.blog/wp-content/uploads/2026/08/sports-betting-survey.png 1068w" sizes="auto, (max-width: 713px) 100vw, 713px"/></figure>
<p class="wp-block-paragraph"><strong>b)</strong> <strong>Self-driving taxi company Waymo is now doing over 1.4 million rides per month in California, a 10x increase over the past two years.</strong></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="962" height="618" src="https://bilello.blog/wp-content/uploads/2026/08/waymo-paid-rides-8-20-26.png" alt="" class="wp-image-16896" srcset="https://bilello.blog/wp-content/uploads/2026/08/waymo-paid-rides-8-20-26.png 962w, https://bilello.blog/wp-content/uploads/2026/08/waymo-paid-rides-8-20-26-300x193.png 300w, https://bilello.blog/wp-content/uploads/2026/08/waymo-paid-rides-8-20-26-767x493.png 767w" sizes="auto, (max-width: 962px) 100vw, 962px"/></figure>
<p class="wp-block-paragraph"><strong>c)</strong> <strong>25 years ago Walmart’s revenue was 68x larger than Amazon. Today, Amazon has surpassed Walmart to become the largest company by revenue in the world.</strong></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="839" height="581" src="https://bilello.blog/wp-content/uploads/2026/08/ttm-revenues-amzn-wmt-aug-2026.png" alt="" class="wp-image-16899" srcset="https://bilello.blog/wp-content/uploads/2026/08/ttm-revenues-amzn-wmt-aug-2026.png 839w, https://bilello.blog/wp-content/uploads/2026/08/ttm-revenues-amzn-wmt-aug-2026-300x208.png 300w, https://bilello.blog/wp-content/uploads/2026/08/ttm-revenues-amzn-wmt-aug-2026-767x531.png 767w" sizes="auto, (max-width: 839px) 100vw, 839px"/></figure>
<p class="wp-block-paragraph"><strong>d)</strong> <strong>55 million Americans (15% of the population) are projected to be on GLP-1 weight loss drugs by 2035.</strong> <strong>The biggest beneficiary of this trend: Eli Lilly ($LLY), who’s market cap has grown from $88 billion to $1.2 trillion over the last decade.</strong></p>
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="839" height="567" src="https://bilello.blog/wp-content/uploads/2026/08/lly-market-cap-8-19-26.png" alt="" class="wp-image-16901" srcset="https://bilello.blog/wp-content/uploads/2026/08/lly-market-cap-8-19-26.png 839w, https://bilello.blog/wp-content/uploads/2026/08/lly-market-cap-8-19-26-300x203.png 300w, https://bilello.blog/wp-content/uploads/2026/08/lly-market-cap-8-19-26-768x519.png 768w" sizes="auto, (max-width: 839px) 100vw, 839px"/></figure>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<p class="wp-block-paragraph">And that’s it for this week. Thanks for reading!</p>
<p class="wp-block-paragraph">Every week I do a video breaking down the most important charts and themes in markets and investing. <strong>Subscribe to our YouTube channel HERE</strong> for the latest content.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="518" src="https://bilello.blog/wp-content/uploads/2026/08/etf-returns-8-21-26-1024x518.png" alt="" class="wp-image-16913" srcset="https://bilello.blog/wp-content/uploads/2026/08/etf-returns-8-21-26-1024x518.png 1024w, https://bilello.blog/wp-content/uploads/2026/08/etf-returns-8-21-26-300x152.png 300w, https://bilello.blog/wp-content/uploads/2026/08/etf-returns-8-21-26-768x388.png 768w, https://bilello.blog/wp-content/uploads/2026/08/etf-returns-8-21-26.png 1094w" sizes="auto, (max-width: 1024px) 100vw, 1024px"/></figure>
<p class="wp-block-paragraph">Disclaimer: All information provided is for educational purposes only and does not constitute investment, legal or tax advice, or an offer to buy or sell any security. Read our full disclosures here.</p>
</div>
<p></p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/the-week-in-charts-8-25-26/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>How to Manage TCP 445 Port Number for SMB</title>
		<link>https://xtadalafix.com/how-to-manage-tcp-445-port-number-for-smb/</link>
					<comments>https://xtadalafix.com/how-to-manage-tcp-445-port-number-for-smb/#respond</comments>
		
		<dc:creator><![CDATA[xtadalafix]]></dc:creator>
		<pubDate>Mon, 24 Aug 2026 07:38:50 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://xtadalafix.com/how-to-manage-tcp-445-port-number-for-smb/</guid>

					<description><![CDATA[Key Points SMB Risk Awareness: TCP 445 is essential for SMB operations but poses major security risks if exposed to public or untrusted networks. Identify Dependencies: Mapping SMB servers, clients, and workflows ensures safe scoping and prevents breaking critical operations. Scope &#38; Block Traffic: Block TCP 445 at the perimeter and untrusted zones while allowing [&#8230;]]]></description>
										<content:encoded><![CDATA[<div>
<div class="in-context-cta">
<h2 style="margin-top:0">Key Points</h2>
<ul>
<li>SMB Risk Awareness: TCP 445 is essential for SMB operations but poses major security risks if exposed to public or untrusted networks.</li>
<li>Identify Dependencies: Mapping SMB servers, clients, and workflows ensures safe scoping and prevents breaking critical operations.</li>
<li>Scope &amp; Block Traffic: Block TCP 445 at the perimeter and untrusted zones while allowing only approved internal SMB paths.</li>
<li>Harden SMB: Strengthen SMB security by disabling SMB1, enabling signing, and using modern alternatives like SMB over QUIC.</li>
<li>Deploy &amp; Govern: Roll out rules safely, monitor for disruptions, and maintain strict exception governance for long-term protection.</li>
</ul>
</div>
<p>Port 445 supports Server Message Block (SMB), which lets users share files, printers, and other device resources. This port can create potential risks if left open on a public network. This guide provides a vendor-neutral framework on how MSPs can safely block or scope TCP <strong>445 port number</strong> in Windows.</p>
<div class="in-context-cta">
<p style="text-align:center">Strengthen endpoint security without adding manual overhead.</p>
<p style="text-align:center">Learn more about NinjaOne Endpoint Management</p>
</div>
<h2>How can I secure Port 445: A step-by-step guide</h2>
<p>Although blocking TCP 445 seems like a logical solution, doing so can disrupt domain operations, file transfers, and critical management workflows. The steps below outline how IT administrators can mitigate risks associated with TCP 445 without causing operational disruptions.</p>
<p>&#x1f4cc; <strong>Prerequisites: </strong>The following items allow the steps below to be done more efficiently:</p>
<ul>
<li>Inventory of SMB-dependent services and hosts</li>
<li>Change the window and pilot ring selection</li>
<li>Ability to deploy Windows Defender Firewall or equivalent rules via GPO or MDM</li>
<li>Centralized logging for firewall events and authentication failures</li>
</ul>
<h3>Step 1: Identify where SMB is required</h3>
<p>Server Message Block (SMB) is a network communication protocol that allows computers to share files, printers, serial ports, and other resources over a network. Knowing where SMB is required, and what legitimate SMB pathways are inside your organization is the first step to reducing risks associated with TCP 445.</p>
<p>This first step involves:</p>
<ul>
<li>Identifying file servers, domain controllers, print servers, and admin shares that must remain reachable.</li>
<li>Mapping client groups that legitimately access those servers.</li>
<li>Noting remote access use cases and alternatives such as VPN, SMB over QUIC, or file gateways.</li>
</ul>
<h3>Step 2: Block TCP 445 at the perimeter and untrusted zones</h3>
<p>Blocking TCP 445 for untrusted zones is crucial, as it reduces exposure to cyber threats. Additionally, it is essential to ensure that SMB traffic is never exposed to the internet edge to prevent internet-borne SMB attacks.</p>
<p>Some ways you can secure TCP 445 in such zones include:</p>
<h4>Perimeter blocks</h4>
<p>Apply inbound and outbound 445 blocking at the firewall or cloud edge to eliminate internet-borne threats such as scanners, exploits, and ransomware payloads.</p>
<h4>Segmentation protections</h4>
<p>Untrusted or unmanaged segments—such as guest Wi-Fi, IoT sensors, and BYOD devices—should be prevented from communicating with corporate SMB services.</p>
<h4>Remote user protection</h4>
<p>Ensure remote endpoints do not accidentally publish 445 on home or public networks. Enforce host firewall rules to block inbound SMB unless on a trusted domain network.</p>
<h3>Step 3: Scope internal access with least privilege</h3>
<p>Limiting internal access for users reduces internal traffic, thereby containing lateral movement. By establishing internal access protocols based on privilege, IT admins can ensure that only approved SMB flows are successful.</p>
<p>Some ways to do this include:</p>
<ul>
<li>Creating Windows firewall rules that allow 445 only between approved client subnets and approved SMB hosts</li>
<li>Choosing group-based policy targeting for exceptions and maintaining an explicit allowlist</li>
<li>Denying all other 445 traffic within the LAN and inter-site links</li>
</ul>
<h3>Step 4: Harden SMB before and after blocking</h3>
<p>Hardening your SMB is an essential step in safely blocking or scoping TCP port 445. In fact, for most organizations, it should be a part of a defense-in-depth strategy. This step enhances SMB protocol security, ensuring fewer successful authentication and relay attempts, even on blocked paths.</p>
<p>Some practices you can incorporate include:</p>
<ul>
<li>Disabling SMB1 on all systems</li>
<li>Requiring SMB signing by default</li>
<li>Reviewing controller and file server settings</li>
<li>Using SMB over QUIC for remote scenarios to avoid exposing 445 across networks</li>
</ul>
<h3>Step 5: Deploy rules via GPO or MDM</h3>
<p>The previous steps focused on enhancing security; this step tackles deployment across the different endpoints on your network. Deploying such changes via GPO or MDM allows IT admins to roll out new policies in a safe and reversible manner. In addition, rolling out changes via GPO or MDM can help detect unintended breakage more quickly and remediate it more efficiently.</p>
<p>Some best practices include:</p>
<ul>
<li>Piloting with a small ring and enabling verbose firewall logging</li>
<li>Rolling out inbound and outbound rules with clear precedence and documentation</li>
<li>Keeping a tested rollback script to remove or relax rules quickly if needed</li>
</ul>
<h3>Step 6: Verify and monitor your changes</h3>
<p>Updates to your environment should always be documented, verifiable, and monitored. This step allows IT admins to verify that the changes made work as intended and are not disruptive to critical workflows.</p>
<p>During this phase, the following practices should be done:</p>
<ul>
<li>Testing network reachability with <strong>Test-NetConnection -ComputerName &lt;server&gt; -Port 445</strong></li>
<li>Validating file share access, GPO processing, and authentication, where applicable</li>
<li>Reviewing firewall logs for denials, especially if these correlate with help desk tickets</li>
<li>Adjusting allow lists as needed based on observed data</li>
</ul>
<h3>Step 7: Govern exceptions and lifecycles</h3>
<p>Finally, maintaining governance ensures adequate control over SMB protocols and prevents the growth of uncontrolled exceptions that can weaken security over time.</p>
<p>This is an ongoing step, similar to monitoring, and involves:</p>
<ul>
<li>Keeping records of the owner, reason, and expiry for each 445 exception</li>
<li>Reviewing exceptions consistently (usually on a monthly basis) and removing or tightening security where possible and necessary</li>
<li>Adding necessary control to your hardening baseline and auditing it in quarterly checks</li>
</ul>
<h2>Integrating NinjaOne with your SMB protocols</h2>
<p>With NinjaOne, IT admins can help you manage your IT infrastructure strategically. Some ways you can incorporate into your security strategy include:</p>
<h3>Firewall rule deployment</h3>
<p>NinjaOne allows you to create and enforce firewall rules, scope and block specific TCP ports, and automate security configurations efficiently across your entire network.</p>
<h3>Comprehensive logging</h3>
<p>With the platform, IT admins can collect detailed authentication and security logs, track SMB protocol usage, and identify potential security events. In addition, NinjaOne’s reporting feature enables IT admins to generate comprehensive exception reports for monthly client reviews.</p>
<h3>Proactive monitoring</h3>
<p>Stay ahead of the game with proactive monitoring protocols. These allow you to detect and alert on SMB1 presence and automatically trigger the appropriate remediation scripts (available on NinjaOne). Layered with your other security measures, these features can help ensure that your network remains secure despite risks.</p>
<div class="in-context-cta">
<p style="text-align:center">Stay ahead of evolving security risks with a strong endpoint visibility.</p>
<p style="text-align:center">Watch a free demo of NinjaOne</p>
</div>
<h2>Protect your network with safety measures for TCP 445</h2>
<p>Blocking or tightly scoping TCP 445 meaningfully reduces SMB risk when done with discovery, staged deployment, and ongoing verification. Pair network controls with SMB hardening and disciplined exception management for durable protection.</p>
<p><strong>Related topics:</strong></p>
</div>
<p><script id="meta-pixel" type="text/javascript" class="optanon-category-C0004"> window.addEventListener('load', () => { ! function(f, b, e, v, n, t, s) { if (f.fbq) return; n = f.fbq = function() { n.callMethod ? n.callMethod.apply(n, arguments) : n.queue.push(arguments) }; if (!f._fbq) f._fbq = n; n.push = n; n.loaded = !0; n.version = '2.0'; n.queue = []; t = b.createElement(e); t.async = !0; t.src = v; s = b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t, s) }(window, document, 'script', ' fbq('init', '148315452373934'); fbq('track', 'PageView'); var currentURL = window.location.href; if (currentURL.indexOf('thankyou') !== -1 || currentURL.indexOf('thank-you') !== -1) { fbq('track', 'Lead'); } }); </script><br />
</p>
<h2>PakarPBN</h2>
<p></p>
<p>A Private Blog Network (PBN) is a collection of websites that are controlled by a single individual or organization and used primarily to build backlinks to a “money site” in order to influence its ranking in search engines such as Google. The core idea behind a PBN is based on the importance of backlinks in Google’s ranking algorithm. Since Google views backlinks as signals of authority and trust, some website owners attempt to artificially create these signals through a controlled network of sites.</p>
<p>In a typical PBN setup, the owner acquires expired or aged domains that already have existing authority, backlinks, and history. These domains are rebuilt with new content and hosted separately, often using different IP addresses, hosting providers, themes, and ownership details to make them appear unrelated. Within the content published on these sites, links are strategically placed that point to the main website the owner wants to rank higher. By doing this, the owner attempts to pass link equity (also known as “link juice”) from the PBN sites to the target website.</p>
<p>The purpose of a PBN is to give the impression that the target website is naturally earning links from multiple independent sources. If done effectively, this can temporarily improve keyword rankings, increase organic visibility, and drive more traffic from search results.</p>
<p><a href="https://pakarpbn.com">Jasa Backlink</a><br />
<br /><a href="https://drivenime.com">Download Anime Batch</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://xtadalafix.com/how-to-manage-tcp-445-port-number-for-smb/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
