<?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: bubobo</title>
    <description>The latest articles on DEV Community by bubobo (@bubobo_d556d6).</description>
    <link>https://dev.to/bubobo_d556d6</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3985675%2F7db80419-9ff6-4d06-bf41-b5b04a71c4f0.png</url>
      <title>DEV Community: bubobo</title>
      <link>https://dev.to/bubobo_d556d6</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bubobo_d556d6"/>
    <language>en</language>
    <item>
      <title>Stocky is shutting down on August 31, 2026 — rescue your data before it's gone</title>
      <dc:creator>bubobo</dc:creator>
      <pubDate>Mon, 15 Jun 2026 13:41:49 +0000</pubDate>
      <link>https://dev.to/bubobo_d556d6/stocky-is-shutting-down-on-august-31-2026-rescue-your-data-before-its-gone-45oi</link>
      <guid>https://dev.to/bubobo_d556d6/stocky-is-shutting-down-on-august-31-2026-rescue-your-data-before-its-gone-45oi</guid>
      <description>&lt;p&gt;If you run a Shopify store and use &lt;strong&gt;Stocky&lt;/strong&gt; for purchase orders and inventory, mark the date: Shopify is shutting Stocky down on &lt;strong&gt;August 31, 2026&lt;/strong&gt;. It was already removed from the App Store in February 2026, and some features (min/max forecasting, transfers) were cut back in 2025.&lt;/p&gt;

&lt;p&gt;Here's the part that catches people out: &lt;strong&gt;your Stocky data does not move to Shopify automatically.&lt;/strong&gt; Your purchase orders, stocktakes and inventory reports won't be there after the shutdown unless you export them yourself first. And there's a nastier gap — &lt;strong&gt;Stocky can't export your suppliers at all&lt;/strong&gt;, and there's no location-level inventory export. Your supplier names, lead times and per-product costs effectively only live &lt;em&gt;inside&lt;/em&gt; your purchase orders.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do before the deadline
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Export what you can from Stocky now.&lt;/strong&gt; Use Stocky's built-in reports to export purchase orders and stocktakes as CSV. Don't leave it to the last week.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rebuild what Stocky won't export.&lt;/strong&gt; Your suppliers and costs are buried in those PO exports. You can reconstruct them by hand in a spreadsheet… or use a tool.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pick a replacement&lt;/strong&gt; (Shopify's native POs, or a third-party inventory app) and &lt;strong&gt;import your rescued data&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For step 2, I built a free tool: &lt;strong&gt;&lt;a href="https://reordo.k5-studio.com" rel="noopener noreferrer"&gt;Reordo&lt;/a&gt;&lt;/strong&gt;. Drop in your exported Stocky CSVs and it rebuilds a clean &lt;strong&gt;supplier list&lt;/strong&gt; and a &lt;strong&gt;supplier × product × cost catalog&lt;/strong&gt; you can import anywhere, plus a backup of your POs and total inventory value. It runs &lt;strong&gt;100% in your browser — nothing is uploaded&lt;/strong&gt; (handy when you're dealing with cost data). Disclosure: I made it.&lt;/p&gt;

&lt;p&gt;Whatever replacement you choose, the important thing is to &lt;strong&gt;get your data out before August 31.&lt;/strong&gt; After that, it's gone.&lt;/p&gt;

</description>
      <category>data</category>
      <category>news</category>
      <category>resources</category>
      <category>saas</category>
    </item>
    <item>
      <title>Microsoft is retiring EWS in 2026 — how to find every EWS call in your codebase</title>
      <dc:creator>bubobo</dc:creator>
      <pubDate>Mon, 15 Jun 2026 13:41:28 +0000</pubDate>
      <link>https://dev.to/bubobo_d556d6/microsoft-is-retiring-ews-in-2026-how-to-find-every-ews-call-in-your-codebase-4dad</link>
      <guid>https://dev.to/bubobo_d556d6/microsoft-is-retiring-ews-in-2026-how-to-find-every-ews-call-in-your-codebase-4dad</guid>
      <description>&lt;p&gt;If your apps talk to Exchange Online over &lt;strong&gt;Exchange Web Services (EWS)&lt;/strong&gt;, the clock is ticking. Microsoft is retiring EWS for Exchange Online, with blocking starting &lt;strong&gt;October 2026&lt;/strong&gt;. After that, EWS requests to Exchange Online stop working and you must use the &lt;strong&gt;Microsoft Graph API&lt;/strong&gt; instead. (On-premises Exchange isn't affected the same way.)&lt;/p&gt;

&lt;p&gt;The migration itself is well documented. The annoying part is the first step: &lt;strong&gt;figuring out where your code actually touches EWS&lt;/strong&gt; — especially in older or large codebases spread across .NET, Java, Python and PowerShell.&lt;/p&gt;

&lt;p&gt;Here's a practical checklist of what to look for, and what each maps to in Microsoft Graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  What EWS usage looks like
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Connection &amp;amp; auth&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Microsoft.Exchange.WebServices&lt;/code&gt; namespace, &lt;code&gt;new ExchangeService(...)&lt;/code&gt;, &lt;code&gt;ExchangeVersion&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;AutodiscoverUrl(...)&lt;/code&gt; — Graph has no Autodiscover; use the fixed endpoint &lt;code&gt;https://graph.microsoft.com/v1.0&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WebCredentials&lt;/code&gt; / basic auth — replaced by OAuth2 via &lt;strong&gt;MSAL&lt;/strong&gt; (delegated or app-only)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;exchangelib&lt;/code&gt; (Python), &lt;code&gt;New-WebServiceProxy&lt;/code&gt; (PowerShell), &lt;code&gt;microsoft.exchange.webservices&lt;/code&gt; (Java)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operations → Graph equivalents&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;EWS&lt;/th&gt;
&lt;th&gt;Microsoft Graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;FindItems&lt;/code&gt; / &lt;code&gt;ItemView&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GET /me/messages&lt;/code&gt; (&lt;code&gt;$filter&lt;/code&gt;, &lt;code&gt;$search&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;EmailMessage&lt;/code&gt; + &lt;code&gt;SendAndSaveCopy&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /me/sendMail&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;FindFolders&lt;/code&gt; / &lt;code&gt;WellKnownFolderName&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;GET /me/mailFolders&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;Appointment&lt;/code&gt; / &lt;code&gt;CalendarFolder&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;/me/events&lt;/code&gt;, &lt;code&gt;/me/calendar&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;GetUserAvailability&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;POST /me/calendar/getSchedule&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ContactsFolder&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;/me/contacts&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;SyncFolderItems&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;delta query &lt;code&gt;GET /me/mailFolders/{id}/messages/delta&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;code&gt;StreamingSubscription&lt;/code&gt; (pull/push)&lt;/td&gt;
&lt;td&gt;Graph change notifications (&lt;code&gt;POST /subscriptions&lt;/code&gt;) + webhook&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EWS impersonation (&lt;code&gt;ImpersonatedUserId&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;app-only auth + target &lt;code&gt;/users/{id}&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  A faster way to scan
&lt;/h2&gt;

&lt;p&gt;Grepping by hand works, but it's easy to miss things. I built a small free tool for exactly this: &lt;strong&gt;&lt;a href="https://ews.k5-studio.com" rel="noopener noreferrer"&gt;EWScan&lt;/a&gt;&lt;/strong&gt;. Drop in your project as a &lt;code&gt;.zip&lt;/code&gt; (or individual files) and it lists every EWS reference — file, line, and the Microsoft Graph replacement for each — so you can scope the migration. It runs &lt;strong&gt;entirely in your browser; your source code is never uploaded.&lt;/strong&gt; (Disclosure: I made it.)&lt;/p&gt;

&lt;h2&gt;
  
  
  Migration tips
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Start with &lt;strong&gt;auth&lt;/strong&gt;: set up MSAL + register an app in Entra ID, then port one read path (e.g. list messages) end-to-end before the rest.&lt;/li&gt;
&lt;li&gt;Prefer &lt;strong&gt;application permissions&lt;/strong&gt; + &lt;code&gt;/users/{id}&lt;/code&gt; where you used impersonation.&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;SyncFolderItems&lt;/code&gt; polling with &lt;strong&gt;delta queries&lt;/strong&gt;, and EWS subscriptions with &lt;strong&gt;Graph change notifications&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Don't wait until October — scan your code, scope the work, and migrate the high-traffic paths first.&lt;/p&gt;

</description>
      <category>api</category>
      <category>microsoft</category>
      <category>news</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
