<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daniele Michelin</title>
    <description>The latest articles on DEV Community by Daniele Michelin (@mikweb2025design).</description>
    <link>https://dev.to/mikweb2025design</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4203448%2Fffe5cc53-a862-4b03-bec6-790f814b375c.jpg</url>
      <title>DEV Community: Daniele Michelin</title>
      <link>https://dev.to/mikweb2025design</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mikweb2025design"/>
    <language>en</language>
    <item>
      <title>Alpine Linux: which versions still get updates</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:33:41 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/alpine-linux-which-versions-still-get-updates-4gab</link>
      <guid>https://dev.to/mikweb2025design/alpine-linux-which-versions-still-get-updates-4gab</guid>
      <description>&lt;p&gt;Which versions still get updates, which only security fixes — and which none. Updated daily.&lt;/p&gt;

&lt;p&gt;Recommended: Alpine Linux 3.24 (latest 3.24.4) — the newest version with full support.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Latest&lt;/th&gt;
&lt;th&gt;Released&lt;/th&gt;
&lt;th&gt;Supported until&lt;/th&gt;
&lt;th&gt;Security fixes until&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;3.24&lt;/td&gt;
&lt;td&gt;3.24.4&lt;/td&gt;
&lt;td&gt;9 June 2026&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 June 2028&lt;/td&gt;
&lt;td&gt;supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.23&lt;/td&gt;
&lt;td&gt;3.23.8&lt;/td&gt;
&lt;td&gt;4 December 2025&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2027&lt;/td&gt;
&lt;td&gt;supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.21&lt;/td&gt;
&lt;td&gt;3.21.10&lt;/td&gt;
&lt;td&gt;5 December 2024&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2026&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.20&lt;/td&gt;
&lt;td&gt;3.20.10&lt;/td&gt;
&lt;td&gt;22 May 2024&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 April 2026&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.19&lt;/td&gt;
&lt;td&gt;3.19.9&lt;/td&gt;
&lt;td&gt;7 December 2023&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2025&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.18&lt;/td&gt;
&lt;td&gt;3.18.12&lt;/td&gt;
&lt;td&gt;9 May 2023&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;9 May 2025&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.17&lt;/td&gt;
&lt;td&gt;3.17.10&lt;/td&gt;
&lt;td&gt;22 November 2022&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;22 November 2024&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.16&lt;/td&gt;
&lt;td&gt;3.16.9&lt;/td&gt;
&lt;td&gt;23 May 2022&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;23 May 2024&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.15&lt;/td&gt;
&lt;td&gt;3.15.11&lt;/td&gt;
&lt;td&gt;24 November 2021&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2023&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.14&lt;/td&gt;
&lt;td&gt;3.14.10&lt;/td&gt;
&lt;td&gt;15 June 2021&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 May 2023&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.13&lt;/td&gt;
&lt;td&gt;3.13.12&lt;/td&gt;
&lt;td&gt;14 January 2021&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2022&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.12&lt;/td&gt;
&lt;td&gt;3.12.12&lt;/td&gt;
&lt;td&gt;29 May 2020&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 May 2022&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.11&lt;/td&gt;
&lt;td&gt;3.11.13&lt;/td&gt;
&lt;td&gt;19 December 2019&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2021&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.10&lt;/td&gt;
&lt;td&gt;3.10.9&lt;/td&gt;
&lt;td&gt;19 June 2019&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 May 2021&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3.9&lt;/td&gt;
&lt;td&gt;3.9.6&lt;/td&gt;
&lt;td&gt;29 January 2019&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;1 November 2020&lt;/td&gt;
&lt;td&gt;end of life&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dates checked every day on the page: &lt;a href="https://daniele-michelin.com/en/versions/alpine-linux/" rel="noopener noreferrer"&gt;https://daniele-michelin.com/en/versions/alpine-linux/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Full table, kept up to date every day: &lt;a href="https://daniele-michelin.com/en/versions/alpine-linux/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/versions/alpine-linux/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;First published at &lt;a href="https://daniele-michelin.com/en/versions/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. End-of-support dates for 25 products, plus an error lexicon of 149 messages, in German, English and Italian.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>alpine</category>
      <category>devops</category>
      <category>linux</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>Microsoft 365 was down for over twelve hours: what the outage says about our dependency</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sun, 15 Nov 2026 07:32:40 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/microsoft-365-was-down-for-over-twelve-hours-what-the-outage-says-about-our-dependency-32g2</link>
      <guid>https://dev.to/mikweb2025design/microsoft-365-was-down-for-over-twelve-hours-what-the-outage-says-about-our-dependency-32g2</guid>
      <description>&lt;p&gt;It started unspectacularly: Outlook could not connect to the mailbox. Anyone who assumed their own network was at fault restarted Outlook, then the computer, then the router. Two hours later it was clear the router was not the problem: Microsoft had a global outage hitting Exchange Online, Teams, SharePoint Online, Copilot and a long tail of other services — and it was still not fully over on Friday morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  What happened on 12 November 2026
&lt;/h2&gt;

&lt;p&gt;Microsoft published two incidents in the admin center. &lt;strong&gt;EX1550543&lt;/strong&gt; covers Exchange Online, the mailbox behind Outlook, starting at 11:17 a.m. Eastern — 17:17 CET. &lt;strong&gt;MO1550821&lt;/strong&gt; followed at 1:26 p.m. Eastern and lists the services dragged in with it: Teams, SharePoint Online, Microsoft 365 Copilot, Defender XDR, plus Planner, To Do, Intune, Purview, parts of Power BI, Universal Print and, in some setups, Windows 365 Cloud PCs.&lt;/p&gt;

&lt;p&gt;Important for scale: what was affected were the parts that depend on Exchange Online. In Teams, chat and running meetings kept working, but calendars and scheduling did not. Files in SharePoint still opened. It was not a total product failure, it was a failure of the shared middle — and in Microsoft 365 that middle hangs off one identity, one tenant and one mail service.&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline, as far as Microsoft published it
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Time (CET)&lt;/th&gt;
&lt;th&gt;What Microsoft reported&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;17:20&lt;/td&gt;
&lt;td&gt;Investigating a possible problem with Exchange Online.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;18:45&lt;/td&gt;
&lt;td&gt;Connection errors in the part of Exchange Online that accepts logins and mailbox requests.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;19:27&lt;/td&gt;
&lt;td&gt;Infrastructure under heavy load in several regions; restarts and traffic shifting begin.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20:30&lt;/td&gt;
&lt;td&gt;The load is not coming from more requests: a large number of servers dropped out of service unexpectedly. Microsoft pauses its own deployments.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;20:58&lt;/td&gt;
&lt;td&gt;The servers fail automatic health checks — the fault may sit in the part that answers those checks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;23:03&lt;/td&gt;
&lt;td&gt;The actions so far "have not provided the anticipated relief".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;01:12&lt;/td&gt;
&lt;td&gt;The overwhelmed process is the one that sets up secure connections (TLS). Microsoft starts rolling back a recent network configuration change.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;02:48&lt;/td&gt;
&lt;td&gt;Restarts show "positive results", first regions recover.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As of Friday morning there was no confirmed root cause, only a preliminary technical explanation. Microsoft stated repeatedly that it saw no indication of malicious activity. More than 130,000 reports piled up on Downdetector alone.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the outage teaches technically
&lt;/h2&gt;

&lt;p&gt;Three things stand out, and none of them is a Microsoft problem in the narrow sense.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;First:&lt;/strong&gt; the trigger was not an attack and not data loss, but a &lt;em&gt;health check&lt;/em&gt; that removes servers from service. That is exactly the intended behaviour — it just caught too many servers at once, at the wrong moment. Automation without a manual escape hatch scales mistakes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Second:&lt;/strong&gt; a single overwhelmed process for secure connections was enough to make mailboxes unreachable. If you think of mail as "just storage", you underestimate the chain: DNS, TLS, auth, mailbox, client. Any link can stop the whole thing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third:&lt;/strong&gt; the 99.9 percent availability in the SLA sounds like "almost always". A 30-day month has 43,200 minutes, 0.1 percent of that is 43 minutes. An outage of this length blows the monthly target for many customers. The remedy is a credit on the monthly bill — not automatic, on request, and it does not replace a lost workday.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real dependency is identity
&lt;/h2&gt;

&lt;p&gt;What actually failed during those twelve hours was not Outlook. It was the anchor everything else hangs from: if you cannot sign in, you cannot open files, see appointments, schedule a meeting, approve something and — with Teams Phone — you cannot even make a call. A mailbox today is rarely just a mailbox. It is the login, the calendar, the chat, the archive and often the second factor for authentication.&lt;/p&gt;

&lt;p&gt;This is not a criticism of cloud, it is a description of the architecture. Putting office communication into one tenant buys convenience, versioning and operations — and pays with a shared failure point. That is a deliberate trade-off, as long as it is made deliberately.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Nextcloud replaces — and what it does not
&lt;/h2&gt;

&lt;p&gt;After a day like this the question is inevitable: "why not self-host everything?" The honest answer is more nuanced than either camp likes.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Building block&lt;/th&gt;
&lt;th&gt;Nextcloud&lt;/th&gt;
&lt;th&gt;Note&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Files &amp;amp; sync&lt;/td&gt;
&lt;td&gt;yes, with versions and trash&lt;/td&gt;
&lt;td&gt;The desktop client keeps selected folders available offline.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calendar &amp;amp; contacts&lt;/td&gt;
&lt;td&gt;yes (CalDAV/CardDAV)&lt;/td&gt;
&lt;td&gt;Works in Thunderbird, Apple Calendar, Android and iOS without the web login.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Chat &amp;amp; video calls&lt;/td&gt;
&lt;td&gt;yes (Talk)&lt;/td&gt;
&lt;td&gt;A good base for internal calls; it does not replace Teams telephony.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Editing documents&lt;/td&gt;
&lt;td&gt;via Collabora/OnlyOffice&lt;/td&gt;
&lt;td&gt;Solid for most documents, not feature-parity with Word.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mailbox&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;Nextcloud is not a mail server. A mailbox needs its own MX or another provider.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Phone system&lt;/td&gt;
&lt;td&gt;no&lt;/td&gt;
&lt;td&gt;Anyone using Teams Phone needs a separate solution.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;So Nextcloud covers a large part of the office day — files, calendar, contacts, chat, documents — but it is not an Exchange replacement and not a phone system. Claiming otherwise builds the next disappointment. Separating it cleanly wins exactly what this is about: a piece of infrastructure you can see yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  "Everything under control" does not mean "it never breaks"
&lt;/h2&gt;

&lt;p&gt;Self-hosting is not automatically more reliable. A single server is a single point of failure, a forgotten update is a security risk, and a backup with an untested restore is data loss on a delay. The difference is not the probability of failure, it is the ability to act:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logs:&lt;/strong&gt; you can see which process did what and when, instead of waiting for a status message.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Update timing:&lt;/strong&gt; you decide when to update — and you can plan a rollback instead of suffering one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data:&lt;/strong&gt; files and calendars live where you can back them up and restore them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Communication:&lt;/strong&gt; you can explain what is going on, because you can trace the cause yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Control is not a guarantee, it is the ability to act when it matters. Which is exactly what most Microsoft customers could not do on Thursday: they could wait and refresh the status page.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would check in one hour
&lt;/h2&gt;

&lt;p&gt;Whether you run Microsoft 365, Nextcloud or both, these seven points are cheap and pay off during the next outage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A contact list outside the system:&lt;/strong&gt; key customers, vendors, mobile numbers. Printed, or in a notes tool that does not hang off the same login.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A second communication path:&lt;/strong&gt; a Signal group, a phone chain or a chat outside the tenant — decided in advance and circulated, not on the day of the outage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files available offline:&lt;/strong&gt; keep the five documents a workday cannot run without on the device (Nextcloud client or "always keep on this device").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One person who says "it's Microsoft":&lt;/strong&gt; check the status page instead of reinstalling Outlook. Publicly reachable: &lt;a href="https://status.cloud.microsoft" rel="noopener noreferrer"&gt;status.cloud.microsoft&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check scheduled jobs:&lt;/strong&gt; scan-to-mail, Universal Print, automatic invoices, forms, voicemail-to-mail. These fail quietly and surface only when a customer asks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test restores, don't just own backups:&lt;/strong&gt; restore one file and one mailbox per quarter — with a stopwatch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your own reachability:&lt;/strong&gt; MX, SPF, DMARC and the externally visible endpoints. The &lt;a href="https://daniele-michelin.com/en/tools/mail-dns-checker/" rel="noopener noreferrer"&gt;mail DNS check&lt;/a&gt; and the &lt;a href="https://daniele-michelin.com/en/tools/nextcloud-check/" rel="noopener noreferrer"&gt;Nextcloud check&lt;/a&gt; run without a login and show what the outside world sees.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  And Thursday's mail?
&lt;/h2&gt;

&lt;p&gt;Usually delayed, not lost. A sending mail server must retry for at least four to five days before giving up, per RFC 5321. If you are waiting for a signed contract or a bid, call instead of waiting. And if you wrote messages during the outage: check the outbox, do not blindly resend.&lt;/p&gt;

&lt;p&gt;Then comes the unpleasant part that follows every large outage: phishing with the story "your mailbox has been restored, please sign in again". No provider asks for a fresh login via an email link during or after an outage. The &lt;a href="https://daniele-michelin.com/en/blog/scam-radar-current-phishing-warnings/" rel="noopener noreferrer"&gt;scam radar&lt;/a&gt; collects exactly these patterns.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bottom line
&lt;/h2&gt;

&lt;p&gt;Thursday's outage was not proof that cloud does not work. It was proof of how much now hangs off a single identity — and how little any one company can do when that identity disappears. If you know the dependency, you can shape it: a clear view of what is truly critical, a second path for communication, and a remainder you control yourself.&lt;/p&gt;

&lt;p&gt;For me that means: files, calendars and contacts in my own Nextcloud, with the versions and their end-of-support dates in sight — and something I can check from the outside. Everything under control is not a state, it is a practice.&lt;/p&gt;

&lt;p&gt;The dates when the versions in use leave support are in the &lt;a href="https://daniele-michelin.com/en/versions/calendar/" rel="noopener noreferrer"&gt;end-of-life calendar&lt;/a&gt;, including a subscribable calendar file. The next outage is coming; the only question is whether it catches you by surprise.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/microsoft-365-outage-dependency/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>nextcloud</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
    <item>
      <title>The day after the Microsoft 365 outage: what we learned and what you can do now</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sat, 14 Nov 2026 13:00:05 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/the-day-after-the-microsoft-365-outage-what-we-learned-and-what-you-can-do-now-2gha</link>
      <guid>https://dev.to/mikweb2025design/the-day-after-the-microsoft-365-outage-what-we-learned-and-what-you-can-do-now-2gha</guid>
      <description>&lt;p&gt;On Thursday 12 November 2026, Exchange Online, Teams, SharePoint Online, Microsoft 365 Copilot and Defender XDR failed or ran degraded worldwide. This post sorts it out: what is documented, what is still open, what we learn from it, and what you can do today without rebuilding your whole infrastructure.&lt;/p&gt;

&lt;p&gt;The question of how dependent you want to be on a single vendor is covered in &lt;a href="https://daniele-michelin.com/en/blog/microsoft-365-outage-dependency/" rel="noopener noreferrer"&gt;Microsoft 365 outage and dependency&lt;/a&gt;. This post is about the analysis and the concrete steps afterwards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;State of the information:&lt;/strong&gt; Microsoft has not published a final post-incident review yet. Everything below rests on Microsoft's status updates as summarised by &lt;a href="https://www.bleepingcomputer.com/news/microsoft/massive-microsoft-365-outage-disrupts-outlook-teams-copilot-worldwide/" rel="noopener noreferrer"&gt;BleepingComputer&lt;/a&gt; and on a technical &lt;a href="https://controlplane.com/blog/post/microsoft-365-outage-november-2026-cause" rel="noopener noreferrer"&gt;analysis by Control Plane&lt;/a&gt;. The analysis is an interpretation, not a confirmation by Microsoft.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is confirmed
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Start:&lt;/strong&gt; the main incident (admin center ID &lt;code&gt;MO1550821&lt;/code&gt;) began on 12 November at 18:26 UTC with Exchange Online problems in the Americas and spread to other regions and dependent services. A shorter Teams incident (&lt;code&gt;TM1550488&lt;/code&gt;) ran the same day between 14:45 and 15:53 UTC; Microsoft has not said whether the two are related.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cause according to Microsoft:&lt;/strong&gt; first elevated load, then a number of servers becoming unexpectedly unavailable and straining the rest, later a core process on affected servers being overwhelmed. Traffic did not rise. What triggered the first failures has not been published.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No attack:&lt;/strong&gt; Microsoft sees no sign of malicious activity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mitigation:&lt;/strong&gt; deployments paused, traffic redistributed, servers restarted, the health-check method switched, a few recent configuration changes reviewed for rollback, and the mail delivery timeout window extended to 48 hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery:&lt;/strong&gt; on 13 November Microsoft reported improvement in North America and much of Europe, and significantly shorter mail queues by the afternoon. Reports from 14 November say services are back; an official end and root-cause report are still outstanding.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the analysis suggests (not confirmed)
&lt;/h2&gt;

&lt;p&gt;The description fits a known pattern, the cascading failure: health checks take sick servers out of rotation, their load lands on the remaining ones, and those fail the checks too. The load per server keeps rising although traffic stays flat. Servers that were returned to service are said to have failed again under load. That explains why recovery took hours and not minutes. It does not explain what caused the first failure; that is the question for the final report.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we learn from it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;One vendor, one big blast radius.&lt;/strong&gt; Mail, chat, files, calendar and Defender XDR ran on one strand. If you detect incidents in Defender and discuss them in Teams, you were blind and mute at the same time during the first hours.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alerts by mail through the same vendor are not alerts.&lt;/strong&gt; When the vendor fails, the warning does not arrive either.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The status messages changed.&lt;/strong&gt; From “elevated load” to “servers unavailable” to “core process overwhelmed”. That is normal while debugging, but it means: do not pass on first assessments as the final word.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery has a long tail.&lt;/strong&gt; Even after “it works again”, queues drain and mail arrives late.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rumours arrive instantly.&lt;/strong&gt; “Cyberattack” shows up in every big outage. Wait for the vendor's statement and tell your team only what is documented.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Ten steps for today
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Find out what was lost.&lt;/strong&gt; Check the mail queue and the bounce messages of your mail gateway for messages from 12 and 13 November that did not arrive. Ask important senders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Define a communication path outside Microsoft.&lt;/strong&gt; A phone tree, a messenger or an emergency page on different infrastructure. Write down who triggers it and who announces it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set up two emergency admin accounts&lt;/strong&gt; (cloud accounts, separate from the normal ones, strongly protected and monitored). Microsoft describes this as &lt;a href="https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/security-emergency-access" rel="noopener noreferrer"&gt;emergency access accounts&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route alerts over a second path.&lt;/strong&gt; Monitoring that emails you also needs SMS, push or another mail provider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor from outside.&lt;/strong&gt; A small test that regularly sends a mail to your mailbox and checks that it arrives shows you an outage before your colleagues do. Also subscribe to the service health feed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know your MX and DNS setup.&lt;/strong&gt; What are the TTLs, who manages the zone, what happens to inbound mail when your mailbox provider is silent for 48 hours? The &lt;a href="https://daniele-michelin.com/en/tools/mail-dns-checker/" rel="noopener noreferrer"&gt;mail DNS checker&lt;/a&gt; shows MX, SPF, DKIM and DMARC of a domain in one step. Do not change MX records in a panic in the middle of an outage; plan a solution beforehand.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Map what depends on mail.&lt;/strong&gt; Password resets, two-factor codes by mail, invoice sending, ticket system, forms. Write the list down and decide what needs a second path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rehearse the emergency for 15 minutes.&lt;/strong&gt; Play it through: mail and Teams are gone, how do you reach customers and the team? Fix gaps immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Document the damage and read your contract.&lt;/strong&gt; Duration, affected processes, costs. Check whether service-level credits in your agreement apply and by when you must claim them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decide deliberately what should run separately.&lt;/strong&gt; Not everything has to leave Microsoft. But for a few critical things (emergency communication, alerting, credential recovery) a second provider or a service of your own is worth it, for example a chat room on a self-hosted Nextcloud Talk. That is an addition, not a replacement, and it needs its own care.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What to avoid
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Do not loosen security settings to “get back to work faster”.&lt;/li&gt;
&lt;li&gt;Do not make bulk changes to DNS or accounts in the middle of an outage.&lt;/li&gt;
&lt;li&gt;Do not pass guesses about the cause on to customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once Microsoft publishes its final report I will update this post. Until then: the outage was a test you did not plan. Use the result.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/microsoft-365-outage-lessons-day-after/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>UnrealIRCd CVE-2026-114713: how to check your server and apply the hot-patch</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sat, 14 Nov 2026 12:59:04 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/unrealircd-cve-2026-114713-how-to-check-your-server-and-apply-the-hot-patch-ol5</link>
      <guid>https://dev.to/mikweb2025design/unrealircd-cve-2026-114713-how-to-check-your-server-and-apply-the-hot-patch-ol5</guid>
      <description>&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; if you run UnrealIRCd 6.0.0 to 6.2.7 (or version 5), your server is affected. Version 6.2.7.1, released on 7 November 2026, fixes it, and a hot-patch does the job without a restart. The vendor reports attack attempts, and the US agency CISA added &lt;a href="https://daniele-michelin.com/en/exploited-vulnerabilities/cve-2026-114713/" rel="noopener noreferrer"&gt;CVE-2026-114713&lt;/a&gt; to its catalog of exploited vulnerabilities on 13 November (deadline for federal agencies: 16 November).&lt;/p&gt;

&lt;h2&gt;
  
  
  What is the problem?
&lt;/h2&gt;

&lt;p&gt;The implementation of the IRCv3 &lt;code&gt;label&lt;/code&gt; tag does not escape characters properly when it echoes the tag into replies. An ordinary user can therefore inject newlines and other characters into the traffic between linked servers. The injected commands run with the authority of the server, for example &lt;code&gt;KILL&lt;/code&gt; or &lt;code&gt;GLINE&lt;/code&gt;. The maintainer found the flaw himself in an internal audit done with the help of AI.&lt;/p&gt;

&lt;p&gt;The CVE description mentions networks with two or more linked servers. The vendor advisory does not say so explicitly. Do not rely on it and patch a single server as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Are you affected?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;UnrealIRCd 6.0.0 to 6.2.7: yes.&lt;/li&gt;
&lt;li&gt;UnrealIRCd 5: also affected, a workaround is below.&lt;/li&gt;
&lt;li&gt;Check distribution packages: according to the Red Hat entry, EPEL 9 currently ships &lt;code&gt;unrealircd-6.1.10-1.el9&lt;/code&gt;, which is affected.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Apply the hot-patch
&lt;/h2&gt;

&lt;p&gt;On &lt;strong&gt;every&lt;/strong&gt; server of the network, as the user that runs UnrealIRCd (works for 6.0.0 to 6.2.7):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./unrealircd hot-patch bundle-20261107
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Success shows in the last line: “Patch installed and server rehashed correctly. All should be good now!”&lt;/p&gt;

&lt;h2&gt;
  
  
  Check that the patch is active
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./unrealircd module-status &lt;span class="o"&gt;|&lt;/span&gt; grep labeled-response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;labeled-response 5.0-hot-patch-bundle-20261107&lt;/code&gt;: the hot-patch is installed.&lt;/li&gt;
&lt;li&gt;Version 6.2.7.1: the fixed release is running.&lt;/li&gt;
&lt;li&gt;Only &lt;code&gt;5.0&lt;/code&gt; without a patch bundle: the patch is still missing.&lt;/li&gt;
&lt;li&gt;No output: the command needs UnrealIRCd 6.0.2 or newer. As an IRCOp you can also use &lt;code&gt;MODULE -all&lt;/code&gt; in chat (for another server &lt;code&gt;MODULE -all server.name&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  If the hot-patch does not work
&lt;/h2&gt;

&lt;p&gt;On Linux and other Unix systems, upgrade and restart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./unrealircd upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On Windows, download 6.2.7.1 and restart.&lt;/p&gt;

&lt;h2&gt;
  
  
  A stopgap for now
&lt;/h2&gt;

&lt;p&gt;As an IRCOp you can use a spamfilter. According to the advisory it protects against the critical issue only if &lt;strong&gt;all&lt;/strong&gt; servers run UnrealIRCd 6.0.4 or newer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SPAMFILTER add -regex T block - Invalid_label ^label=(?![^\r\n;\x20]*\z)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On UnrealIRCd 5, add &lt;code&gt;blacklist-module "labeled-response";&lt;/code&gt; to the configuration of all servers and restart (a rehash is not enough).&lt;/p&gt;

&lt;h2&gt;
  
  
  Afterwards
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Write down which server runs which version and patch level, and since when.&lt;/li&gt;
&lt;li&gt;Check the logs: unexpected &lt;code&gt;KILL&lt;/code&gt; or &lt;code&gt;GLINE&lt;/code&gt; entries can point to abuse (this is my recommendation, not part of the advisory).&lt;/li&gt;
&lt;li&gt;The patch fixes nine issues, including IP leaks and several crashes, so the update is worthwhile even without an attack.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This post summarises the &lt;a href="https://seclists.org/oss-sec/2026/q4/576" rel="noopener noreferrer"&gt;advisory by the UnrealIRCd maintainers&lt;/a&gt; and the Red Hat entry; I did not reproduce the flaw myself. Other entries CISA added the same day are in the &lt;a href="https://daniele-michelin.com/en/exploited-vulnerabilities/" rel="noopener noreferrer"&gt;overview of exploited vulnerabilities&lt;/a&gt;, for example &lt;a href="https://daniele-michelin.com/en/exploited-vulnerabilities/cve-2026-123039/" rel="noopener noreferrer"&gt;CVE-2026-123039 (Check Point Gaia)&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/unrealircd-cve-2026-114713-check-hot-patch/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>devops</category>
    </item>
    <item>
      <title>SMTP 421 4.7.0: rate limited – causes &amp; fix</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sat, 14 Nov 2026 07:34:13 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/smtp-421-470-rate-limited-causes-fix-2f7n</link>
      <guid>https://dev.to/mikweb2025design/smtp-421-470-rate-limited-causes-fix-2f7n</guid>
      <description>&lt;p&gt;The receiving server temporarily refuses more mail from your IP because volume, reputation or authentication look suspicious – messages stay in the queue and are retried later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common causes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A sudden spike in volume, e.g. a newsletter from a new IP without reputation.&lt;/li&gt;
&lt;li&gt;Missing or mismatched PTR (reverse DNS) record; Gmail is especially strict for IPv6.&lt;/li&gt;
&lt;li&gt;Spam complaints, or a compromised mailbox sending spam.&lt;/li&gt;
&lt;li&gt;Missing SPF/DKIM authentication makes the rating worse.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to check it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Check the queue size&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mailq &lt;span class="o"&gt;|&lt;/span&gt; tail -n 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Find the senders with the most mails in the queue&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mailq &lt;span class="o"&gt;|&lt;/span&gt; awk &lt;span class="s1"&gt;'/^[0-9A-F]/ {print $7}'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; sort &lt;span class="o"&gt;|&lt;/span&gt; uniq -c &lt;span class="o"&gt;|&lt;/span&gt; sort -rn &lt;span class="o"&gt;|&lt;/span&gt; head
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Check the PTR of the outgoing IP&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig -x 203.0.113.10 +short
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What actually helps
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Let Postfix handle retries – do not run &lt;code&gt;postqueue -f&lt;/code&gt; over and over, it makes throttling worse.&lt;/li&gt;
&lt;li&gt;Set a PTR that matches the HELO name and make that name resolve back to the IP (forward-confirmed rDNS).&lt;/li&gt;
&lt;li&gt;Lock compromised accounts, reset passwords and remove spam with &lt;code&gt;postsuper -d&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Are messages lost on a 421?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No. 4xx is a temporary error. Postfix keeps the mails in the queue and retries until &lt;code&gt;maximal_queue_lifetime&lt;/code&gt; (5 days by default).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does it only happen over IPv6?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gmail requires a valid PTR and authentication for IPv6 senders. Without a PTR, either add one or make Postfix prefer IPv4 with &lt;code&gt;smtp_address_preference = ipv4&lt;/code&gt;.&lt;/p&gt;




&lt;p&gt;Full page with every command and the German/Italian version: &lt;a href="https://daniele-michelin.com/en/errors/smtp-421-4-7-0/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/errors/smtp-421-4-7-0/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;First published at &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. The error lexicon covers HTTP, DNS, TLS, mail, database, PHP, nginx, systemd and Nextcloud, in German, English and Italian.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>email</category>
      <category>devops</category>
      <category>sysadmin</category>
      <category>security</category>
    </item>
    <item>
      <title>Incident note: DNS SERVFAIL: find the cause (DNSSEC &amp; more)</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Sat, 14 Nov 2026 07:33:13 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/incident-note-dns-servfail-find-the-cause-dnssec-more-1h47</link>
      <guid>https://dev.to/mikweb2025design/incident-note-dns-servfail-find-the-cause-dnssec-more-1h47</guid>
      <description>&lt;h2&gt;
  
  
  Read the signal
&lt;/h2&gt;

&lt;p&gt;Start with the exact wording of the error and its timestamp in the log. Then narrow down the cause before changing anything.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;;; -&amp;gt;&amp;gt;HEADER&amp;lt;&amp;lt;- opcode: QUERY, status: SERVFAIL, id: 41234
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Narrow down possible causes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The DS record at the registry no longer matches the zone's DNSKEY after a provider change.&lt;/li&gt;
&lt;li&gt;Expired RRSIG signatures because automatic re-signing stopped.&lt;/li&gt;
&lt;li&gt;Lame delegation: listed nameservers are not authoritative for the zone or unreachable.&lt;/li&gt;
&lt;li&gt;Nameservers answer incorrectly or block TCP/EDNS (large responses).&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Check before changing anything
&lt;/h2&gt;

&lt;p&gt;1.&lt;/p&gt;

&lt;p&gt;Query with DNSSEC data&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com A +dnssec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;2.&lt;/p&gt;

&lt;p&gt;Same query with checking disabled – if it works, DNSSEC is the problem&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig example.com A +cd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;3.&lt;/p&gt;

&lt;p&gt;Query the DS record at the parent zone&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short DS example.com @a.gtld-servers.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;4.&lt;/p&gt;

&lt;p&gt;Query DNSKEY directly at the authoritative server&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dig +short DNSKEY example.com @ns1.example-dns.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Fix and test again
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Delete the wrong DS record at the registrar or replace it with the matching one; mind the DS TTL.&lt;/li&gt;
&lt;li&gt;When moving a DNSSEC-signed domain, remove the DS first, wait out the TTL, then move and re-sign.&lt;/li&gt;
&lt;li&gt;Check and fix automatic re-signing at the DNS provider or in BIND/PowerDNS.&lt;/li&gt;
&lt;li&gt;Align NS records at the registry and in the zone.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Then repeat the original action and compare the result with the initial error.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep a note for the next ticket
&lt;/h2&gt;

&lt;p&gt;Record the exact error, the check result, the change and the retest. That gives the team a useful starting point next time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does it work for some users but not others?
&lt;/h2&gt;

&lt;p&gt;Only validating resolvers (e.g. 1.1.1.1, 8.8.8.8, many ISPs) return SERVFAIL. Non-validating resolvers still hand out the answer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://daniele-michelin.com/en/errors/dns-servfail-dnssec/" rel="noopener noreferrer"&gt;Full error guide: DNS SERVFAIL: find the cause and fix it&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/incident-note-dns-servfail/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>dns</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>While you were gone: n8n writes the holiday handover and draws a comic about it</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Fri, 13 Nov 2026 21:02:52 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/while-you-were-gone-n8n-writes-the-holiday-handover-and-draws-a-comic-about-it-3af0</link>
      <guid>https://dev.to/mikweb2025design/while-you-were-gone-n8n-writes-the-holiday-handover-and-draws-a-comic-about-it-3af0</guid>
      <description>&lt;p&gt;Try it first: &lt;a href="https://daniele-michelin.com/en/vacation-handover/" rel="noopener noreferrer"&gt;While you were gone&lt;/a&gt;. Pick a person, the length and a comic style, and a few seconds later the handover sits in Nextcloud and the comic on the page.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A handover note:&lt;/strong&gt; as Markdown in the Outbox folder of a demo Nextcloud: who covers what, which deadlines fall into the absence window, what to do if which risk strikes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Deck card:&lt;/strong&gt; with the summary, so it shows up on the board the team looks at anyway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A Talk message:&lt;/strong&gt; short, with the essentials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An out-of-office reply:&lt;/strong&gt; with the cover and the return date, ready to copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A five-panel comic:&lt;/strong&gt; leaving, the mail piles up, something catches fire, the cover saves the day, coming back. Four styles, from detective noir to picture book.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook:&lt;/strong&gt; takes the person, the length (3, 7 or 14 days) and the style from three lists. That is all the page sends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the demo space:&lt;/strong&gt; a Code node decides where the workflow may read and write: one calendar, one Deck board, one folder, one Talk room. Every URL is checked against it and the run stops otherwise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Six reads in parallel:&lt;/strong&gt; CalDAV REPORT with &lt;code&gt;expand&lt;/code&gt; for the events in the absence window, the Deck API for the cards, WebDAV GET for the inbox summary and three project notes, PROPFIND for the Outbox folder and the Talk API for the chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analyse the absence:&lt;/strong&gt; a Code node does the maths deterministically: what falls into the window, what is overdue, who covers it, which risks exist. In the sample run that was 5 meetings, 10 open mails and 6 handovers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; gpt-oss-120b at IONOS only phrases things: the summary, the out-of-office reply and the five comic panels, in the visitor's language and the chosen style. If a field is missing or the model does not answer, the workflow fills in a template built from the same facts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write:&lt;/strong&gt; WebDAV PUT for the note, the Deck API for the card, the Talk API for the message. Then the workflow cleans up its own older entries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why the AI does not do the maths
&lt;/h2&gt;

&lt;p&gt;Who covers whom is not up to a language model. The Code node works it out from calendar, cards and mail, traceably and without hallucinations. The AI only gets the result and may tell it nicely.&lt;/p&gt;

&lt;h2&gt;
  
  
  The comic and the technique
&lt;/h2&gt;

&lt;p&gt;The comic is drawn in the browser: one description made of simple shapes that is output once as SVG and once straight onto a canvas. That is why the same comic can be downloaded as SVG and as PNG, and the share preview is made from the same drawing. The fonts (Bangers and Comic Neue, both SIL OFL) are hosted on my server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Everything runs on demo data of the invented Brightside Studio. A file stands in for the IMAP node here so nobody sees real mail.&lt;/li&gt;
&lt;li&gt;The cover rules are simple: one fixed buddy per person, finance topics go to Sam. The workflow knows nothing about leave planning, shift models or time zones.&lt;/li&gt;
&lt;li&gt;The AI writes the comic in the language of the page. It can be wrong, which is why all facts are shown separately next to it.&lt;/li&gt;
&lt;li&gt;The out-of-office reply is only displayed. In real use you would set it with &lt;code&gt;occ dav:absence:set&lt;/code&gt; or in the settings; the workflow deliberately does not.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;Nothing from you is sent to Nextcloud. The result stays on the server for 14 days so that the link works, and the page is set to noindex. For the hourly limit there is a salted hash of your IP address for one hour at most.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build it yourself
&lt;/h2&gt;

&lt;p&gt;The workflow is available as &lt;a href="https://daniele-michelin.com/assets/n8n/vacation-handover.json" rel="noopener noreferrer"&gt;JSON&lt;/a&gt;, as a template only: you have to enter your Nextcloud address, an app password, your Deck board, calendar and Talk room, and swap the inbox file for your IMAP node. More workflows to click are on the &lt;a href="https://daniele-michelin.com/en/n8n/" rel="noopener noreferrer"&gt;n8n overview&lt;/a&gt;, for example the &lt;a href="https://daniele-michelin.com/en/office-morning/" rel="noopener noreferrer"&gt;office morning&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now it is your turn: which cover rule is missing in your team? Tell us in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/n8n-vacation-handover/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>nextcloud</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>The Inbox Beast: an n8n workflow sorts the inbox and feeds a beast</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Fri, 13 Nov 2026 21:01:52 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/the-inbox-beast-an-n8n-workflow-sorts-the-inbox-and-feeds-a-beast-1l7b</link>
      <guid>https://dev.to/mikweb2025design/the-inbox-beast-an-n8n-workflow-sorts-the-inbox-and-feeds-a-beast-1l7b</guid>
      <description>&lt;p&gt;Try it first: &lt;a href="https://daniele-michelin.com/en/inbox-beast/" rel="noopener noreferrer"&gt;the Inbox Beast&lt;/a&gt;. One click, a few seconds, and the beast is there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A beast in five stages:&lt;/strong&gt; from egg to kraken, depending on its hunger. It has a mood and comments on the inbox.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three columns:&lt;/strong&gt; Do (you must answer yourself), Delegate (someone on the team, by name) and Ignore (newsletters, sales pitches, anything already answered).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A report:&lt;/strong&gt; three sentences about the state of the mail and one concrete tip.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real entries in Nextcloud:&lt;/strong&gt; up to five cards on the demo Deck board, a message in the Talk room and a Markdown file in the Outbox folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two dials:&lt;/strong&gt; “Answer the most important mails first” and “How long since you looked at the inbox?”. They simulate what would happen without changing anything.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook:&lt;/strong&gt; receives a colour and two numbers. The page sends nothing else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fix the demo space:&lt;/strong&gt; a Code node defines which file, which Deck board, which Talk room and which folder may be used. Every URL of the following nodes is checked against it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three requests in parallel:&lt;/strong&gt; WebDAV fetches &lt;code&gt;Inbox/inbox.json&lt;/code&gt;, the Deck API the board, a PROPFIND lists &lt;code&gt;Outbox/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rules first:&lt;/strong&gt; fixed rules sort every mail and give it a priority. The workflow therefore still works when the AI is down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI:&lt;/strong&gt; gpt-oss-120b at IONOS corrects the sorting and writes the report, the quote and the tip. Every answer is validated: unknown categories, invented people and answers about mails that are already answered are dropped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compute hunger:&lt;/strong&gt; a Code node, see below.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean up, then write:&lt;/strong&gt; first the workflow deletes its own earlier cards (they carry a marker in the description) and the oldest reports, then it creates the new ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Result:&lt;/strong&gt; posted to a PHP script with the real HTTP status codes of the writes. The page only says “created” when Nextcloud really answered 2xx.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the hunger is calculated
&lt;/h2&gt;

&lt;p&gt;Every unanswered mail counts with a weight: 8 for do, 5 for delegate, 1 for ignore. The weight grows with age by up to a factor of 4 (after seven days), so each mail counts &lt;code&gt;weight × (1 + age in h / 48)&lt;/code&gt;. The sum &lt;code&gt;S&lt;/code&gt; is turned into a value between 0 and 100 percent: &lt;code&gt;hunger = 100 × (1 − e^(−S/150))&lt;/code&gt;. The stages start at 10, 28, 48 and 70 percent.&lt;/p&gt;

&lt;p&gt;The demo inbox holds 14 unanswered mails and the oldest client mail is 120 hours old. That gives 69 percent, a “Big beast”. Answer the three most important mails and hunger drops to 56 percent; with six mails it is 38 percent (stage Beast). Leave everything for three more days and it is 84 percent: kraken.&lt;/p&gt;

&lt;h2&gt;
  
  
  Safety
&lt;/h2&gt;

&lt;p&gt;The workflow runs in a demo space of a real Nextcloud account: its own folder, its own Deck board, its own Talk room, invented data of the fictional Brightside Studio. It reads a single file and writes only to &lt;code&gt;Outbox/&lt;/code&gt;, to one Deck stack and to one Talk room. The page limits the runs (20 seconds between runs, three per hour and visitor, 100 per day), and the workflow only deletes what it created itself. One limitation: the Talk room keeps its messages, the workflow does not delete them.&lt;/p&gt;

&lt;h2&gt;
  
  
  For your own inbox
&lt;/h2&gt;

&lt;p&gt;Replace the node “Read: inbox.json” with IMAP or Gmail and map the fields &lt;code&gt;id, from_name, from_email, subject, body, age_hours, answered&lt;/code&gt;. The Code node “Read the inbox” needs only those. The rules are keywords for an invented studio: for real mail you have to adapt them, and the AI sorting is a suggestion, not a verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build it yourself
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://daniele-michelin.com/assets/n8n/inbox-beast.json" rel="noopener noreferrer"&gt;The workflow as JSON&lt;/a&gt; contains only placeholders for address, user, Talk room and credentials. You need a Nextcloud with Deck and Talk, an app password as a Basic-Auth credential in n8n and an OpenAI-compatible credential for the AI (the workflow also runs without). Enter board id, stack id and room token in the first Code node. You cannot import the file as it is.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/n8n-nextcloud-inbox-beast/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>nextcloud</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>AlmaLinux: which versions still get updates</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Fri, 13 Nov 2026 07:36:20 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/almalinux-which-versions-still-get-updates-500j</link>
      <guid>https://dev.to/mikweb2025design/almalinux-which-versions-still-get-updates-500j</guid>
      <description>&lt;p&gt;Which versions still get updates, which only security fixes — and which none. Updated daily.&lt;/p&gt;

&lt;p&gt;Recommended: AlmaLinux 10 (latest 10.2) — the newest version with full support.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Version&lt;/th&gt;
&lt;th&gt;Latest&lt;/th&gt;
&lt;th&gt;Released&lt;/th&gt;
&lt;th&gt;Supported until&lt;/th&gt;
&lt;th&gt;Security fixes until&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;td&gt;10.2&lt;/td&gt;
&lt;td&gt;27 May 2025&lt;/td&gt;
&lt;td&gt;31 May 2030&lt;/td&gt;
&lt;td&gt;31 May 2035&lt;/td&gt;
&lt;td&gt;supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9&lt;/td&gt;
&lt;td&gt;9.8&lt;/td&gt;
&lt;td&gt;26 May 2022&lt;/td&gt;
&lt;td&gt;31 May 2027&lt;/td&gt;
&lt;td&gt;31 May 2032&lt;/td&gt;
&lt;td&gt;supported&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;8.10&lt;/td&gt;
&lt;td&gt;30 March 2021&lt;/td&gt;
&lt;td&gt;31 May 2024&lt;/td&gt;
&lt;td&gt;31 May 2029&lt;/td&gt;
&lt;td&gt;security only&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Dates checked every day on the page: &lt;a href="https://daniele-michelin.com/en/versions/almalinux/" rel="noopener noreferrer"&gt;https://daniele-michelin.com/en/versions/almalinux/&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Full table, kept up to date every day: &lt;a href="https://daniele-michelin.com/en/versions/almalinux/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/versions/almalinux/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;First published at &lt;a href="https://daniele-michelin.com/en/versions/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. End-of-support dates for 25 products, plus an error lexicon of 149 messages, in German, English and Italian.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>almalinux</category>
      <category>devops</category>
      <category>linux</category>
      <category>sysadmin</category>
    </item>
    <item>
      <title>AI in support: what it does well – and where a human still decides</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Fri, 13 Nov 2026 07:36:19 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/ai-in-support-what-it-does-well-and-where-a-human-still-decides-kn9</link>
      <guid>https://dev.to/mikweb2025design/ai-in-support-what-it-does-well-and-where-a-human-still-decides-kn9</guid>
      <description>&lt;p&gt;"Can't the AI just do that?" I hear this question regularly now. My answer: a large part of the groundwork – yes. The decision at the end – no.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI really helps in support
&lt;/h2&gt;

&lt;p&gt;I have worked in 2nd/3rd-level support for years and build my own AI tools on the side. In daily work, three tasks have turned out to be especially useful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Summarising long logs.&lt;/strong&gt; A ticket arrives with several thousand lines of log. A language model can say within seconds which errors appear first and when, which repeat and which components are involved. It doesn't replace reading the log, but it shows where to look first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Finding similar past cases.&lt;/strong&gt; Many issues have happened before, just described in different words. A semantic search across knowledge articles and resolved tickets – for example with RAG, a search that retrieves matching documents and gives them to the model as its basis – finds them even when the terms don't match.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Preparing a first draft of the reply.&lt;/strong&gt; Structure, polite wording, the steps in a sensible order. I check the content, but I don't start from a blank page.&lt;/p&gt;

&lt;p&gt;Each of these tasks saves only a few minutes. With many tickets per week, that adds up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where AI reaches its limits
&lt;/h2&gt;

&lt;p&gt;Language models sound convincing even when they are wrong. A command with an option that doesn't exist, a configuration key from another version, a plausible but invented cause – all of this happens.&lt;/p&gt;

&lt;p&gt;More importantly: AI doesn't take responsibility. Whether a workaround is enough or the cause lies deeper, whether a change to a production system is acceptable right now, whether it's better to call a customer than to write – that is still decided by a human who knows the system and the situation.&lt;/p&gt;

&lt;p&gt;A model only sees what you give it. It doesn't know the context outside the ticket – last week's maintenance, a known quirk of a setup, a customer's mood after the third contact.&lt;/p&gt;

&lt;h2&gt;
  
  
  My rules for AI in support
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Sources, not claims.&lt;/strong&gt; Answers from a knowledge base should state what they are based on. Then you can check within seconds whether they are right.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Commands are reviewed before they run.&lt;/strong&gt; No model suggestion goes onto a customer system unread.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data stays where it belongs.&lt;/strong&gt; Logs and tickets often contain personal data. What an external service may see is a question of data protection and company policy, not convenience. Locally hosted models are one option here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A human closes the ticket.&lt;/strong&gt; The AI prepares; a human is responsible for the decision and the reply to the customer.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A fast colleague for the groundwork
&lt;/h2&gt;

&lt;p&gt;For me, AI in support is a very fast colleague who reads logs, gathers notes and puts a draft on the table. Tireless and often surprisingly good. But not the one who closes the ticket.&lt;/p&gt;

&lt;p&gt;Root cause analysis shows this clearly: a model can spot anomalies and suggest hypotheses. Whether a hypothesis is right only becomes clear when someone tests it on the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Pick one recurring piece of groundwork, for example log summaries.&lt;/li&gt;
&lt;li&gt;Clarify which data may be processed, and where.&lt;/li&gt;
&lt;li&gt;Deliberately double-check the results for a while.&lt;/li&gt;
&lt;li&gt;Only then hand over further tasks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That way trust in the tool grows where it is justified – along with a clear picture of where it isn't.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/ai-in-support/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Power planner: n8n finds cheaper and greener hours</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Thu, 12 Nov 2026 16:18:35 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/power-planner-n8n-finds-cheaper-and-greener-hours-3aj6</link>
      <guid>https://dev.to/mikweb2025design/power-planner-n8n-finds-cheaper-and-greener-hours-3aj6</guid>
      <description>&lt;p&gt;&lt;a href="https://daniele-michelin.com/en/power-planner/" rel="noopener noreferrer"&gt;&lt;strong&gt;Open the live power planner →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When should the washer, EV or heat pump run? This workflow turns day-ahead prices, carbon intensity and the German power mix into a visual daily plan.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the page shows
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An accessibly labelled 24-hour power clock.&lt;/li&gt;
&lt;li&gt;Price curve for today and tomorrow, negative hours and a live marker.&lt;/li&gt;
&lt;li&gt;Power mix and carbon, a 7×24 heatmap and best consecutive windows.&lt;/li&gt;
&lt;li&gt;Example calculations for five devices with an adjustable surcharge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How the workflow works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Start:&lt;/strong&gt; The Schedule Trigger runs hourly at minute 10. A webhook also provides an immediate manual test run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fetch:&lt;/strong&gt; Four HTTP nodes request aWATTar prices, renewable signal, carbon intensity and the public Energy-Charts power mix in parallel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Merge:&lt;/strong&gt; The Merge node waits for all four responses and passes them together to the Code node.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Normalise:&lt;/strong&gt; The code aggregates quarter-hours into hours, assigns every point to Europe/Berlin and handles daylight-saving changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan:&lt;/strong&gt; It finds the cheapest and lowest-carbon consecutive windows from one to four hours, builds the 7×24 heatmap and calculates five appliance examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Publish:&lt;/strong&gt; The last HTTP node sends validated JSON to &lt;code&gt;strom-ingest.php&lt;/code&gt; with a secret &lt;code&gt;X-Strom-Token&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store safely:&lt;/strong&gt; PHP validates the token, ranges and array sizes, atomically replaces the live file and creates the social poster. The page then reads only that static JSON file.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Use the workflow yourself
&lt;/h3&gt;

&lt;p&gt;Download the JSON, import it into n8n and replace the example URL and &lt;code&gt;YOUR-SECRET-TOKEN&lt;/code&gt; in “Publish planner”. The target server needs &lt;code&gt;strom-ingest.php&lt;/code&gt; and the same server-side token. Test once through the webhook before activating the hourly schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wholesale price is not your bill
&lt;/h2&gt;

&lt;p&gt;The value is the net DE-LU day-ahead wholesale price. Taxes, grid fees, levies, VAT and supplier margin are excluded. The slider adds 17 ct/kWh as an example only. No savings are guaranteed and this is not advice to switch supplier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data:&lt;/strong&gt; aWATTar; Energy-Charts.info / Fraunhofer ISE; Bundesnetzagentur | SMARD.de (CC BY 4.0). The site is not affiliated with these providers.&lt;/p&gt;

&lt;p&gt;Download the &lt;a href="https://daniele-michelin.com/assets/n8n/strom.json" rel="noopener noreferrer"&gt;n8n workflow as JSON&lt;/a&gt; or see more experiments in the &lt;a href="https://daniele-michelin.com/en/n8n/" rel="noopener noreferrer"&gt;n8n collection&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When does your washer run – and when should it run?&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/n8n-power-planner/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>The sky of the night you were born: an n8n workflow recalculates the stars</title>
      <dc:creator>Daniele Michelin</dc:creator>
      <pubDate>Thu, 12 Nov 2026 14:57:49 +0000</pubDate>
      <link>https://dev.to/mikweb2025design/the-sky-of-the-night-you-were-born-an-n8n-workflow-recalculates-the-stars-18j3</link>
      <guid>https://dev.to/mikweb2025design/the-sky-of-the-night-you-were-born-an-n8n-workflow-recalculates-the-stars-18j3</guid>
      <description>&lt;p&gt;Try it first: &lt;a href="https://daniele-michelin.com/en/birth-sky/" rel="noopener noreferrer"&gt;the sky of your birth night&lt;/a&gt;. Enter the date, the time is optional, and the city. A few seconds later the poster is there.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you get
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The sky poster:&lt;/strong&gt; the stars above your city that night, with the 88 constellations, drawn in a canvas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Moon phase and planets:&lt;/strong&gt; how the moon looked and which planets were in the sky.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Numbers:&lt;/strong&gt; the weekday and how many days have passed since.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Weather:&lt;/strong&gt; on the day you were born and on your last birthday.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three events “on this day”:&lt;/strong&gt; from Wikipedia.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A short portrait:&lt;/strong&gt; written by an AI from exactly these data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A preview image:&lt;/strong&gt; for sharing, with the sky as its motif.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The workflow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhook:&lt;/strong&gt; receives the date, the optional time and the city.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Geocoding:&lt;/strong&gt; Open-Meteo turns the city into coordinates and a time zone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Three requests in parallel:&lt;/strong&gt; the weather (archive for the birthday, forecast for the last one), “On this day” from Wikipedia and the star catalogue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code node with the astronomy:&lt;/strong&gt; sidereal time, azimuthal projection for the poster, planet positions from the JPL Keplerian elements and the moon from a reduced Meeus formula.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI for the portrait:&lt;/strong&gt; gpt-oss-120b at IONOS gets only the computed values.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Saving:&lt;/strong&gt; a PHP script receives the result. The page draws the poster in a canvas, the server renders the preview image with GD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How accurate is the maths?
&lt;/h2&gt;

&lt;p&gt;I tested the Code node against the astronomy-engine library. The largest error is 0.15 degrees, invisible on a poster. The star catalogue comes from Yale/Hipparcos via d3-celestial (BSD-3): 2061 stars down to magnitude 5.2 and the 88 constellations.&lt;/p&gt;

&lt;p&gt;Honest limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The planets are approximations from orbital elements, not precision ephemerides.&lt;/li&gt;
&lt;li&gt;There is no refraction, so no correction for the bending of light in the atmosphere near the horizon.&lt;/li&gt;
&lt;li&gt;Historical time zones and daylight saving depend on the ICU database. For old dates the local time can be off by an hour.&lt;/li&gt;
&lt;li&gt;Valid for the years 1900 to 2026.&lt;/li&gt;
&lt;li&gt;Without a time the workflow uses a fixed moment in the night. The sky turns 15 degrees in an hour, so the poster is then an approximation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Privacy
&lt;/h2&gt;

&lt;p&gt;The result is stored for 30 days and can be deleted earlier. No IP address is stored, and the result pages are set to noindex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build it yourself
&lt;/h2&gt;

&lt;p&gt;The workflow is ready as &lt;a href="https://daniele-michelin.com/assets/n8n/sky.json" rel="noopener noreferrer"&gt;JSON to import&lt;/a&gt;. Open-Meteo and Wikipedia need no key. For the AI any OpenAI-compatible API will do, and for saving you need a small endpoint of your own. More workflows to click and download are on the &lt;a href="https://daniele-michelin.com/en/n8n/" rel="noopener noreferrer"&gt;n8n overview&lt;/a&gt;, for example the &lt;a href="https://daniele-michelin.com/en/blog/n8n-website-dna-scan/" rel="noopener noreferrer"&gt;Website DNA scan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now it is your turn: what was the moon phase on the night you were born? Tell us in the comments.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://daniele-michelin.com/en/blog/n8n-birth-sky/" rel="noopener noreferrer"&gt;daniele-michelin.com&lt;/a&gt;. More guides, free checks (SPF, TLS, headers) and an error-message lexicon: &lt;a href="https://daniele-michelin.com/en/" rel="noopener noreferrer"&gt;daniele-michelin.com/en/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>n8n</category>
      <category>ai</category>
      <category>automation</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
