<?xml version="1.0" encoding="UTF-8" ?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" version="2.0"> <channel> <title><![CDATA[MC Project]]></title> <description><![CDATA[Global digital products and freelance services. Focuses on development, production and distribution of programming scripts, application source code, plugins, themes and templates.]]></description> <image> <title><![CDATA[MC Project]]></title> <url>https://en.mycoding.id/favicon.ico</url> <link>https://en.mycoding.id/</link> </image> <category><![CDATA[Software Engineering, Website Development, Mobile Android App, Application Source Code, Programming Scripts]]></category> <link>https://en.mycoding.id/</link> <atom:link href="https://en.mycoding.id/rss.xml" rel="self" type="application/rss+xml"/> <atom:link href="https://en.mycoding.id/rss-videos.xml" rel="alternate" type="application/rss+xml"/> <atom:link href="https://en.mycoding.id/" rel="alternate" type="text/html"/> <pubDate>Tue, 03 Nov 2026 22:40:53 +0700</pubDate> <lastBuildDate>Tue, 03 Nov 2026 22:40:53 +0700</lastBuildDate> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <managingEditor>support@mycoding.id (Adi Gunawan)</managingEditor> <webMaster>support@mycoding.id (Adi Gunawan)</webMaster> <language>en_US</language> <copyright>MC Project</copyright> <generator>MC Project</generator> <item> <title><![CDATA[The Little Book of Generative AI Foundations: An Intuitive Mathematical Primer]]></title> <description><![CDATA[The Little Book of Generative AI Foundations: An Intuitive Mathematical Primer. Comments]]></description> <media:thumbnail url="https://arxiv.org/static/browse/0.3.4/images/arxiv-logo-fb.png"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/the-little-book-of-generative-ai-foundations-an-intuitive-mathematical-primer-75490</link> <content:encoded><![CDATA[<div id="content-inner"> <div id="abs"> <p> [Submitted on 28 May 2026 (<a href="https://en.mycoding.id/category/technology" target="_blank">v1</a>), final revised 8 Sep 2026 (this version, v2)]</p> <p><a href="https://en.mycoding.id/category/technology" target="_blank">View PDF</a> <a href="https://en.mycoding.id/category/technology" target="_blank">HTML (experimental)</a></p><blockquote> <span>Abstract:</span>This publish provides a compact, derivation-oriented introduction to the mathematical foundations of contemporary generative synthetic intelligence. Rather than surveying all latest architecture or implementation detail, it develops a coherent path through the ideas connecting important families of generative models, from PCA, probabilistic PCA, variational autoencoders, and diffusion models to normalising flows, autoregressive factorisations, GANs, Wasserstein GANs, and energy-based models. The aim is to create the construction of generative modelling additional accessible without removing the mathematical matter needed to comprehend how these models are derived and related. The publish is intended as a foundation-building primer for mathematically inquisitive researchers, practitioners, and students. </blockquote> </div> </div><div> <h2>Submission history</h2><p> From: Tianhua Chen [<a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">view email</a>] <br> <strong><a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">[v1]</a></strong> Thu, 28 May 2026 10:12:00 UTC (125 KB)<br> <strong>[v2]</strong> Tue, 8 Sep 2026 07:17:36 UTC (1,168 KB)<br> </p></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/the-little-book-of-generative-ai-foundations-an-intuitive-mathematical-primer-75490</guid> <pubDate>Tue, 03 Nov 2026 22:40:53 +0700</pubDate> <author><![CDATA[support@mycoding.id (Riki Setiawan)]]></author> </item> <item> <title><![CDATA[Safari introduces Adaptive Dark Mode in 27.3]]></title> <description><![CDATA[Safari introduces Adaptive Dark Mode in 27.3. Comments]]></description> <media:thumbnail url="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light.png"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/safari-introduces-adaptive-dark-mode-in-27-3-75491</link> <content:encoded><![CDATA[<div> <p>We&rsquo;re enthusiastic to province Adaptive Dark Mode in Safari 27.3 beta. When enabled by a user, Safari adapts ray websites and presents them as dark.</p> <p>In the fountain of 2019, Safari 12.1 became the archetypal browser to assistance dreary manner on the web. A lot of group affection using dreary mode, but not all website has a dreary version. Almost <a href="https://en.mycoding.id/category/technology" target="_blank">40% of web leaf loads</a> are from users in dreary mode, and yet <a href="https://en.mycoding.id/category/technology" target="_blank">only 10%</a> of leaf loads assistance it. If you affection dreary mode, you&rsquo;ve likely hit a location that felt particularly <a href="https://en.mycoding.id/category/technology" target="_blank">bright</a>. Adaptive Dark Mode is designed to near that gap, providing a accordant dreary cognition throughout the web.</p> <figure><source media=" dark)" srcset="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_dark.png"><img fetchpriority="high" decoding="async" src="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-2048x1308.png" alt="A demo website in ray manner on the remaining and dreary manner on the right. It&#039;s a complex location alongside many of UI complete of bits of color that&#039;s transformed by Adaptive Dark Mode." width="2290" height="1462" srcset="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light.png 2290w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-300x192.png 300w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-1024x654.png 1024w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-768x490.png 768w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-1536x981.png 1536w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode_light-2048x1308.png 2048w" sizes=" 2290px) 100vw, 2290px"></source></figure> <p>You can try it today in Safari 27.3 beta. To enable, archetypal create certain your scheme appearance is set to dark. Then browse to a website alongside a brilliant background. Safari volition recommendation a preview of Adaptive Dark Mode. Tap &lsquo;Try&rsquo;.</p> <p>For websites that indication assistance of dreary manner alongside &lt;meta name="color-scheme" content="light dark"&gt; in HTML or color-scheme: ray dreary in CSS, Adaptive Dark Mode does not alter a thing. For the remainder of the web, it quickly analyzes the page, looking at colors and estimating whether it&rsquo;s predominantly ray or dark. If the leaf mostly has a dreary backdrop alongside ray text, nothing is changed. When a leaf has a ray appearance, Adaptive Dark Mode adapts the leaf to be dark.</p> <h2>How does Adaptive Dark Mode work?</h2> <p>At the center of Adaptive Dark Mode is the transformation of color. Sometimes colors are merely decorative, during another times they have semantic meaning. Adaptive Dark Mode determines whenever to invert colors so elements remain apparent or whenever to depart colors unchanged.</p> <p>While creating Adaptive Dark Mode, we developed a color matrix to invert the luminosity of colors during preserving hue. It&rsquo;s used to create ray backgrounds dark, and dreary content light. When transforming content color, Adaptive Dark Mode aims for adequate difference as defined by the <a href="https://en.mycoding.id/category/technology" target="_blank">WCAG 4.5:1 difference ratio</a>. Light CSS gradients are additionally transformed to dark.</p> <p>Adaptive Dark Mode makes careful judgments so transformed satisfied looks fine and stays usable: buttons have difference against backgrounds, content is apparent complete images, and hover menus appearance clear.</p> <p>It takes the identical attention alongside images. Most are remaining unchanged, preserving their integrity. But many icons and logos can endure difference whenever the backdrop color rearward them is inverted. So Adaptive Dark Mode inspects SVG images and transforms colors whenever needed. For bitmap images, it analyzes the pixel histograms and inverts uncomplicated black-and-white logos.</p> <figure><source media=" dark)" srcset="https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_dark-scaled.png"><img decoding="async" src="https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-2048x897.png" alt="Side by flank screenshots of the Interop 2026 dashboard in Safari. On the left, the first ray manner website. On the right, the location transformed by Adaptive Dark Mode. The chart motionless matches ray manner (untransformed) but everything alternatively on the leaf is dark. " width="2560" height="1122" srcset="https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-scaled.png 2560w, https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-300x131.png 300w, https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-1024x449.png 1024w, https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-768x336.png 768w, https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-1536x673.png 1536w, https://webkit.org/wp-content/uploads/Interop-dashboard-with-Adaptive-Dark-Mode_light-2048x897.png 2048w" sizes=" 2560px) 100vw, 2560px"> </source></figure> <p>Effects akin masks and mix-blend-mode can create undesirable results on an component whose colors have been transformed, so in several cases Adaptive Dark Mode turns specified effects off. Also, &lt;canvas&gt; satisfied is remaining unchanged, since canvases merge a broad range of satisfied that&rsquo;s difficult to predict.</p> <p>It&rsquo;s exactly since Adaptive Dark Mode is happening profound inside the WebKit browser motor that we are capable to discover imaginative ways to resolve the most complex challenges, use the transformations alongside awesome speed and power efficiency, all during rigorously protecting person privacy.</p> <h2>Making your location activity equal better</h2> <p>In general, a web leaf volition activity fine alongside Adaptive Dark Mode if it follows fine contemporary web betterment practices.</p> <p>If your location motionless uses older techniques, small updates can help. For logos and icons, toggle bitmap images for SVG. Use firm or gradient colors in CSS alternatively of tiled backdrop images. Replace depiction sprites alongside contemporary CSS for rounded corners, shadows, and clasp states. Create satisfied images alongside transparent backgrounds alternatively of baking the leaf backdrop color into the image. Add padding to containers to forestall crowding.</p> <p>Perhaps you desire a particular dreary manner cognition for a certain part of the page. Apply <a href="https://en.mycoding.id/category/technology" target="_blank">color-scheme: ray dark</a> to the applicable component and add your own dreary styles.</p> <h2>Building your own dreary mode</h2> <p>For complete authority complete how your location looks in dreary mode, add complete support. It&rsquo;s a terrific period to do so. It&rsquo;s never been easier.</p> <figure><source media=" dark)" srcset="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_dark-scaled.png"><img decoding="async" src="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-2048x971.png" alt="The demo website from above, lone now, alongside a third browser opening showing what that website power appearance akin alongside a tradition dreary mode." width="2560" height="1213" srcset="https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-scaled.png 2560w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-300x142.png 300w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-1024x485.png 1024w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-768x364.png 768w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-1536x728.png 1536w, https://webkit.org/wp-content/uploads/Demo-of-Adaptive-Dark-Mode-plus-custom-dark-mode_light-2048x971.png 2048w" sizes=" 2560px) 100vw, 2560px"></source><figcaption>Here&rsquo;s an example of a website in ray manner (left) and alongside Adaptive Dark Mode applied (center). If the location creates a tradition dreary mode, it could appearance akin the third type (right).</figcaption></figure> <p>All the web innovation needed to completely assistance dreary manner is extensively accessible today, including:</p> <ul> <li><a href="https://en.mycoding.id/category/technology" target="_blank">&lt;meta name="color-scheme" content="light dark"&gt;</a></li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">:root { color-scheme: ray dreary }</a> </li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">@media (prefers-color-scheme: dark) { }</a> </li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">&lt;picture&gt;&lt;source media="(prefers-color-scheme: dark)"&gt;</a></li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">light-dark()</a> </li> </ul> <p>Newer CSS functions akin <a href="https://en.mycoding.id/category/technology" target="_blank">color-mix()</a> and <a href="https://en.mycoding.id/category/technology" target="_blank">contrast-color()</a>, affirmative famous techniques for organizing scheme systems alongside CSS variables provision additional options and flexibility.</p> <p>Be certain to province dreary manner assistance using the color-scheme meta tag in your HTML caput and/or by environment the color-scheme asset on :root or build in your CSS. Don&rsquo;t delay to inject this data afterward via JavaScript. This finest custom helps justify your location is rendered correctly as accelerated as possible.</p> <h2>Using the &ldquo;light only&rdquo; color scheme</h2> <p>If you would akin your web app or website to not be transformed by Adaptive Dark Mode, you can communicate this using color-scheme. The HTML &lt;meta name="color-scheme" content="light only"&gt; tag lets browsers cognize that 1) this leaf supports ray manner and 2) should lone be displayed in ray mode. The color-scheme: ray lone regulation does the identical thing, but alongside the elasticity of CSS, allowing you to fair mark particular elements on the leaf &mdash; or of course, you can mark the entire leaf alongside :root { }. (Note: the &lsquo;only&rsquo; keyword is not supported in Safari 27.3 beta 1. Check rear as Adaptive Dark Mode evolves through the beta process.)</p> <h2>Protecting person privacy</h2> <p>Apple firmly believes person privacy is a essential individual right. If websites could detect whenever a person has enabled Adaptive Dark Mode, that would addition the amount of fingerprintable data and weaken privacy protections against trackers.</p> <p>As a result, Safari prevents websites from detecting whenever Adaptive Dark Mode has been applied. JavaScript that queries CSS colors volition get the first authored colors, not the transformed ones. Any images drawn into canvas render in their first form.</p> <h2>Feedback</h2> <p>If you oversee a website or web app, and would akin to conversation how Adaptive Dark Mode is adapting your project, awareness liberated to attain out at <a href="https://en.mycoding.id/category/technology" target="_blank">web-evangelist@apple.com</a>.</p> <p>If you try out Adaptive Dark Mode as a user, and discover a location that does not activity well, we&rsquo;d affection for you to document a study alongside <a href="https://en.mycoding.id/category/technology" target="_blank">Feedback Assistant</a>. (Learn additional concerning <a href="https://en.mycoding.id/category/technology" target="_blank">filing Feedback</a>).</p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/safari-introduces-adaptive-dark-mode-in-27-3-75491</guid> <pubDate>Tue, 03 Nov 2026 22:39:05 +0700</pubDate> <author><![CDATA[support@mycoding.id (Riki Setiawan)]]></author> </item> <item> <title><![CDATA[This Eufy Robot Vacuum and Mop Is $400 Off Right Now]]></title> <description><![CDATA[This Eufy Robot Vacuum and Mop Is $400 Off Right Now. You don't need to delay until Black Friday to preserve 40%.]]></description> <media:thumbnail url="https://lifehacker.com/imagery/articles/01M6HBEGDVZRMN2WJV0QZJSQC5/hero-image.jpg"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/this-eufy-robot-vacuum-and-mop-is-400-off-right-now-75494</link> <content:encoded><![CDATA[<div class="leading-normal prose-sm m-0 line-clamp-5 font-normal"></div> <hr class="custom-gradient-background my-6 h-[6px] max-w-[75px] border-0"> <p>Robot vacuums have been about a while, but it can motionless be durable to discover one that is additionally fine at mopping. But dissimilar many robot vacuum and mop combos that use spinning pads, the all-in-one <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">Eufy E25 robot vacuum and mop</a> has a self-cleaning roller mop: The roller is rinsed alongside spotless h2o as it mops, afterward cleaned at the dock, definition you don't need to expend as much period cleaning it yourself. It's a astute design, and it's a awesome period to choice one up: Right now, the <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">E25</a> is 40% off in an first <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Black Friday deal</a> at Amazon, taking it downward to $599.98 (originally $999.99).</p><div class="py-6"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="cursor-default no-underline" data-ga-click="data-ga-click" data-ga-module="shop-card" data-ga-element="offer" data-ga-item="offer-btn" data-ga-label="Eufy E25 Robot Vacuum and Mop"> <div class="px-8"> <div class="grow"> <div class="leading-6"> Eufy E25 Robot Vacuum and Mop </div> <div class="justify-between"> <div class="self-end"> <div class="justify-center"><div class=" font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $599.98 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$999.99</span> <span class="text-sm text-brand-green">Save $400.01</span> </div> </div> </div> </div> <div class="w-44 self-end"> Get Deal </div> </div> </div> <div class="hidden"> <div class="flex aspect-video items-center justify-center"> <img class="m-0 max-h-full max-w-full rounded-md" src="https://lifehacker.com/imagery/articles/01M6HBEGDVZRMN2WJV0QZJSQC5/images-1.fill.size_autoxauto.v1793731281.jpg" alt="Eufy E25 robot vacuum and mop" width="auto" height="auto" loading="lazy"> </div> </div> <div class="flex"> <div class="flex aspect-video items-center justify-center"> <img class="m-0 max-h-full max-w-full rounded-md" src="https://lifehacker.com/imagery/articles/01M6HBEGDVZRMN2WJV0QZJSQC5/images-1.fill.size_autoxauto.v1793731281.jpg" alt="Eufy E25 robot vacuum and mop" width="auto" height="auto" loading="lazy"> </div> </div> <div class="grow-0"> <div class="mt-4 w-full"> Get Deal </div> <div class="mx-2 mt-4 w-full"> <div class=" font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $599.98 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$999.99</span> <span class="text-sm text-brand-green">Save $400.01</span> </div> </div> </div> </div> </div> </a></div> <p>Another perk is that the E25 is armed alongside an anti-tangle broom and multiple flank brushes that enter tight corners; this is a precious characteristic at this cost point, as is the 20,000 Pa suction power, which results in a deeper spotless on the two difficult flooring and carpeting, features that are particularly appealing for pet owners.  </p><div class="py-0" data-ga-click data-ga-template="Deals" data-ga-module="openweb_widget" data-ga-element="openweb_scroll" data-ga-item="openweb_scroll_midpage" x-data="&#039;, e); } } }" x-init="fetchCommentsCount()" x-cloak> <div class="absolute top-1/2 hidden w-full -translate-y-1/2 border-t-[1.5px] border-dashed border-black sm:block"></div> <div class="relative flex justify-center"> <div class="flex max-w-fit items-center gap-x-3 bg-white px-5"> <div class="relative"> <span class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 font-akshar text-sm font-medium text-black" aria-live="polite" x-show="hasComments" x-text="commentsCount"></span> <svg class="h-8 w-8 text-black" role="img" aria-hidden="true"> </svg> </div> <span class="text-sm font-medium text-black"> What do you think so far? </span> </div> </div> </div> <p>Users can map an area, set zones, agenda cleans, and define distinct features via the Eufy Clean app; the customizable options contain cleaning intensity, suction power, h2o level, and deciding whether you desire the E25 to create multiple passes in an area.  It uses LiDAR mapping and AI for obstacle finding and is extremely automated, alongside a dock that empties the robot, washes and dries the roller mop, and refills its h2o supply. If you live in a residence alongside pets and desire a low-maintenance robot vacuum and mop that can grip regular flat cleaning alongside minimal intervention, the <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">Eufy E25</a><strong> </strong>can cut several grave period from your cleaning routine.</p><div class="left-1/2 md:w-[780px] md:max-w-max md:-translate-x-1/2" x-data=" false }"> <div class="text-left"> <div class="rounded-tl-none"> <div class="rounded-tl-none"> <span class="text-2xl">Our Best Editor-Vetted Early Black Friday Deals Right Now</span> <div class="text-base"> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label="Apple AirPods Pro 3 Noise Cancelling Heart Rate Wireless Earbuds" data-ga-element="offer" data-ga-module="offer-group" data-ga-position="1"> Apple AirPods Pro 3 Noise Cancelling Heart Rate Wireless Earbuds </a> <span class="text-black"> — <span class="font-bold">$199.00</span> <span class="!text-sm"> (List Price $249.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='Apple iPad 11&quot; 128GB Wi-Fi Retina Tablet (Blue, 2025 Release)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="2"> Apple iPad 11" 128GB A16 WiFi Tablet (Blue, 2025) </a> <span class="text-black"> — <span class="font-bold">$399.99</span> <span class="!text-sm"> (List Price $449.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label="Apple HomeView Smart Display (Silver, 2026 Release)" data-ga-element="offer" data-ga-module="offer-group" data-ga-position="3"> Apple HomeView Smart Display (Silver, 2026 Release) </a> <span class="text-black"> — <span class="font-bold">$299.00</span> <span class="!text-sm"> (List Price $299.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='TCL Tab 10 Gen 4 128GB 10.1&quot; Tablet (Dark Blue/Gray)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="4"> TCL Tab 10 Gen 4 128GB 10.1" Tablet (Dark Blue/Gray) </a> <span class="text-black"> — <span class="font-bold">$169.99</span> <span class="!text-sm"> (List Price $199.99) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='50&quot; Amazon Amber 4-Series 4K HDR10+ Smart Fire TV (2025 Model)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="5"> Amazon Ember 50" 4-Series alongside Fire TV (newest model) </a> <span class="text-black"> — <span class="font-bold">$309.99</span> <span class="!text-sm"> (List Price $399.99) </span> </span> </div> </div> </div> </div> <div class="px-6"> <span class="text-sm">Deals are selected by our commerce team</span> </div> </div> </div> <div class="leading-normal prose-sm mt-4 line-clamp-2"> <p></p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/this-eufy-robot-vacuum-and-mop-is-400-off-right-now-75494</guid> <pubDate>Tue, 03 Nov 2026 22:30:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Naima Karp)]]></author> </item> <item> <title><![CDATA[The AI Boom May Be Sowing Seeds of Another Financial Crisis]]></title> <description><![CDATA[The AI Boom May Be Sowing Seeds of Another Financial Crisis. Comments]]></description> <media:thumbnail url="https://en.mycoding.id/site/assets/img/og-image.png"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/the-ai-boom-may-be-sowing-seeds-of-another-financial-crisis-75492</link> <content:encoded><![CDATA[<h2>We've detected different action from your device network</h2> <p>To continue, delight click the box below to let us cognize you're not a robot.</p> <h3>Why did this happen?</h3> <p>Please create certain your browser supports JavaScript and cookies and that you are not blocking them from loading. For additional data you can assessment our <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Terms of Service</a> and <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Cookie Policy</a>.</p> <h3>Need Help?</h3> <p>For inquiries connected to this communication delight <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">contact our assistance team</a> and provision the citation ID below.</p> <p>Block citation ID:f7c1c363-d7d1-11f1-a428-9f65e4b607cd</p> <p>Get the most crucial earth markets news at your fingertips alongside a <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Bloomberg.com</a> subscription.</p> <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">SUBSCRIBE NOW</a>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/the-ai-boom-may-be-sowing-seeds-of-another-financial-crisis-75492</guid> <pubDate>Tue, 03 Nov 2026 22:25:48 +0700</pubDate> <author><![CDATA[support@mycoding.id (Riki Setiawan)]]></author> </item> <item> <title><![CDATA[Here’s what it’s like to use Audio Intelligence on the Apple Watch]]></title> <description><![CDATA[Here’s what it’s like to use Audio Intelligence on the Apple Watch. It's unattainable to coat a complete image of what Audio Intelligence on the Apple Watch Series 12 and Ultra 4 volition be correct now. The watchOS 27.3 developer beta j...]]></description> <media:thumbnail url="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewind.jpg?quality=90&amp;strip=all&amp;crop=0%2C7.0647280488212%2C100%2C85.870543902358&amp;w=1200"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/here-s-what-it-s-like-to-use-audio-intelligence-on-the-apple-watch-75488</link> <content:encoded><![CDATA[<div id="zephr-anchor"><p>It&rsquo;s unattainable to coat a complete image of what Audio Intelligence on the Apple Watch Series 12 and Ultra 4 volition be correct now. The watchOS 27.3 developer beta fair dropped before this afternoon, and these features are meant to be lived alongside in day-to-day life. We&rsquo;re certainly going to do that complete the next few weeks at <em>The Verge</em>. That said, current are several first impressions.</p><p>What&rsquo;s newly accessible today is Live Rewind and Siri Recap. The erstwhile lets you see a copy of the final 15 seconds, during the second provides high-level summaries of your conversations. (The another two Audio Intelligence features have been accessible for the final few weeks. I wrote concerning those in <a href="https://en.mycoding.id/category/technology" target="_blank">my Series 12 review</a>.) And as always, this is the developer beta. These features could motionless alter fairly a bit before a final type arrives for the public.</p><p>The archetypal item I noticed is that these features are <em>not</em> turned on by default. I wasn&rsquo;t expecting item different, but it&rsquo;s value remembering that these features don&rsquo;t automatically rotate <em>every</em> Apple Watch into a surveillance device. Audio Intelligence requires the latest Apple Watch hardware, a compatible type of iOS (so in this case, the iOS 27.3 developer beta), <em>and</em> person has to actively choose to allow these features. You can download the beta and double-press the crown to initiate a Live Rewind. It won&rsquo;t do anything. You <em>must</em> opt in via your iPhone&rsquo;s Watch app. Same goes for Siri Recap. Enabling Live Rewind additionally requires an first microphone calibration alongside your phone.</p><div><div><div><div class=""><div><p><a href="https://en.mycoding.id/category/technology" target="_blank" data-pswp-height="1256" data-pswp-width="2060" target="_blank" rel="noreferrer"><img alt="The onboarding procedure is fairly clear." data-chromatic="ignore" loading="lazy" decoding="async" data-nimg="fill" sizes=" 1023px) 50vw, 700px" srcset="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=256 256w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=376 376w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=384 384w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=415 415w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=480 480w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=540 540w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=640 640w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=750 750w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=828 828w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1080 1080w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1200 1200w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1440 1440w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1920 1920w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2048 2048w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400 2400w" src="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/liverewindsetup.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400"></a></p></div></div><p><figcaption><em>The onboarding procedure is fairly clear.</em></figcaption></p></div></div></div><p>Privacy-wise, Apple has publically <a href="https://en.mycoding.id/category/technology" target="_blank">available assistance documentation</a> concerning its method to these features. I&rsquo;m not weighing in on how fine it executes them in this hands-on. But Apple has beautiful apparent messaging in the onboarding process. There are fairly a few customization options for whenever Siri Recap is active. You can get beautiful granular. For example, you can have Siri Recap <em>only</em> on at the agency during weekdays from 1 PM to 4 PM if that&rsquo;s whenever you have meetings. This is difficult to communicate to bystanders, and I think ethical use should arrive alongside an in-person heads-up to the group you frequently engage with. (Hello, chap <em>Verge</em> writers and editors.)</p><p>Live Rewind, so far, has worked as described &mdash; alongside the <em>heavy</em> caveat that I&rsquo;ve lone tested it in my quiescent residence agency alongside my spouse. Even so, it takes a hot second to study the timing of a twice press. My partner noticed the audible chime indication the characteristic is in use, although they didn&rsquo;t notice the animation. I&rsquo;ll have to see how this fares in louder environments. Siri accurately captured our attempts to get my cat to rotate over, although in consequent tests, it misheard a term or two.</p><p>I&rsquo;m additional hesitant to comment on Siri Recap. It&rsquo;s not fair since I haven&rsquo;t had an organic, lengthy spoken conversation yet since downloading the beta. (Siri did not deem my concise conversation alongside my partner as deserving adequate for recapping.) But I won&rsquo;t really get a awareness for how this characteristic <em>feels</em> until I&rsquo;ve tested it in a broad assortment of scenarios. Will it activity if I conversation to myself aloud? How fine does it display out gossip? How volition this alter how group conversation to me? That&rsquo;ll be the true test of this characteristic and Apple&rsquo;s bystander privacy claims. I&rsquo;ll keep evaluation and volition add an update formerly I&rsquo;ve eventually received my archetypal Siri Recap.</p><p>What I volition say is that I&rsquo;ve been evaluation the <a href="https://en.mycoding.id/category/technology" target="_blank">Amazon Bee Frontier</a> for the former few weeks. In the small period I&rsquo;ve spent alongside the watchOS 27.3 beta, the differences between Audio Intelligence and the Bee are extremely clear. The second has additional of what I&rsquo;d call an AI-forward presence. Bee, for example, offers insights concerning the affectional spirit of a conversation. I&rsquo;ve additionally established that the AI can be a bit <em>judgy</em> concerning insights and takeaways. Live Rewind is fair a direct transcript. Again, I&rsquo;m motionless waiting on my archetypal Siri Recap, but what Apple&rsquo;s stated publically so far is that these are meant to be extremely actual notes to jog a person&rsquo;s memory. And, as far as I can tell, there is no commerce viewpoint for Siri Recaps, whereas Bee has an Amazon integration that surfaces purchasing suggestions according to conversations.</p><p>In any case, I&rsquo;ll be diving profound into these features in the days to come. Let us cognize in the comments what you&rsquo;re most inquisitive about.</p><div><p><span><strong>Follow topics and authors</strong> from this narrative to see additional akin this in your personalized homepage nourish and to obtain email updates.</span></p><ul><li id="follow-author-article_footer-dmcyOmF1dGhvclByb2ZpbGU6NjI1"><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span><span>Victoria Song</span></span></span></li><li><li><li><li><li><li><li><li></ul></div></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/here-s-what-it-s-like-to-use-audio-intelligence-on-the-apple-watch-75488</guid> <pubDate>Tue, 03 Nov 2026 22:21:04 +0700</pubDate> <author><![CDATA[support@mycoding.id (Victoria Song)]]></author> </item> <item> <title><![CDATA[Show HN: Kairos – Open-source risk and fraud decisioning platform]]></title> <description><![CDATA[Show HN: Kairos – Open-source risk and fraud decisioning platform. Comments]]></description> <media:thumbnail url="https://opengraph.githubassets.com/753ca7f5df06194d772b563c9d79c973c17a61ff78302dc83d62b34f38c6e6cc/finic-ai/kairos"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/show-hn-kairos-open-source-risk-and-fraud-decisioning-platform-75493</link> <content:encoded><![CDATA[<div data-hpc="true" containertiming="hpc"> <div dir="auto"><h2 tabindex="-1" dir="auto">Kairos is open-source, real-time fraud and hazard decisioning</h2><a href="https://en.mycoding.id/category/technology" target="_blank"><svg data-component="Octicon" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto"><a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">Kairos</a> decides all sign-up, login, order, fee and payout as it happens, and keeps all decision alongside the signals rearward it. It is an open-source substitute to Sardine, Sift, Riskified and SEON, alongside two things they don't have: <strong>your coding delegate tunes it</strong>, and <strong>decision models</strong> capture fraud before you have the labels to train on.</p> <ul dir="auto"> <li><a href="https://en.mycoding.id/category/technology" target="_blank">Real-time decisions</a>: one call returns approve, stage up, assessment or block, alongside a hazard mark and the reasons, from the subject's history, the devices, cards and addresses it shares alongside others, and the session.</li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">Workflows</a>: ask a decision model, mark alongside a model, branch, call webhooks, open cases, and decide again later.</li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">Queues and cases</a>: assessment activity for people, whose resolutions rotate into labels.</li> </ul> <ul dir="auto"> <li><a href="https://en.mycoding.id/category/technology" target="_blank">MCP server</a>: Claude Code, Cursor or Codex peruse your decisions and build workflows, alongside all act recorded under its key.</li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">Experiments</a>: your delegate proposes example variants, Kairos trains and tests them on your data, and the delegate ships the winner.</li> </ul> <div dir="auto"><h4 tabindex="-1" dir="auto">Decision models and traditional ML</h4><a href="https://en.mycoding.id/category/technology" target="_blank"><svg data-component="Octicon" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">Grayson</a>: Finic's decision example answers questions concerning all petition in plain language. It plant alongside few labels and says unstructured data.</li> <li><a href="https://en.mycoding.id/category/technology" target="_blank">Models</a>: logistic regression and gradient-boosted trees (XGBoost-compatible) on your numbers and Grayson's answers, trained in Kairos or uploaded.</li> </ul> <ul dir="auto"> <li><a href="https://en.mycoding.id/category/technology" target="_blank">SDKs</a> for TypeScript (@finic-ai/kairos) and Python (finic-kairos), a <a href="https://en.mycoding.id/category/technology" target="_blank">CLI</a>, an <a href="https://en.mycoding.id/category/technology" target="_blank">HTTP API</a>, and <a href="https://en.mycoding.id/category/technology" target="_blank">self-hosting</a> alongside Docker.</li> </ul> <div dir="auto"><h2 tabindex="-1" dir="auto">An AI fraud ML engineer, continually tuning on your data</h2><a href="https://en.mycoding.id/category/technology" target="_blank"><svg data-component="Octicon" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">You dispatch Kairos what happens in your product: sign-ups, logins, orders, payouts, chargebacks. It decides all petition (approve, stage up, assessment or block) and keeps all decision alongside the signals rearward it.</p> <p dir="auto">What makes Kairos distinct is who tunes it. Connect Claude Code, Cursor, Codex or any delegate complete <strong>MCP</strong>, and the delegate can do the activity of a fraud ML engineer:</p> <ol dir="auto"> <li><strong>Build the workflow.</strong> It defines what to decide, which questions to ask a decision model, and which sectors to score.</li> <li><strong>Design experiments.</strong> It proposes variants: a decision example alone, logistic regression on your numbers, gradient-boosted trees, a stack of them, or the decision model's answers blended alongside your numbers in one model.</li> <li><strong>Let Kairos run them.</strong> The server trains all type on your oldest tagged data, chooses on the next, and tests on the newest, afterward reports ROC-AUC, PR-AUC, the acquire complete a baseline alongside its 95% interval, and precision and recall at your thresholds.</li> <li><strong>Pick the victor and container it.</strong> The delegate explains its choice, applies the type as the workflow's next version, and comes rear whenever new labels arrive.</li> </ol> <div data-snippet-clipboard-copy-content=" ROC-AUC 0.949 on validation, 0.930 on test. Publishing it as v6.&quot;"><pre lang="text">You: "Our chargebacks went up. Find a improved example for shopify_order and publish it if it wins." Agent: designs six variants &rarr; create_workflow_experiment &rarr; says the results &rarr; "Logistic regression on the order's numbers affirmative Grayson's answers wins: ROC-AUC 0.949 on validation, 0.930 on test. Publishing it as v6." </pre></div> <div dir="auto"><h2 tabindex="-1" dir="auto">Decision models and traditional ML, together</h2><a href="https://en.mycoding.id/category/technology" target="_blank"><svg data-component="Octicon" viewbox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Kairos is built about <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow"><strong>Grayson</strong></a>, Finic's decision model. You ask it questions in plain tongue ("Does the shipping location appearance akin a reshipper?", "Is this email throwaway?") and it answers alongside calibrated probabilities. Decision models are powerful anywhere traditional ML is weak:</p> <ul dir="auto"> <li><strong>Few labels.</strong> Grayson plant on day one, before you have the thousands of chargebacks a example needs to study from.</li> <li><strong>Unstructured data.</strong> It says descriptions, emails, names, addresses, notes and item titles, which a gradient-boosted tree can't.</li> <li><strong>Explanations.</strong> Every answer is a inquiry you wrote, so all decision says why.</li> </ul> <p dir="auto">Traditional models are powerful anywhere decision models are weak: they study your own outcomes precisely, from your own numbers, and they disbursal nothing per decision. Kairos lets you merge both: Grayson's answers rotate into features next to your sectors in a <strong>logistic regression</strong> or <strong>gradient-boosted trees</strong> (XGBoost-compatible, trained in Kairos itself), and experiments inform you which blend wins on your data.</p> <p dir="auto"><a href="https://en.mycoding.id/category/technology" target="_blank"><img src="https://github.com/finic-ai/kairos/raw/main/docs/images/readme/kairos-decision.jpg" alt=" the hazard score, the outcome, and the signals Grayson found, all alongside its probability" width="100%"></a></p> <p dir="auto">Sign up at <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow"><strong>kairos.finic.ai</strong></a>. Create a sandbox environment, a concealed key, and you're prepared to dispatch events.</p> <p dir="auto">In the console, open <strong>Settings &rsaquo; MCP</strong>, rotate on the tool groups your delegate needs, and create a key. Then, in Claude Code:</p> <div dir="auto" data-snippet-clipboard-copy-content='//kairos.finic.ai/mcp --header &quot;Authorization: Bearer ksk_…&quot;'><pre>claude mcp add --transport http kairos https://kairos.finic.ai/mcp --header <span><span>"</span>Authorization: Bearer ksk_&hellip;<span>"</span></span></pre></div> <p dir="auto">Cursor, Codex and VS Code activity the identical way: see <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">MCP for agents</a>. Then ask your delegate to appearance at your decisions, build a workflow, or run an experiment.</p> <div dir="auto" data-snippet-clipboard-copy-content="npm instal @finic-ai/kairos # or: pip instal finic-kairos"><pre>npm instal @finic-ai/kairos <span><span>#</span> or: pip instal finic-kairos</span></pre></div> <div dir="auto" data-snippet-clipboard-copy-content='import { Kairos } from &quot;@finic-ai/kairos&quot;; const kairos = new Kairos({ apiKey: process.env.KAIROS_API_KEY!, baseUrl: &quot;https://kairos.finic.ai&quot; }); await kairos.defineAction(&quot;withdrawal&quot;, { subject: &quot;user&quot;, hold: &quot;Should this withdrawal be held since the document shows signs of fraud or takeover?&quot;, }); kairos.track(&quot;login&quot;, { userId: &quot;user_42&quot;, deviceId: &quot;dev_9&quot;, ipCountry: &quot;GB&quot; }); const decision = await kairos.decide({ type: &quot;withdrawal&quot;, userId: &quot;user_42&quot;, usd: 900 }); // { decision: &quot;approve&quot; | &quot;step_up&quot; | &quot;review&quot; | &quot;block&quot;, riskScore, reasons, … }'><pre><span>import</span> <span>{</span> <span>Kairos</span> <span>}</span> <span>from</span> <span>"@finic-ai/kairos"</span><span>;</span> <span>const</span> <span>kairos</span> <span>=</span> <span>new</span> <span>Kairos</span><span>(</span><span>{</span> <span>apiKey</span>: <span>process</span><span>.</span><span>env</span><span>.</span><span>KAIROS_API_KEY</span><span>!</span><span>,</span> <span>baseUrl</span>: <span>"https://kairos.finic.ai"</span> <span>}</span><span>)</span><span>;</span> <span>await</span> <span>kairos</span><span>.</span><span>defineAction</span><span>(</span><span>"withdrawal"</span><span>,</span> <span>{</span> <span>subject</span>: <span>"user"</span><span>,</span> <span>hold</span>: <span>"Should this withdrawal be held since the document shows signs of fraud or takeover?"</span><span>,</span> <span>}</span><span>)</span><span>;</span> <span>kairos</span><span>.</span><span>track</span><span>(</span><span>"login"</span><span>,</span> <span>{</span> <span>userId</span>: <span>"user_42"</span><span>,</span> <span>deviceId</span>: <span>"dev_9"</span><span>,</span> <span>ipCountry</span>: <span>"GB"</span> <span>}</span><span>)</span><span>;</span> <span>const</span> <span>decision</span> <span>=</span> <span>await</span> <span>kairos</span><span>.</span><span>decide</span><span>(</span><span>{</span> <span>type</span>: <span>"withdrawal"</span><span>,</span> <span>userId</span>: <span>"user_42"</span><span>,</span> <span>usd</span>: <span>900</span> <span>}</span><span>)</span><span>;</span> <span>// { decision: "approve" | "step_up" | "review" | "block", riskScore, reasons, &hellip; }</span></pre></div> <p dir="auto">You need Node.js 22, pnpm 10 and a Grayson API key from <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">portal.finic.ai</a>. No repository to set up: the server starts its own Postgres.</p> <div dir="auto" data-snippet-clipboard-copy-content="pnpm install cp .env.example .env # set GRAYSON_API_KEY pnpm kairos dev # the API on http://localhost:8787 and the console on http://localhost:5273"><pre>pnpm install cp .env.example .env <span><span>#</span> set GRAYSON_API_KEY</span> pnpm kairos dev <span><span>#</span> the API on http://localhost:8787 and the console on http://localhost:5273</span></pre></div> <p dir="auto">For your team, docker create up --build. See <a href="https://en.mycoding.id/category/technology" target="_blank">Self-hosting</a> and <a href="https://en.mycoding.id/category/technology" target="_blank">Local setup</a>.</p> <b>The CLI</b> <div dir="auto" data-snippet-clipboard-copy-content='pnpm kairos signup # the local server, a new account pnpm kairos login --profile prod --url https://kairos.finic.ai --email you@example.com pnpm kairos keys create &quot;My server&quot; # a concealed key for your code pnpm kairos actions define withdrawal --data @withdrawal.json pnpm kairos import events transactions.csv --type transaction --ts created_at --entity user=customer pnpm kairos decide withdrawal -e user=user_42 -p usd=900 pnpm kairos workflows run review_payout -i user=user_42 --wait pnpm kairos --help # all command'><pre>pnpm kairos signup <span><span>#</span> the local server, a new account</span> pnpm kairos login --profile prod --url https://kairos.finic.ai --email you@example.com pnpm kairos keys create <span><span>"</span>My server<span>"</span></span> <span><span>#</span> a concealed key for your code</span> pnpm kairos actions define withdrawal --data @withdrawal.json pnpm kairos import events transactions.csv --type transaction --ts created_at --entity user=customer pnpm kairos decide withdrawal -e user=user_42 -p usd=900 pnpm kairos workflows run review_payout -i user=user_42 --wait pnpm kairos --help <span><span>#</span> all command</span></pre></div> <p dir="auto">To have kairos on your path, run pnpm nexus --global in apps/cli.</p> <ul dir="auto"> <li><strong>Shopify:</strong> decide all order, clasp risky ones for review, and study from chargebacks. To get the Kairos app for your store, attain the Finic squad on <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">Discord</a> or at <a href="https://en.mycoding.id/category/technology" target="_blank">support@finic.ai</a>.</li> <li><strong>Inbound webhooks:</strong> obtain events from providers specified as Stripe. See <a href="https://en.mycoding.id/category/technology" target="_blank">Inbound webhooks</a>.</li> </ul> <p dir="auto">The docs are at <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">kairos.finic.ai/docs</a>, and in <a href="https://en.mycoding.id/category/technology" target="_blank">docs/</a>.</p> <table readabilitydatatable="1"> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Overview</a></td> <td>What Kairos does, how a decision is made, and what it does not do</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Quickstart</a></td> <td>A archetypal decision in a few minutes</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">MCP for agents</a></td> <td>Connect Claude Code, Cursor, Codex or VS Code</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Models and experiments</a></td> <td>Scoring models, and experiments that difference them</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Workflows</a></td> <td>Triggers, steps, expressions and runs</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Concepts</a></td> <td>Entities, events, labels, links, actions, policies, decisions</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Import your history</a></td> <td>Load existing events, customers and outcomes from files</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">TypeScript SDK</a> &middot; <a href="https://en.mycoding.id/category/technology" target="_blank">Python SDK</a></td> <td>The two clients</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">API reference</a></td> <td>Every HTTP endpoint</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Queues and cases</a></td> <td>Review activity for people</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Self-hosting</a></td> <td>Docker, Postgres, migrations, configuration, security</td> </tr> <tr> <td><a href="https://en.mycoding.id/category/technology" target="_blank">Working on Kairos</a></td> <td>The repository, the server, the tests and the evaluation suite</td> </tr> </tbody> </table> <table readabilitydatatable="1"> <thead> <tr> <th>Path</th> <th>What it is</th> </tr> </thead> <tbody> <tr> <td>apps/server</td> <td>The HTTP API and MCP server. Hono on Node.js, Postgres through Drizzle.</td> </tr> <tr> <td>apps/console</td> <td>The web console. React and Vite.</td> </tr> <tr> <td>apps/cli</td> <td>kairos, the CLI: starts Kairos, connects to a server, and calls its API.</td> </tr> <tr> <td>packages/core</td> <td>The decision path, the example scorers and the tree trainer.</td> </tr> <tr> <td>packages/sdk</td> <td>@finic-ai/kairos, the TypeScript client.</td> </tr> <tr> <td>packages/sdk-python</td> <td>finic-kairos, the Python client.</td> </tr> <tr> <td>packages/eval</td> <td>The evaluation suite and the experiments.</td> </tr> <tr> <td>templates/</td> <td>Action definitions and event shapes to copy.</td> </tr> <tr> <td>examples/</td> <td>Runnable scenarios, end to end.</td> </tr> <tr> <td>docs/</td> <td>The documentation.</td> </tr> </tbody> </table> <div dir="auto" data-snippet-clipboard-copy-content="pnpm test # all tests; no network pnpm test:python # the tests of the Python SDK pnpm typecheck"><pre>pnpm <span>test</span> <span><span>#</span> all tests; no network</span> pnpm test:python <span><span>#</span> the tests of the Python SDK</span> pnpm typecheck</pre></div> <ul dir="auto"> <li><strong>Discord:</strong> questions, ideas and show-and-tell, at <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow">discord.gg/4zRwRCK6Mx</a></li> <li><strong>Email:</strong> <a href="https://en.mycoding.id/category/technology" target="_blank">support@finic.ai</a></li> <li><strong>Contributing:</strong> issues and drag requests are welcome. Read <a href="https://en.mycoding.id/category/technology" target="_blank">Working on Kairos</a> first.</li> </ul> <p dir="auto">Kairos is licensed under the <a href="https://en.mycoding.id/category/technology" target="_blank">Apache License 2.0</a>.</p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/show-hn-kairos-open-source-risk-and-fraud-decisioning-platform-75493</guid> <pubDate>Tue, 03 Nov 2026 22:16:48 +0700</pubDate> <author><![CDATA[support@mycoding.id (Riki Setiawan)]]></author> </item> <item> <title><![CDATA[Google’s Search Volume Is About 5x ChatGPT’s, OpenAI Says]]></title> <description><![CDATA[Google’s Search Volume Is About 5x ChatGPT’s, OpenAI Says. ChatGPT's search-like queries equal concerning a fifth of Google's volume, its creator says, counting all inquiry that sends it to the web. Traffic data differs. The...]]></description> <media:thumbnail url="https://en.mycoding.id/site/assets/img/og-image.png"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/google-s-search-volume-is-about-5x-chatgpt-s-openai-says-75496</link> <content:encoded><![CDATA[<div class="sej-article-content gototop-pos "> <div class="sss2_sllo_o6"> </div> <div id="narrow-cont"><p>ChatGPT receives approximately one-fifth as many search-like queries as does Google, according to ChatGPT person merchandise guide Adam Fry.</p> <p>The item he made concerning the quantity of search-like queries was shared alongside Alex Kantrowitz in an open conversation during a Monday evening meal in New York hosted by OpenAI. The copy was afterward <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">posted by Big Technology</a> on Tuesday.</p> <p>OpenAI counts a hunt all period a inquiry sends ChatGPT to the web, Fry said. The visits ChatGPT sends to websites are a distinct measure, and exterior data on that traffic puts ChatGPT far rearward Google.</p> <h2>How OpenAI Counts A Search</h2> <p>Alex Kantrowitz of Big Technology asked Fry whether a conversation that includes a hunt counts as one, or whether all inquiry requiring a web hunt counts separately. Fry replied:</p> <blockquote><p>“Every period you ask a inquiry and go hunt the web, that’s a search.”</p></blockquote><div data-total="4" id="SEJ_300x250_UnderPost_1-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="0" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_1" id="SEJ_300x250_UnderPost_1" class="sadslots"> </div> </div> </div> </div> <p>He stated group archetypal came to ChatGPT mostly for penning and coding help, which they wouldn’t have searched for. Over the former year, he said, they’ve brought questions concerning people, places and things that need up-to-date information, affirmative backing and health questions, anywhere ChatGPT does a web search. He described the category as item users would have taken to a traditional hunt engine.</p> <p>Fry, in the published interview, did not disclose which Google fig was referenced; for how lengthy the difference is based on; nor does he province which regions are covered. He has additionally been asked if one-fifth of Google’s size makes ChatGPT multiple times bigger than Bing. The study by Big Technology indicates that the figure of weekly energetic users of ChatGPT grew by 20% (from 1 milliard to 1.2 billion) complete the final two months.</p><div id="summita-wrapa_112" class="middle_p_txt"></div> <h2>What Outside Data Shows</h2> <p>In February, <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Ahrefs had estimated</a> the hunt quantity of ChatGPT to be about 12 percent that of Google’s hunt quantity using a definition of hunt that was distinct from that used by OpenAI. It began alongside 2.5 milliard regular ChatGPT prompts in July 2025 (from a study by Harvard University and OpenAI) and resolute that about 65 percent were the category of query users would have earlier looked up on Google.</p> <p>Using this data, it compared those numbers alongside the complete 5 trillion searches per twelvemonth Google announced in March 2025. The author stated that 65% was higher than the portion the researchers had classified as search. That method sorts prompts by the benevolent of request, during Fry’s fig counts web searches.</p><div data-total="4" id="SEJ_300x250_UnderPost_3-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="2" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_3" id="SEJ_300x250_UnderPost_3" class="sadslots"> </div> </div> </div> </div> <p>Ahrefs additionally <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">tracks anywhere traffic to websites comes from</a> throughout sites that use its liberated Web Analytics tool. In October, throughout 118,671 sites, Google accounted for 24.74% of tracked traffic and ChatGPT for 0.36%, according to the tracker’s Nov. 3 update.</p> <h2>What Google Reports</h2> <p>Alphabet’s third-quarter release, which <a href="https://en.mycoding.id/category/business" target="_blank">I covered on Oct. 28</a>, gives Google’s hunt query growth as a charge fairly than a count. <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">In the release</a>, CEO Sundar Pichai stated AI investments are driving general hunt query growth and that Google’s “year-over-year query growth charge is the highest it’s been in the final five years.”</p> <h2>Why This Matters</h2> <p>OpenAI’s data comparing search-like queries by users of ChatGPT versus those using Google indicates the approximate 1/5th ratio. Fry’s counting regulation includes lone the hunt requests made by ChatGPT users in command to dispatch a inquiry to the Web. Ahrefs’ referral tracker tracks the figure of visitors that are directed to websites. In this data set, Google has an overwhelming amount of referrals compared to ChatGPT.</p> <p>Neither Fry’s figure nor Google’s year-over-year growth charge illustrates if ChatGPT searches are replacing searches on Google. If ChatGPT’s size is included in a conduit plan, afterward whenever reporting hunt it have to be accompanied by the definitions of query quantity and referral traffic, which volition provision two distinct metrics.</p> <h2>Looking Ahead</h2> <p>Ahrefs’ tracker reports referral shares duration by month, giving you a regular exterior viewpoint on the traffic ChatGPT sends. OpenAI’s approximately one-fifth proportion is difficult to difference alongside another estimates until the business clarifies which Google fig it used.</p> <p><em>Featured Image: RixAiArt/Shutterstock</em></p> </div> <div id="bcats" class="bottom-cat narrow-cont"> <span class="sej-category boxed cat-label">Category</span> <a href="https://en.mycoding.id/category/business" target="_blank">News</a> <a href="https://en.mycoding.id/category/business" target="_blank">AI Search</a> </div> <div class="sej-above-author-widget"> <div class="sej-widget clearfix"> <div class="sej-badge-box"> <a href="https://en.mycoding.id/category/business" target="_blank" data-placement="Under Article" aria-label="Add Search Engine Journal as a preferred origin on Google"> <svg class="sej-gps-g" viewbox="0 0 48 48" aria-hidden="true" focusable="false"> <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path> <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path> <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path> <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path> </svg> <span class="sej-gps-text">Add <b>SEJ</b> as a preferred origin on Google</span> </a> </div> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/google-s-search-volume-is-about-5x-chatgpt-s-openai-says-75496</guid> <pubDate>Tue, 03 Nov 2026 22:13:38 +0700</pubDate> <author><![CDATA[support@mycoding.id (Matt G. Southern)]]></author> </item> <item> <title><![CDATA[Those Jeff Bezos hair transplant photos are very fake]]></title> <description><![CDATA[Those Jeff Bezos hair transplant photos are very fake. Amazon originator Jeff Bezos and performer Jason Statham have a distinctive characteristic in common: They're the two famously bald, and that certainly hasn't changed in the la...]]></description> <media:thumbnail url="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Fake-Jeff-Bezos-Jason-Statham-hair-photo-edits.jpg?quality=90&amp;strip=all&amp;crop=0%2C10.732984293194%2C100%2C78.534031413613&amp;w=1200"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/those-jeff-bezos-hair-transplant-photos-are-very-fake-75489</link> <content:encoded><![CDATA[<div id="zephr-anchor"><p>Amazon originator Jeff Bezos and performer Jason Statham have a distinctive characteristic in common: They&rsquo;re the two famously bald, and that certainly hasn&rsquo;t changed in the final few days. However, there are <a href="https://en.mycoding.id/category/technology" target="_blank">some images</a> of the two men <a href="https://en.mycoding.id/category/technology" target="_blank">circulating about X</a>, <a href="https://en.mycoding.id/category/technology" target="_blank">Threads</a>, and <a href="https://en.mycoding.id/category/technology" target="_blank">Bluesky</a> in which they the two have substantially additional tress than their customary shaved look, which in Bezos&rsquo; case appears to be <em>very</em> freshly transplanted. It&rsquo;s all fair photo editing fakery, AI or otherwise.</p><p>It&rsquo;s unclear <a href="https://en.mycoding.id/category/technology" target="_blank">how viral</a> these <a href="https://en.mycoding.id/category/technology" target="_blank">posts are</a>, but they&rsquo;re prevalent adequate that a few members of the <em>Verge</em> squad have encountered them in their social media feeds. Some group who shared them claimed (or were apparently fooled into believing) that Bezos and Statham had undergone tress transplant surgery. Generative AI tools have made this benevolent of photo manipulation or outright innovation additional accessible and convincing, and since <a href="https://en.mycoding.id/category/technology" target="_blank">AI labeling solutions</a> on social media <a href="https://en.mycoding.id/category/technology" target="_blank">broadly suck</a> at flagging this fakery, it&rsquo;s uncomplicated to be misled unless you&rsquo;re wary of <em>everything</em> you see online. In a earth anywhere social media shitposters can rotate involvement into a income stream, they&rsquo;re not going to halt churning out attention-grabbing fabricated nonsense anytime soon.</p><p>We don&rsquo;t cognize if AI tools were used to create the follicled Bezos and Statham edits &mdash; none of the images I tested flagged for Content Credentials or SynthID markers. We additionally can&rsquo;t completely established whenever they were archetypal posted or who made them, but they <em>are</em> certainly fake, and it lone took me a brace of minutes to verify it.</p><p>In the two cases, I ran the photos through Google&rsquo;s reverse depiction hunt tool. For the Bezos debunk, I established photographs of him in a akin backdrop surroundings and wearing the exact identical outfit (with, yes, no hair) that included a watermarked depiction credit at the base left. Searching for the credit afterward led me to the <a href="https://en.mycoding.id/category/technology" target="_blank">original photographs</a> in their unaltered state, which were taken in 2023. Finding the first tressless images of Statham was equal easier &mdash; the reverse depiction hunt immediately surfaced watermarked versions of the originals, which were <a href="https://en.mycoding.id/category/technology" target="_blank">snapped by a paparazzo in 2011</a>.</p><div><div><div><div class=""><div><p><a href="https://en.mycoding.id/category/technology" target="_blank" data-pswp-height="555" data-pswp-width="587" target="_blank" rel="noreferrer"><img alt="A tweet claiming to display a image of Jeff Bezos before and following undergoing a tress transplant." data-chromatic="ignore" loading="lazy" decoding="async" data-nimg="fill" sizes=" 1023px) 50vw, 700px" srcset="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=256 256w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=376 376w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=384 384w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=415 415w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=480 480w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=540 540w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=640 640w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=750 750w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=828 828w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1080 1080w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1200 1200w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1440 1440w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1920 1920w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2048 2048w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400 2400w" src="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/Jeff-Bezos-fake-hair-transplant-post-X.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400"></a></p></div></div></div></div></div><p>There&rsquo;s another evidence too if you cognize what to appearance for. The chief emblem is that it&rsquo;s likely unattainable for Bezos and Statham to be realistic candidates for tress replacement operation anyway; it requires you to have adequate &ldquo;donor&rdquo; tress to sacrifice from the rear and sides of your caput to afterward replant nearer to your desired hairline. You can <em>technically</em> obtain it from another places (or equal another people), but doing so is incredibly rare because of undesirable results and rejection concerns. Transplant patients additionally typically cognition several beautiful theatrical facial swelling for the archetypal week or so, which Bezos shows no signs of. Wigs, toupees, and another tress systems can additionally be used as nonpermanent tress restoration solutions, but as person who used to create and instal them professionally, it would be an <em>astounding</em> whoopsie for person as affluent and connected as Bezos to go this path and motionless end up <a href="https://en.mycoding.id/category/technology" target="_blank">looking akin a Chia Pet</a>.</p><p>This isn&rsquo;t the archetypal period photo-manipulated fakery has fooled group throughout social media, and alongside ongoing generative AI advancements, it likely won&rsquo;t be the last. Previous incidents gave us the <a href="https://en.mycoding.id/category/technology" target="_blank">viral swagged-out pope</a>, and latest trends have seen <a href="https://en.mycoding.id/category/technology" target="_blank">paparazzi photographs of celebrities</a> akin Callum Turner, Harry Styles, and Noah Schnapp being manipulated to eliminate their shirts. These kinds of edits are typically designed to rack up likes, reposts, and another involvement &mdash; they perform into our fascination alongside celebrities&rsquo; lives alongside fabricated situations that are <em>just</em> outlandish adequate to be believable, catch our attention, and be shared about as the latest hot gossip by those who are fooled, or who merely don&rsquo;t attention to verify the facts.</p><p>If you&rsquo;re always unsure if there&rsquo;s fakery afoot alongside images of celebrated faces, fair recall that most of the convincing edits (AI or otherwise) are according to genuine photos that you can hunt downward to verify the first source.</p><div><p><span><strong>Follow topics and authors</strong> from this narrative to see additional akin this in your personalized homepage nourish and to obtain email updates.</span></p><ul><li id="follow-author-article_footer-dmcyOmF1dGhvclByb2ZpbGU6OTU="><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span><span>Jess Weatherbed</span></span></span></li><li><li><li><li></ul></div></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/those-jeff-bezos-hair-transplant-photos-are-very-fake-75489</guid> <pubDate>Tue, 03 Nov 2026 22:01:07 +0700</pubDate> <author><![CDATA[support@mycoding.id (Jess Weatherbed)]]></author> </item> <item> <title><![CDATA[These 10 New Features Are Coming to iOS 27.3]]></title> <description><![CDATA[These 10 New Features Are Coming to iOS 27.3. Apple fair released the archetypal developer beta for iOS 27.3. Here's what's new.]]></description> <media:thumbnail url="https://lifehacker.com/imagery/articles/01M6HETAHMXZFESNG7KRKSXEV0/hero-image.jpg"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/these-10-new-features-are-coming-to-ios-27-3-75495</link> <content:encoded><![CDATA[<div class="leading-normal prose-sm m-0 line-clamp-5 font-normal">Jake Peterson is Lifehacker’s Tech Editor, and has been covering tech news and how-tos for nearly a decade. His squad covers all things technology, including AI, smartphones, computers, equivalent consoles, and subscriptions.</div> <hr class="custom-gradient-background my-6 h-[6px] max-w-[75px] border-0"> <p>Apple dropped the archetypal developer beta for iOS 27.3 on Tuesday. While this update isn't as ample as iOS 27 proper, it's amazingly feature-filled for a 0.3 update. This is lone a beta, so item could (and apt will) alter before Apple officially launches the update. But, as it stands, iOS 27.3 tests 10 new features—including one characteristic the business trialed in the former beta. </p><p>Technically, anyone alongside a compatible iPhone can try out iOS 27.3 correct now—assuming you enroll your Apple Account in the developer program. But a term of warning: Betas can be temperamental, and could be risky. As such, I'd propose avoiding the beta until Apple releases the community beta, which comes following a bit additional evaluation to metal out larger issues. Either way, create certain to create a complete backup of your iPhone to a Mac or PC first, as issues alongside the beta could outcome in imperishable data loss. </p><h2 id="audio-intelligence">Audio Intelligence</h2><p>With watchOS 27, Apple released "Audio Intelligence," a new set of features for Apple Watch Series 12 and Ultra 4. Audio Intelligence uses the watches' new S11 chip, alongside alongside on-device AI and cloud-based AI, to run new features, akin Sound Recognition and Shazam (music recognition).</p><div class="pt-5" id="related-video"> <div class="mb-5"> <img class="w-12" src="https://lifehacker.com/images/short-lifehacker-logo.jpg" alt="Lifehacker Logo"> <div class="relative w-max"> <span class="relative z-10 font-akshar text-2xl font-semibold text-[#1f2937] md:text-3xl md:font-[550]">You May Also Like</span> <div class="absolute bottom-[6px] left-1/2 z-0 h-[10px] w-[calc(100%+10px)] -translate-x-1/2 bg-brand-green-100 px-1 md:bottom-1 md:h-3 md:w-[calc(100%+14px)]"></div> </div> </div> <div class="aspect-video w-full overflow-hidden rounded-md"> <div id="video-container-01M6HN9ZSC7MSY55RGJ594YD1V"></div> </div> </div> <p>With iOS 27.3, however, the business is now officially evaluation the another two Audio Intelligence features it initially announced alongside watchOS 27. First, there's Live Rewind: By double-clicking the observe crown, you can drag up a copy of the final 15 seconds of a conversation. Siri Recap, on the another hand, displays summaries of conversations you had that day, in case you need a refresher on any chats you power have alternatively forgotten about, </p><p>The business generated several disagreement whenever it archetypal announced these two Audio Intelligence features, since, on the surface, it appears akin these new Apple Watches are basically spying on group all day long. According to Apple, however, that isn't really the case. The business says Audio Intelligence is private, and never records or stores any audio. No speakers are always identified, and content results (both transcripts and summaries) are deleted automatically following a set duration of period unless the person saves them to the Siri app. You can peruse additional concerning <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">how Audio Intelligence plant here</a>. </p><p>Despite their claims, I'm certain there volition motionless be powerful feelings surrounding these Audio Intelligence features. We'll have to see whether Apple can demonstrate Live Rewind and Siri Recap aren't all that creepy throughout the iOS 27.3 beta process.</p><h2 id="siri-ai-app-actions">Siri AI app actions</h2><p>iOS 27.3 additionally introduces app actions for Siri AI. Apple is evaluation new abilities for Siri AI, including organizing files, preparedness events, or adding photos to albums. You could ask Siri to arrange your Downloads folder, or delete records that haven't been opened in additional than a year. You could ask Siri to discover a coffee shop you went to final week, or to preserve an part to your Reading List in Safari. You could ask Siri to inspect your calendar and set up a period for an event according to whenever you're free. You can equal ask the aide to schedule, edit, or unsend messages. </p><p>For example, you could ask Siri AI to help you scheme a trip alongside your friends. You could ask the AI to put together a themed playlist in Apple Music, agenda a communication to a collection concerning an upcoming trip, arrange the websites you've been visiting in Safari into a tab group, and, following the trip, ask Siri to move your finest photos to your favorites album. These new actions activity in the following apps: Calendar, Files, Finder, Journal, Mail, Maps, Messages, Music, Notes, Photos, Preview, Reminders, Safari, Shortcuts, and Weather. Developers can additionally add Siri AI app actions assistance to their own apps. </p><h2 id="the-new-health-app-is-back">The new Health app is back</h2><p>Apple started evaluation its new Health app alongside the iOS 27.2 beta, but pulled the redesign before the authoritative release. Now, alongside iOS 27.3, the new app is back. The new Health app has a health dashboard for the archetypal time, as fine as new features akin Health Age and movement assessments. It seems to be pulling from several famous competitor services, hopefully, for the better. For additional on the new Health app, <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">check out Lifehacker health publishing company Beth Skwarecki's explainer</a>. </p><h2 id="fitness-gym-strength">Fitness+ Gym Strength</h2><p>Continuing on the Health track, iOS 27.3 additionally introduces "Gym Strength." This is a new Fitness+ characteristic that offers a personalized four-week strength-training plan. You can customize these plans to encounter your goals, cognition level, and schedule, and they modify as you progress. You'll get recommendations according to your cognition alongside exercises, reps, and sets, including video demos for exercises. You can admission Gym Strength on the two iPhone and iPad, and Apple Watches are optional—though you can log your advancement alongside the wearable if you have it.</p><div class="py-0" data-ga-click data-ga-template="News" data-ga-module="openweb_widget" data-ga-element="openweb_scroll" data-ga-item="openweb_scroll_midpage" x-data="&#039;, e); } } }" x-init="fetchCommentsCount()" x-cloak> <div class="absolute top-1/2 hidden w-full -translate-y-1/2 border-t-[1.5px] border-dashed border-black sm:block"></div> <div class="relative flex justify-center"> <div class="flex max-w-fit items-center gap-x-3 bg-white px-5"> <div class="relative"> <span class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 font-akshar text-sm font-medium text-black" aria-live="polite" x-show="hasComments" x-text="commentsCount"></span> <svg class="h-8 w-8 text-black" role="img" aria-hidden="true"> </svg> </div> <span class="text-sm font-medium text-black"> What do you think so far? </span> </div> </div> </div> <h2 id="safari-gets-vertical-tabs">Safari gets vertical tabs</h2><p>Vertical tabs have been a favorite among browser aficionados, as they provision you additional display genuine asset in your browser during keeping your tabs off the side. Apple hasn't made the jump—until now. This characteristic plant alongside iPads operating iPadOS 27.3 as fine as Macs operating macOS 27.3. </p><h2 id="safari-can-now-automatically-turn-websites-dark">Safari can now automatically rotate websites dark</h2><p>Another new Safari characteristic in evaluation is "Adaptive Dark Mode." This characteristic forces websites into a dreary theme, if they don't have a native theme of their own. <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">There are third-party apps that can do this</a>, but this is the archetypal period Apple has offered this characteristic built into Safari.</p><h2 id="standby-gets-an-upgrade">StandBy gets an upgrade</h2><p>Apple is additionally evaluation new StandBy experiences alongside iOS 27.3, which were earlier lone accessible on the iPhone Duo. When you rotate your iPhone sideways during plugged in, you'll discover new Analog and Digital Clock faces alongside new customization options. There's additionally a new Photos face, alongside the choice to drag images from Shared Albums. </p><h2 id="iphone-duo-gets-reachability">iPhone Duo gets Reachability </h2><p>"Reachability" pulls your iPhone's display downward towards the base of the screen, so you can admission items towards the top of the display alongside one hand. It's a helpful characteristic for those of us alongside big iPhones, and now, there's no iPhone bigger than the Duo. With iOS 27.3, Apple is evaluation Reachability for its archetypal foldable phone. It's a bit akin the inverse of how Reachability currently works: You can rub on the remaining or correct flank of your Duo's display to change the another flank of the display towards your current position. If you're holding your Duo in your remaining hand, a rub of the remaining flank volition drag the correct flank complete to the left, and vice versa. </p><h2 id="siri-ai-is-available-in-new-languages">Siri AI is accessible in new languages </h2><p>Apple is additionally rolling out new languages for Siri AI in iOS 27.3. Now, Apple's astute aide supports Traditional Chinese, Vietnamese, Turkish, and Norwegian.</p><h2 id="siri-mode-on-ipados">Siri Mode on iPadOS</h2><p>If you have an Apple Intelligence-compatible iPad operating iPadOS 27.3, you now have admission to Siri Mode in Camera. As alongside iOS, you can open the Camera app on iPadOS to admission Siri Mode, and ask Siri concerning your surroundings. </p> <div class="leading-normal prose-sm mt-4 line-clamp-2"> <p></p><p>Covering tech news, how-to guides, explainers, and more.</p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/these-10-new-features-are-coming-to-ios-27-3-75495</guid> <pubDate>Tue, 03 Nov 2026 22:00:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Jake Peterson)]]></author> </item> <item> <title><![CDATA[ChatGPT's search volume is now roughly 20% of Google's. Wow, people were really sick of Google, huh?]]></title> <description><![CDATA[ChatGPT's search volume is now roughly 20% of Google's. Wow, people were really sick of Google, huh?. OpenAI's Adam Fry told Big Technology that ChatGPT has about a fifth of Google's hunt query volume. Google can't be thrilled concerning that.]]></description> <media:thumbnail url="https://i.insider.com/6aea322c94c155f6acb2e152?width=1200&amp;format=jpeg"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/chatgpt-s-search-volume-is-now-roughly-20-of-google-s-wow-people-were-really-sick-of-google-huh-75483</link> <content:encoded><![CDATA[<div e-name="post-hero" data-component-type="post-hero" data-load-strategy="exclude"> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject"> <div> <p><img src="https://i.insider.com/6aea3012f5f059691404abb4?width=2000&amp;format=jpeg&amp;auto=webp" srcset="https://i.insider.com/6aea3012f5f059691404abb4?width=400&amp;format=jpeg&amp;auto=webp 400w, https://i.insider.com/6aea3012f5f059691404abb4?width=500&amp;format=jpeg&amp;auto=webp 500w, https://i.insider.com/6aea3012f5f059691404abb4?width=700&amp;format=jpeg&amp;auto=webp 700w, https://i.insider.com/6aea3012f5f059691404abb4?width=1000&amp;format=jpeg&amp;auto=webp 1000w, https://i.insider.com/6aea3012f5f059691404abb4?width=1300&amp;format=jpeg&amp;auto=webp 1300w, https://i.insider.com/6aea3012f5f059691404abb4?width=2000&amp;format=jpeg&amp;auto=webp 2000w" sizes=" 1280px) 900px" alt="a phone searching google" decoding="sync"> </p></div> <span> <span> <svg aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewbox="0 0 24 24"> <path fill="currentColor" fill-rule="evenodd" d="m4.56 18.5 7.486-7.72 7.394 7.626 2.56-2.64L12.046 5.5 2 15.86l2.56 2.64Z"></path> </svg> <figcaption e-name="image-caption"> <span>People were getting fed up alongside Google search, which made it uncomplicated for ChatGPT to stage in.</span> <span> <span e-name="image-source" itemprop="creditText">Robert Michael/picture alliance via Getty Images</span> </span> </figcaption> </span> </span> </figure> </div> <div data-component-type="image-modal" data-load-strategy="lazy"> <p>OpenAI is coming for Google Search, and it's working.</p><p>"ChatGPT's quantity of search-like queries is now approximately one-fifth the quantity of queries of Google," Adam Fry, ChatGPT's person merchandise lead, told <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">Alex Kantrowitz of the Big Technology newsletter.</a></p><p>It's fine news for OpenAI. For Google? Not so great. It not lone shows that group are consenting to use AI, but that group were really, really, fed up alongside Google hunt results.</p><p>We already knew that essential data searching is currently the top use of LLMs akin ChatGPT. <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">Pew Research Center released a report</a> this summer that showed that the top use case was to "search for information," alongside 42% of American adults surveyed saying they have used AI for that.</p><p>("For tasks at work" was the second most average use, alongside 38% of employed adults reporting that. Lesser uses contain entertainment, getting news, and medicinal advice.)</p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/png" data-srcs='//i.insider.com/6aea31a394c155f6acb2e14a&quot;:{&quot;contentType&quot;:&quot;image/png&quot;,&quot;aspectRatioW&quot;:840,&quot;aspectRatioH&quot;:1064}}' alt="pew inage concerning hunt and activity are most ccommon ai uses"> </p></div> <span> <figcaption e-name="image-caption"> Searching for data is the #1 use for chatbots akin ChatGPT, according to a Pew report.&nbsp; <span e-name="image-source" itemprop="creditText"> Pew Research Center </span> </figcaption> </span> </figure> <p>This study wasn't specifically concerning ChatGPT, but it's by far the most famous AI chatbot (44% of American adults surveyed told Pew they've used ChatGPT, and lone 24% have used Gemini, the next most common).</p><p>ChatGPT now has 1.2 milliard weekly users. We don't cognize how many of those users are doing informational searches as opposed to another things akin coding or generating images, but it seems apt that person who uses it to create images or conversation would additionally ask it for information.</p><p>Google did not immediately react to a petition for comment on the competition from ChatGPT, but final twelvemonth Alphabet CEO Sundar Pichai addressed the matter during an <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">interview</a> alongside Bloomberg's Emily Chang.</p><p>"You've had these chatbots measure up to hundreds of millions of users. We've grown in queries," Pichai stated at the time. "So I think it feels extremely far from a zero-sum equivalent to me. To use another parallel, TikTok came in, everybody started using TikTok. YouTube grew and did very, extremely fine in those moments too."</p> <h2 id="63cbb7a4-03f5-43db-b1af-d3dc14c2bd38" data-toc-id="63cbb7a4-03f5-43db-b1af-d3dc14c2bd38">People started to awareness akin Google hunt had gotten worse</h2><p>Google says that it handles <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">5 trillion searches </a>per year; it's dominated hunt for two decades, and extremely profitably!</p><p>But many group were getting really ill of Google search. So frequently in the final few years, I've heard allies or another group objection how <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">Google hunt feels broken</a>. Search results were so stuffed alongside SEO-friendly links that it frequently felt difficult to<a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow"> rely item </a>or discover the results you really were searching for.</p><p>Users had started to add the term "Reddit" at the end of searches in hopes of getting improved results &mdash; which ended up being <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">a boon in traffic for Reddit </a>(sadly, this didn't last; <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Reddit fair reported a drop</a> in hunt referral traffic because of Google's AI Overviews that it doesn't anticipate to get back).</p><p>So whenever ChatGPT came along, abruptly there was a new way to get data and answers without all the SEO fluff &mdash; and plentifulness of group were thrilled. Sure, the data isn't continually reliable. Everyone should cognize improved than to blindly rely facts doled out by AI, which is prone to hallucinations or fair plain bungling, akin <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">telling group to put glue in their pizza</a>.</p><p>Despite the issues alongside trusting AI for data (and to be fair, it has improved since the glue/pizza fiasco of 2024), it's apparent that lots of group were very, extremely blessed to toggle complete to ChatGPT alternatively of Google for their informational searching needs.</p><p>I think what we should regard is that says a lot additional concerning how <em>bad</em> Google had gotten than it does concerning how <em>good</em> ChatGPT is. There's a compelling case to be made that Google <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">enshittified</a> its flagship merchandise so seriously &mdash; perchance from the years and years of having no meaningful competitors &mdash; that it was a sitting duck, prepared to have its lunch eaten by the archetypal new disruptor to arrive alongside and recommendation group a improved way.</p><p>Google eventually realized it was in trouble, issuing a <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">"code red"</a> in 2022 complete ChatGPT. It power be period to matter another one?</p> </div> <h2>Read next</h2> <div data-recommendations-content data-track-click-shared='&quot;Read next&quot;}'> <div e-name="read-next-list" data-recommendations-list> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> </div> </div> <a e-name="read-next-image-link" data-recommendations-image-link data-recommendations-link tabindex="-1"> <p><img alt=""> </p> </a> <h3> <a e-name="read-next-title-link" data-recommendations-link data-recommendations-title></a> </h3> <div data-component-type="post-bottom-authors" data-load-strategy="exclude" data-track-view='&quot;module_in_view&quot;}' data-track-click-shared='&quot;navigation&quot;}'> <div data-track-view='&quot;module_in_view&quot;}'> <div> <p><span>Katie Notopoulos is a elder equal at Business Insider who writes concerning technology, business, and culture.</span><span>Previously, Katie was a tech newsman at BuzzFeed News and has written for The Atlantic, The New York Times, Fast Company, and MIT Technology Review.</span><span></span> </p> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/chatgpt-s-search-volume-is-now-roughly-20-of-google-s-wow-people-were-really-sick-of-google-huh-75483</guid> <pubDate>Tue, 03 Nov 2026 21:45:10 +0700</pubDate> <author><![CDATA[support@mycoding.id (Katie Notopoulos)]]></author> </item> <item> <title><![CDATA[The midterm races to watch if you care about money, Musk, and the AI boom]]></title> <description><![CDATA[The midterm races to watch if you care about money, Musk, and the AI boom. AI, tech, and data centers are shaping key 2026 midterm races in Ohio, Michigan, Pennsylvania, and Wisconsin. Here are the eight races to watch.]]></description> <media:thumbnail url="https://i.insider.com/6ae8fe2f978e617b0a2a4cfb?width=1200&amp;format=jpeg"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/the-midterm-races-to-watch-if-you-care-about-money-musk-and-the-ai-boom-75484</link> <content:encoded><![CDATA[<div e-name="post-hero" data-component-type="post-hero" data-load-strategy="exclude"> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject"> <div> <p><img src="https://i.insider.com/6ae8f2f3426e175d4818d806?width=2000&amp;format=jpeg&amp;auto=webp" srcset="https://i.insider.com/6ae8f2f3426e175d4818d806?width=400&amp;format=jpeg&amp;auto=webp 400w, https://i.insider.com/6ae8f2f3426e175d4818d806?width=500&amp;format=jpeg&amp;auto=webp 500w, https://i.insider.com/6ae8f2f3426e175d4818d806?width=700&amp;format=jpeg&amp;auto=webp 700w, https://i.insider.com/6ae8f2f3426e175d4818d806?width=1000&amp;format=jpeg&amp;auto=webp 1000w, https://i.insider.com/6ae8f2f3426e175d4818d806?width=1300&amp;format=jpeg&amp;auto=webp 1300w, https://i.insider.com/6ae8f2f3426e175d4818d806?width=2000&amp;format=jpeg&amp;auto=webp 2000w" sizes=" 1280px) 900px" alt="Ken Paxton and James Talarico" decoding="sync"> </p></div> <span> <span e-name="image-source" itemprop="creditText">Michael Gonzalez/Getty; Brandon Bell/Getty; BI</span> </span> </figure> </div> <div data-component-type="image-modal" data-load-strategy="lazy"> <p>The 2026 midterms have arrived.</p><p>Beyond authority of Congress, Tuesday's ballot volition exemplify the degree of Silicon Valley's governmental power and the breadth of the AI backlash.</p><p>SpaceX CEO <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Elon Musk</a>, in particular, has a lot at stake, alongside document donations powering a last-minute attempt to preserve a Texas Senate place and perchance the GOP majority, too.</p><p>In supplement to the candidates, there are big ballot questions looming, none additional so than the California prosperity tax fight.</p><p>Here's what we're watching.</p><h2 id="360bc698-df35-4aa2-9ecc-bf8ac166b6de" data-toc-id="360bc698-df35-4aa2-9ecc-bf8ac166b6de"><strong>Ohio Senate</strong></h2> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6ae9001cfa15dcc2eae9224d&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:4759,&quot;aspectRatioH&quot;:3193}}' alt="Jon Husted walks former Donald Trump"> </p></div> <span> <figcaption e-name="image-caption"> Sen. Jon Husted, a Republican from Ohio, walks former President Donald Trump&nbsp; <span e-name="image-source" itemprop="creditText"> Kevin Dietsch/Getty Images </span> </figcaption> </span> </figure> <p id="6b9cc230-bc6f-46f7-86d2-0c85dcff2c88"><strong>Candidates:</strong> Sen. Jon Husted, a Republican; erstwhile Sen. Sherrod Brown, a Democrat; Bill Redpath, a libertarian; and Greg Levy, an independent</p><p id="6b9cc230-bc6f-46f7-86d2-0c85dcff2c88"><strong>Where it stands: </strong>Husted, a erstwhile lieutenant governor, is trying to suspend on to Vice President JD Vance's Senate seat, but he's facing a fierce difficulty from Brown, a erstwhile three-term legislator who is seeking to come back to Congress. Brown has criticized Husted for his former assistance for data center development. Husted has stated the matter have to be remaining to communities and no longer supports offering tax incentives for new data center construction. Earlier this summer, Senate Republicans' run arm warned AI labs that if Husted goes downward "and data centers get the blame, politicians throughout the nation volition obtain notice &mdash; and they volition not go near the next one."</p><p id="6b9cc230-bc6f-46f7-86d2-0c85dcff2c88"><strong>Polls close:</strong> 7:30 pm EST</p><p id="6b9cc230-bc6f-46f7-86d2-0c85dcff2c88"><strong>The outlook: </strong>Cook Political Report rates it as a "Toss-Up."</p> <p id="6b9cc230-bc6f-46f7-86d2-0c85dcff2c88"><strong>History: </strong>President Donald Trump won the province by 11 points. Brown misplaced to now-Sen. Bernie Moreno, a Republican, by fair under 4 points.</p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6ae8ffc5978e617b0a2a4d18&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:2500,&quot;aspectRatioH&quot;:1666}}' alt="Elon Musk talks during an event"> </p></div> <span> <figcaption e-name="image-caption"> SpaceX CEO Elon Musk&nbsp; <span e-name="image-source" itemprop="creditText"> Mark Schiefelbein/AP </span> </figcaption> </span> </figure> <h2 id="298e19da-b117-4e67-9eef-8fc9de1e95d1" data-toc-id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>Texas Senate</strong></h2><p id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>Candidates: </strong>Texas Attorney General Ken Paxton, a Republican; State Rep. James Talarico, a Democrat; Ted Brown, a libertarian</p><p id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>Where it stands: </strong>Paxton is expecting to keep the place in Republican hands following Trump's endorsement pushed him complete Sen. John Cornyn following a bitter chief and runoff. Cornyn warned that if Paxton won, Republicans would have to expend important sums to assistance an officeholder saddled alongside scandals, impeachment, and a separation on "biblical grounds." Enter Musk. The world's richest man has been frequently trashing Talarico on X. More importantly, Musk has donated at smallest $158 myriad that has been routed to a pro-Paxton excellent PAC.</p><p id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>Polls close: </strong>Most polls in the province near at 8 pm EST, but for locations in the Mountain Time Zone they near at 9 pm EST.</p><p id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>The outlook: </strong>Cook Political Report rates it as a "Toss-Up."</p><p id="298e19da-b117-4e67-9eef-8fc9de1e95d1"><strong>History: </strong>In 2024, President Donald Trump won the province by approximately 14 points. Sen. Ted Cruz, a Republican, won reelection by fair under 9 points. No Texas Democrat has won a statewide ballot since 1994.</p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6ae90074426e175d4818d8ad&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3197,&quot;aspectRatioH&quot;:2132}}' alt="Abdul El-Sayed speaks during an event"> </p></div> <span> <figcaption e-name="image-caption"> Michigan Democratic US Senate nominee Abdul El-Sayed&nbsp; <span e-name="image-source" itemprop="creditText"> Jeff Kowalsky/ AFP via Getty Images </span> </figcaption> </span> </figure> <h2 id="285ef28a-b847-4a77-9174-8cafe1704cb2" data-toc-id="285ef28a-b847-4a77-9174-8cafe1704cb2">Michigan Senate</h2><p id="285ef28a-b847-4a77-9174-8cafe1704cb2"><strong>Candidates: </strong>Former Wayne County Health Director Abdul El-Sayed, a Democrat; erstwhile Rep. Mike Rogers, a Republican; Douglas P. Marsh, Green Party; Lydia Christensen, Libertarian Party</p><p id="285ef28a-b847-4a77-9174-8cafe1704cb2"><strong>Where it stands: </strong>No competition compares to the perform of the Michigan Senate race. On Sunday, Rep. Haley Stevens, who misplaced to El-Sayed following a bitter primary, reversed herself and issued a last-minute endorsement of Rogers. Beyond the headlines, the competition offers several engaging guideline contrasts. Echoing Sen. Bernie Sanders (and Trump), El-Sayed has called for the authorities to obtain equity stakes in AI companies. El-Sayed additionally wants to power tech giants akin Microsoft to divest from AI companies akin OpenAI and Anthropic. Rogers, the Republican hopeful, has called for a intermission on data center betterment in the state. If Republicans desire to clasp the majority, Rogers volition nearly certainly need to flip the seat.</p><p id="285ef28a-b847-4a77-9174-8cafe1704cb2"><strong>Polls close:</strong> Most polls in the province near at 8 pm EST. For counties in the Central Time Zone, polls near at 9 p.m EST.</p><p id="285ef28a-b847-4a77-9174-8cafe1704cb2"><strong>The outlook: </strong>Cook Political Report rates it as a "Lean Democrat."</p><p id="285ef28a-b847-4a77-9174-8cafe1704cb2"><strong>History: </strong>In 2024, Trump won by fair complete 1 point. At the identical time, Sen. Elissa Slotkin narrowly attack Rogers by approximately 202,000 votes. Michigan has not elected a Republican legislator since 1994.</p><h2 id="d7e03cfd-5ecb-4261-abb6-26a72d869536" data-toc-id="d7e03cfd-5ecb-4261-abb6-26a72d869536">Michigan 7th District</h2><p id="d7e03cfd-5ecb-4261-abb6-26a72d869536"><strong>Candidates: </strong>Rep. Tom Barrett, a Republican; Sunrise Movement cofounder William Lawrence, a Democrat; Shane Dedrick, Green Party</p><p id="d7e03cfd-5ecb-4261-abb6-26a72d869536"><strong>Where it stands: </strong>Barrett is seeking reelection in a southernmost Michigan district centered about Lansing. William Lawrence, a cofounder of the advancing climate-focused institution Sunrise Movement, has tried to tie Barrett to a projected $1 milliard hyperscale data center near Mason, Michigan. Barrett has stated that local officials have to be capable to create decisions concerning data centers, contrasting his views alongside Lawrence's assistance of a data center moratorium.</p><p id="d7e03cfd-5ecb-4261-abb6-26a72d869536"><strong>The outlook: </strong>Cook Political Report rates it a "Toss-Up."</p><p id="d7e03cfd-5ecb-4261-abb6-26a72d869536"><strong>History: </strong>In 2024, Trump won the district by fair complete 1 point, according to The Downballot's estimates. Barrett won by fair under 17,000 votes.</p><h2 id="525f283c-9603-423e-a916-ec48024eca70" data-toc-id="525f283c-9603-423e-a916-ec48024eca70"><strong>Ohio 9th District</strong></h2><p id="525f283c-9603-423e-a916-ec48024eca70"><strong>Candidates: </strong>Rep. Marcy Kaptur, a Democrat; erstwhile Ohio province Rep. Derek Merrin, a Republican</p><p id="525f283c-9603-423e-a916-ec48024eca70"><strong>Where it stands: </strong>Republicans' hopes of defying history<strong> </strong>and keep their bulk run squarely through Rep. Marcy Kaptur, a 22-term Ohio Democrat, and her northwestern Ohio district that stretches from the Indiana border to fair west of Cleveland. Kaptur has criticized Merrin for voting in favor of tax incentives for data center development. Merrin has stated Kaptur is "lying" concerning his record, but as part of a sweeping 2017 prosperity law, Ohio lawmakers voted to broaden the deadline for certain data centers to meet requirements for tax incentives.</p><p id="525f283c-9603-423e-a916-ec48024eca70"><strong>The outlook: </strong>The Cook Political Report rates it as a "Lean Democrat."</p><p id="525f283c-9603-423e-a916-ec48024eca70"><strong>History: </strong>In 2024, Trump won the district by approximately 11 points, according to The Downballot's estimates. Kaptur won by under 2,400 votes. Kaptur is one of 22 Democrats representing districts that Trump additionally won.</p><h2 id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb" data-toc-id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb">Pennsylvania 1st District</h2><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Candidates: </strong>Rep. Brian Fitzpatrick, a Republican; Bucks County commissioner Bob Harvie, a Democrat</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Where it stands: </strong>Fitzpatrick, a five-term Pennsylvania Republican, romped to reelection two years ago but is now fighting to suspend onto his seat. Harvie focused his archetypal ad of the broad ballot on his call for a data center moratorium. He additionally ruined Fitzpatrick complete the Republican's former assistance for a enormous Amazon data center in Falls Township, which is in Bucks County.</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Polls close: </strong>8 pm EST</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>The outlook: </strong>The Cook Political Report rates it as a "Toss-Up."</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>History: </strong>In 2024, Trump narrowly misplaced the district, according to The Downballot's estimates. Fitzpatrick motionless effortlessly won reelection by nearly 13 points. He is one of fair three Republican lawmakers representing districts Trump lost.</p><h2 id="a4660c77-a779-4d50-b5ac-1c5fb7c2ed88" data-toc-id="a4660c77-a779-4d50-b5ac-1c5fb7c2ed88">Wisconsin 3rd District</h2><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Candidates: </strong>Rep. Derrick Van Orden, a Republican; Rebecca Cooke, a Democrat</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Where it stands: </strong>Van Orden, a two-term Wisconsin Republican, is trying to clasp on to his occidental Wisconsin district, which includes Eau Claire and La Crosse. Cooke, a erstwhile governmental adviser who now plant as a waitress, has echoed Sen. Bernie Sanders' call for a national moratorium on data center development. Cooke has additionally hammered Van Orden complete data centers. In response, Van Orden has accused Cooke of operating too closely alongside tech groups.</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>Polls close: </strong>9 pm EST</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>The outlook: </strong>The Cook Political Report rates it as "Lean Democrat."</p><p id="326f7ea3-0c33-417f-bc3c-65bf7a4e27cb"><strong>History: </strong>In 2024, Trump won the district by complete 7 points, according to The Downballot's estimates. Van Orden defeated Cooke by approximately 3 points.</p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6ae900d8426e175d4818d8b2&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:7836,&quot;aspectRatioH&quot;:5226}}' alt="Sergey Brin speaks alongside Donald Trump"> </p></div> <span> <figcaption e-name="image-caption"> Google cofounder Sergey Brin speaks alongside Trump&nbsp; <span e-name="image-source" itemprop="creditText"> Win McNamee/Getty Images </span> </figcaption> </span> </figure> <h2 id="b598f244-7ce2-4abd-86f6-5128e3e3883f" data-toc-id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>California billionaire tax</strong></h2><p id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>What's on</strong>&nbsp;<strong>the ballot:&nbsp;</strong>A one-time 5% tax on Californians alongside complete $1 milliard in wealth. Two competing proposals would efficiently nullify the projected tax.</p><p id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>The sides: </strong>The Service Employees International Union-United Healthcare Workers West labor union projected the tax. Rep. Ro Khanna, a Democrat who is a imaginable 2028 candidate, has lent his support, as has Sen. Bernie Sanders. Gov. Gavin Newsom, another imaginable 2028 candidate, is opposing the measure. A figure of Silicon Valley elites are additionally in opposition, including Google cofounder Sergey Brin.</p><p id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>Polls close: </strong>11 pm EST</p><p id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>The outlook: </strong>There's been small polling this fall. The few community polls have been all complete the place. A latest UC Berkeley Institute of Governmental Studies-Los Angeles Times study established opponents had a 50% to 42% border among apt voters.</p><p id="b598f244-7ce2-4abd-86f6-5128e3e3883f"><strong>Be prepared to wait: </strong>California has a lot of votes to count, and historically several races have taken days or equal weeks to call. The fact that there are three intertwined ballot initiatives may additionally create it additional difficult for news organizations to project a winner. In the event that multiple initiatives pass, the one that receives the most affirmative votes mostly trumps conflicting ones.</p> </div> <h2>Read next</h2> <div data-recommendations-content data-track-click-shared='&quot;Read next&quot;}'> <div e-name="read-next-list" data-recommendations-list> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> </div> </div> <a e-name="read-next-image-link" data-recommendations-image-link data-recommendations-link tabindex="-1"> <p><img alt=""> </p> </a> <h3> <a e-name="read-next-title-link" data-recommendations-link data-recommendations-title></a> </h3> <div data-component-type="post-bottom-authors" data-load-strategy="exclude" data-track-view='&quot;module_in_view&quot;}' data-track-click-shared='&quot;navigation&quot;}'> <div data-track-view='&quot;module_in_view&quot;}'> <p><a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='1}'>Brent D. Griffiths</a> <span data-disable-for-sooth-user data-component-type="follow-button" data-load-strategy="lazy" role="tooltip" data-tooltip-position="middle" data-tooltip-active="false" data-state="" data-topic-type="author" data-topic-slug="brent-d-griffiths" data-topic-link="https://www.businessinsider.com/author/brent-d-griffiths" data-topic-label="Brent D. Griffiths" data-topic-location="author_bio" data-topic-shortened-label="Brent D. Griffiths"> </span> </p> <div> <p><span>Brent Griffiths is a elder newsman at Business Insider who covers AI and tech. Previously, he worked at the Washington Post. He started his occupation at Politico.</span> </p> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/the-midterm-races-to-watch-if-you-care-about-money-musk-and-the-ai-boom-75484</guid> <pubDate>Tue, 03 Nov 2026 21:40:12 +0700</pubDate> <author><![CDATA[support@mycoding.id (Brent D. Griffiths)]]></author> </item> <item> <title><![CDATA[I Dumped Apple's Fucking Word List]]></title> <description><![CDATA[I Dumped Apple's Fucking Word List. Comments]]></description> <media:thumbnail url="https://helgesver.re/og/article-macos-vulgar-word-flags.png"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/i-dumped-apple-s-fucking-word-list-75485</link> <content:encoded><![CDATA[<div><td data-clippy-readable="true"><p>November 3, 2026</p><div><h2 id="tldr"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>TL;DR</h2> <ul> <li>~/Library/Keyboard/VulgarWordUsage.db is real. It records which promise words you use, <strong>per app and per recipient</strong>, so autocorrect learns to halt "ducking" you. On my Mac it is empty, and typing promise words into a native app did not inhabit it.</li> <li>The engaging part is upstream. Apple's scheme dictionary flags all term alongside one of three tiers (<strong>vulgar</strong>, <strong>offensive</strong>, <strong>sensitive</strong>) and up to eleven topic flags (sex, drugs, religion, politics, violence, &hellip;).</li> <li>There is no community API for any of it. I peruse the flags alongside a few personal C functions from Lexicon.framework. Code below, in C and in Swift. The complete dumps for 15 languages are in <a href="https://en.mycoding.id/category/technology" target="_blank">this gist</a> (uncensored, so intellect the content warning).</li> <li>Highlights: <em>Oedipus</em> is vulgar. <em>Tom</em> and <em>Mick</em> are offensive. <em>pee</em>, <em>poo</em>, <em>niggle</em> and <em>underling</em> are sensitive. And <strong>"Trump" is the lone living politician in the English delicate tier</strong>, next to Hitler, Mao, Osama bin Laden and the Taliban. Biden, Obama and Putin are clean.</li> </ul> <p><strong>Content note:</strong> this part prints the words uncensored, slurs included, since the entire item is to see what Apple flags. The one elimination is the n-word: it is in the catalog in English and multiple another languages, and I'm not writing it out.</p> <h2 id="it-started-with-a-tweet"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>It started alongside a tweet</h2> <p><img alt=" macOS has a repository to track our use of profanity&#039;, showing a Finder listing alongside user_model_database.sqlite-wal and VulgarWordUsage.db. Helge replies &#039;Where is it located?&#039; and Nick answers &#039;~/Library/Keyboard/VulgarWordUsage.db&#039;." loading="lazy" width="600" height="608" decoding="async" data-nimg="1" srcset="/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fvulgar-word-usage-tweet.289c366e.webp&amp;w=640&amp;q=75 1x, /_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fvulgar-word-usage-tweet.289c366e.webp&amp;w=1200&amp;q=75 2x" src="https://helgesver.re/_next/image?url=%2F_next%2Fstatic%2Fmedia%2Fvulgar-word-usage-tweet.289c366e.webp&amp;w=1200&amp;q=75"></p><p><a href="https://en.mycoding.id/category/technology" target="_blank">Nick posted this</a>, I asked anywhere it lives, and he answered. A database that tracks my profanity is not item I can depart alone, so I opened mine.</p> <h2 id="the-database"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>The database</h2> <div><pre>$ sqlite3 -readonly ~/Library/Keyboard/VulgarWordUsage.db .schema CREATE TABLE properties <span>(</span>ROWID INTEGER PRIMARY KEY, key, value, UNIQUE <span>(</span>key<span>))</span><span>;</span> CREATE TABLE IF NOT EXISTS <span>"vword_usage"</span> <span>(</span> ROWID INTEGER PRIMARY KEY AUTOINCREMENT, app TEXT, -- app identifier recipient TEXT, -- recipient identifier vword TEXT, -- vulgar word word_reading TEXT, -- the study form of a term <span>(</span>relevant <span>for</span> Japanese<span>)</span> usage_count INTEGER DEFAULT <span>0</span>, last_use_timestamp REAL DEFAULT <span>0</span>, -- final use timestamp <span>(</span>seconds since the citation <span>date</span><span>)</span> journaled <span>)</span><span>;</span> CREATE UNIQUE INDEX app_recipient_vword_word_reading_idx ON vword_usage<span>(</span>app, recipient, vword, word_reading<span>)</span><span>;</span> </pre></div> <p>So the keyboard can cognize that you say <em>fuck</em> in Messages to one particular friend, but not in Mail to your boss. The unique indicator is on (app, recipient, word, reading), so that is the granularity.</p> <p>Mine has zero rows. The properties array holds type = 2 and nothing else. The document was final written in April 2024.</p> <h3 id="what-it-is-for"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>What it is for</h3> <p>At WWDC in June 2023, Craig Federighi announced the iOS 17 autocorrect rewrite alongside this line: <em>"In those moments anywhere you fair desire to category a ducking word, well, the keyboard volition study it, too."</em> (<a href="https://en.mycoding.id/category/technology" target="_blank">TechCrunch</a>, <a href="https://en.mycoding.id/category/technology" target="_blank">NPR</a>)</p> <p>This repository is how it learns. The sign names in the macOS shared archive cache enchantment out the flow:</p> <div><pre>TI::VulgarWordUsageDatabaseWrapper::set_current_app_id(CFString) TI::VulgarWordUsageDatabaseWrapper::set_current_recipient_ids(vector&lt;string&gt;) TI::VulgarWordUsageDatabaseWrapper::increment_usage_count(word, reading, recipients) TI::VulgarWordUsageDatabaseWrapper::decrement_usage_count(...) TI::VulgarWordUsageDatabaseWrapper::can_autocorrect(word, app, recipients) TI::VulgarWordUsageDatabaseWrapper::can_autocorrect_somewhere(word, reading) KB::FilterNonVulgarIfTopCandidateVulgar::filter_candidates(...) KB::Candidate::every_vulgar_word_is_allowlisted(VulgarWordUsageDatabaseWrapper*, ...) </pre></div> <p>Plus log strings akin Passing recipient IDs to the vulgar term use repository wrapper; figure of IDs: %lu.</p> <p>In plain terms:</p> <ol> <li>When you commencement typing, the keyboard motor tells the wrap which app you're in and who you're penning to.</li> <li>When you category a vulgar term and keep it, its figure goes up for that app and those recipients. Undoing the word brings the figure rear down.</li> <li>When the motor ranks suggestions, it asks whether all vulgar term in a applicant is allowlisted for this context. If it isn't, the spotless substitute wins: <em>ducking</em>.</li> </ol> <p>A _KSUserWordsSynchroniser sharedAcrossLanguagesVulgarWordUsageValue sign suggests it syncs between devices like your another learned words.</p> <h3 id="mine-is-empty"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Mine is empty</h3> <p>I tried to inhabit it. Using <a href="https://en.mycoding.id/category/technology" target="_blank">agent-desktop</a>, I opened a new TextEdit document and typed fine fuck this shit, damn it., archetypal as a content insert, afterward as idiosyncratic key presses. Nothing changed: no row, no log line, and the file's modification date stayed in 2024.</p> <p>I don't cognize why, and I couldn't activity it out. Maybe the Mac never records item here, or perchance it lone does so in some apps or settings. If you've got rows in yours, inform me what you did.</p> <p>That would be a abbreviated article. But the repository lone counts words that are <em>already</em> known to be vulgar. So who decides that?</p> <h2 id="where-the-word-list-lives"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Where the term catalog lives</h2> <p>Searching the dyld shared cache for "vulgar" turned up a C API alongside an LX prefix (LXVulgarWordUsageDatabaseCreate, LXVulgarWordUsageDatabaseCanAutocorrect, &hellip;) and, additional usefully, two functions on dictionary entries:</p> <div><pre>_LXEntryGetCategoryFlags _LXEntryGetMetaFlags </pre></div> <p>LX is Lexicon.framework, a personal example that says the per-language dictionaries under /System/Library/LinguisticData/. Every term in those dictionaries is an LXEntry alongside two 32-bit emblem fields. If the vulgarity ranking is anywhere, it's in those bits.</p> <h2 id="there-is-no-public-api"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>There is no community API</h2> <p>I looked. NSSpellChecker, UITextChecker, NaturalLanguage and UILexicon don't disclose vulgarity. SensitiveContentAnalysis covers images and video, not text. The lone places "profanity" shows up on developer.apple.com are App Store age ratings and assessment guidelines.</p> <p>So: personal functions. Lexicon has no headers, but the C functions are exported, and their signatures are uncomplicated to guess since they prosecute CoreFoundation conventions. This program opens the dictionary for a locale, walks all entry, and prints the two emblem fields:</p> <div><pre> <span><span>#</span><span>include</span> <span>&lt;CoreFoundation/CoreFoundation.h&gt;</span></span> <span><span>#</span><span>include</span> <span>&lt;stdbool.h&gt;</span></span> <span><span>#</span><span>include</span> <span>&lt;stdio.h&gt;</span></span> <span>typedef</span> <span>const</span> <span>void</span> <span>*</span>LXLexiconRef<span>,</span> <span>*</span>LXCursorRef<span>,</span> <span>*</span>LXEntryRef<span>;</span> <span>extern</span> CFStringRef kLXLexiconLocaleKey<span>;</span> LXLexiconRef <span>LXLexiconCreate</span><span>(</span>CFDictionaryRef options<span>,</span> CFErrorRef <span>*</span>error<span>)</span><span>;</span> LXCursorRef <span>LXLexiconCreateRootCursor</span><span>(</span>LXLexiconRef<span>)</span><span>;</span> <span>void</span> <span>LXCursorEnumerateEntriesRecursively</span><span>(</span>LXCursorRef<span>,</span> <span>void</span> <span>(</span><span>^</span><span>)</span><span>(</span>LXEntryRef<span>,</span> bool <span>*</span>stop<span>)</span><span>)</span><span>;</span> CFStringRef <span>LXEntryCopyString</span><span>(</span>LXEntryRef<span>)</span><span>;</span> <span>uint32_t</span> <span>LXEntryGetCategoryFlags</span><span>(</span>LXEntryRef<span>)</span><span>;</span> <span>uint32_t</span> <span>LXEntryGetMetaFlags</span><span>(</span>LXEntryRef<span>)</span><span>;</span> <span>int</span> <span>main</span><span>(</span><span>int</span> argc<span>,</span> <span>char</span> <span>*</span><span>*</span>argv<span>)</span> <span>{</span> CFStringRef locale <span>=</span> <span>CFStringCreateWithCString</span><span>(</span><span>NULL</span><span>,</span> argc <span>&gt;</span> <span>1</span> <span>?</span> argv<span>[</span><span>1</span><span>]</span> <span>:</span> <span>"en_US"</span><span>,</span> kCFStringEncodingUTF8<span>)</span><span>;</span> <span>const</span> <span>void</span> <span>*</span>keys<span>[</span><span>]</span> <span>=</span> <span>{</span>kLXLexiconLocaleKey<span>}</span><span>,</span> <span>*</span>values<span>[</span><span>]</span> <span>=</span> <span>{</span>locale<span>}</span><span>;</span> CFDictionaryRef options <span>=</span> <span>CFDictionaryCreate</span><span>(</span><span>NULL</span><span>,</span> keys<span>,</span> values<span>,</span> <span>1</span><span>,</span> <span>&amp;</span>kCFTypeDictionaryKeyCallBacks<span>,</span> <span>&amp;</span>kCFTypeDictionaryValueCallBacks<span>)</span><span>;</span> LXLexiconRef lexicon <span>=</span> <span>LXLexiconCreate</span><span>(</span>options<span>,</span> <span>NULL</span><span>)</span><span>;</span> <span>if</span> <span>(</span><span>!</span>lexicon<span>)</span> <span>return</span> <span>1</span><span>;</span> <span>LXCursorEnumerateEntriesRecursively</span><span>(</span><span>LXLexiconCreateRootCursor</span><span>(</span>lexicon<span>)</span><span>,</span> <span>^</span><span>(</span>LXEntryRef entry<span>,</span> bool <span>*</span>stop<span>)</span> <span>{</span> <span>char</span> word<span>[</span><span>512</span><span>]</span> <span>=</span> <span>""</span><span>;</span> CFStringRef s <span>=</span> <span>LXEntryCopyString</span><span>(</span>entry<span>)</span><span>;</span> <span>if</span> <span>(</span>s<span>)</span> <span>{</span> <span>CFStringGetCString</span><span>(</span>s<span>,</span> word<span>,</span> <span>sizeof</span> word<span>,</span> kCFStringEncodingUTF8<span>)</span><span>;</span> <span>CFRelease</span><span>(</span>s<span>)</span><span>;</span> <span>}</span> <span>printf</span><span>(</span><span>"%08x\t%08x\t%s\n"</span><span>,</span> <span>LXEntryGetCategoryFlags</span><span>(</span>entry<span>)</span><span>,</span> <span>LXEntryGetMetaFlags</span><span>(</span>entry<span>)</span><span>,</span> word<span>)</span><span>;</span> <span>}</span><span>)</span><span>;</span> <span>}</span> </pre></div> <div><pre>$ ./lx en_US <span>|</span> <span>wc</span> -l <span>199019</span> $ ./lx en_US <span>|</span> <span>awk</span> -F<span>'\t'</span> <span>'$3 == "fuck" || $3 == "table" || $3 == "Trump"'</span> 00000000 00800002 fuck 00000000 00000000 table 00002000 02000081 Trump </pre></div> <p>The identical item in Swift, loading the functions at runtime alongside dlopen and dlsym so you don't need to nexus against a personal framework. It prints lone words that transport among the three tiers:</p> <div><pre> <span>import</span> <span>Foundation</span> <span>let</span> lexicon <span>=</span> <span>dlopen</span><span>(</span><span><span>"/System/Library/PrivateFrameworks/Lexicon.framework/Lexicon"</span></span><span>,</span> <span>RTLD_NOW</span><span>)</span><span>!</span> <span>func</span> <span>sym</span><span>&lt;</span><span>T</span><span>&gt;</span><span>(</span><span>_</span> name<span>:</span> <span>String</span><span>,</span> <span>as</span> <span>_</span><span>:</span> <span>T</span><span>.</span><span>Type</span><span>)</span> <span>-&gt;</span> <span>T</span> <span>{</span> <span>unsafeBitCast</span><span>(</span><span>dlsym</span><span>(</span>lexicon<span>,</span> name<span>)</span><span>!</span><span>,</span> to<span>:</span> <span>T</span><span>.</span><span>self</span><span>)</span> <span>}</span> <span>typealias</span> <span>LXRef</span> <span>=</span> <span>UnsafeRawPointer</span> <span>let</span> create <span>=</span> <span>sym</span><span>(</span><span><span>"LXLexiconCreate"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>CFDictionary</span><span>,</span> <span>UnsafeMutablePointer</span><span>&lt;</span><span>Unmanaged</span><span>&lt;</span><span>CFError</span><span>&gt;?&gt;?</span><span>)</span> <span>-&gt;</span> <span>LXRef</span><span>?</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> rootCursor <span>=</span> <span>sym</span><span>(</span><span><span>"LXLexiconCreateRootCursor"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>LXRef</span><span>)</span> <span>-&gt;</span> <span>LXRef</span><span>?</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> enumerate <span>=</span> <span>sym</span><span>(</span><span><span>"LXCursorEnumerateEntriesRecursively"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>LXRef</span><span>,</span> <span>@convention</span><span>(</span>block<span>)</span> <span>(</span><span>LXRef</span><span>,</span> <span>UnsafeMutablePointer</span><span>&lt;</span><span>Bool</span><span>&gt;</span><span>)</span> <span>-&gt;</span> <span>Void</span><span>)</span> <span>-&gt;</span> <span>Void</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> copyString <span>=</span> <span>sym</span><span>(</span><span><span>"LXEntryCopyString"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>LXRef</span><span>)</span> <span>-&gt;</span> <span>Unmanaged</span><span>&lt;</span><span>CFString</span><span>&gt;?</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> metaFlags <span>=</span> <span>sym</span><span>(</span><span><span>"LXEntryGetMetaFlags"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>LXRef</span><span>)</span> <span>-&gt;</span> <span>UInt32</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> category <span>=</span> <span>sym</span><span>(</span><span><span>"LXEntryGetCategoryFlags"</span></span><span>,</span> <span>as</span><span>:</span> <span>(</span><span>@convention</span><span>(</span>c<span>)</span> <span>(</span><span>LXRef</span><span>)</span> <span>-&gt;</span> <span>UInt32</span><span>)</span><span>.</span><span>self</span><span>)</span> <span>let</span> localeKey <span>=</span> <span>dlsym</span><span>(</span>lexicon<span>,</span> <span><span>"kLXLexiconLocaleKey"</span></span><span>)</span><span>!</span><span>.</span><span>load</span><span>(</span><span>as</span><span>:</span> <span>CFString</span><span>.</span><span>self</span><span>)</span> <span>let</span> locale <span>=</span> <span>CommandLine</span><span>.</span>arguments<span>.</span><span>dropFirst</span><span>(</span><span>)</span><span>.</span>first <span>??</span> <span><span>"en_US"</span></span> <span>guard</span> <span>let</span> lex <span>=</span> <span>create</span><span>(</span><span>[</span>localeKey<span>:</span> locale<span>]</span> <span>as</span> <span>CFDictionary</span><span>,</span> <span>nil</span><span>)</span><span>,</span> <span>let</span> base <span>=</span> <span>rootCursor</span><span>(</span>lex<span>)</span> <span>else</span> <span>{</span> <span>fatalError</span><span>(</span><span><span>"could not open lexicon for </span><span>\(</span><span>locale</span><span>)</span><span>"</span></span><span>)</span> <span>}</span> <span>let</span> tiers<span>:</span> <span>[</span><span>(</span><span>UInt32</span><span>,</span> <span>String</span><span>)</span><span>]</span> <span>=</span> <span>[</span><span>(</span><span>0x0080_0000</span><span>,</span> <span><span>"vulgar"</span></span><span>)</span><span>,</span> <span>(</span><span>0x0100_0000</span><span>,</span> <span><span>"offensive"</span></span><span>)</span><span>,</span> <span>(</span><span>0x0200_0000</span><span>,</span> <span><span>"sensitive"</span></span><span>)</span><span>]</span> <span>enumerate</span><span>(</span>root<span>)</span> <span>{</span> entry<span>,</span> <span>_</span> <span>in</span> <span>let</span> meta <span>=</span> <span>metaFlags</span><span>(</span>entry<span>)</span> <span>guard</span> <span>let</span> tier <span>=</span> tiers<span>.</span><span>first</span><span>(</span><span>where</span><span>:</span> <span>{</span> meta <span>&amp;</span> <span>$0</span><span>.</span><span>0</span> <span>!=</span> <span>0</span> <span>}</span><span>)</span><span>?</span><span>.</span><span>1</span><span>,</span> <span>let</span> term <span>=</span> <span>copyString</span><span>(</span>entry<span>)</span><span>?</span><span>.</span><span>takeRetainedValue</span><span>(</span><span>)</span> <span>else</span> <span>{</span> <span>return</span> <span>}</span> <span>print</span><span>(</span>tier<span>,</span> <span>String</span><span>(</span>format<span>:</span> <span><span>"%05x"</span></span><span>,</span> <span>category</span><span>(</span>entry<span>)</span><span>)</span><span>,</span> word<span>,</span> separator<span>:</span> <span><span>"\t"</span></span><span>)</span> <span>}</span> </pre></div> <p>Both are read-only. They open the identical dictionary the keyboard uses and imprint it.</p> <h2 id="decoding-the-bits"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Decoding the bits</h2> <p>Apple doesn't document these flags, so all definition below is inferred: I grouped words by bit and peruse samples until each group's theme was obvious. The scheme code helps alongside one of them. An enum case called offensiveVulgarSensitive sits correct next to the vulgar-word code, and three neighboring meta bits equivalent it.</p> <h3 id="the-three-tiers-meta-flags"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>The three tiers (meta flags)</h3> <table readabilitydatatable="1"><thead><tr><th>Bit</th><th>Tier</th><th>en_US words</th><th>Examples</th></tr></thead><tbody><tr><td>0x00800000</td><td>vulgar</td><td>1,050</td><td>fuck, shit, cunt, cock, crap, wtf, fml, bullshitting, fucktard, shizzle, merde</td></tr><tr><td>0x01000000</td><td>offensive</td><td>663</td><td>kike, wop, dago, fag, Paki, japs, Klansman, retard, Oriental, ass, asshole</td></tr><tr><td>0x02000000</td><td>sensitive</td><td>2,558</td><td>damn, bitch, idiot, LSD, abortion, gun, suicide, anus, pee, poo</td></tr></tbody></table> <p>In en_US a term has at most one tier: they never overlap. Out of 199,019 entries, 4,271 have one.</p> <p>Roughly: <strong>vulgar</strong> is swearing and sex slang, <strong>offensive</strong> is slurs aimed at groups of people, and <strong>sensitive</strong> is everything a keyboard shouldn't recommendation you unprompted: mild swears, insults, drugs, weapons, extremism, sickness and bodily functions.</p> <h3 id="the-topics-category-flags"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>The topics (category flags)</h3> <p>The another site is a topic bitmask, and a term can have multiple topics:</p> <table readabilitydatatable="1"><thead><tr><th>Bit</th><th>Topic</th><th>en_US words</th><th>Examples</th></tr></thead><tbody><tr><td>0x00100</td><td>excretion</td><td>123</td><td>feces, barf, crapper, piddle, pooped</td></tr><tr><td>0x00200</td><td>body parts</td><td>958</td><td>nipples, navel, buttock, perineum, triceps</td></tr><tr><td>0x00400</td><td>insults, identity-loaded</td><td>823</td><td>idiot, cretin, hick, pleb, sexist, homophobic, blacklist</td></tr><tr><td>0x00800</td><td>disease</td><td>93</td><td>Covid, herpes, PTSD, leprosy, monkeypox</td></tr><tr><td>0x01000</td><td>drugs</td><td>222</td><td>heroin, shroom, crackhead, hotbox, OD</td></tr><tr><td>0x02000</td><td>politics, extremism</td><td>266</td><td>Hamas, Goebbels, Leninism, democrat, swastikas, Trump</td></tr><tr><td>0x04000</td><td>religion, damnation</td><td>420</td><td>Sikhism, jihadi, Beelzebub, damn, hell, jeez</td></tr><tr><td>0x08000</td><td>sex</td><td>473</td><td>nude, nookie, lecher, harlots, Pornhub, Hooters</td></tr><tr><td>0x10000</td><td>violence, death</td><td>373</td><td>suicide, lynch, murders, hangings, slave, slaveholder</td></tr><tr><td>0x20000</td><td>weapons, terrorism</td><td>268</td><td>AK-47, grenadier, jihad, sarin, kamikaze, yellowcake</td></tr><tr><td>0x40000</td><td>catch-all "sensitive context"</td><td>1,080</td><td>God, Allah, Jews, gay, trans, bi, crazy, fat, ugly, sex, die</td></tr></tbody></table> <p>The topic flags and the tiers are independent. 2,052 English words have a topic but no tier: <em>gay</em>, <em>fat</em>, <em>God</em>, <em>Allah</em> and <em>sex</em> are all tagged "sensitive context" but are not vulgar, insulting or sensitive. My conjecture is the topic is a clue ("be careful how you position this") and the tier is the rule.</p> <p>The lesser meta bits are dull: appropriate nouns, abbreviations, camel-case brand names akin <em>iMac</em> and <em>tvOS</em>. Nothing to see there.</p> <h2 id="the-weird-ones"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>The weird ones</h2> <p>This is anywhere it gets fun. Some flags are evidently right, and several made me laugh.</p> <h3 id="vulgar"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Vulgar</h3> <ul> <li><strong>Oedipus</strong>: vulgar. Presumably since of <em>motherfucker</em>-adjacent jokes, or the complex. Sophocles would be thrilled.</li> <li><strong>reams</strong>: vulgar. As in "to ream someone".</li> <li><strong>cooties</strong>: vulgar. Your nine-year-old is swearing.</li> <li><strong>orgy</strong>, <strong>sext</strong>, <strong>merde</strong>: fair enough.</li> </ul> <h3 id="offensive"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Offensive</h3> <ul> <li><strong>Tom</strong> and <strong>Mick</strong>: offensive. <em>Uncle Tom</em> and the slur for Irish people, but additionally extremely average archetypal names.</li> <li><strong>Oriental</strong>: offensive.</li> <li><strong>papooses</strong>: offensive.</li> <li><strong>conservatards</strong>: offensive, the one governmental criticism I established in the slur tier.</li> <li><strong>niggardly</strong>: offensive. It method "stingy" and comes from Old Norse, unrelated to the slur. It has additionally caused <a href="https://en.mycoding.id/category/technology" target="_blank">real controversies</a>, which is presumably why it's there.</li> <li><strong>ass</strong> and <strong>asshole</strong>: offensive, not vulgar.</li> </ul> <h3 id="sensitive"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Sensitive</h3> <ul> <li><strong>pee</strong> and <strong>poo</strong>: sensitive, alongside the excretion topic. So are <em>premenstrual</em>, <em>leprosy</em> and <em>herpesvirus</em>.</li> <li><strong>niggle</strong> (a small worry, of Scandinavian origin) and <strong>underling</strong> (Old English for a subordinate) are delicate and share the criticism topic. Similar words aren't flagged: <em>snigger</em> is spotless but <em>niggle</em> is flagged, and <em>minion</em>, <em>lackey</em>, <em>flunky</em> and <em>stooge</em> are spotless but <em>underling</em> is flagged. These appearance akin hand-picked entries, not rules.</li> <li><strong>blacklist</strong> and <strong>whitelist</strong> are delicate alongside the insult/identity topic. That matches the industry move to <em>blocklist</em> and <em>allowlist</em>. Apple's own phrase-filter records are named blocklist.dat.</li> <li><strong>Braves</strong> and <strong>Chiefs</strong> (team names alongside Native American mascots), <strong>Londonderry</strong> (the contested name for Derry), <strong>Gentile</strong>, <strong>Jehovah</strong>, <strong>Mongol</strong> and <strong>Frenchier</strong> are all sensitive.</li> <li><strong>Isis</strong> is delicate alongside the government topic. Sorry to the Egyptian goddess.</li> <li><strong>slave</strong>, <strong>slavery</strong> and <strong>slaveholder</strong> are delicate alongside the aggression topic.</li> <li><strong>idiot</strong> is delicate in English. Norwegian is stricter and puts <em>idiot</em> in the insulting tier.</li> </ul> <h2 id="the-trump-flag"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>The Trump flag</h2> <p>The delicate tier has 109 capitalized words. Here is all of it:</p> <blockquote> <p>Al-Qaeda, Al-Qaida, Aryan, Aryans, Auschwitz, Bacchus, Beelzebub, Birkenau, Brave(s), Buchenwald, Chief(s), Chippendale(s), Christ-y, Christer(s), Crip(s), Dachau, Eichmann, Frenchier, Gentile(s), Gestapo(s), Goebbels, Goering, Hamas, Hezbollah, Himmler, Hitler, Hitlerian, Hitlerism, Hitlerite(s), Hitlerjugend, Hooters, Isis, Islamophobe(s), Islamophobic, Jehovah(s), Jewfro(s), Jezebel(s), Kalashnikov(s), Kristallnacht, Kuomintang, Londonderry, Luftwaffe, Mao, Mauthausen, Mickie(s), Mollie(s), Mongol(s), Mossad, Nazi(s), Nazism, Osama, Pornhub, Quaalude(s), Reich, Reichsmark, Reichstag, Sachsenhausen, Satan, Satanism, Shoah, Sinophobe(s), Sinophobic, Sodom, Stasi, Taliban, Treblinka, <strong>Trump, Trumps</strong>, Unabomber, Uzi(s)</p> </blockquote> <p>(Plurals and possessives folded for brevity.)</p> <p>Every another genuine individual on that catalog is dead, and nearly all of them are Nazi officials, dictators or terrorists. Then there's Trump:</p> <div><pre>category meta word 00002000 02000081 Trump delicate tier + government topic 00002000 02000081 Trumps 00002000 02000081 Trump's 00000000 00000000 trump (the card-game word: clean) 00000000 00000000 trumped </pre></div> <p>For comparison:</p> <table readabilitydatatable="1"><thead><tr><th>Word</th><th>en_US</th></tr></thead><tbody><tr><td>Trump</td><td>sensitive, government topic</td></tr><tr><td>Hitler</td><td>sensitive, government topic</td></tr><tr><td>Biden</td><td>clean</td></tr><tr><td>Obama</td><td>clean</td></tr><tr><td>Putin</td><td>clean</td></tr><tr><td>Stalin</td><td>clean</td></tr><tr><td>Musk</td><td>not in the dictionary</td></tr></tbody></table> <p>en_GB matches en_US. Other languages differ: the German dictionary has <em>Trump</em> spotless (and puts <em>Hitler</em> in the <strong>offensive</strong> tier), and Swedish is the one that flags <em>Putin</em> as sensitive.</p> <p>What the emblem <em>does</em> matters here. As far as I can tell, a delicate term is one the keyboard shouldn't propose on its own. You can motionless category it and it won't be corrected away. Think "keep this out of the QuickType bar unless the person is clearly heading there", which is a lot milder than a ban.</p> <p>There is a plausible logic Apple would desire that for one particular name. In February 2025, iPhone dictation briefly showed "Trump" whenever group stated "racist". It went viral, and Apple called it a "<a href="https://en.mycoding.id/category/technology" target="_blank">phonetic overlap</a>" in the address example and shipped a fix inside a day (<a href="https://en.mycoding.id/category/technology" target="_blank">9to5Mac</a>). The dictionary records on my Mac are from July 2025. A regulation that keeps the name out of unprompted suggestions would halt that benevolent of item from happening again through the keyboard. I can't demonstrate that's why it's there, and I don't have an older dictionary to compare against. But it fits.</p> <h3 id="norwegian-politics-for-comparison"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Norwegian politics, for comparison</h3> <p>Because I'm Norwegian and had to check:</p> <table readabilitydatatable="1"><thead><tr><th>Word</th><th>Topic</th><th>Tier</th></tr></thead><tbody><tr><td>FrP, H&oslash;yre, Venstre, R&oslash;dt, SV, KrF, MDG</td><td>politics</td><td>none</td></tr><tr><td>St&oslash;re</td><td>politics</td><td>none</td></tr><tr><td>Solberg, Erna, Sylvi</td><td>none</td><td>none</td></tr><tr><td>Listhaug</td><td>n/a</td><td>not in the dictionary</td></tr><tr><td>Breivik, Quisling, Hitler</td><td>none</td><td>sensitive</td></tr></tbody></table> <p>Every gathering gets the government topic and none gets a tier. The lone Norwegians in the delicate tier are a mass murderer and a Nazi collaborator.</p> <h2 id="other-languages"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Other languages</h2> <p>The identical three tiers be in all European dictionary I tried, Cyrillic included. The counts are entries, not lemmas, so heavily inflected languages akin Polish and Russian appearance much worse than they are: all case and coalition of a swear term is a distinct entry.</p> <table readabilitydatatable="1"><thead><tr><th>Locale</th><th>Vulgar</th><th>Offensive</th><th>Sensitive</th><th>Notable</th></tr></thead><tbody><tr><td>en_US</td><td>1,050</td><td>663</td><td>2,558</td><td><em>idiot</em> is sensitive</td></tr><tr><td>en_GB</td><td>1,055</td><td>872</td><td>2,337</td><td><em>chav</em> is offensive; <em>chink</em> is submitted as <strong>vulgar</strong>, not offensive</td></tr><tr><td>nb_NO</td><td>2,393</td><td>1,324</td><td>6,446</td><td><em>idiot</em> is offensive</td></tr><tr><td>da_DK</td><td>1,179</td><td>3,314</td><td>8,551</td><td><em>fjols</em> ("fool") is offensive</td></tr><tr><td>sv_SE</td><td>637</td><td>1,247</td><td>16,193</td><td><em>idiot</em> is <strong>vulgar</strong>; <em>Putin</em> is sensitive</td></tr><tr><td>fi_FI</td><td>569</td><td>872</td><td>47</td><td>The complete delicate tier is <em>kakka</em> ("poop"), <em>kakkakasa</em> ("pile of poop") and <em>saakeli</em></td></tr><tr><td>de_DE</td><td>3,218</td><td>3,518</td><td>9,446</td><td><em>Hitler</em> and <em>beknackt</em> ("daft") are offensive; <em>Trump</em> is clean</td></tr><tr><td>nl_NL</td><td>57</td><td>1,180</td><td>3,805</td><td>Only 57 vulgar words, but <em>kanker</em> ("cancer", the traditional Dutch swear) is one</td></tr><tr><td>fr_FR</td><td>2,151</td><td>262</td><td>5,562</td><td><em>boche</em> is offensive</td></tr><tr><td>es_ES</td><td>3,931</td><td>313</td><td>13,431</td><td><em>sudacas</em> and <em>fachas</em> are offensive</td></tr><tr><td>it_IT</td><td>3,886</td><td>377</td><td>6,543</td><td><em>terrone</em> is offensive, and so is <em>nazismi</em></td></tr><tr><td>pt_BR</td><td>1,590</td><td>1,891</td><td>3,332</td><td><em>machista</em> and <em>velhinhos</em> ("little old people") are offensive</td></tr><tr><td>pl_PL</td><td>9,698</td><td>1,436</td><td>6,190</td><td>The biggest vulgar tier here, mostly inflections (<em>dupczysz</em>, <em>srasz</em>)</td></tr><tr><td>ru_RU</td><td>10,821</td><td>3,239</td><td>24,721</td><td>Same story: &#1084;&#1072;&#1090; inflects a lot</td></tr></tbody></table> <p>The bits don't appear to average the identical item everywhere. Arabic and Hebrew come back hundreds of thousands of "sensitive" entries, so those dictionaries likely reuse the bits for item else, and I remaining them out. Korean, Catalan and Hungarian come back nothing, and Japanese crashes my dumper.</p> <p>Samples from Norwegian, since that's what I category in whenever I'm not typing English:</p> <ul> <li><strong>Vulgar:</strong> faen, j&aelig;vla, dritt, fitte, kuk, pule, pissehull, r&aelig;vhull, pulekanin, k&aring;t, <em>morrabr&oslash;d</em>.</li> <li><strong>Offensive:</strong> <em>idiot</em>, <em>sig&oslash;yner</em>, <em>kinamann</em>, <em>riskokers</em> (literally "rice cookers", a slur for Asians), affirmative the Norwegian n-word.</li> <li><strong>Sensitive:</strong> helvete, satan, homo, quisling, Breivik, skinhead, abortnekt, trusene ("the panties").</li> </ul> <p>The tier words are mostly what you'd expect, but the edges are distinct in all language, and that is anywhere the human-edited parts show. Norwegian calls <em>idiot</em> insulting and English calls it sensitive. German thinks Hitler is a slur.</p> <h2 id="phrases-not-just-words"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Phrases, not fair words</h2> <p>There is a second, distinct filter. Every English tongue example has a blocklist.bundle, and there's a qp_blocklist.bundle for QuickPath, the rub keyboard:</p> <div><pre>/System/Library/LinguisticData/RequiredAssets_en.bundle/AssetData/en.lm/ &#9500;&#9472;&#9472; blocklist.bundle/{blocklist.dat, blocklistidmap.dat} &#9492;&#9472;&#9472; qp_blocklist.bundle/{blocklist.dat, blocklistidmap.dat} </pre></div> <p>blocklistidmap.dat is a 20-byte header followed by (lexicon token ID, category ID) pairs of 32-bit integers. Mapping the token IDs rear through the dictionary gives 2,544 words in 930 classes. Most classes are inflection groups:</p> <div><pre>931 fuck | fucked | fucking | fucks 1181 molest | molestation | molested | molester | molesting 1514 died | dies | dying 1611 Holocaust | holocaust | holocausts 1614 denied | denies | refuse | denying 923 Semite | Semites | Semitic 1487 ghetto | ghettoes | ghettos 1720 animals | brown | cats </pre></div> <p>blocklist.dat is a packed trie complete those category IDs, so it blocks <em>sequences</em>: "deny" followed by "Holocaust", and whatever 1720 pairs with. A category that puts <em>brown</em> next to <em>animals</em> and <em>cats</em> suggests the catalog targets specific phrasings fairly than sole words, although which phrasings I can't inform without decoding the trie. The runtime inspect is LMLanguageModelTokenSequenceIsBlocklisted in LanguageModeling.framework. I got far adequate to study that its fourth and fifth arguments contain an output pointer, but my investigation motionless crashes intermittently, so I haven't peruse the genuine phrases yet. That's for a follow-up.</p> <h2 id="caveats"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Caveats</h2> <ul> <li><strong>Meanings are inferred.</strong> Apple documents none of these bits. The tier names arrive from an enum in the scheme code and the topics from study thousands of samples. Both are consistent, but they're motionless a reading.</li> <li><strong>Flagged is not censored.</strong> As far as I can inform these flags decide what the keyboard volunteers, not what you can type.</li> <li><strong>One machine.</strong> Everything current comes from macOS 15.6 (24G84) alongside LinguisticData build 438 from July 2025. iOS and other macOS versions may container distinct dictionaries.</li> <li><strong>Private API.</strong> The functions can alter or disappear in any update. Don't container this in an app.</li> </ul> <h2 id="try-it-yourself"><a href="https://en.mycoding.id/category/technology" target="_blank"><span></span></a>Try it yourself</h2> <div><pre> sqlite3 -readonly ~/Library/Keyboard/VulgarWordUsage.db <span>'select * from vword_usage'</span> swiftc -O lexflags.swift -o lexflags ./lexflags en_US <span>|</span> <span>awk</span> -F<span>'\t'</span> <span>'$1 == "vulgar" {print $3}'</span> <span>|</span> <span>sort</span> -u <span>|</span> <span>less</span> ./lexflags nb_NO <span>|</span> <span>awk</span> -F<span>'\t'</span> <span>'$3 == "faen" || $3 == "helvete" || $3 == "idiot"'</span> </pre></div> <p>If you'd fairly not build anything, the <a href="https://en.mycoding.id/category/technology" target="_blank">gist</a> has all tiered term for 15 locales as TSV, affirmative the code and a manuscript that regenerates them. It's a snapshot of macOS 15.6 and won't be kept up to date.</p> <p>If you discover item funnier than <em>Oedipus</em>, I desire to comprehend concerning it.</p></div><br><hr><br></td><td><img src="image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" width="1" height="1" alt=""></td></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/i-dumped-apple-s-fucking-word-list-75485</guid> <pubDate>Tue, 03 Nov 2026 21:33:23 +0700</pubDate> <author><![CDATA[support@mycoding.id (Putri Silvia)]]></author> </item> <item> <title><![CDATA[iPhone 18 rumors suggest a bigger battery, higher price next year]]></title> <description><![CDATA[iPhone 18 rumors suggest a bigger battery, higher price next year. After Apple raised iPhone prices before this year, a new rumor claims it plans to initiate the basis iPhone 18 alongside a higher price, too. A Weibo article from leaker ...]]></description> <media:thumbnail url="https://platform.theverge.com/wp-content/uploads/sites/2/2025/09/257946_iPhone_17_AKrales_0063.jpg?quality=90&amp;strip=all&amp;crop=0%2C10.732984293194%2C100%2C78.534031413613&amp;w=1200"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/iphone-18-rumors-suggest-a-bigger-battery-higher-price-next-year-75476</link> <content:encoded><![CDATA[<div><div><div><div><div><p><a href="https://en.mycoding.id/category/technology" target="_blank"><img alt="Stevie Bonifield" data-chromatic="ignore" loading="lazy" width="36" height="36" decoding="async" data-nimg="1" srcset="https://platform.theverge.com/wp-content/uploads/sites/2/2025/10/STEVIE_BONIFIELD_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=48 1x, https://platform.theverge.com/wp-content/uploads/sites/2/2025/10/STEVIE_BONIFIELD_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=96 2x" src="https://platform.theverge.com/wp-content/uploads/sites/2/2025/10/STEVIE_BONIFIELD_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=96"></a></p><div><p><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span id="follow-author-standard_article_details-dmcyOmF1dGhvclByb2ZpbGU6ODAzMzIw"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span></span><span>Stevie Bonifield</span></span></span></p> <p><span>is a news author covering all things person tech. Stevie started out at Laptop Mag penning news and reviews on hardware, gaming, and AI.</span></p></div></div></div></div></div><div id="zephr-anchor"><p>After Apple <a href="https://en.mycoding.id/category/technology" target="_blank">raised iPhone prices</a> before this year, a new rumor claims it plans to initiate the basis iPhone 18 alongside a higher price, too. A Weibo article from leaker <a href="https://en.mycoding.id/category/technology" target="_blank">Digital Chat Station</a>, spotted by <a href="https://en.mycoding.id/category/technology" target="_blank"><em>9to5Mac</em></a>, says the basis iPhone 18 is getting a brace upgrades alongside the cost hike, including a larger power division and a new 2-nanometer A20 chip. However, it reportedly won&rsquo;t have the smaller Dynamic Island featured on the <a href="https://en.mycoding.id/category/technology" target="_blank">iPhone 18 Pro and Pro Max</a>.</p><p>The basis iPhone 18 <a href="https://en.mycoding.id/category/technology" target="_blank">wasn&rsquo;t included</a> in Apple&rsquo;s autumn iPhone initiate event, but Digital Chat Station claims it volition attain first next year, in row alongside <a href="https://en.mycoding.id/category/technology" target="_blank">previous reports</a>. It&rsquo;s rumored to initiate alongside a <a href="https://en.mycoding.id/category/technology" target="_blank">second-gen iPhone Air</a> and the iPhone 18e, which Digital Chat Station additionally mentions.</p><p>The leaker doesn&rsquo;t define how much the iPhone 18&rsquo;s cost power addition compared to its predecessor. All of Apple&rsquo;s old models, including the iPhone 17, <a href="https://en.mycoding.id/category/technology" target="_blank">got a $100 cost hike</a> in September. Google and Samsung <a href="https://en.mycoding.id/category/technology" target="_blank">have additionally raised phone prices</a> by the identical amount complete the former year, driven by <a href="https://en.mycoding.id/category/technology" target="_blank">shortages of RAM</a> and another components. Earlier this week, Apple reported <a href="https://en.mycoding.id/category/technology" target="_blank">record-breaking iPhone sales</a>, notwithstanding the higher prices.</p><div><p><span><strong>Follow topics and authors</strong> from this narrative to see additional akin this in your personalized homepage nourish and to obtain email updates.</span></p><ul><li id="follow-author-article_footer-dmcyOmF1dGhvclByb2ZpbGU6ODAzMzIw"><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span><span>Stevie Bonifield</span></span></span></li><li><li><li><li><li></ul></div></div></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/iphone-18-rumors-suggest-a-bigger-battery-higher-price-next-year-75476</guid> <pubDate>Tue, 03 Nov 2026 21:16:54 +0700</pubDate> <author><![CDATA[support@mycoding.id (Stevie Bonifield)]]></author> </item> <item> <title><![CDATA[Apple starts giving Siri AI access to third-party apps]]></title> <description><![CDATA[Apple starts giving Siri AI access to third-party apps. Apple volition now let Siri AI execute actions throughout third-party apps. As part of the iOS 27.3 update rolling out on Tuesday, Apple announced developers can now in...]]></description> <media:thumbnail url="https://platform.theverge.com/wp-content/uploads/sites/2/2026/07/Siri-AI-Being-invoked-6.jpg?quality=90&amp;strip=all&amp;crop=0%2C10.736302165243%2C100%2C78.527395669513&amp;w=1200"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/apple-starts-giving-siri-ai-access-to-third-party-apps-75477</link> <content:encoded><![CDATA[<div id="zephr-anchor"><p>Apple volition now let Siri AI execute actions throughout third-party apps. As part of the iOS 27.3 update rolling out on Tuesday, Apple <a href="https://en.mycoding.id/category/technology" target="_blank">announced developers</a> can now merge Siri AI&rsquo;s new features in &ldquo;all apps,&rdquo; allowing the sound aide to diagram on a user&rsquo;s individual context, procedure natural tongue prompts, and use on-screen awareness to complete requests.</p><p>The update, which is rolling out as part of a Developer Preview, additionally adds a new &ldquo;app skills&rdquo; characteristic that third-party developers can create to merge multiple tasks into a sole action. In <a href="https://en.mycoding.id/category/technology" target="_blank">Apple&rsquo;s developer documentation</a>, the business says users won&rsquo;t have to citation an app&rsquo;s name in their petition during it&rsquo;s in the foreground, during a Live Activity, or in a conversation alongside Siri AI concerning the app.</p><p>&ldquo;For example, a individual power petition a journey alongside a journey portion app, prosecute updates to the app&rsquo;s Live Activity during they delay for their journey to arrive, afterward petition to move the pickup location to a distinct location by saying &lsquo;Hey Siri, alter my journey pickup to a new address,&rsquo;&rdquo; Apple says. As <a href="https://en.mycoding.id/category/technology" target="_blank">noted by <em>9to5Mac</em></a>, Apple earlier made a smaller set of features accessible to third-party developers.</p><p>Apple is bringing Siri AI&rsquo;s expanded capabilities to its own apps as well, including Calendar, Files, Finder, Journal, Mail, Maps, Messages, Music, Notes, Photos, Preview, Reminders, Safari, Shortcuts, and Weather apps. &ldquo;Users can do things akin discover a coffee shop they visited final week or archive records that haven&rsquo;t been opened in complete a year,&rdquo; according to Apple. The business notes that users can ask Siri AI what it can do in all app.</p><div><p><span><strong>Follow topics and authors</strong> from this narrative to see additional akin this in your personalized homepage nourish and to obtain email updates.</span></p><ul><li id="follow-author-article_footer-dmcyOmF1dGhvclByb2ZpbGU6MTE2"><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span><span>Emma Roth</span></span></span></li><li><li><li><li><li><li></ul></div></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/apple-starts-giving-siri-ai-access-to-third-party-apps-75477</guid> <pubDate>Tue, 03 Nov 2026 21:16:17 +0700</pubDate> <author><![CDATA[support@mycoding.id (Emma Roth)]]></author> </item> <item> <title><![CDATA[Pratt parsing is a black box]]></title> <description><![CDATA[Pratt parsing is a black box. Comments]]></description> <media:thumbnail url="https://vinipsmaker.github.io/blog-heading.webp"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/pratt-parsing-is-a-black-box-75486</link> <content:encoded><![CDATA[<div> <p>It caught my notice that most of Pratt parsing tutorials that I've stumbled on expend nearly all of their period explaining Pratt's algorithm and none explaining the properties rearward Pratt that really matter. Pratt fits into fair 9 lines of code if you're programming in a high-level tongue specified as Rhombus:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span> let mutable remaining = t.nud()</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> let mutable remaining = t.nud()</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span> let mutable remaining = t.nud()</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> let mutable remaining = t.nud()</span></pre> </div> </div> </div> </div> </div> <p>And here's a secret: that's the smallest crucial item you need to comprehend concerning Pratt's. In fact, you don't need to comprehend this part at all! Imagine if you were lone capable to use quicksort if you understood its implementation. Imagine if you were lone capable to use records if you knew how to execute a filesystem from scratch. It's the identical logic here. If you deficiency the power to abstract, you'll attain nowhere in device discipline since that's how the entire site works. In fact, I wrote the backbone of a heavily Pratt-based parsing machinery for a compiler that I've been penning since final twelvemonth w/o equal bothering to comprehend the complete snippet in any detail.</p> <p>Not convinced? Think for a second on how they do in traditional parsing techniques: compiler compilers! They use code generators to spit the parsing algorithm since fair a minuscule assemblage bothers to study what the parsing motor is really doing. It's no distinct alongside Pratt. However Pratt is so small that you can fair copy'n'paste these 9 lines of code in your project and call it a day alternatively of adding a new complex dependency to your project. The algorithm hasn't changed since 1973 and it's not gonna alter now.</p> <p>In this part I'll go complete what you really need to keep in intellect for Pratt parsing. The item won't be concerning memorizing any of it though. The item is concerning acquiring a mindset. As lengthy as you get the mindset you don't need to equal annoy to recall equal a sole term of what I say here.</p> <p>The lone tutorial on Pratt parsing that I can firmly propose to person who has never been exposed to the topic is really a conversation that Douglas Crockford gave in the gathering GOTO 2013<a href="https://en.mycoding.id/category/technology" target="_blank">&sup1;</a>. Douglas Crockford nailed it whenever he stated:</p> <blockquote> <p>Pratt takes parsing which is a really complex item and reduces it to one uncomplicated question: <em>What do we anticipate to see to the remaining of a token</em>?</p> </blockquote> <p>&mdash; Douglas Crockford, GOTO 2013</p> <p>At archetypal glance it may appearance akin a mystical declaration devoid of meaning, but that's the inquiry that becomes the example on how you visage parsing problems and it'll rewire your brain to internalize the Pratt parsing mindset. That's the most crucial item you need to understand. You enroll semantic actions for two categories: nuds and leds. A nud is a token that expects nothing to its remaining (nud stands for null denotation) during a led expects item (led stands for remaining denotation).</p> <p>Traditional parsing techniques enroll semantic actions to manufacturing rules. Here's an example I took direct from GNU Bison's manual:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span>expr: expr '+' expr { $$ = $1 + $3; } ;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>expr: expr '+' expr { $$ = $1 + $3; } ;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span>expr: expr '+' expr { $$ = $1 + $3; } ;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>expr: expr '+' expr { $$ = $1 + $3; } ;</span></pre> </div> </div> </div> </div> </div> <p>The content between the braces is code that executes whenever the BNF-like grammar on the remaining matches. I'm gonna reiterate myself since that's really important: traditional parsing techniques enroll semantic actions to <em>production rules</em> (which by definition are non-terminal symbols). In difference Pratt parsing registers semantic actions to the <em>terminals themselves</em> instead. That's a essential change on how you visage parsing problems.</p> <p>Here's a stripped downward type of the code for the tables that I have in my compiler correct now:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> nud_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lparen</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrace</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lbrace</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>exclamation_mark</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_negation</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>less_than_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_enter_type_scope</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>plus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_plus</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>minus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_minus</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_preincrement</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>user_macro</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_user_macro_expansion</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>identifier</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_identifier</span><span>&gt;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> led_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_function_call</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrack</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_array_indexing</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_disjunction</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_conjunction</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_equality</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_postdecrement</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>asterisk</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_multiplication</span><span>&gt;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>prefix_operator_binding_power </span><span>=</span><span> </span><span>120</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> binding_power </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> </span><span>10</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> </span><span>20</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> </span><span>30</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lparen</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lbrack</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot_asterisk</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>rarrow</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot</span><span>,</span><span> </span><span>130</span><span>&gt;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> nud_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lparen</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrace</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lbrace</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>exclamation_mark</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_negation</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>less_than_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_enter_type_scope</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>plus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_plus</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>minus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_minus</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_preincrement</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>user_macro</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_user_macro_expansion</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>identifier</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_identifier</span><span>&gt;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> led_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_function_call</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrack</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_array_indexing</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_disjunction</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_conjunction</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_equality</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_postdecrement</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>asterisk</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_multiplication</span><span>&gt;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>prefix_operator_binding_power </span><span>=</span><span> </span><span>120</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> binding_power </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> </span><span>10</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> </span><span>20</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> </span><span>30</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lparen</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lbrack</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot_asterisk</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>rarrow</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot</span><span>,</span><span> </span><span>130</span><span>&gt;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> nud_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lparen</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrace</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lbrace</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>exclamation_mark</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_negation</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>less_than_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_enter_type_scope</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>plus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_plus</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>minus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_minus</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_preincrement</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>user_macro</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_user_macro_expansion</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>identifier</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_identifier</span><span>&gt;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> led_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_function_call</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrack</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_array_indexing</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_disjunction</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_conjunction</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_equality</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_postdecrement</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>asterisk</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_multiplication</span><span>&gt;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>prefix_operator_binding_power </span><span>=</span><span> </span><span>120</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> binding_power </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> </span><span>10</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> </span><span>20</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> </span><span>30</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lparen</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lbrack</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot_asterisk</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>rarrow</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot</span><span>,</span><span> </span><span>130</span><span>&gt;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> nud_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lparen</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrace</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_lbrace</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>exclamation_mark</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_negation</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>less_than_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_enter_type_scope</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>plus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_plus</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>minus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_unary_minus</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_preincrement</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>user_macro</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_user_macro_expansion</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>identifier</span><span>,</span><span> token</span><span>::</span><span>nud</span><span>::</span><span>parse_identifier</span><span>&gt;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> constinit </span><span>const</span><span> </span><span>auto</span><span> led_table </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lparen</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_function_call</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>lbrack</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_array_indexing</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_disjunction</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_logical_conjunction</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_equality</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_postdecrement</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>asterisk</span><span>,</span><span> token</span><span>::</span><span>led</span><span>::</span><span>parse_multiplication</span><span>&gt;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>prefix_operator_binding_power </span><span>=</span><span> </span><span>120</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> binding_power </span><span>=</span><span> </span><span>make_dispatch_table</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dvertical_bar</span><span>,</span><span> </span><span>10</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dampersand</span><span>,</span><span> </span><span>20</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dequals_sign</span><span>,</span><span> </span><span>30</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lparen</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>lbrack</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dplus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dminus_sign</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot_asterisk</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>rarrow</span><span>,</span><span> </span><span>130</span><span>&gt;</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>rule_c</span><span>&lt;</span><span>token</span><span>::</span><span>code</span><span>::</span><span>dot</span><span>,</span><span> </span><span>130</span><span>&gt;</span></pre> </div> </div> </div> </div> </div> <p>All values on the remaining of all array are the lexer codes for terminal symbols. The values on the correct depend on the array kind:</p> Nud tables <p>Functions matching the signature <span><span><span>ExprPtr(Context&amp;,reader,reader&amp;)</span></span><span><span>ExprPtr(Context&amp;,reader,reader&amp;)</span></span></span>.</p> Led tables <p>Functions matching the signature <span><span><span>ExprPtr(Context&amp;,reader,reader&amp;,ExprPtr)</span></span><span><span>ExprPtr(Context&amp;,reader,reader&amp;,ExprPtr)</span></span></span>.</p> Binding power tables <p>Positive integers.</p> <p>Most of the semantic actions in these tables have code whose implementation amount to one semicolon in their build at most. Here's the code for <span><span><span>parse_unary_plus()</span></span><span><span>parse_unary_plus()</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>On the exterior it may appear fair akin a distinct but motionless extremely akin way to arrange your code, but the effect is in fact huge. Here are a few differences from traditional parsing techniques that stem from this sole departure alone:</p> <ul> <li> <p>You don't need to concern concerning left-recursion problems that happen in traditional parsing techniques specified as LL(k). Given the dispatch to a semantic act is done alongside its connected token already consumed from the stream, left-recursion fair doesn't happen. It's a non-issue.</p> </li> <li> <p>The parsing motor doesn't need to test alternatives or backtrack. The customary dichotomy between speed versus recollection that is established in several parsers (e.g. PEG vs packrat) is gone. Pratt is fast, and it's not gonna starve for insane amounts of memoization. Pratt is fair going to difference numbers, and iterate or recurse.</p> </li> <li> <p>Related to the former point, but value to regard on its own: semantic actions run exactly once! That method there's no need to rollback to a former province if a equivalent fails. In another words your actions may merge side-effects. In my parser I use this asset to do name reservation/release on lexical range through a shared environment entity juggled through all layer. Just observe out to not abuse side-effects and end up alongside spaghetti.</p> </li> <li> <p>Also related: your semantic act continually knows it's the accurate match. Therefore it may appearance arbitrarily far onward if it wants to. In another words: you can additional use PEG parsers (or layered Pratt parsers) in the semantic actions. While Pratt itself lone eats 1 token at a time, the nuds &amp; leds themselves may eat additional tokens per round. You fair unlocked the power of parser combinators.</p> </li> <li> <p>Most of the grammar ambiguities rotate into array collisions so you discarded small period on the simpler ambiguity cases. If you merge multiple parsers afterward it's motionless imaginable to have grammar ambiguities. So you motionless have activity as a grammar designer, but in my cognition it's much small work. When you merge parsers you're really combining grammars. Pratt as the parsing algorithm won't act as the all-seeing oracle and detect all imaginable ambiguity in the complete grammar amalgamation. Pratt (just akin PEG) volition fair come back the archetypal imaginable equivalent in this case.</p> </li> <li> <p>Unfilled gaps in your tables rotate into trivial expansion points in your grammar. You may inhabit these gaps in reply to the content parsed so far. In another words you can execute macros and equal parse a tongue that extends its own operators. In difference extending a pre-existing grammar according to manufacturing rules (the orthodox parsing school) is a job value the complexity of PhD researches.</p> </li> </ul> <p>You may equal discover a few of these properties in the traditional academy as well, but lone to certain extents, or alongside a huge complexity toll.</p> <p>Nonetheless I mentioned before that this institution is a mindset <em>shift</em>, but so far I've lone mentioned properties that you can use from adopting Pratt, so where's the change really? Consider the customary EBNF regulation for parsing function calls:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span>function_call = identifier, "(", [ argument_list ], ")" ;</span></pre> </div> <div> <pre></pre> <pre><span>argument_list = expression, { ",", expression } ;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>function_call = identifier, "(", [ argument_list ], ")" ;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>argument_list = expression, { ",", expression } ;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span>function_call = identifier, "(", [ argument_list ], ")" ;</span></pre> </div> <div> <pre></pre> <pre><span>argument_list = expression, { ",", expression } ;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>function_call = identifier, "(", [ argument_list ], ")" ;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>argument_list = expression, { ",", expression } ;</span></pre> </div> </div> </div> </div> </div> <p>How do you method this issue whenever alternatively of manufacturing rules your toolbox contains lone nuds &amp; leds? The key study is that the beginning parentheses continually anticipate item to its left, so it's a led. There you go: enroll a led for lparen and parse the function call from there. It's not immediately obvious, specially whenever you've lone been exposed to the traditional parsing school. Hence why Douglas Crockford nailed it whenever he stated:</p> <blockquote> <p>Pratt takes parsing which is a really complex item and reduces it to one uncomplicated question: <em>What do we anticipate to see to the remaining of a token</em>?</p> </blockquote> <p>&mdash; Douglas Crockford, GOTO 2013</p> <p>The led for gathering indexing is extremely akin to the led for function call. Here's the assortment that I use in my own parser:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_array_indexing</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>vector</span><span>&lt;</span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span>&gt;</span><span> indexes</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>if</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>while</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>if</span><span> </span><span>(</span><span>!</span><span>r</span><span>.</span><span>eat</span><span>&lt;</span><span>code</span><span>::</span><span>comma</span><span>&gt;</span><span>(</span><span>)</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>throw</span><span> </span><span>unexpected_token</span><span>{</span><span>r</span><span>,</span><span> </span><span>/*</span><span>expected=</span><span>*/</span><span>"</span><span>]</span><span>"</span><span>}</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>assert</span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> rbrack</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>ArrayIndexing</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> </span><span>std</span><span>::</span><span>move</span><span>(</span><span>indexes</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_array_indexing</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>vector</span><span>&lt;</span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span>&gt;</span><span> indexes</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>if</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>while</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>if</span><span> </span><span>(</span><span>!</span><span>r</span><span>.</span><span>eat</span><span>&lt;</span><span>code</span><span>::</span><span>comma</span><span>&gt;</span><span>(</span><span>)</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>throw</span><span> </span><span>unexpected_token</span><span>{</span><span>r</span><span>,</span><span> </span><span>/*</span><span>expected=</span><span>*/</span><span>"</span><span>]</span><span>"</span><span>}</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>assert</span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> rbrack</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>ArrayIndexing</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> </span><span>std</span><span>::</span><span>move</span><span>(</span><span>indexes</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_array_indexing</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>vector</span><span>&lt;</span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span>&gt;</span><span> indexes</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>if</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>while</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>if</span><span> </span><span>(</span><span>!</span><span>r</span><span>.</span><span>eat</span><span>&lt;</span><span>code</span><span>::</span><span>comma</span><span>&gt;</span><span>(</span><span>)</span><span>)</span><span> </span><span>{</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>throw</span><span> </span><span>unexpected_token</span><span>{</span><span>r</span><span>,</span><span> </span><span>/*</span><span>expected=</span><span>*/</span><span>"</span><span>]</span><span>"</span><span>}</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>assert</span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> rbrack</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>ArrayIndexing</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> </span><span>std</span><span>::</span><span>move</span><span>(</span><span>indexes</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_array_indexing</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>vector</span><span>&lt;</span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span>&gt;</span><span> indexes</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>if</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>while</span><span> </span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>!=</span><span> rbrack</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>if</span><span> </span><span>(</span><span>!</span><span>r</span><span>.</span><span>eat</span><span>&lt;</span><span>code</span><span>::</span><span>comma</span><span>&gt;</span><span>(</span><span>)</span><span>)</span><span> </span><span>{</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>throw</span><span> </span><span>unexpected_token</span><span>{</span><span>r</span><span>,</span><span> </span><span>/*</span><span>expected=</span><span>*/</span><span>"</span><span>]</span><span>"</span><span>}</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>indexes</span><span>.</span><span>emplace_back</span><span>(</span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>assert</span><span>(</span><span>r</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> rbrack</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>ArrayIndexing</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> </span><span>std</span><span>::</span><span>move</span><span>(</span><span>indexes</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>Pratt is not fair precedence climbing. Pratt is a way to arrange your code. First learning Pratt as a dreary box really helps to comprehend this difference. If you don't have admission to the dreary box, you won't be tempted to decrease Pratt to precedence climbing. Hopefully by the period you desire to obtain distant the idea and see what's inner you won't create the error of treating Pratt fair akin a uncomplicated assortment of precedence climbing since by afterward you'll have already been exposed to all the power unlocked by Pratt parsing. Andy Chu's blog article on Pratt parsing without prototypal bequest is value study as it contrasts two opposing styles of penning Pratt parsers<a href="https://en.mycoding.id/category/technology" target="_blank">&sup2;</a>. Here's a minimal calculator written in Rhombus that is (stylistically) nearer to a type that'd use prototypal bequest than the manner that Andy Chu shows:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span>class Token(~nud: nud_impl = #false,</span></pre> </div> <div> <pre></pre> <pre><span> method nud(): nud_impl(this)</span></pre> </div> <div> <pre></pre> <pre><span> method led(lhs): led_impl(this, lhs)</span></pre> </div> <div> <pre></pre> <pre><span> method prefix(): expression(30)</span></pre> </div> <div> <pre></pre> <pre><span> method rhs(): expression(this.lbp)</span></pre> </div> <div> <pre></pre> <pre><span>class RParen(): extends Token</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs + tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs - tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs * tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs / tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> | digit+: Token(~nud: fun(_): String.to_int(lexeme))</span></pre> </div> <div> <pre></pre> <pre><span> | error("expected decision parens")</span></pre> </div> <div> <pre></pre> <pre><span>def input = Port.Input.open_string("4 * (3 - 3) / 2 + -10")</span></pre> </div> <div> <pre></pre> <pre><span>def mutable token = lex(input)</span></pre> </div> <div> <pre></pre> <pre><span>fun advance(): token := lex(input)</span></pre> </div> <div> <pre></pre> <pre><span> let mutable remaining = t.nud()</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>class Token(~nud: nud_impl = #false,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method nud(): nud_impl(this)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method led(lhs): led_impl(this, lhs)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method prefix(): expression(30)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method rhs(): expression(this.lbp)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>class RParen(): extends Token</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs + tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs - tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs * tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs / tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> | digit+: Token(~nud: fun(_): String.to_int(lexeme))</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> | error("expected decision parens")</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>def input = Port.Input.open_string("4 * (3 - 3) / 2 + -10")</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>def mutable token = lex(input)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>fun advance(): token := lex(input)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> let mutable remaining = t.nud()</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span>class Token(~nud: nud_impl = #false,</span></pre> </div> <div> <pre></pre> <pre><span> method nud(): nud_impl(this)</span></pre> </div> <div> <pre></pre> <pre><span> method led(lhs): led_impl(this, lhs)</span></pre> </div> <div> <pre></pre> <pre><span> method prefix(): expression(30)</span></pre> </div> <div> <pre></pre> <pre><span> method rhs(): expression(this.lbp)</span></pre> </div> <div> <pre></pre> <pre><span>class RParen(): extends Token</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs + tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs - tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs * tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> ~led: fun(tok, lhs): lhs / tok.rhs(),</span></pre> </div> <div> <pre></pre> <pre><span> | digit+: Token(~nud: fun(_): String.to_int(lexeme))</span></pre> </div> <div> <pre></pre> <pre><span> | error("expected decision parens")</span></pre> </div> <div> <pre></pre> <pre><span>def input = Port.Input.open_string("4 * (3 - 3) / 2 + -10")</span></pre> </div> <div> <pre></pre> <pre><span>def mutable token = lex(input)</span></pre> </div> <div> <pre></pre> <pre><span>fun advance(): token := lex(input)</span></pre> </div> <div> <pre></pre> <pre><span> let mutable remaining = t.nud()</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>class Token(~nud: nud_impl = #false,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method nud(): nud_impl(this)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method led(lhs): led_impl(this, lhs)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method prefix(): expression(30)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> method rhs(): expression(this.lbp)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>class RParen(): extends Token</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs + tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs - tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs * tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> ~led: fun(tok, lhs): lhs / tok.rhs(),</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> | digit+: Token(~nud: fun(_): String.to_int(lexeme))</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> | error("expected decision parens")</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>def input = Port.Input.open_string("4 * (3 - 3) / 2 + -10")</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>def mutable token = lex(input)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>fun advance(): token := lex(input)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> let mutable remaining = t.nud()</span></pre> </div> </div> </div> </div> </div> <div> <h2>Algorithmic &amp; grammar constraints</h2> </div> <p>The former division power have been the densest in this entire blog article so I desire to tune it downward during you incubate the Pratt mindset and go on trivial things for now:</p> <ul> <li> <p>Pratt requires a distinct lexer. Some contemporary parsing engines can activity in a scannerless manner (e.g. PEG) or equal embed the lexer definition immediately in the parser itself, but Pratt requires a distinct lexer. That shouldn't be a big concern, but it's item to keep in mind.</p> </li> <li> <p>Pratt is fast. The algorithm lone compares numbers and iterate or recurse. It's lone looking 1 token ahead, and not doing item alternatively really. It doesn't go rear to test alternatives or to backtrack on unsuccessful manufacturing rules. It fair doesn't go rear at all. It's a full-speed locomotive lone looking onward dining 1 token at a time.</p> </li> <li> <p>Given Pratt itself is already fast, if you desire to optimize anything, the lone item remaining is the dispatch code for nuds &amp; leds. In my case I use earth read-only dispatch tables, but most of the tutorials I've seen in the untamed use energetic objects in extremely energetic scripting languages.</p> </li> <li> <p>Pratt can't parse statements. You have to merge it alongside another techniques to parse languages alongside statements. I've already gone through this constraint in my final blog article anywhere you can discover solutions.</p> </li> <li> <p>Pratt is a form of recursive decline parsing definition it's operating tradition person code (i.e. code in a Turing-complete language) for the semantic actions, but that's not the entire picture. The semantic actions additional run the parsing choices/direction which method that your code power appearance at the environment (e.g. former declarations) to decide how to parse the next part of the input text. In summary you can have several forms of context-sensitive parsing which opens the entrance for additional classes of languages.</p> </li> <li> <p>You'll have to retreat to modal lexing to parse several complex languages established in the wild, but I'll reserve a afterward division of this blog article to contact on this topic.</p> </li> <li> <p>Pratt can't be used for incremental parsing as done in GLR parsing. However that's not a power established in most parsing algorithms anyhow (I'm operating out of algorithmic properties to conversation about). Incremental parsing is used in tools specified as tree-sitter.</p> </li> </ul> <div> <h2>Right-to-left associative operators</h2> </div> <p>My entire disagreement today is that Pratt is a dreary box abstraction, so let's go alongside this disagreement and lay downward what contracts you need to regard to use Pratt:</p> <ul> <li> <p>Only tokens alongside connected leds need a value in the binding power table. Tutorials in the untamed are normally written in a way anywhere this asset isn't obvious. It becomes additional apparent whenever you compose your parser using fixed tables fairly than extremely energetic objects in scripting languages.</p> </li> <li> <p>Related to the former point: You motionless need a value for the binding power of prefix operators, but this value isn't used in the Pratt iteration at all. Therefore it's not a necessity to inflate the binding power array alongside a value for the prefix operators, but that's what most of the code I've seen in the untamed do anyway. If you think it's easier to fair material the binding power for prefix operators in the identical array be my visitant and go ahead. Just withstand in intellect that this famous institution isn't a difficult requirement. Only the nud implementing the prefix controller itself needs to cognize the binding power for prefix operators.</p> </li> <li> <p>Never allocate a binding power of zero to a led.</p> </li> <li> <p>Separators specified as comma and unknown/error/EOF tokens anywhere the parser must halt should have a binding power of zero. They don't need to be in the binding power table.</p> </li> <li> <p>If you're penning in decimal akin all individual being, clasp increments of 10 in the binding power table. When study these values, you may fair disregard the final zero, but the additional area between operators enables several tricks.</p> </li> </ul> <p>So how do we execute right-to-left associative operators alongside Pratt? First let's appearance at a average left-to-right associative infix operator. Here's my code for the led <span><span><span>+</span></span><span><span>+</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> bp </span><span>=</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>binding_power</span><span>[</span><span>static_cast</span><span>&lt;</span><span>unsigned</span><span>&gt;</span><span>(</span><span>code</span><span>::</span><span>plus_sign</span><span>)</span><span>]</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_addition</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span> correct </span><span>=</span><span> </span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> bp</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> bp </span><span>=</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>binding_power</span><span>[</span><span>static_cast</span><span>&lt;</span><span>unsigned</span><span>&gt;</span><span>(</span><span>code</span><span>::</span><span>plus_sign</span><span>)</span><span>]</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_addition</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span> correct </span><span>=</span><span> </span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> bp</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> bp </span><span>=</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>binding_power</span><span>[</span><span>static_cast</span><span>&lt;</span><span>unsigned</span><span>&gt;</span><span>(</span><span>code</span><span>::</span><span>plus_sign</span><span>)</span><span>]</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_addition</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span> correct </span><span>=</span><span> </span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> bp</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>static</span><span> </span><span>constexpr</span><span> </span><span>auto</span><span> bp </span><span>=</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>binding_power</span><span>[</span><span>static_cast</span><span>&lt;</span><span>unsigned</span><span>&gt;</span><span>(</span><span>code</span><span>::</span><span>plus_sign</span><span>)</span><span>]</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_addition</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span> correct </span><span>=</span><span> </span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> bp</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>If we wanted to create the controller right-to-left associative, we'd fair need to use <span><span><span>bp - 1</span></span><span><span>bp - 1</span></span></span> alternatively of <span><span><span>bp</span></span><span><span>bp</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_additionr</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>bp </span><span>/*</span><span> HERE'S THE DIFFERENCE: </span><span>*/</span><span> </span><span>-</span><span> </span><span>1</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_additionr</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>bp </span><span>/*</span><span> HERE'S THE DIFFERENCE: </span><span>*/</span><span> </span><span>-</span><span> </span><span>1</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_additionr</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>bp </span><span>/*</span><span> HERE'S THE DIFFERENCE: </span><span>*/</span><span> </span><span>-</span><span> </span><span>1</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_additionr</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>left</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>bp </span><span>/*</span><span> HERE'S THE DIFFERENCE: </span><span>*/</span><span> </span><span>-</span><span> </span><span>1</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>Addition</span><span>&gt;</span><span>(</span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span><span> left</span><span>,</span><span> right</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>That's a norm trick in the site of Pratt parsing. A trick of the commerce so to speak. A trick you ought to know. Why does it work? It doesn't matter. It's a dreary box for today. Tomorrow it power matter, but today you should lone be focusing on how to use Pratt, not why it works.</p> <div> <h2>Macros openly interleave between lexing &amp; parsing</h2> </div> <p>Why equal compose a division for macros whenever most tongue designers won't add them? Pratt macros are fair nuds/leds implemented in the tongue that your code is parsing and interpreting. Therefore item that your own nuds/leds can do is item that ought to be imaginable in a macro and vice-versa. Lessons learned from Pratt macros are lessons learned on Pratt parsing itself.</p> <p>That's fair a principle, and not a hard-truth. It's certainly not a fact in the Pratt macros of my own language, for instance, but the regulation remains my guide (and hopefully yours as well).</p> <p>The implementation of macros exterior Lisp are traditionally extremely constricted in many fronts. In languages specified as C you have macros that are fair textual substitution templates that activity in the surroundings of a preprocessor doing textual enlargement (therefore operating on the lexing layer). It's additionally imaginable to scheme macros that activity in the AST/parsing tier specified as done in Lisp. However Pratt macros unify these two earlier severed worlds. If you're implementing procedural Pratt macros afterward it's imaginable for the macro to use APIs that alternately invoke either the lexer or the parser. My own macro scheme doesn't yet have adequate APIs so I can't showcase a genuine example, but here's how envision that it's gonna work:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span> // functions whose name commencement alongside "read"</span></pre> </div> <div> <pre></pre> <pre><span> // run the lexer (i.e. they fair consume</span></pre> </div> <div> <pre></pre> <pre><span> // functions whose name commencement alongside "parse"</span></pre> </div> <div> <pre></pre> <pre><span> // run the parser (i.e. they consume and</span></pre> </div> <div> <pre></pre> <pre><span> // come back parsed expressions)</span></pre> </div> <div> <pre></pre> <pre><span> let expr = ctx.parse_expr();</span></pre> </div> <div> <pre></pre> <pre><span>// fair akin Rust, my own macro scheme requires a</span></pre> </div> <div> <pre></pre> <pre><span>// macro invocation to end alongside an exclamation mark</span></pre> </div> <div> <pre></pre> <pre><span>// to act as a affable ocular clue that something</span></pre> </div> <div> <pre></pre> <pre><span>// comic power be going on</span></pre> </div> <div> <pre></pre> <pre><span>passthrough!(std.puts("hello world"));</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> // functions whose name commencement alongside "read"</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // run the lexer (i.e. they fair consume</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // functions whose name commencement alongside "parse"</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // run the parser (i.e. they consume and</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // come back parsed expressions)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> let expr = ctx.parse_expr();</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// fair akin Rust, my own macro scheme requires a</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// macro invocation to end alongside an exclamation mark</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// to act as a affable ocular clue that something</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// comic power be going on</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>passthrough!(std.puts("hello world"));</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span> // functions whose name commencement alongside "read"</span></pre> </div> <div> <pre></pre> <pre><span> // run the lexer (i.e. they fair consume</span></pre> </div> <div> <pre></pre> <pre><span> // functions whose name commencement alongside "parse"</span></pre> </div> <div> <pre></pre> <pre><span> // run the parser (i.e. they consume and</span></pre> </div> <div> <pre></pre> <pre><span> // come back parsed expressions)</span></pre> </div> <div> <pre></pre> <pre><span> let expr = ctx.parse_expr();</span></pre> </div> <div> <pre></pre> <pre><span>// fair akin Rust, my own macro scheme requires a</span></pre> </div> <div> <pre></pre> <pre><span>// macro invocation to end alongside an exclamation mark</span></pre> </div> <div> <pre></pre> <pre><span>// to act as a affable ocular clue that something</span></pre> </div> <div> <pre></pre> <pre><span>// comic power be going on</span></pre> </div> <div> <pre></pre> <pre><span>passthrough!(std.puts("hello world"));</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> // functions whose name commencement alongside "read"</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // run the lexer (i.e. they fair consume</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // functions whose name commencement alongside "parse"</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // run the parser (i.e. they consume and</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> // come back parsed expressions)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> let expr = ctx.parse_expr();</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// fair akin Rust, my own macro scheme requires a</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// macro invocation to end alongside an exclamation mark</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// to act as a affable ocular clue that something</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>// comic power be going on</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>passthrough!(std.puts("hello world"));</span></pre> </div> </div> </div> </div> </div> <p>These APIs are beautiful much what's already used in the center nuds of many parsers using Pratt. A macro scheme lone needs to disclose them to the macros as fine to get this far. This part is really easy. Tasks really challenging in macro systems live elsewhere, not here. The hardest part of a macro scheme is hygiene<a href="https://en.mycoding.id/category/technology" target="_blank">&sup3;</a><a href="https://en.mycoding.id/category/technology" target="_blank">&#8308;</a>, not parsing (well&hellip; parsing is gonna be uncomplicated if you use Pratt parsing at least). However this blog article is concerning (Pratt) parsing, not macro systems, so I'm not gonna delve on hygiene or another macro scheme challenges (problems which I've already battled alongside and ultimately won).</p> <p>The takeaway current is that Pratt parsing enables languages alongside mighty macros that can execute beautiful unconstrained eDSLs. Pratt macros are fair an translator for your tongue that has admission to the lexer and the parser at the item anywhere the macro is being expanded. Patterns that you use in your nuds &amp; leds are patterns that you'd apt see in Pratt macros. The code being parsed is instruction the extremely parser that is parsing it on how to do so (tell me concerning meta!).</p> <p>Usually the lexer is the most neglected part of a compiler. It's a solved problem. There's no logic to discarded period on its design. You use a lexer generator to execute an productive lexer, and move on to never appearance rear again. However Pratt &ndash; the algorithm &ndash; is fair 9 lines of Rhombus code. Your lexer is most apt bigger than the parser already. Just on the visage of this your lexer is already playing a bigger part on your project by at smallest several metric (even if an unimportant one).</p> <p>However it goes additional than this. Every nud and led in your code is a subparser of sorts. Combining (sub)parsers is key to unlocking the power to parse equal additional classes of languages. The lexer becomes the sole item in average that trespass the walls between all subparsers. A fine lexer scheme improves parser composability.</p> <p>As a practitioner of the Pratt school, the sole most crucial lexing method you should study is modal lexing. The method is already helpful on its own equal if you're not using Pratt, but it's equal additional so for us. As Andy Chu succinctly explains<a href="https://en.mycoding.id/category/technology" target="_blank">&#8309;</a>, modal lexing is enabled by adding an additional indicator to your lexer:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> all manner triggers distinct lexing rules</span></pre> </div> <div> <pre></pre> <pre><span></span><span>Token </span><span>Read</span><span>(</span><span>lex_mode_t </span><span>mode</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> all manner triggers distinct lexing rules</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>Token </span><span>Read</span><span>(</span><span>lex_mode_t </span><span>mode</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> all manner triggers distinct lexing rules</span></pre> </div> <div> <pre></pre> <pre><span></span><span>Token </span><span>Read</span><span>(</span><span>lex_mode_t </span><span>mode</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> all manner triggers distinct lexing rules</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>Token </span><span>Read</span><span>(</span><span>lex_mode_t </span><span>mode</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>There are another ways to province the identical pattern. For my own project, I favor to use distinct functions alternatively of an enum. As a C++ programmer I've been trained fine to discern between cases of fixed versus energetic polymorphism, and here's a case anywhere plainly the dispatching data is completely known statically at compile time. Hence it doesn't create awareness to equal use an enum. The narrative could be distinct in extremely energetic macro-enabled languages though.</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_class_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_type_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_expr_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_skim_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_class_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_type_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_expr_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_skim_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_class_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_type_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_expr_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>void</span><span> </span><span>next_on_skim_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_class_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_type_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_expr_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>void</span><span> </span><span>next_on_skim_scope</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>Simple as it is, this sole defining trait of modal lexing unlocks the capability to parse many additional complex classes of languages by providing a way for the lexer to obtain feedback from the parser. Lexers never cognize grammatical structure, but the parser continually does. By feeding this data from the parser rear to the lexer you allow forms of tongue construction anywhere all sublanguage power have conflicting token definitions (e.g. C++11's right-shift controller spawns distinct tokens in template contexts) or fair tokens alongside distinct meanings altogether. Andy Chu already gave thorough examples on anywhere this power be useful<a href="https://en.mycoding.id/category/technology" target="_blank">&#8310;</a> so current I'll lone annoy to contribute a sole example to the corpus.</p> <p>In Rust you have a distinct sublanguage fair to province types. This category note happens in neatly delimited places inner the "main" language. It normally happens following the colon and ends on the equals-sign or delimiters specified as commas or the decision parentheses:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span>let my_variable: category note goes here;</span></pre> </div> <div> <pre></pre> <pre><span>let another_variable: the category = a_value;</span></pre> </div> <div> <pre></pre> <pre><span>fn a_function(arg1: a_type, arg2: another_type) {}</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>let my_variable: category note goes here;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>let another_variable: the category = a_value;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>fn a_function(arg1: a_type, arg2: another_type) {}</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span>let my_variable: category note goes here;</span></pre> </div> <div> <pre></pre> <pre><span>let another_variable: the category = a_value;</span></pre> </div> <div> <pre></pre> <pre><span>fn a_function(arg1: a_type, arg2: another_type) {}</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span>let my_variable: category note goes here;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>let another_variable: the category = a_value;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span>fn a_function(arg1: a_type, arg2: another_type) {}</span></pre> </div> </div> </div> </div> </div> <p>My tongue syntax is heavily inspired by Rust's. Naturally I depend on modal lexing to parse these structures. The function <span><span><span>reader::next_on_type_scope()</span></span><span><span>reader::next_on_type_scope()</span></span></span> shown before is used for the category note sublanguage. Then I have a Pratt parser for all &ndash; <span><span><span>parse_expr()</span></span><span><span>parse_expr()</span></span></span> and <span><span><span>parse_type()</span></span><span><span>parse_type()</span></span></span>. It's a uncomplicated trick that doesn't petition much clarification really, but gets you extremely far. The code nearly writes itself following you get the idea.</p> <p>The lone caveat is that your lexer must adhere to a drag scheme alternatively of lexing all tokens upfront. For several logic group akin to lone scheme shove APIs that completely pilfer implementation flow, and these group are addicted to execute lexers that do all the activity upfront. It's a famous arrangement, but not one that volition activity for modal lexing. Pratt itself is a shove scheme so in the end you'd have a mix of designs.</p> <p>Moving on to the next topic, there are additional lexer tricks that I have to share, but for today I fair have one suggestion: don't scheme your lexers to do any IO (syscalls) nor to buffer anything. Working on a copy of your lexer shouldn't have observable side-effects on the first object. Copies have to be cheap and encouraged. Working on a copy of the lexer enables arbitrary lookahead which power be required by several subparser. Even if you lone requires a fixed amount of lookahead (e.g. 3 tokens) this scheme fits the gap all the same.</p> <p>Fulfilling this scheme is easy: fair peruse the entire document at formerly (or use mmap) and create the lexer item to this shared area to do its job. Your AST solitary is apt gonna use additional recollection than the entire input document anyhow so recollection shouldn't be a involvement here.</p> <p>Now let's revisit my nud for <span><span><span>+</span></span><span><span>+</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_unary_plus</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>UnaryPlus</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>parse_expr</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> prefix_operator_binding_power</span><span>)</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>Most of the code that I see on the untamed has a tradition category for tokens, and that's get used as disagreement for the nuds &amp; leds, but I fair store/pass the lexer itself instead. My lexer is cheap to copy so there's no need to create a category to continue tokens around. The tier expecting a token can decode from the matched lexeme immediately anyhow so the lexer lone needs to shop a few pointers to the first input text. Here's the code parsing decimal literals in my project to showcase the decode-from-lexeme-directly trick:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_declit</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>/*</span><span>context</span><span>*/</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>/*</span><span>r</span><span>*/</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span> apint </span><span>=</span><span> </span><span>syntax</span><span>::</span><span>parse_declit</span><span>(</span><span>tok</span><span>.</span><span>literal</span><span>(</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>IntegerValue</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>llvm</span><span>::</span><span>DynamicAPInt</span><span>{</span><span>apint</span><span>.</span><span>zext</span><span>(</span><span>apint</span><span>.</span><span>getBitWidth</span><span>(</span><span>)</span><span> </span><span>+</span><span> </span><span>1</span><span>)</span><span>}</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_declit</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>/*</span><span>context</span><span>*/</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>/*</span><span>r</span><span>*/</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span> apint </span><span>=</span><span> </span><span>syntax</span><span>::</span><span>parse_declit</span><span>(</span><span>tok</span><span>.</span><span>literal</span><span>(</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>IntegerValue</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>llvm</span><span>::</span><span>DynamicAPInt</span><span>{</span><span>apint</span><span>.</span><span>zext</span><span>(</span><span>apint</span><span>.</span><span>getBitWidth</span><span>(</span><span>)</span><span> </span><span>+</span><span> </span><span>1</span><span>)</span><span>}</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_declit</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>/*</span><span>context</span><span>*/</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>/*</span><span>r</span><span>*/</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span> apint </span><span>=</span><span> </span><span>syntax</span><span>::</span><span>parse_declit</span><span>(</span><span>tok</span><span>.</span><span>literal</span><span>(</span><span>)</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>IntegerValue</span><span>&gt;</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>llvm</span><span>::</span><span>DynamicAPInt</span><span>{</span><span>apint</span><span>.</span><span>zext</span><span>(</span><span>apint</span><span>.</span><span>getBitWidth</span><span>(</span><span>)</span><span> </span><span>+</span><span> </span><span>1</span><span>)</span><span>}</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_declit</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>/*</span><span>context</span><span>*/</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>/*</span><span>r</span><span>*/</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span> apint </span><span>=</span><span> </span><span>syntax</span><span>::</span><span>parse_declit</span><span>(</span><span>tok</span><span>.</span><span>literal</span><span>(</span><span>)</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>return</span><span> </span><span>ast</span><span>::</span><span>make_expr</span><span>&lt;</span><span>ast</span><span>::</span><span>IntegerValue</span><span>&gt;</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>tok</span><span>.</span><span>line</span><span>(</span><span>)</span><span>,</span><span> tok</span><span>.</span><span>column</span><span>(</span><span>)</span><span>,</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>llvm</span><span>::</span><span>DynamicAPInt</span><span>{</span><span>apint</span><span>.</span><span>zext</span><span>(</span><span>apint</span><span>.</span><span>getBitWidth</span><span>(</span><span>)</span><span> </span><span>+</span><span> </span><span>1</span><span>)</span><span>}</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>Furthermore this scheme allows me to rollback 1 token which is item that I use in the nud for <span><span><span>&lt;</span></span><span><span>&lt;</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> this nud is called by parse_expr() (hence expr-scope)</span></pre> </div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_enter_type_scope</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>assert</span><span>(</span><span>tok</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> code</span><span>::</span><span>less_than_sign</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>r </span><span>=</span><span> tok</span><span>;</span><span> </span><span>//</span><span>&lt; 1-token rollback happens here</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> current we re-lex the next token (after the rollback</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> fair above) using the rules for type-scope (a</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> distinct sublanguage alongside distinct tokens)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> afterward we we call parse_type() (instead of parse_expr())</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span>&amp;</span><span> category </span><span>=</span><span> </span><span>parse_type</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> this nud is called by parse_expr() (hence expr-scope)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_enter_type_scope</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>assert</span><span>(</span><span>tok</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> code</span><span>::</span><span>less_than_sign</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>r </span><span>=</span><span> tok</span><span>;</span><span> </span><span>//</span><span>&lt; 1-token rollback happens here</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> current we re-lex the next token (after the rollback</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> fair above) using the rules for type-scope (a</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> distinct sublanguage alongside distinct tokens)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> afterward we we call parse_type() (instead of parse_expr())</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span>&amp;</span><span> category </span><span>=</span><span> </span><span>parse_type</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> this nud is called by parse_expr() (hence expr-scope)</span></pre> </div> <div> <pre></pre> <pre><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_enter_type_scope</span><span>(</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>assert</span><span>(</span><span>tok</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> code</span><span>::</span><span>less_than_sign</span><span>)</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span> </span><span>r </span><span>=</span><span> tok</span><span>;</span><span> </span><span>//</span><span>&lt; 1-token rollback happens here</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> current we re-lex the next token (after the rollback</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> fair above) using the rules for type-scope (a</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> distinct sublanguage alongside distinct tokens)</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>//</span><span> afterward we we call parse_type() (instead of parse_expr())</span></pre> </div> <div> <pre></pre> <pre><span> </span><span></span><span>auto</span><span>&amp;</span><span> category </span><span>=</span><span> </span><span>parse_type</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> this nud is called by parse_expr() (hence expr-scope)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>std</span><span>::</span><span>shared_ptr</span><span>&lt;</span><span>ast</span><span>::</span><span>Expr</span><span>&gt;</span><span> </span><span>parse_enter_type_scope</span><span>(</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>ParsingContext</span><span>&amp;</span><span> </span><span>context</span><span>,</span><span> audience </span><span>tok</span><span>,</span><span> reader</span><span>&amp;</span><span> </span><span>r</span><span>)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>assert</span><span>(</span><span>tok</span><span>.</span><span>code</span><span>(</span><span>)</span><span> </span><span>==</span><span> code</span><span>::</span><span>less_than_sign</span><span>)</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span>r </span><span>=</span><span> tok</span><span>;</span><span> </span><span>//</span><span>&lt; 1-token rollback happens here</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> current we re-lex the next token (after the rollback</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> fair above) using the rules for type-scope (a</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> distinct sublanguage alongside distinct tokens)</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>//</span><span> afterward we we call parse_type() (instead of parse_expr())</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span> </span><span></span><span>auto</span><span>&amp;</span><span> category </span><span>=</span><span> </span><span>parse_type</span><span>(</span><span>context</span><span>,</span><span> r</span><span>,</span><span> parse_until_end</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>This trick additionally requires a lexer that represents error as a dedicated token code alternatively of raising exceptions whenever they happen. You may motionless use exceptions if you desire whenever an error is fatal for all sublanguages (e.g. non-ASCII character established on the stream).</p> <p>Now what's this nud equal parsing power be a valid question, so let's go complete exactly what it's doing. Rust (which inspired my language's syntax heavily) allows one to admission sectors from a type. Field admission current is done using the controller <span><span><span>::</span></span><span><span>::</span></span></span>. For instance:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>use</span><span> </span><span>std</span><span>::</span><span>time</span><span>::</span><span>SystemTime</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>let</span><span> now </span><span>=</span><span> </span><span>SystemTime</span><span>::</span><span>now</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>use</span><span> </span><span>std</span><span>::</span><span>time</span><span>::</span><span>SystemTime</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>let</span><span> now </span><span>=</span><span> </span><span>SystemTime</span><span>::</span><span>now</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>use</span><span> </span><span>std</span><span>::</span><span>time</span><span>::</span><span>SystemTime</span><span>;</span></pre> </div> <div> <pre></pre> <pre><span></span><span>let</span><span> now </span><span>=</span><span> </span><span>SystemTime</span><span>::</span><span>now</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>use</span><span> </span><span>std</span><span>::</span><span>time</span><span>::</span><span>SystemTime</span><span>;</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>let</span><span> now </span><span>=</span><span> </span><span>SystemTime</span><span>::</span><span>now</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>However what happens whenever referring to your category requires admission to the category note tongue specified as in the case for generics? Then you need an "escape hatch" in the chief tongue to admission the category note tongue explicitly, and that's done through the nud for <span><span><span>&lt;</span></span><span><span>&lt;</span></span></span>:</p> <div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> Inside the external &lt;&gt;, we don't interpret</span></pre> </div> <div> <pre></pre> <pre><span></span><span>//</span><span> `Vec &lt; u32` as `Vec less-than u32`.</span></pre> </div> <div> <pre></pre> <pre><span></span><span>//</span><span> Inner viewpoint brackets must be balanced.</span></pre> </div> <div> <pre></pre> <pre><span></span><span>let</span><span> my_vec </span><span>=</span><span> </span><span>&lt;</span><span>Vec</span><span>&lt;</span><span>u32</span><span>&gt;</span><span>&gt;</span><span>::</span><span>new</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> Inside the external &lt;&gt;, we don't interpret</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> `Vec &lt; u32` as `Vec less-than u32`.</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> Inner viewpoint brackets must be balanced.</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>let</span><span> my_vec </span><span>=</span><span> </span><span>&lt;</span><span>Vec</span><span>&lt;</span><span>u32</span><span>&gt;</span><span>&gt;</span><span>::</span><span>new</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> <div> <div> <div> <div> <pre></pre> <pre><span></span><span>//</span><span> Inside the external &lt;&gt;, we don't interpret</span></pre> </div> <div> <pre></pre> <pre><span></span><span>//</span><span> `Vec &lt; u32` as `Vec less-than u32`.</span></pre> </div> <div> <pre></pre> <pre><span></span><span>//</span><span> Inner viewpoint brackets must be balanced.</span></pre> </div> <div> <pre></pre> <pre><span></span><span>let</span><span> my_vec </span><span>=</span><span> </span><span>&lt;</span><span>Vec</span><span>&lt;</span><span>u32</span><span>&gt;</span><span>&gt;</span><span>::</span><span>new</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> <div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> Inside the external &lt;&gt;, we don't interpret</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> `Vec &lt; u32` as `Vec less-than u32`.</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>//</span><span> Inner viewpoint brackets must be balanced.</span></pre> </div> <div translate="no"> <pre></pre> <pre translate="no"><span></span><span>let</span><span> my_vec </span><span>=</span><span> </span><span>&lt;</span><span>Vec</span><span>&lt;</span><span>u32</span><span>&gt;</span><span>&gt;</span><span>::</span><span>new</span><span>(</span><span>)</span><span>;</span></pre> </div> </div> </div> </div> </div> <p>So now you cognize how to parse this category of grammars alongside Pratt. Simon Ochsenreither formerly asserted that using <span><span><span>&lt;&gt;</span></span><span><span>&lt;&gt;</span></span></span> for generics is bad design<a href="https://en.mycoding.id/category/technology" target="_blank">&#8311;</a>, so perchance it's no coincidence that that's the lone period that I really had to use the rollback trick (which I regard a hack) in my project. Nevertheless it was the finest colony I could discover so I went alongside it anyway. Language scheme is hard.</p> <p>I have a lot additional of lexer tricks to share, but I'm emotion that I should postpone them to afterward articles. Some of them are already used in my project. Ironically perhaps, but I acquired the mindset that enabled me to arrive up alongside these lexer tricks from former cognition parsing HTTP and JSON which has nothing to do alongside the techniques that one uses to parse programming languages.</p> <p>Pratt is a change in parsing mindset. You must get comfortable on breaking grammatical structures into nuds &amp; leds. It's totally fine to compose shortcuts that eliminate the boilerplate by factoring the average parts of the implementation of prefix, infix and postfix operators as done by Douglas Crockford<a href="https://en.mycoding.id/category/technology" target="_blank">&#8312;</a>, but if you're changing Pratt's algorithm itself as done by Alex Kladov in 2020<a href="https://en.mycoding.id/category/technology" target="_blank">&#8313;</a> (I've done the identical error myself once) to create accommodations since you refuse to logic in conditions of nuds &amp; leds (or any another reason), you're missing out and should commencement over. Using Pratt parsing as a dreary box idea volition eliminate your capability to alter Pratt's algorithm, and it may assistance in adapting your mindset. That's my direction to get you started.</p> <p>I have a lot additional of parsing tricks to portion (e.g. Pratt-walk interpreters, REPLs alongside ideal auto-completion), but they're additional advanced, and I'll postpone them to afterward articles.</p> <ol> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> <li> </li> </ol> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/pratt-parsing-is-a-black-box-75486</guid> <pubDate>Tue, 03 Nov 2026 21:07:41 +0700</pubDate> <author><![CDATA[support@mycoding.id (Putri Silvia)]]></author> </item> <item> <title><![CDATA[Google’s Q3 2026 Earnings Call: Search & AI Are Merging Into One Unified Product]]></title> <description><![CDATA[Google’s Q3 2026 Earnings Call: Search & AI Are Merging Into One Unified Product. SEOs, buckle up. Google says anticipate fast betterment from recursive self-improvement, and Search is becoming an delegate manager. The article Google’s Q3 2026 Earnin...]]></description> <media:thumbnail url="https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31.png"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/google-s-q3-2026-earnings-call-search-ai-are-merging-into-one-unified-product-75487</link> <content:encoded><![CDATA[<div class="sej-article-content gototop-pos "> <div class="sss2_sllo_o6"> </div> <div id="narrow-cont"><p>Even although Wall Street is panicking complete <a href="https://en.mycoding.id/category/business" target="_blank">Google’s earnings call</a>, it seems apparent to me what is happening. They are not going to dilatory downward whenever it comes to AI. Throughout the call, they said of agents and how we are in the first days of how they are changing Search. <strong>They</strong> <strong>told us that AI Mode, AI overviews, and traditional Search are becoming one unified product.</strong></p> <p>They additionally stated to anticipate fast betterment since of Recursive Self-Improvement (RSI). Things are concerning to get extremely interesting.</p> <p>I think new opportunities are arising, but additionally much of the way we have traditionally been capable to create prosperity from Search is disappearing.</p> <h2>Watch My Video With Thoughts On The Earnings Call</h2> <p>If you favor video, I portion my thoughts on the call.</p><div data-total="12" id="SEJ_300x250_UnderPost_1-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="0" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_1" id="SEJ_300x250_UnderPost_1" class="sadslots"> </div> </div> </div> </div> <p><p class="embed-responsive embed-responsive-16by9 post-embed"><iframe width="560" height="315" aria-label="Preview" class="embed-responsive-item" src="https://www.youtube.com/embed/10SoCEki4I4?feature=oembed&amp;autoplay=1&amp;mute=1&amp;playsinline=1&amp;rel=0" title="YouTube video player" frameborder="0" allow="autoplay; accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></p></p> <p>The chief item I took distant from this earnings call is the accent on the change to agentic search. I think this is motionless unfolding and no one completely knows what this new era of the web volition appearance like. Google gave us a few hints in this call.</p> <p>I discover it fascinating how Google’s inventory plummeted following this call. Alphabet’s revenues were up 25% YOY and Cloud income was up 103%. The broad involvement seems to be that Google is pushing AI Mode more, and so far there are small opportunities for ads shown in AI Mode. Therefore, income from Search is lesser than expected. Still, Search promotion is up 12% YOY. (Wall Street was expecting 15%.)</p><div id="summita-wrapa_112" class="middle_p_txt"></div> <p>I have no concerns complete Google’s capability to continue to thrive. They mentioned in the call that their first precedence is to create AI Mode a norm merchandise and afterward it volition concentration additional on monetizing it. Last week, Google announced that <a href="https://en.mycoding.id/category/business" target="_blank">ads in AI Mode were expanding to additional countries</a> including Australia, Canada and more.</p> <p>Philipp Schindler said:</p> <blockquote><p><em>“Our method is deliberate – prioritizing the person cognition and involvement first, afterward scaling the formats.”</em></p></blockquote> <p>Mark my word, Google volition create <em>plenty</em> of prosperity from ads in the years to come. I think the new connected apps (see additional on this below) could eventually be offered as ads.</p><div data-total="12" id="SEJ_300x250_UnderPost_3-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="2" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_3" id="SEJ_300x250_UnderPost_3" class="sadslots"> </div> </div> </div> </div> <p>They additionally said extensively concerning how there is amazing petition for Google’s computing power. It talked concerning TPUs not as part sales, but as systems. <strong>“TPU Systems” were mentioned 35 times in the call</strong>. Thomas Kurian said:</p> <blockquote><p><em>“A TPU System is not fair a chip, but it’s a specialized scheme that combines multiple things, including hardware, computer, storage, networking and so we are marketing much additional than fair a chip. Software, training, inference.”</em></p></blockquote> <p>I citation this since Google volition apt see amazing growth as additional and additional customers acquisition these TPU systems.</p> <p>What’s most engaging to me is how Google’s verbiage has shifted whenever it comes to talking concerning AI Mode and its association to Search.</p> <h2>Google Sees AI Search And Traditional Search As One Unified Product</h2> <p>The idea of traditional Search and AI Search merging into one merchandise was mentioned multiple times:</p><div data-total="12" id="SEJ_300x250_UnderPost_4-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="3" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_4" id="SEJ_300x250_UnderPost_4" class="sadslots"> </div> </div> </div> </div> <p>Sundar Pichai:</p> <blockquote><p><em>“We are construction one seamless cognition throughout AI Overviews, AI Mode, and Traditional Search.”</em></p></blockquote> <p>Philipp Schindler:</p> <blockquote><p><em>“We think of Search holistically, a unified merchandise spanning traditional results and AI powered Search.</em></p></blockquote> <h2>Agentic Search Is Unfolding</h2> <p>I cognize it feels akin Google is rearward whenever it comes to having an agentic product. X has Grokbot. OpenAI has Dots, and Meta’s Muse is taking off. It seems apparent to me that <a href="https://en.mycoding.id/category/business" target="_blank">the imagination of AI being our individual assistant</a> has been in Google’s intellect for several time. I think they’re taking their period to completely unpack it all since they need to get it right. Google’s end equivalent current is not fair an delegate that volition assistance us get things done online, but much bigger!</p> <p>In May of 2025, Demis Hassabis wrote concerning Google’s aspiration of construction what they called a “<a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Universal AI Assistant</a>.” Much of this part discussed Google’s Genie earth models acting as training environments for robots and how Project Astra which is now in Gemini Live, volition authorize us to have understanding on the earth about us. Google’s goal to arrange the world’s data and create it universally accessible and useful.</p><div data-total="12" id="SEJ_300x250_UnderPost_5-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="4" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_5" id="SEJ_300x250_UnderPost_5" class="sadslots"> </div> </div> </div> </div> <p>I see the pieces coming together. It starts alongside online agents and volition eventually develop into all aspect of our lives particularly as the innovation develops for intelligent eyewear and in-home robots.</p> <p>Philipp Schindler said:</p> <blockquote><p><em>“We are in the first stages of agentic experiences throughout our surfaces, and enthusiastic concerning the business opportunities ahead.”</em></p></blockquote> <p>He went on to conversation concerning how they started by construction agentic experiences into Gemini Enterprise archetypal and, “as a next stage [they’re] bringing these features to Search.”</p> <p>Sundar said:</p> <blockquote><p><em>“It’s apparent that the agentic capabilities we all envision are going to be real.”</em></p></blockquote> <p>And also:</p> <blockquote><p><em>“I’m enthusiastic concerning agents, and I would perspective it as a new frontier, which brings in a new set of use cases to Search.”</em></p></blockquote> <p>Those new use cases apt commencement alongside Connected Apps.</p><div data-total="12" id="SEJ_300x250_UnderPost_6-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="5" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_6" id="SEJ_300x250_UnderPost_6" class="sadslots"> </div> </div> </div> </div> <p>By the way, if you desire to be onward of the curve in seeing how businesses are adapting to agentic search, I dispatch out an email all week alongside all of the latest news on Search &amp; AI:</p> <h2>The Connected Apps Platform – group can use your website’s functionality correct from Search</h2> <p>On the day of the call, Google announced the <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Connected Apps Platform</a>. There are already a fistful of apps that can be used via MCP by Gemini either in the app or from inside Search. Here is an example they gave anywhere a person calls @Peloton to bring the Peloton app cognition into their agentic stream inside Gemini.</p> <p>You can use to the <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Connected Apps Platform here</a>.</p> <p>It was six months ago that Sundar Pichai stated in an discussion that “<a href="https://en.mycoding.id/category/business" target="_blank">Search volition be an delegate manager</a>.” I think this volition be a new era anywhere we change from Search being a location to discover websites that have data to a location anywhere you use tools to assistance you (or your agents) get things done.</p><div data-total="12" id="SEJ_300x250_UnderPost_7-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="6" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_7" id="SEJ_300x250_UnderPost_7" class="sadslots"> </div> </div> </div> </div> <h2>Gemini Use Is Growing</h2> <p>Pichai said:</p> <blockquote><p><em>“The Gemini app is now at one milliard users and is the fastest expanding merchandise in Google’s History.”</em></p></blockquote> <p>A milliard users is the identical figure reported by ChatGPT in June of 2026.</p> <p><a href="https://en.mycoding.id/category/business" target="_blank">Gemini use is expanding quickly</a>.</p> <p>I discover this fascinating since my own use of the Gemini app has declined significantly. I use Gemini in Antigravity for nearly everything.</p> <h2>Coding Improvements Are Coming, Starting With Gemini 4 Carbon</h2> <p>We all cognize that <a href="https://en.mycoding.id/category/business" target="_blank">Google’s models have not been as advanced as those from OpenAI and Anthropic</a>.</p> <p>Last week, Google announced a new frontier model, fair two weeks following <a href="https://en.mycoding.id/category/business" target="_blank">Gemini 4 Argon</a>. Gemini 4 Carbon is currently undergoing voluntary evaluation as per the U.S. Government’s recommendations and volition shortly be released. <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Artificial Analysis</a> currently has Carbon listed as the most intelligent example to date.</p><div data-total="12" id="SEJ_300x250_UnderPost_8-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="7" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_8" id="SEJ_300x250_UnderPost_8" class="sadslots"> </div> </div> </div> </div> <figure id="attachment_595530" class="wp-caption aligncenter"><img decoding="async" src="https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31.png" alt="" width="1194" height="453" class="size-full wp-image-595530" srcset="https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-384x146.png 384w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-425x161.png 425w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-480x182.png 480w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-680x258.png 680w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-768x291.png 768w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-850x322.png 850w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31-1024x389.png 1024w, https://cdn.searchenginejournal.com/wp-content/uploads/2026/11/artificial-analysis-31.png 1194w" sizes=" 1194px) 100vw, 1194px" loading="lazy"><figcaption class="wp-caption-text">Image Credit: Marie Haynes</figcaption></figure> <p>On the call, Sundar Pichai stated that additional models are coming soon, including “more productive versions to assistance developers optimize for speed and cost.”</p> <p>He stated they started seeing a stage alter alongside Gemini 3.8 Flash whenever it came to coding internally at Google. And afterward Gemini 4 Argon was a “huge item of inflection.” He said:</p> <blockquote><p><em>“It is among the most meaningful inner efficiency levers [they] have seen on application engineering, immediately tracking high-quality code that’s getting checked in, and the charge at which it’s getting checked in.”</em></p></blockquote><div data-total="12" id="SEJ_300x250_UnderPost_9-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="8" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_9" id="SEJ_300x250_UnderPost_9" class="sadslots"> </div> </div> </div> </div> <p>Then he said:</p> <blockquote><p><em>“Carbon is a meaningful stage up from Argon.”</em></p></blockquote> <p>Right now I use Gemini 4 Argon throughout three or four simultaneous Antigravity conversations most of the day long. On the Ultra plan, I have barely touched my quota. I idea 3.8 Flash was amazing. It helped me commencement to automate many of the SEO reports I run. When I switched to Gemini 4 Argon a intellect blowing item happened. Gemini 4 Argon + my inner <a href="https://en.mycoding.id/category/business" target="_blank">OKF</a> powered cognition brain and my algo update MCP started producing far improved consulting reports than I could alone. I really accept we are not far from the day anywhere AI volition be improved at all cognition activity than equal the finest humans in their field.</p> <h2>On AGI</h2> <p>Last week, Google announced <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Genie 4</a>, its latest earth model. While it’s chill to see how it can create engaging scenes and games, the most breathtaking item concerning this example is that it volition be used to create training simulations for AI agents and additionally for robots.</p> <p>Sundar Pichai:</p> <blockquote><p><em>“Beyond our Gemini 4 series, yesterday we announced Genie 4, our most advanced earth example yet that simulates safe, realistic, interactive worlds alongside native audio in genuine time. This is an crucial construction obstacle for training robots and agents.”</em></p></blockquote> <p>He afterward said:</p> <blockquote><p><em>“I would anticipate the next dozen months to see continued acceleration since of RSI.”</em></p></blockquote> <p>Buckle up. RSI is “Recursive Self Improvement.” AI is being used additional and additional to assistance enhance AI. We volition see it enhance rapidly.</p> <p><a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Here’s the call</a> if you’d akin to hear to it.</p> <p><strong>More Resources:</strong></p> <ul> <li><a href="https://en.mycoding.id/category/business" target="_blank">Google’s Task-Based Agentic Search Is Disrupting SEO Today, Not Tomorrow</a></li> <li><a href="https://en.mycoding.id/category/business" target="_blank">Google’s New Search Box Hands Queries To AI Agents, I/O Reveals</a></li> <li><a href="https://en.mycoding.id/category/business" target="_blank">Well-Known SEO Explains Why AI Agents Are Coming For You &amp; What To Do Now</a></li> </ul> <hr> <p data-pm-slice="1 1 []"><em>Read Marie’s newsletter, AI News You Can Use. <a href="https://en.mycoding.id/category/business" target="_blank" class="ProsemirrorEditor-link" target="_blank" rel="noopener">Subscribe now</a>.</em></p> <hr> <p><em>Featured Image: Sansoen Saengsakaorat/Shutterstock</em></p> </div> <div id="bcats" class="bottom-cat narrow-cont"> <span class="sej-category boxed cat-label">Category</span> <a href="https://en.mycoding.id/category/business" target="_blank">SEO</a> <a href="https://en.mycoding.id/category/business" target="_blank">AI Search</a> </div> <div class="sej-above-author-widget"> <div class="sej-widget clearfix"> <div class="sej-badge-box"> <a href="https://en.mycoding.id/category/business" target="_blank" data-placement="Under Article" aria-label="Add Search Engine Journal as a preferred origin on Google"> <svg class="sej-gps-g" viewbox="0 0 48 48" aria-hidden="true" focusable="false"> <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path> <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path> <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path> <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path> </svg> <span class="sej-gps-text">Add <b>SEJ</b> as a preferred origin on Google</span> </a> </div> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/google-s-q3-2026-earnings-call-search-ai-are-merging-into-one-unified-product-75487</guid> <pubDate>Tue, 03 Nov 2026 21:00:43 +0700</pubDate> <author><![CDATA[support@mycoding.id (Marie Haynes)]]></author> </item> <item> <title><![CDATA[US Space Force Guardians will join Army Rangers, Navy SEALS, and other special forces in a new command]]></title> <description><![CDATA[US Space Force Guardians will join Army Rangers, Navy SEALS, and other special forces in a new command. The new command volition train and equip Space Force Guardians to particular operations about the world.]]></description> <media:thumbnail url="https://i.insider.com/6aea0d8ff5f059691404aaae?width=1200&amp;format=jpeg"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/us-space-force-guardians-will-join-army-rangers-navy-seals-and-other-special-forces-in-a-new-command-75468</link> <content:encoded><![CDATA[<div e-name="post-hero" data-component-type="post-hero" data-load-strategy="exclude"> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject"> <div> <p><img src="https://i.insider.com/6aea0c1794c155f6acb2e01d?width=2000&amp;format=jpeg&amp;auto=webp" srcset="https://i.insider.com/6aea0c1794c155f6acb2e01d?width=400&amp;format=jpeg&amp;auto=webp 400w, https://i.insider.com/6aea0c1794c155f6acb2e01d?width=500&amp;format=jpeg&amp;auto=webp 500w, https://i.insider.com/6aea0c1794c155f6acb2e01d?width=700&amp;format=jpeg&amp;auto=webp 700w, https://i.insider.com/6aea0c1794c155f6acb2e01d?width=1000&amp;format=jpeg&amp;auto=webp 1000w, https://i.insider.com/6aea0c1794c155f6acb2e01d?width=1300&amp;format=jpeg&amp;auto=webp 1300w, https://i.insider.com/6aea0c1794c155f6acb2e01d?width=2000&amp;format=jpeg&amp;auto=webp 2000w" sizes=" 1280px) 900px" alt="A row of electrogmagnetic war systems are stationed on the dirt alongside a sunset in the background." decoding="sync"> </p></div> <span> <span> <svg aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewbox="0 0 24 24"> <path fill="currentColor" fill-rule="evenodd" d="m4.56 18.5 7.486-7.72 7.394 7.626 2.56-2.64L12.046 5.5 2 15.86l2.56 2.64Z"></path> </svg> <figcaption e-name="image-caption"> <span>US Space Force Special Operations Command volition train and equip personnel for particular forces about the world.</span> <span> <span e-name="image-source" itemprop="creditText">US Space Force photo by Dave Grim</span> </span> </figcaption> </span> </span> </figure> </div> <div data-component-type="image-modal" data-load-strategy="lazy"> <p>The US Space Force has activated a new command dedicated to supporting particular operations forces. It's the military's archetypal new assistance component for US Special Operations Command since the Marines joined alongside Marine Special Operations Command in 2006.</p><p>US Space Forces Special Operations Command, or SPACEFOR-SOC, was formally activated on October 7.</p><p>Headquartered at MacDill Air Force Base in Florida, Space Forces Special Operations Command volition train and equip Space Force Guardians to local particular operations commands about the world. The new command joins another services' units that already assistance SOCOM, specified as the Navy SEALs, Army <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Green Berets</a> and Rangers, <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Marine Raiders</a>, and Air Force pararescue.</p><p>"For the SOF enterprise, this activation provides an enduring and accountable way to merge <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">space power</a> into particular operations," Adm. Frank Bradley, the commandant of SOCOM, stated in a statement. The new command volition provision the Space Force a imperishable existence alongside another SOF units.</p><p>Through a capability known as Space Special Warfare, SPACEFOR-SOC volition deploy small teams made up of space, cyber, and intellect specialists. Those teams are designed to provision mobile, low-signature area capabilities to particular operations units functioning in environments alongside mediocre communication.</p><p>"The Guardians of SPACEFOR-SOC are shaping how our particular operations leaders see the earth through the area domain lens, bringing critical, cutting-edge area ability immediately to the combatant command headquarters," Gen. Douglas Schiess, the Space Force's chief of area operations, said.</p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view" itemscope="" itemtype="https://schema.org/ImageObject"> <div> <p><img src="image/svg+xml,%3C%3Fxml%20version=&#039;1.0&#039;%20encoding=&#039;UTF-8&#039;%3F%3E%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20width=&#039;1&#039;%20height=&#039;1&#039;/%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea0c5494c155f6acb2e01f&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:9504,&quot;aspectRatioH&quot;:4666}}' alt="A US Space Force Guardian sits in forefront of assorted device screens showing satellites and a map."> </p></div> <span> <figcaption e-name="image-caption"> The Space Force oversees resources connected to communications, navigation systems, and networks.&nbsp; <span e-name="image-source" itemprop="creditText"> Courtesy photo by US Space Force Sgt. Michael Carrasquillo </span> </figcaption> </span> </figure> <p>The activation comes as the armed forces increasingly treats area as a contested warfighting domain, specified as the air, ground, sea, and cyberspace. The new concentration is a important change from the final two decades of combat during the Global War on Terror. Today, "space" is crucial for communications, navigation, missile warning, and intelligence.</p><p><a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">GPS navigation</a> in particular is a important involvement for Space Guardians&mdash; disruptions to satellites that provision GPS can degrade operations of a bulk of weapons and technologies.</p><p>Space Force oversees satellites and another bodily resources during additionally protecting assorted networks, communications, and tracking systems. Established in 2019, it is the military's youngest branch and focuses on the area domain as fine as digital warfare.</p> <p>Ongoing conflicts have shown vulnerabilities and advantages in these spaces. In the first days of the <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">US war alongside Iran</a>, officials stated US area and cyber forces were the archetypal to commencement the fight, jamming signals, hacking networks, and disrupting satellites to blind the Iranian military. Space Command and US Cyber Command additionally supported armed forces operations against Venezuela before this twelvemonth and Iran's nuclear program final year.</p><p>These domains have additionally been crucial for Russia and Ukraine, alongside troops fighting inner the electromagnetic spectrum to forestall the another from using satellites, communications, and networks in the fight. The gait at which the two sides can employ attacks and countermeasures in these areas has risen throughout the war.</p><p>Officials have stated this new command volition bring additional of those components into another particular operations forces, contributing greater expertise. The attempt aligns alongside the expanding acknowledgment that electromagnetic spectrum, space, and cyber functions are required to run in another domains specified as sea, land, and air. </p> </div> <h2>Read next</h2> <div data-recommendations-content data-track-click-shared='&quot;Read next&quot;}'> <div e-name="read-next-list" data-recommendations-list> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> </div> </div> <a e-name="read-next-image-link" data-recommendations-image-link data-recommendations-link tabindex="-1"> <p><img alt=""> </p> </a> <h3> <a e-name="read-next-title-link" data-recommendations-link data-recommendations-title></a> </h3> <div data-component-type="post-bottom-authors" data-load-strategy="exclude" data-track-view='&quot;module_in_view&quot;}' data-track-click-shared='&quot;navigation&quot;}'> <div data-track-view='&quot;module_in_view&quot;}'> <div> <p><span>Kelsey Baker is a armed forces affairs newsman alongside Business Insider. She joined in 2025 and covers armed forces personnel issues and how the armed forces is overhauling how it prepares for forthcoming conflicts.</span><span>Prior to joining BI, she worked at The Washington Post as a Military Veterans in Journalism Fellow covering individual involvement stories and global news and at The Chronicle of the Horse mag covering equine sports. She holds a alumnus flat in Journalism from Northwestern University, a flat in Diplomacy from Norwich University, and an undergraduate flat in History from the University of Denver. She earlier served in the Marine Corps as a logistics officer, and afterward in the reserve.</span><span>Contact her via&nbsp;email at kbaker@businessinsider.com, or via Signal at KelseyBaker75.75. Use a individual email address, a nonwork WiFi network, and a nonwork device; <a href="https://en.mycoding.id/category/business" target="_blank">here's our guide to sharing data securely</a>.</span> </p> </div> </div> <div> <div> <p><span>Chris Panella is a defence newsman for Business Insider.&nbsp;He covers scientific transformations in the US armed forces alongside focuses on US armed forces modernization, US Army transformation, and emerging technologies akin synthetic intellect and drones. Globally, Panella reports on China's armed forces and Taiwan. Panella has embedded alongside the Army in Alaska, interviewed particular operators learning to fly drones, and flown alongside US Coast Guard helicopters practicing medication interdictions.&nbsp;</span><span>If you have a tip connected to these areas or broader defence coverage, Panella can be reached at&nbsp;<a href="https://en.mycoding.id/category/business" target="_blank">cpanella@businessinsider.com</a>&nbsp;or on Signal at cpanella.85.</span> </p> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/us-space-force-guardians-will-join-army-rangers-navy-seals-and-other-special-forces-in-a-new-command-75468</guid> <pubDate>Tue, 03 Nov 2026 20:52:20 +0700</pubDate> <author><![CDATA[support@mycoding.id (Kelsey Baker,Chris Panella)]]></author> </item> <item> <title><![CDATA[You can’t hit a wrong note when playing along with songs on Casio’s new keyboard]]></title> <description><![CDATA[You can’t hit a wrong note when playing along with songs on Casio’s new keyboard. Casio announced a new supplement to its Casiotone row of portable digital keyboards alongside a characteristic that could assistance aspiring musicians expert skills akin rhyth...]]></description> <media:thumbnail url="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard1.jpg?quality=90&amp;strip=all&amp;crop=0,10.732984293194,100,78.534031413613"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/you-can-t-hit-a-wrong-note-when-playing-along-with-songs-on-casio-s-new-keyboard-75467</link> <content:encoded><![CDATA[<div><div><div><div><div><p><a href="https://en.mycoding.id/category/technology" target="_blank"><img alt="Andrew Liszewski" data-chromatic="ignore" loading="lazy" width="36" height="36" decoding="async" data-nimg="1" srcset="https://platform.theverge.com/wp-content/uploads/sites/2/2025/01/ANDREW_LISZEWSKI_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=48 1x, https://platform.theverge.com/wp-content/uploads/sites/2/2025/01/ANDREW_LISZEWSKI_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=96 2x" src="https://platform.theverge.com/wp-content/uploads/sites/2/2025/01/ANDREW_LISZEWSKI_BLURPLE.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=96"></a></p><div><p><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span id="follow-author-standard_article_details-dmcyOmF1dGhvclByb2ZpbGU6MTYw"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span></span><span>Andrew Liszewski</span></span></span></p> <p><span>is a elder newsman who&rsquo;s been covering and reviewing the latest gadgets and tech since 2006, but has loved all things digital since he was a kid.</span></p></div></div></div></div></div><div id="zephr-anchor"><div><p>Casio announced a <a href="https://en.mycoding.id/category/technology" target="_blank" rel="sponsored">new supplement to its Casiotone row of portable digital keyboards</a> alongside a characteristic that could assistance aspiring musicians expert skills akin beat and timing without the frustrations or discouragement of hitting the incorrect note.</p></div><p>The <a href="https://en.mycoding.id/category/technology" target="_blank" rel="sponsored">Casiotone CT-FS1 is accessible now for $399.99</a> in a monochromatic dreary or pale type anywhere equal the 61 touch-responsive keys are all the identical color. It can run on AA batteries or a power adapter but at fair under 10 pounds in importance it&rsquo;s certainly not the smallest of portable keyboards. There&rsquo;s built-in stereo speakers and Bluetooth connectivity if you&rsquo;re playing for others, as fine as a bodily headphone jack.</p><div><div><div><div class=""><div><p><a href="https://en.mycoding.id/category/technology" target="_blank" data-pswp-height="601" data-pswp-width="1062" target="_blank" rel="noreferrer"><img alt="The Casio Casiotone FC-FS1 keyboard shown in its dreary and pale color options." data-chromatic="ignore" loading="lazy" decoding="async" data-nimg="fill" sizes=" 1023px) 50vw, 700px" srcset="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=256 256w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=376 376w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=384 384w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=415 415w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=480 480w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=540 540w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=640 640w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=750 750w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=828 828w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1080 1080w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1200 1200w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1440 1440w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=1920 1920w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2048 2048w, https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400 2400w" src="https://platform.theverge.com/wp-content/uploads/sites/2/2026/11/casiokeyboard2.jpg?quality=90&amp;strip=all&amp;crop=0%2C0%2C100%2C100&amp;w=2400"></a></p></div></div></div></div></div><p>The keyboard&rsquo;s most compelling characteristic is what Casio calls its Feel Sync innovation that plant alongside a new Feel Sync mobile app accessible for <a href="https://en.mycoding.id/category/technology" target="_blank">iOS</a> and <a href="https://en.mycoding.id/category/technology" target="_blank" rel="sponsored">Android</a> devices. Through the app you can import a opus document which is analyzed by an algorithm before playing through the keyboard. As you perform alongside alongside the opus the keyboard volition lone create notes that equivalent the song&rsquo;s harmony, no matter what keys you press. You&rsquo;re motionless liable for timing and matching the song&rsquo;s rhythm, but the keyboard takes attention of everything alternatively so you can activity on evolving your imaginative expression without being self-conscious concerning it sounding awful.</p><p>The CT-FS1 can be played akin a norm keyboard without the Feel Sync assistance, but since it&rsquo;s lengthy adequate to modify two musicians, you can additionally divided the keyboard into two zones. One flank plant akin a traditional keyboard for an informed musician to play, during the another benefits from the genuine period Feel Sync corrections.</p><div><p><span><strong>Follow topics and authors</strong> from this narrative to see additional akin this in your personalized homepage nourish and to obtain email updates.</span></p><ul><li id="follow-author-article_footer-dmcyOmF1dGhvclByb2ZpbGU6MTYw"><span aria-expanded="false" aria-haspopup="true" role="button" tabindex="0"><span><span><svg width="9" height="9" viewbox="0 0 9 9" fill="none" xmlns="http://www.w3.org/2000/svg" aria-label="Follow"><path d="M5 0H4V4H0V5H4V9H5V5H9V4H5V0Z"></path></svg></span><span>Andrew Liszewski</span></span></span></li><li><li><li></ul></div></div></div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/you-can-t-hit-a-wrong-note-when-playing-along-with-songs-on-casio-s-new-keyboard-75467</guid> <pubDate>Tue, 03 Nov 2026 20:48:41 +0700</pubDate> <author><![CDATA[support@mycoding.id (Andrew Liszewski)]]></author> </item> <item> <title><![CDATA[12 of the biggest perks of being a US senator]]></title> <description><![CDATA[12 of the biggest perks of being a US senator. Members of Congress can drag position to obtain precedence for haircuts, flights, and equal mail.]]></description> <media:thumbnail url="https://i.insider.com/5c2fc67bdde867535c293ec5?width=1200&amp;format=jpeg"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/12-of-the-biggest-perks-of-being-a-us-senator-75469</link> <content:encoded><![CDATA[<div e-name="post-hero" data-component-type="post-hero" data-load-strategy="exclude"> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject"> <div> <p><img src="https://i.insider.com/6aea167df5f059691404aaee?width=2000&amp;format=jpeg&amp;auto=webp" srcset="https://i.insider.com/6aea167df5f059691404aaee?width=400&amp;format=jpeg&amp;auto=webp 400w, https://i.insider.com/6aea167df5f059691404aaee?width=500&amp;format=jpeg&amp;auto=webp 500w, https://i.insider.com/6aea167df5f059691404aaee?width=700&amp;format=jpeg&amp;auto=webp 700w, https://i.insider.com/6aea167df5f059691404aaee?width=1000&amp;format=jpeg&amp;auto=webp 1000w, https://i.insider.com/6aea167df5f059691404aaee?width=1300&amp;format=jpeg&amp;auto=webp 1300w, https://i.insider.com/6aea167df5f059691404aaee?width=2000&amp;format=jpeg&amp;auto=webp 2000w" sizes=" 1280px) 900px" alt="Sen. Bernie Sanders (I-VT) questions Robert F. Kennedy Jr., U.S. President Donald Trump&#039;s nominee for Secretary of Health and Human Services during his Senate Committee on Health, Education, Labor and Pensions confirmation hearing at the Dirksen Senate Office Building on January 30, 2025" decoding="sync"> </p></div> <span> <span> <svg aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewbox="0 0 24 24"> <path fill="currentColor" fill-rule="evenodd" d="m4.56 18.5 7.486-7.72 7.394 7.626 2.56-2.64L12.046 5.5 2 15.86l2.56 2.64Z"></path> </svg> <figcaption e-name="image-caption"> <span>Bernie Sanders has been a legislator representing Vermont since 2007.</span> <span> <span e-name="image-source" itemprop="creditText">Kevin Dietsch/Getty Images</span> </span> </figcaption> </span> </span> </figure> </div> <div data-component-type="image-modal" data-load-strategy="lazy"> <p>Like millions of Americans throughout the country, you power be spending today <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">glued to the TV</a> or social media as <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Election Day</a> predictions and results rotate in.</p><p>After months, and sometimes years, of campaigning, hours spent prepping, and thousands of dollars raised, 35 winners volition be sworn into the US Senate in January. <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Senate races</a> in Michigan, Texas, Ohio, and Maine have been garnering headlines for months.</p><p>In supplement to their many new responsibilities in office, there are additionally a bunch of perks that arrive alongside being a top lawmaker, including several that final far beyond their period in Congress.</p><p>Here are several of the biggest bonuses of <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">being a US senator</a>.</p> <div data-component-type="post-slides" data-load-strategy="lazy"> <div> <p> <h2>A senator's lifelong pension can be up to 80% of their salary.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc67cdde867535c293ec6&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:2000,&quot;aspectRatioH&quot;:1333}}' alt="nancy pelosi parliament healthcare"> </p></div> <span> <figcaption e-name="image-caption"> <span>Nancy Pelosi and John Sarbanes, D-Md., at a news conference.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> J. Scott Applewhite/AP </a> </span> </span> </figcaption> </span> </figure> <div> <p>The Federal Employees Retirement System provides idiosyncratic <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">pension plans</a> to members of Congress, and the amount depends on their age, salary, and figure of years in the Senate.</p><p>Based on the <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">congressional pay</a> of $174,000 a twelvemonth for most senators (it hasn't been updated since 2009), an 80% pension provides a lifelong advantage of $139,200.</p><p>This places members onward of the bulk of Americans, for whom the 2025 median family earnings was $87,460, according to the <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel="">Census Bureau</a>.</p> </div> </div> <div> <p> <h2>If a associate of Congress dies in office, their family normally receives a $174,000 payout.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc67cdde867535c293ec8&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3000,&quot;aspectRatioH&quot;:1929}}' alt="congress"> </p></div> <span> <figcaption e-name="image-caption"> <span>A shared meeting of Congress met to figure the electoral vote.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> Chip Somodevilla/Getty Images </a> </span> </span> </figcaption> </span> </figure> <div> <p>It's called a death gratuity, and it equals one twelvemonth of the member's salary, paid to an eligible subsister or next of kin.</p><p>By comparison, eligible survivors of armed forces personnel who die during on energetic duty or in certain reserve statuses obtain $100,000.</p> </div> </div> <div> <p> <h2>Every legislator gets an allowance from the authorities to run their offices.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc686dde867535c293ec9&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3000,&quot;aspectRatioH&quot;:2069}}' alt="mitch mcconnell"> </p></div> <span> <figcaption e-name="image-caption"> <span>Kentucky Senator Mitch McConnell in 2008.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> Alex Wong/Getty Images </a> </span> </span> </figcaption> </span> </figure> <div> <p>The Senators' Official Personnel and Office Expense Account, or SOPOEA, is for authoritative agency operations, personnel salaries, travel, and another expenses.</p><p>It comes immediately from the US Treasury, aka our taxes. While the two senators from the identical province are allocated the identical amount of money, not all states obtain the identical amount.</p><p>It's according to a equation that takes population, extend from DC, and communication allocations into consideration.</p><p>There <em>is </em>a flat rate, which method all legislator volition obtain at smallest $677,100, although the <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel="">2026 Senate Appropriations Committee report</a> showed that SOPOEA finances really ranged from $4,296,524 to $6,621,784, alongside an average of $4,664,423.</p> </div> </div> <div> <p> <h2>For 90 days following they depart office, members have admission to "franking" mail, or sending authoritative communication to their constituents.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc686dde867535c293eca&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3000,&quot;aspectRatioH&quot;:2131}}' alt="us mail"> </p></div> <span> <figcaption e-name="image-caption"> <span>A company mailroom employee sifted through mail.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> Mario Tama/Getty Images </a> </span> </span> </figcaption> </span> </figure> <div> <p>You power be wondering, what's so particular concerning that?</p><p>Well, there's one big advantage to franking mail: You don't have to pay postage, which saves the legislator a lot of prosperity in the lengthy run.</p> </div> </div> <div> <p> <h2>Congressional benefits broaden beyond Capitol Hill, including liberated parking at DC-area airports.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea359229a2aa01303e3a15&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:2560,&quot;aspectRatioH&quot;:1950}}' alt="Cars of members of the House and Senate in a restricted parking lot near Ronald Reagan Washington National Airport in 1998."> </p></div> <span> <figcaption e-name="image-caption"> <span>Cars of members of the House and Senate in a restricted parking lot near Ronald Reagan Washington National Airport in 1998.</span> <span> <span e-name="image-source" itemprop="creditText">Scott J. Ferrell/Congressional Quarterly/Getty Images</span> </span> </figcaption> </span> </figure> <div> <p>Members of Congress, as fine as Supreme Court justices and diplomats, get liberated parking at Ronald Reagan Washington National Airport and Washington Dulles International Airport.</p><p>The perk dates rear decades, as shown in the photo complete of a car owned by a associate of the 105th Congress, parked at Reagan in 1998.</p> </div> </div> <div> <p> <h2>Senators additionally obtain preferential care concerning transporter client service.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea2f684b5ca383fe7cf2bb&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:4000,&quot;aspectRatioH&quot;:2667}}' alt="An Embraer E175LR passenger aircraft, operated by Republic Airways Holdings Inc., on the tarmac at Ronald Reagan Washington National Airport"> </p></div> <span> <figcaption e-name="image-caption"> <span>Aircraft on the tarmac of Reagan airfield in DC.</span> <span> <span e-name="image-source" itemprop="creditText">Al Drago/Bloomberg via Getty Images</span> </span> </figcaption> </span> </figure> <div> <p>A lobbyist told <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">Roll Call</a> in 2011 that most important airlines have dedicated client assistance phone lines to assistance those on Capitol Hill, and that senators can double-book flights.</p><p>During the TSA attack before this year, <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Delta suspended</a> several of its perks for senators, specified as expedited security, although the particular array remained operational.</p> </div> </div> <div> <p> <h2>There's additionally the awesome haircuts.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc688dde867535c293ecd&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:2000,&quot;aspectRatioH&quot;:1335}}' alt="senate barber"> </p></div> <span> <figcaption e-name="image-caption"> <span>A perspective of a closed barber shop in the US Senate at the US Capitol.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> BRENDAN SMIALOWSKI/AFP/Getty Images </a> </span> </span> </figcaption> </span> </figure> <p>The Senate Hair Care Services has been functioning since the first 19th Century, providing a assortment of grooming services including haircuts and manicures.</p> </div> <div> <p> <h2>Don't ignore the personal subway, either.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea21d794c155f6acb2e0d1&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:8137,&quot;aspectRatioH&quot;:5425}}' alt="Sen. Chuck Grassley, R-Iowa, is seen in the legislature subway in the U.S. Capitol on Tuesday, June 3, 2025."> </p></div> <span> <figcaption e-name="image-caption"> <span>Sen. Chuck Grassley, R-Iowa, was seen in the Senate subway in the US Capitol.</span> <span> <span e-name="image-source" itemprop="creditText">Tom Williams/CQ-Roll Call, Inc via Getty Images</span> </span> </figcaption> </span> </figure> <div> <p>The <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">Capitol subway system,</a> which runs below the Capitol and connects it to legislative agency buildings, has been in location since 1909. It consists of three lines: Two for the Senate and one for the House of Representatives.</p><p>According to the <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel="">Architect of the Capitol</a> (AOC), which operates the train line, it's there to "allow for harmless and expedient travel" for members to journey from their offices to chambers inside the Capitol to vote.</p> </div> </div> <div> <p> <h2>Senators get admission to fancy gyms that no one's allowed to see inside.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea24754b5ca383fe7cf265&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3000,&quot;aspectRatioH&quot;:1986}}' alt="Democratic presidential hopeful Sen. Barack Obama (D-IL) shoots a basketball on the court at Riverview Elementry School, May 4, 2008"> </p></div> <span> <figcaption e-name="image-caption"> <span>Then-Senator Barack Obama attempt a basketball on the court in 2008.</span> <span> <span e-name="image-source" itemprop="creditText">Mark Wilson/Getty Images</span> </span> </figcaption> </span> </figure> <p>Per a 2011 <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel=" nofollow">ABC News</a> report, senators paid $40 a duration for gyms armed alongside "flat-screen TVs, exercise machines and a swimming pool."</p> </div> <div> <p> <h2>Former members can motionless bask on-site amenities including the House and Senate dining rooms.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/5c2fc688dde867535c293ed0&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3000,&quot;aspectRatioH&quot;:1920}}' alt="us senate"> </p></div> <span> <figcaption e-name="image-caption"> <span>The hall in forefront of the US Senate Chamber is seen.</span> <span> <span e-name="image-source" itemprop="creditText"> <a href="https://en.mycoding.id/category/business" target="_blank" rel="nofollow"> Mark Wilson/Getty Images </a> </span> </span> </figcaption> </span> </figure> <p>Once you depart the Senate, that doesn't average your perks disappear. You motionless get admission to the gym, particular parking, materials through the Library of Congress, and dining facilities.</p> </div> <div> <p> <h2>They can additionally motionless buy from the Senate Stationery Room, which carries many supplies and furnishings.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea28e3f5f059691404ab88&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:3594,&quot;aspectRatioH&quot;:2568}}' alt="The statue of George Washington, the archetypal US chairman is seen in the rotunda of the US Capitol on April 16, 2009 in Washington, DC."> </p></div> <span> <figcaption e-name="image-caption"> <span>The statue of George Washington, the archetypal US president, in the rotunda of the US Capitol.</span> <span> <span e-name="image-source" itemprop="creditText">KAREN BLEIER/AFP via Getty Images</span> </span> </figcaption> </span> </figure> <p>It's basically a Senators-<a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;bi_value_unassigned&quot;}' rel="">only Staples</a> that operates via the Senate Stationery Room Revolving Fund &mdash; so the revenue go rear into the store's prosperity and are used to restock inventory.</p> </div> <div> <p> <h2>Senators get plentifulness of period in their residence states.</h2> </p> <figure data-type="img" e-name="image-figure-image" data-media-container="image" itemscope itemtype="https://schema.org/ImageObject" role="button" tabindex="0" aria-label="Click to open depiction in exhibition view"> <div> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-content-type="image/jpeg" data-srcs='//i.insider.com/6aea2b57f5f059691404ab96&quot;:{&quot;contentType&quot;:&quot;image/jpeg&quot;,&quot;aspectRatioW&quot;:5333,&quot;aspectRatioH&quot;:4000}}' alt="U.S. Senate Majority Leader Sen. Chuck Schumer (D-NY) speaks during a news gathering in forefront of the U.S. Capitol on May 21, 2024"> </p></div> <span> <figcaption e-name="image-caption"> <span>Senator Chuck Schumer in forefront of the US Capitol.</span> <span> <span e-name="image-source" itemprop="creditText">Alex Wong/Getty Images</span> </span> </figcaption> </span> </figure> <div> <p>The Senate's calendar includes lengthy stretches distant from Washington.</p><p>Its <a href="https://en.mycoding.id/category/business" target="_blank" data-track-click='&quot;outbound_click&quot;}' rel="">2026 schedule</a> lists 133 days of planned recess periods, whenever senators are mostly rear in their states fairly than holding flat sessions in the chamber.</p><p>That period is not necessarily a vacation: Senators frequently use it to encounter constituents, clasp events, behavior oversight, and activity on legislation.</p><p><em>Ellen Cranley worked on an before type of this story.</em></p><p><em>Editor's Note: This narrative was initially published in January 2019 and was most lately updated in November 2026.</em></p> </div> </div> </div> </div> <h2>Read next</h2> <div data-recommendations-content data-track-click-shared='&quot;Read next&quot;}'> <div e-name="read-next-list" data-recommendations-list> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> <span> <p><img src="image/svg+xml,%3Csvg%20xmlns=&#039;http://www.w3.org/2000/svg&#039;%20viewBox=&#039;0%200%201%201&#039;%3E%3C/svg%3E" data-src="/public/assets/logos/placeholder.png" alt=""> </p> </span> <h3> <span>Business Insider tells the innovative stories you desire to know</span> </h3> </div> </div> <a e-name="read-next-image-link" data-recommendations-image-link data-recommendations-link tabindex="-1"> <p><img alt=""> </p> </a> <h3> <a e-name="read-next-title-link" data-recommendations-link data-recommendations-title></a> </h3> <div data-component-type="post-bottom-authors" data-load-strategy="exclude" data-track-view='&quot;module_in_view&quot;}' data-track-click-shared='&quot;navigation&quot;}'> <div data-track-view='&quot;module_in_view&quot;}'> <div> <p><span>Gabbi Shaw is a newsman on Business Insider's editorial partnerships team. She has covered entertainment, travel, food, and manner for Business Insider and Insider Inc.'s partners, including MSN, Apple News, and Yahoo since 2018, and her activity has taken her to iconic mansions of the Gilded Age, the Westminster Dog Show, Disney World, the Hamptons, and additional fast-food restaurants than she cares to remember.</span><span>She graduated from Tulane University in 2017 alongside a flat in community health and now lives in New York City.</span><span></span> </p> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/12-of-the-biggest-perks-of-being-a-us-senator-75469</guid> <pubDate>Tue, 03 Nov 2026 20:46:50 +0700</pubDate> <author><![CDATA[support@mycoding.id (Gabbi Shaw)]]></author> </item> <item> <title><![CDATA[The Best Idea for His Business Came From a Customer. And It Led to 300% Growth: ‘We’re Going All-In on This’]]></title> <description><![CDATA[The Best Idea for His Business Came From a Customer. And It Led to 300% Growth: ‘We’re Going All-In on This’. Fit:match originator Haniff Brown built tech to assistance shoppers discover apparel that fit, until a football association asked him to try item new.]]></description> <media:thumbnail url="https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Haniff-Brown-Fitmatch.jpeg"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/the-best-idea-for-his-business-came-from-a-customer-and-it-led-to-300-growth-we-re-going-all-in-on-this-75478</link> <content:encoded><![CDATA[<div> <p>There are several founders who think that lone fine ideas can arrive from them. Haniff Brown is not one of those founders. </p> <p>In 2024, the Williams College math important and erstwhile personal equity capitalist was promoting his business <a href="https://en.mycoding.id/category/technology" target="_blank">Fit:match</a>&rsquo;s AI body-scanning innovation as a way to assistance shoppers discover apparel that fit. Then a important English football squad asked if he&rsquo;d bring the tech to their younker academy for an entirely distinct use. He nearly stated no, but went anyway, and following listening to the coaches, he established an entirely distinct use for the tech &mdash; and much bigger endeavor in the process. </p> <p>Today, Fit:match partners alongside <a href="https://en.mycoding.id/category/technology" target="_blank">FIFA</a>, Major League Soccer and <a href="https://en.mycoding.id/category/technology" target="_blank">Major League Baseball </a>to provision athletes a complete set of anthropometric and body-composition measurements in seconds. Brown said alongside Entrepreneur to portion his insights and direction for building, expanding and seizing unexpected opportunities.</p> <p><strong>Let&rsquo;s commencement alongside the elevator pitch. What is Fit:match?</strong><br>Fit:match is a build intellect platform. Think of us nearly akin the <a href="https://en.mycoding.id/category/technology" target="_blank">ChatGPT </a>or the <a href="https://en.mycoding.id/category/technology" target="_blank">Claude</a> or the Gemini of the individual body. We provision distant admission to build intellect and build analytics at scale. So if you desire precision or data analytics on the individual body, we are the business providing that for hospitals, for athletes, and coaches, and really throughout the board.</p> <p><strong>Talk to us concerning the pivot from your tech focusing on group purchasing clothing.</strong><br>I think it was in 2024 whenever we got a call from a really ample sports squad in England. We were doing several activity in a retailer and they stated to us, &ldquo;Hey, we really akin your technology. I cognize that you&rsquo;re using it for shopping, but can you sway by our younker academy out in the countryside in England?&rdquo; At first, we were like, no, the innovation is built for this purpose. But sometimes as an entrepreneur, you fair have to obtain a hazard and you have to go alongside your gut. And I felt, why not? So whenever I was there, I started to conversation to the coaches, I started to conversation to the scouts and afterward the sports scientists. And that really was the aha instant for us. What they told us at that academy is, &ldquo;Hey, if you can get this build scanning procedure downward to 10 to 15 seconds, you would unlock a huge advantage for us.&rdquo; Because most assessments in sports obtain a lengthy period and affect pulling an sportsperson out of training. I came rear from that trip and I was fair like, &ldquo;We&rsquo;re going all-in on this.&rdquo;</p> <p><strong>You&rsquo;re a die-hard Manchester United fan &mdash; how does it awareness to build a endeavor about item you love?</strong><br>What makes me the happiest is the fact that whether it is the MLB or Major League Soccer, we&rsquo;re doing it at the younker level. If you can democratize it the correct way, you can get admission to additional youth, you can assistance create ecosystems and pathways that don&rsquo;t be today, and you can additionally provision data to parents so they can create improved decisions for their sons and daughters.</p> <figure><img decoding="async" height="683" width="1024" src="https://www.entrepreneur.com/business-news/225" alt="" srcset="https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png 4128w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=300,200 300w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=768,512 768w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=1024,683 1024w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=1536,1024 1536w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=2048,1366 2048w, https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/11/Fit_match-Scan-1.png?resize=337,225 337w" sizes=" 1024px) 100vw, 1024px"></figure> <p><sup><em>Photo credit: Fit:match</em></sup></p> <p><strong>For entrepreneurs, how crucial is it to put your merchandise in people&rsquo;s hands to</strong> <strong>experience it?</strong><br>You have entrepreneurs, and afterward you have founders that are trying to build item that doesn&rsquo;t exist. I&rsquo;m on the second piece. A big part of this journey for me has not lone been, &ldquo;Hey, the innovation works!&rdquo; but it&rsquo;s additionally now proving to enterprises, businesses, markets and consumers that this is item they can do. A big part of how I&rsquo;ve tackled acceptance is to put the innovation out there as much as possible. Because the additional that&rsquo;s hidden, the additional obstacles you have to visage in that marketing journey. So all client call that I have now, whether I&rsquo;m talking to Cleveland Clinic or a sports squad in Peru, I commencement alongside a demo of the technology. Not a video, not a picture. We have person on our squad get on the call, obtain out their iPhone, click four pictures, and go through the technology, since I desire to instruct the individual on the another flank that this is easy. This is an cognition that I continually inform group my eight-year-old son can do and my 70-year-old mom can do. And what I established is the <a href="https://en.mycoding.id/category/technology" target="_blank">ROI </a>and the payback on putting it out there has been huge.</p> <p><strong>What&rsquo;s your direction to founders out there seeking funding?</strong><br>I&rsquo;ve been fairly open concerning this. I do not akin <a href="https://en.mycoding.id/category/technology" target="_blank">fundraising</a>. I akin construction products, I akin scaling teams, I akin having fun on that flank of the business. So I perspective fundraising nearly as if you&rsquo;re going in a car from Los Angeles to New York, and location alongside the row you&rsquo;re gonna interrupt downward and not have any energy left. And you need a gas position alongside the journey. Fundraising is those gas stations. It&rsquo;s not the means, it&rsquo;s not the ends &mdash; it&rsquo;s fair several energy that you need to get to the next phase and execute your journey. If I build the correct product, if I build the correct market, if I have customers who are paying, I&rsquo;ll discover the correct investor. I discover a lot of entrepreneurs try to concentration on fundraising first, afterward those things second. What I established is that fundraising becomes easier formerly you resolve for those things. So my direction is to concentration on the material that investors really desire to see.</p> </div><div> <p>There are several founders who think that lone fine ideas can arrive from them. Haniff Brown is not one of those founders. </p> <p>In 2024, the Williams College math important and erstwhile personal equity capitalist was promoting his business <a href="https://en.mycoding.id/category/technology" target="_blank">Fit:match</a>&rsquo;s AI body-scanning innovation as a way to assistance shoppers discover apparel that fit. Then a important English football squad asked if he&rsquo;d bring the tech to their younker academy for an entirely distinct use. He nearly stated no, but went anyway, and following listening to the coaches, he established an entirely distinct use for the tech &mdash; and much bigger endeavor in the process. </p> <p>Today, Fit:match partners alongside <a href="https://en.mycoding.id/category/technology" target="_blank">FIFA</a>, Major League Soccer and <a href="https://en.mycoding.id/category/technology" target="_blank">Major League Baseball </a>to provision athletes a complete set of anthropometric and body-composition measurements in seconds. Brown said alongside Entrepreneur to portion his insights and direction for building, expanding and seizing unexpected opportunities.</p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/the-best-idea-for-his-business-came-from-a-customer-and-it-led-to-300-growth-we-re-going-all-in-on-this-75478</guid> <pubDate>Tue, 03 Nov 2026 20:40:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Dan Bova)]]></author> </item> <item> <title><![CDATA[Preparing for the Flipper One Kickstarter and opening pre-orders]]></title> <description><![CDATA[Preparing for the Flipper One Kickstarter and opening pre-orders. Comments]]></description> <media:thumbnail url="http://flipper.net/cdn/shop/files/page_flipper-one_og-image.png?v=1785249769"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/preparing-for-the-flipper-one-kickstarter-and-opening-pre-orders-75470</link> <content:encoded><![CDATA[<div id="MainContent" role="main" data-page-transition-enabled="false" data-product-transition="false" data-template="page.flipper-one"> <div id="shopify-section-template--19938098610329__one-landing-hero"> <div> <div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=3840" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=3840 3840w" width="3840" height="1557"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=1706" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=1706 1706w" width="1706" height="960"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=886" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_body.png?v=1793720883&amp;width=886 886w" width="886" height="359"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_body-shadow.png?v=1779205140&amp;width=886" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_body-shadow.png?v=1779205140&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_body-shadow.png?v=1779205140&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_body-shadow.png?v=1779205140&amp;width=886 886w" width="886" height="440"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=804" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_nmap-animation.gif?v=1779205141&amp;width=804 804w" width="804" height="452"> </p> <p>Open Linux device according to a mighty ARM processor. Network multi-tool &mdash; built-in Wi-Fi 6E and Gigabit Ethernet. Expandable via M.2 modules: 5G cellular modem, SDR broadcast and more.</p> <p><a href="https://en.mycoding.id/category/technology" target="_blank" id="OneHeroButton-template--19938098610329__one-landing-hero" aria-label="PRE-ORDER NOW">PRE-ORDER NOW</a></p><p>Follow advancement at the <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank" title="https://docs.flipper.net/one">Developer Portal &gt;&gt;</a></p> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_console.png?v=1785164297&amp;width=1706" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_console.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_console.png?v=1785164297&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_console.png?v=1785164297&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_console.png?v=1785164297&amp;width=1706 1706w" width="1706" height="1908"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_antenna-desktop.png?v=1785164297&amp;width=916" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_antenna-desktop.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_antenna-desktop.png?v=1785164297&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_antenna-desktop.png?v=1785164297&amp;width=916 916w" width="916" height="1972"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_hero-terminal-mobile.png?v=1779205143&amp;width=650" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_hero-terminal-mobile.png?v=1779205143&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_hero-terminal-mobile.png?v=1779205143&amp;width=650 650w" width="650" height="1090"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_hero-switch-mobile.png?v=1779205140&amp;width=784" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_hero-switch-mobile.png?v=1779205140&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_hero-switch-mobile.png?v=1779205140&amp;width=784 784w" width="784" height="456"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_hero-tower-mobile.png?v=1779205141&amp;width=628" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_hero-tower-mobile.png?v=1779205141&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_hero-tower-mobile.png?v=1779205141&amp;width=628 628w" width="628" height="2519"> </p></div> </div><div id="shopify-section-template--19938098610329__one-landing-linux"> <div> <div> <h2>OPEN LINUX PLATFORM</h2> <div><p>Flipper One runs on entirely open-source Linux firmware alongside a mainline kernel. This method supreme compatibility alongside bleeding-edge kernel versions, liberated from vendor-specific BSP restrictions and binary blobs. Our goal is to create a completely upstream-supported ARM device that never becomes outdated, and a well-documented phase giving the community maximum liberty to customize:<br></p><ul><li>Full mainline Linux kernel support</li><li>No binary blobs</li><li>No vendor-locked BSP</li></ul></div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=2832" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration.png?v=1793720974&amp;width=2832 2832w" width="2832" height="1822"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_linux-illustration-mobile.png?v=1793720965&amp;width=1194" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_linux-illustration-mobile.png?v=1793720965&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration-mobile.png?v=1793720965&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_linux-illustration-mobile.png?v=1793720965&amp;width=1194 1194w" width="1194" height="776"></p><div> <p>We have partnered alongside the Collabora team, who are actively operating on bringing the RK3576 SoC into the mainline kernel, to create Flipper One completely upstream-supported and liberated from binary blobs. <a href="https://en.mycoding.id/category/technology" target="_blank">Read&nbsp;Collabora&nbsp;blog&nbsp;post</a></p> </div> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-copro"> <div> <div> <h2>CO-PROCESSOR ARCHITECTURE</h2> <p>Two autonomous processors activity together in parallel, all controlling distinct sub-systems of Flipper One. <br> This architecture allows you to <strong>control the Linux sub-system immediately from the built-in LCD display</strong>, without losing admission to the equipment equal whenever the Linux kernel is not yet prepared or turned off.</p> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=2896" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_copro.png?v=1793720908&amp;width=2896 2896w" width="2896" height="2375" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_copro-medium.png?v=1793720892&amp;width=1436" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_copro-medium.png?v=1793720892&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_copro-medium.png?v=1793720892&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_copro-medium.png?v=1793720892&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_copro-medium.png?v=1793720892&amp;width=1436 1436w" width="1436" height="1434" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_copro-mobile.png?v=1793720899&amp;width=804" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_copro-mobile.png?v=1793720899&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_copro-mobile.png?v=1793720899&amp;width=804 804w" width="804" height="1600" loading="lazy"> </p> <h3>Why 2 processors?</h3> <div><ul><li><strong>Low-power MCU (Raspberry Pi RP2350)</strong> &mdash; an energy-efficient microcontroller liable for center equipment control. It drives the LCD display, bodily buttons, and position LEDs. It manages the power sub-system and controls the Linux OS footwear parameters whenever the Linux sub-system is off. <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank" title="https://docs.flipper.net/one/mcu-firmware/about">More concerning MCU Firmware &gt;&gt;</a></li></ul><ul><li><strong>High-performance CPU (Rockchip RK3576)</strong> &mdash; a mighty 8-core ARM system-on-chip that runs the Linux functioning system. It executes person applications, controls all networking interfaces specified as Wi-Fi and Ethernet, and manages high-speed peripherals including USB3 and PCIe. It additionally integrates an NPU for AI acceleration and a GPU for graphics output via HDMI and DisplayPort. <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank" title="https://docs.flipper.net/one/cpu-software/about">More concerning Linux sub-system &gt;&gt;</a></li></ul></div> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-cable"> <div> <div> <h2>ONE CABLE FOR EVERYTHING</h2> <div><div><p>Get SSH admission and accusation the equipment via a sole USB cable! No additional adapters needed for Linux console admission or powering the equipment &mdash; Flipper One can simultaneously emulate a virtual network adapter, a serial adapter (COM port), and a mass-storage device.</p><p>No drivers required on macOS, Linux, Windows, iOS, or Android.</p></div></div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=5760" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_cable.png?v=1785164299&amp;width=5760 5760w" width="5760" height="2550" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=2998" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_cable-medium.png?v=1779205180&amp;width=2998 2998w" width="2998" height="1415" loading="lazy"></p><p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_cable-mobile.png?v=1782219750&amp;width=804" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_cable-mobile.png?v=1782219750&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_cable-mobile.png?v=1782219750&amp;width=804 804w" width="804" height="806" loading="lazy"> </p> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-scanner"> <div> <div> <div> <h2>NETWORK SCANNER</h2> <p>Analyze wired and wireless IP networks. Flipper One helps you map network topology, detect energetic hosts, and scan for open ports and services. It can additionally act as a passive sensor to detect network attacks and study anomalies.</p> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=5760" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=2600 2600w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=3586 3586w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=4600 4600w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-desktop.png?v=1785164298&amp;width=5760 5760w" width="5760" height="2750" loading="lazy" sizes="150vw"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_scanner-mobile.png?v=1779205148&amp;width=1024" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_scanner-mobile.png?v=1779205148&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-mobile.png?v=1779205148&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_scanner-mobile.png?v=1779205148&amp;width=1024 1024w" width="1024" height="1398" loading="lazy" sizes="100vw"> </p> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-wattmeter"> <div> <div> <div> <h2>POWER METER</h2> <p>The power use meter plant akin a wattmeter, showing in genuine period how much power the complete scheme uses, including the CPU and peripherals. It helps you comprehend what is happening under the hood: whether the scheme is idle or actively working.</p> </div> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-modules"> <div> <div> <div> <h2>M.2 MODULES</h2> <p>The center idea of Flipper One is an expandable hardware platform. Create your own specialized tool alongside a high-speed M.2 enlargement component that installs inner the device, under the rear plate. It supports nearly any category of component &mdash; cellular or moon modems, SDR modules, AI accelerators, SSDs (NVMe or SATA), and Wi-Fi cards via adapters.</p> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=2732" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_modules-desktop.png?v=1793720985&amp;width=2732 2732w" width="2732" height="1869" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_modules-mobile.png?v=1793720991&amp;width=738" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_modules-mobile.png?v=1793720991&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_modules-mobile.png?v=1793720991&amp;width=738 738w" width="738" height="654" loading="lazy"> </p> <div> <div> <h3>M.2 tech specs</h3> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_modules-specs.png?v=1785164297&amp;width=1366" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_modules-specs.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_modules-specs.png?v=1785164297&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_modules-specs.png?v=1785164297&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_modules-specs.png?v=1785164297&amp;width=1366 1366w" width="1366" height="787" loading="lazy"></p><div><ul><li>M.2 type: Key-B</li><li>Supported sizes: 2230 (via extender), 2242, 3042, 3052</li><li>Supported thickness: up to D3 (double-sided modules)</li><li>Interfaces: PCIe 2.1 &times;1 / USB 2.0 / USB 3.1 / SATA3 / SIM cardstock + eSIM</li><li>Extra interfaces: Serial Audio / UART / I&sup2;C</li></ul></div> </div> <div> <h3>Open origin mounting system</h3> <p>All mechanical parts for component mounting are <a href="https://en.mycoding.id/category/technology" target="_blank">completely open source.</a> You can scheme your own antennas, cooling system, and mounting solutions for additional accessories.</p> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_modules-block-two.png?v=1782219685&amp;width=1366" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_modules-block-two.png?v=1782219685&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_modules-block-two.png?v=1782219685&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_modules-block-two.png?v=1782219685&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_modules-block-two.png?v=1782219685&amp;width=1366 1366w" width="1366" height="564" loading="lazy"></p> </div> </div> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-gpio"> <div> <div> <div> <h2>GPIO MODULES</h2> <div><div><p>DIY modules can be connected via the GPIO connector using norm 2.54 mm pin headers. To create the assembled equipment easier to transport around, the GPIO component is positioned alongside the equipment build and can be covered alongside a protective cover.</p><p>Check out&nbsp;<a href="https://en.mycoding.id/category/technology" target="_blank">GPIO specialized specification</a> and <a href="https://en.mycoding.id/category/technology" target="_blank">examples of GPIO modules</a>.</p></div></div> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=2896" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_gpio-desktop.png?v=1793720944&amp;width=2896 2896w" width="2896" height="1918" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_gpio-mobile.png?v=1793720952&amp;width=740" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_gpio-mobile.png?v=1793720952&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_gpio-mobile.png?v=1793720952&amp;width=740 740w" width="740" height="551" loading="lazy"> </p> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-edisplay"> <div> <div> <div> <h2>Desktop Mode</h2> <p>Connect Flipper One to an external display alongside a sole USB-C cable for a complete desktop experience. Support for DisplayPort Alt Mode allows one cable to provision power, transmit video, and nexus USB peripherals specified as a keyboard and mouse simultaneously.</p> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=5760" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=2600 2600w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=3586 3586w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=4600 4600w, //flipper.net/cdn/shop/files/page_flipper-one_display.png?v=1785164299&amp;width=5760 5760w" width="5760" height="2840" loading="lazy" sizes="150vw"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_display-mobile.png?v=1785164297&amp;width=740" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_display-mobile.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_display-mobile.png?v=1785164297&amp;width=740 740w" width="740" height="687" loading="lazy"> </p> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-satellite"> <div> <div> <div> <h2>Satellite NTN Modem</h2> <h2> Satellite modem </h2> <p>NTN <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">(Non-Terrestrial Networks)</a>&nbsp;&mdash; is a moon communication technology, a low-speed association designed for IoT devices, standardized by 3GPP as part of the 5G and LTE specifications. It uses the norm cellular stack, including SIM/eSIM authentication, roaming, and regular IP traffic.</p> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=2896" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_satellite-desktop.png?v=1785164298&amp;width=2896 2896w" width="2896" height="1621" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_satellite-mobile.png?v=1785164297&amp;width=740" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_satellite-mobile.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_satellite-mobile.png?v=1785164297&amp;width=740 740w" width="740" height="1195" loading="lazy"> </p> <p>We desire to add NTN moon connectivity assistance to Flipper One to assistance popularize this innovation and provision engineers and enthusiasts a chance to activity alongside genuine moon infrastructure. <br>To create this happen, we're looking for a partner business akin <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Skylo</a>&nbsp;that's prepared to activity alongside us to add assistance for their moon network to our eSIM component and assistance us choose a particular <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">NTN M.2 module</a>&nbsp;that we can officially support. <br> Read additional on the&nbsp;<a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">Modules &rarr; Satellite modem</a>&nbsp;page.</p> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-wifi-chip"> <div> <div> <h2>Built-in Advanced Wi-Fi Chip</h2> <h2> Built-in Wi-Fi Chip </h2> <p>We desire to build the most versatile unified Wi-Fi into Flipper One &mdash; it needs to assistance all the features required for Wi-Fi network analysis, including detect manner and packet injection. For now, we've settled on the famous Mediatek MT7921U chipset. It's contemporary enough, supports three frequence bands, and ticks fair concerning all box. We're actively evaluation this part correct now and <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">we'd affection you to associate in</a>.</p> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=2896" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_wifi.png?v=1785164297&amp;width=2896 2896w" width="2896" height="2227" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-mobile.png?v=1785164297&amp;width=740" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-mobile.png?v=1785164297&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-mobile.png?v=1785164297&amp;width=740 740w" width="740" height="566" loading="lazy"> </p> <div> <h3>Why MT7921AUN?</h3> <p>The identical chipset is used in the famous ALFA AWUS036AXML adapter, and there's a considerable community about the open-source MT7921U driver. The chief strengths of this chipset:</p> <div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-illustration.png?v=1785164296&amp;width=424" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-illustration.png?v=1785164296&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_wifi-chip-illustration.png?v=1785164296&amp;width=424 424w" width="424" height="424" loading="lazy"></p><div> <ul><li>Modern Wi-Fi 6E: 802.11ax, 2x2 MIMO</li><li>Frequencies: 2.4 / 5 / 6 GHz bands</li><li>Open mainline Linux driver: mt7921u</li><li>Monitor manner support</li><li>Integrated Bluetooth 5.2</li></ul> </div> </div> </div> </div> </div> </div><div id="shopify-section-template--19938098610329__one-landing-esim"> <div> <div> <h2>BUILT-IN eSIM</h2> <div><p>Flipper One has a built-in eSIM part that comes pre&#8209;provisioned alongside a Flipper SIM data plan.</p><p>To use the eSIM data plan, you need to instal a 5G modem in the M.2 slot. You can additionally toggle between the built-in eSIM and a bodily SIM card.</p></div> <div> <div> <p><img src="https://flipper.net/cdn/shop/t/5/assets/one-esim-sim-icon.svg?v=142576394257534669311793721441" alt="" width="23" height="30" loading="lazy"></p><h3>What is Flipper SIM?</h3> </div> <p>We're operating on an experimental connectivity project for network geeks. Flipper SIM is a worldwide SIM cardstock for routers, phones, and IoT devices, alongside advanced features specified as always-on connectivity, outage-proof, traffic filtering, and network administration tools. We'll portion additional particulars soon!</p><p><span aria-disabled="true">Coming soon</span></p></div> </div> <p><img src="https://flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=1990" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=832 832w, //flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=1200 1200w, //flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=1920 1920w, //flipper.net/cdn/shop/files/page_flipper-one_esim.png?v=1793720928&amp;width=1990 1990w" width="1990" height="1949" loading="lazy"> <img src="https://flipper.net/cdn/shop/files/page_flipper-one_esim-mobile.png?v=1793720918&amp;width=804" alt="" srcset="//flipper.net/cdn/shop/files/page_flipper-one_esim-mobile.png?v=1793720918&amp;width=352 352w, //flipper.net/cdn/shop/files/page_flipper-one_esim-mobile.png?v=1793720918&amp;width=804 804w" width="804" height="974" loading="lazy"> </p> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/preparing-for-the-flipper-one-kickstarter-and-opening-pre-orders-75470</guid> <pubDate>Tue, 03 Nov 2026 20:32:13 +0700</pubDate> <author><![CDATA[support@mycoding.id (Doris Putra)]]></author> </item> <item> <title><![CDATA[Both Sizes of the Latest M5 MacBook Air Are $200 Off Right Now]]></title> <description><![CDATA[Both Sizes of the Latest M5 MacBook Air Are $200 Off Right Now. The 13-inch and 15-inch M5 MacBook Airs are the two $200 off onward of Black Friday.]]></description> <media:thumbnail url="https://lifehacker.com/imagery/articles/01KNHXW090TGXDQ96AQW67PM69/hero-image.jpg"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/both-sizes-of-the-latest-m5-macbook-air-are-200-off-right-now-75472</link> <content:encoded><![CDATA[<div class="leading-normal prose-sm m-0 line-clamp-5 font-normal">Daniel is Lifehacker's Shopping Editor covering tech deals and reviewing TVs, headphones, speakers, and projectors. He earned his master’s in reporting from Columbia University and has reported for the Miami Herald. He lives in Atlanta.</div> <hr class="custom-gradient-background my-6 h-[6px] max-w-[75px] border-0"> <p>Apple <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">announced a slew of products</a> in March that ended up<a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank"> expanding in price</a> afterward in June <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">due to the RAM shortage</a>, including the MacBook Air alongside the M5 chip. These MacBooks arrive in the two 13-inch and 15-inch sizes, and if you're curious in either, it's a fine period to buy: Amazon is marketing the two correct now at a $200 discount. That brings the <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">13-inch MacBook Air</a> to $1,099.99 (down from $1,299) and the <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">15-inch MacBook Air</a> to $1,299 (originally $1,499), reaching their lowest prices since the June cost hikes, according to <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank">tracking tools</a>.</p><div class="shadow-b-2 mb-12 mt-10 rounded-md border-2 border-[#F0F0F0] px-6 py-2 shadow-lg md:px-12" role="region" aria-label="Products List" x-data=" false }"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="flex flex-col py-8 gap-5 border-dotted border-[#CFCFCE] cursor-default no-underline md:flex-row md:gap-y-2 md:py-7 border-b-2" data-ga-click="data-ga-click" data-ga-module="product-list" data-ga-element="offer" data-ga-item="offer-btn" data-ga-label="Apple 2026 MacBook Air 13-inch Laptop alongside M5 chip" data-ga-position="1" aria-label="Apple 2026 MacBook Air 13-inch Laptop alongside M5 part Product Card" x-cloak="x-cloak" x-show="showMore || 0 &lt; 3"> <div class="flex w-full gap-x-5"> <div class="gap-y-6"> <div class="gap-y-1"> <div class="leading-6"> Apple 2026 MacBook Air 13-inch Laptop alongside M5 chip </div> </div> <div class="gap-x-4"> <div class="justify-center font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $1,099.99 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$1,299.00</span> <span class="text-sm text-brand-green">Save $199.01</span> </div> </div> Get Deal </div> </div> <div class="order-1"> <img class="m-0 max-h-full max-w-full rounded-md" src="https://lifehacker.com/imagery/product/00MG1nFtNAXMYgoifcZx8gd/hero-image.fill.size_autoxauto.v1782404576.jpg" alt='Apple MacBook Air M5 13.6&quot; Laptop (16GB/512GB, Sky Blue)' width="auto" height="auto" loading="lazy"> </div> </div> Get Deal <div class="hidden font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $1,099.99 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$1,299.00</span> <span class="text-sm text-brand-green">Save $199.01</span> </div> </div> </a> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="flex flex-col py-8 gap-5 border-dotted border-[#CFCFCE] cursor-default no-underline md:flex-row md:gap-y-2 md:py-7" data-ga-click="data-ga-click" data-ga-module="product-list" data-ga-element="offer" data-ga-item="offer-btn" data-ga-label="Apple 2026 MacBook Air 15-inch Laptop alongside M5 chip" data-ga-position="2" aria-label="Apple 2026 MacBook Air 15-inch Laptop alongside M5 part Product Card" x-cloak="x-cloak" x-show="showMore || 1 &lt; 3"> <div class="flex w-full gap-x-5"> <div class="gap-y-6"> <div class="gap-y-1"> <div class="leading-6"> Apple 2026 MacBook Air 15-inch Laptop alongside M5 chip </div> </div> <div class="gap-x-4"> <div class="justify-center font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $1,299.00 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$1,499.00</span> <span class="text-sm text-brand-green">Save $200.00</span> </div> </div> Get Deal </div> </div> <div class="order-1"> <img class="m-0 max-h-full max-w-full rounded-md" src="https://lifehacker.com/imagery/product/05dQgtzltKNbvGgAWOoH2qZ/hero-image.fill.size_autoxauto.v1773365647.jpg" alt=" Built for AI, 15.3-inch Liquid Retina Display, 16GB Unified Memory, 512GB SSD, 12MP Center Stage Camera, Touch ID, Wi-Fi 7; Midnight" width="auto" height="auto" loading="lazy"> </div> </div> Get Deal <div class="hidden font-sans leading-4 text-black"> <div class="justify-start"> <span class="font-bold"> $1,299.00 <span class="font-medium">at Amazon</span> </span> </div> <div class="justify-start"> <span class="text-sm line-through">$1,499.00</span> <span class="text-sm text-brand-green">Save $200.00</span> </div> </div> </a> SEE -1 MORE <svg class="-mt-[2px] inline-block size-3 fill-current text-brand-green"> </svg> </div> <p>The M5 MacBook Air is the finest laptop for most group in 2026, as they normally are alongside all new example whenever it comes to value for your money. In difference to the already outstanding M4 Airs, the M5 basis example has twice the retention at 512GB. The M5 part is mighty and makes the <a href="https://en.mycoding.id/category/technology" target="_blank" target="_blank" title="open in a new window" rel="noopener">performance equal smoother</a>, according to Mashable's review. The aluminum scheme is as fine as you'd anticipate from Apple's most famous portable laptop, keeping it lightweight and thin. It comes alongside a Liquid Retina display, Touch ID, a 12MP Center Stage Camera, and the Magic Keyboard. </p><div class="py-0" data-ga-click data-ga-template="Deals" data-ga-module="openweb_widget" data-ga-element="openweb_scroll" data-ga-item="openweb_scroll_midpage" x-data="&#039;, e); } } }" x-init="fetchCommentsCount()" x-cloak> <div class="absolute top-1/2 hidden w-full -translate-y-1/2 border-t-[1.5px] border-dashed border-black sm:block"></div> <div class="relative flex justify-center"> <div class="flex max-w-fit items-center gap-x-3 bg-white px-5"> <div class="relative"> <span class="absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 font-akshar text-sm font-medium text-black" aria-live="polite" x-show="hasComments" x-text="commentsCount"></span> <svg class="h-8 w-8 text-black" role="img" aria-hidden="true"> </svg> </div> <span class="text-sm font-medium text-black"> What do you think so far? </span> </div> </div> </div> <p>Typically, the inquiry would be whether to go for the slightly <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">older M4 MacBook Air</a> or pay a bit additional for the newer M5 chip—but stated how durable it is to discover a new M4 laptop and that most refurbished ones are the identical cost as the M5 alongside 512GB of storage, it makes the choice to <a href="https://en.mycoding.id/category/technology" target="_blank" rel="nofollow sponsored" target="_blank" title="open in a new window">go alongside the M5</a> a no-brainer—especially alongside the $200 discount.</p><hr><div class="left-1/2 md:w-[780px] md:max-w-max md:-translate-x-1/2" x-data=" false }"> <div class="text-left"> <div class="rounded-tl-none"> <div class="rounded-tl-none"> <span class="text-2xl">Our Best Editor-Vetted Early Black Friday Deals Right Now</span> <div class="text-base"> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label="Apple AirPods Pro 3 Noise Cancelling Heart Rate Wireless Earbuds" data-ga-element="offer" data-ga-module="offer-group" data-ga-position="1"> Apple AirPods Pro 3 Noise Cancelling Heart Rate Wireless Earbuds </a> <span class="text-black"> — <span class="font-bold">$199.00</span> <span class="!text-sm"> (List Price $249.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='Apple iPad 11&quot; 128GB Wi-Fi Retina Tablet (Blue, 2025 Release)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="2"> Apple iPad 11" 128GB A16 WiFi Tablet (Blue, 2025) </a> <span class="text-black"> — <span class="font-bold">$399.99</span> <span class="!text-sm"> (List Price $449.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label="Apple HomeView Smart Display (Silver, 2026 Release)" data-ga-element="offer" data-ga-module="offer-group" data-ga-position="3"> Apple HomeView Smart Display (Silver, 2026 Release) </a> <span class="text-black"> — <span class="font-bold">$299.00</span> <span class="!text-sm"> (List Price $299.00) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='TCL Tab 10 Gen 4 128GB 10.1&quot; Tablet (Dark Blue/Gray)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="4"> TCL Tab 10 Gen 4 128GB 10.1" Tablet (Dark Blue/Gray) </a> <span class="text-black"> — <span class="font-bold">$169.99</span> <span class="!text-sm"> (List Price $199.99) </span> </span> </div> <div x-show="1 || showAll"> <a href="https://en.mycoding.id/category/technology" target="_blank" data-commerce="1" target="_blank" rel="nofollow sponsored" data-parent-group="affiliate-link" title="(opens in a new window)" class="text-brand-green-700" data-ga-click="data-ga-click" data-ga-item="offer-group-item" data-ga-label='50&quot; Amazon Amber 4-Series 4K HDR10+ Smart Fire TV (2025 Model)' data-ga-element="offer" data-ga-module="offer-group" data-ga-position="5"> Amazon Ember 50" 4-Series alongside Fire TV (newest model) </a> <span class="text-black"> — <span class="font-bold">$309.99</span> <span class="!text-sm"> (List Price $399.99) </span> </span> </div> </div> </div> </div> <div class="px-6"> <span class="text-sm">Deals are selected by our commerce team</span> </div> </div> </div> <div class="leading-normal prose-sm mt-4 line-clamp-2"> <p></p><p>Covering tech deals and reviewing TVs, headphones, speakers, and projectors.</p><p><br></p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/both-sizes-of-the-latest-m5-macbook-air-are-200-off-right-now-75472</guid> <pubDate>Tue, 03 Nov 2026 20:30:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Daniel Oropeza)]]></author> </item> <item> <title><![CDATA[Google Ad Tags In Server-Side GTM To Get Full IP Addresses]]></title> <description><![CDATA[Google Ad Tags In Server-Side GTM To Get Full IP Addresses. Google says ad tags in server-side Tag Manager volition obtain complete IP addresses during Analytics tags remain redacted. Here's what changes and how to redact. The post...]]></description> <media:thumbnail url="https://en.mycoding.id/site/assets/img/og-image.png"/> <category><![CDATA[Business]]></category> <link>https://en.mycoding.id/google-ad-tags-in-server-side-gtm-to-get-full-ip-addresses-75474</link> <content:encoded><![CDATA[<div class="sej-article-content gototop-pos "> <div class="sss2_sllo_o6"> </div> <div id="narrow-cont"><p>Server-side Google Tag Manager volition let tags for Google’s ad products obtain complete IP addresses starting Jan. 11, 2027, according to a <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Google notice to advertisers</a>.</p> <p>The alter covers tags that dispatch data to Google Ads, Display &amp; Video 360, Search Ads 360 and Campaign Manager 360 from a server container. Google Analytics tags volition keep redacting IP addresses, the notice says.</p> <p>Google Ads expert Adriaan Dekker shared the notice on LinkedIn on Nov. 2. It carries no matter date, and Google’s <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Tag Manager publish notes</a> don’t citation the alter as of Nov. 3.</p> <p>Advertisers alongside Google ad tags in a server receptacle have until Jan. 11 to decide whether those tags should get complete or partially redacted IP addresses.</p> <h2>What The Notice Changes</h2> <p>The notice, titled “Updates to network indication handling in server-side tagging,” explains that server containers “will passage from container-wide IP location redaction to idiosyncratic tag-level processing.” It afterward outlines four effects:</p><div data-total="6" id="SEJ_300x250_UnderPost_1-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="0" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_1" id="SEJ_300x250_UnderPost_1" class="sadslots"> </div> </div> </div> </div> <blockquote><p>Tags sending data to Google Ads, Display &amp; Video 360, Search Ads 360 and Campaign Manager 360 volition now obtain the complete IP address.</p></blockquote> <blockquote><p>Google Analytics tags volition continue to use IP redaction.</p></blockquote> <blockquote><p>Third-party tags volition keep autonomous authority complete the signals that they accept.</p></blockquote> <blockquote><p>Transformations can redact these signals before any tag accesses the data.</p></blockquote> <p>The notice addresses server containers only. It says nothing concerning the Google tag or web containers operating in the browser.</p> <p>Google’s publish notes display server-side Tag Manager could redact or anonymize IPs through Analytics server tags as of March 2021. Transformations, which edit or exclude event data before tags peruse it, followed in June 2023.</p> <p>The notice doesn’t explain how container-wide redaction is currently set up. Google’s <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">server-side setup leaf for the Google Ads conversion tag</a> says the tag sends “all the accessible conversion data to Google” unless transformations alter it, and, as of Nov. 3, doesn’t citation IP addresses.</p><div id="summita-wrapa_112" class="middle_p_txt"></div> <h2>How To Keep IP Addresses Redacted</h2> <p>The notice directs users to “our Help Centre part for detailed opt-out instructions” and does not disclose anywhere the nexus is pointing to based upon the screenshot provided. A Tag Manager Help Center page, <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">IP location redaction for server-side tagging</a>, shows an example of how to use transformations.</p> <p>The leaf outlines the chief steps to set up this functionality using transformations:</p> <ol> <li>Create a new Custom Template Variable that calls Google’s getAnonymizedIpAddress function.</li> <li>Create a new Augment event transformation that overwrites the ip_override site alongside the anonymized IP location from stage one.</li> </ol><div data-total="6" id="SEJ_300x250_UnderPost_3-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="2" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_3" id="SEJ_300x250_UnderPost_3" class="sadslots"> </div> </div> </div> </div> <p>This volition power the tags you choose (such as Google Ads or Floodlight). After completing these steps the leaf additionally states to inspect the results in Preview previous to deploying the changes to production. Additionally, the leaf explains that Analytics server tags “already use partial IP redaction by default.”</p> <p>Google’s <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">API reference</a> says the function zeroes the final octet of an IPv4 location and the final 80 bits of an IPv6 address. The Help leaf calls the outcome a “partially redacted IP.”</p> <p>Google added the function to its API citation following Oct. 12. The Internet Archive’s <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Oct. 12 capture</a> of the leaf doesn’t catalog it. The live leaf does, and shows an Oct. 30 update date.</p> <p>Some third-party tags may need a Transformation of their own. The Help leaf notes that these tags can peruse IP addresses from tradition headers or event parameters fairly than from ip_override, so you’ll need to set the Transformation to mark the site all tag uses.</p><div data-total="6" id="SEJ_300x250_UnderPost_4-parent" class="content-unit sss2_sllo_o6 mmh-90-wrap"> <div class="mmh-90-inner"> <div class="mmh-90 flex-aligner"> <div data-adnumber="3" data-middle="no" data-p-slot="SEJ_300x250_UnderPost" data-slot="SEJ_300x250_UnderPost/SEJ_300x250_UnderPost_4" id="SEJ_300x250_UnderPost_4" class="sadslots"> </div> </div> </div> </div> <h2>Consent Requirements</h2> <p>Per the notice, advertisers using Google’s promotion products “must justify that appropriate end-user notices and legally required consents are in location before data gathering begins.” In addition, all advertisers using Google’s promotion products in the EEA “must strictly adhere” to Google’s <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">EU User Consent Policy</a>, and the guideline extends to those customers whose end users live in the United Kingdom and/or Switzerland. All customers in another areas anywhere privacy regulations use must prosecute those local requirements and phase terms.</p> <p>Google says the update “integrates privacy-enhancing technologies (PETs),” filters spam and invalid traffic, and volition enhance run performance.</p> <p>The notice does not provision data concerning how changes volition engage alongside consent manner as fine as the non-consenting requests that were stated in the Release Notes (Floodlight tags in server containers are stated to have begun sending in July 2025) nor was there any citation of anywhere or how lengthy complete IP addresses would be stored.</p> <p>The announced server-side alter is distinct from Google’s planned <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Analytics data authority updates</a>; these volition encrypt IP addresses collected by the Google tag and SDK and continue them to connected Google Ads accounts, on dates Google plans to portion afterward this year.</p> <h2>Why This Matters</h2> <p>You can use server-side tagging to decide how much data goes alongside all tag as it leaves your servers, and Google’s notice determines whether its ad tags volition obtain complete IP addresses in this configuration.</p> <p>Prior to Jan. 11, assessment all Google Ads, Floodlight and third-party tags inner your server containers and acknowledge which IP site all tag is reading. The method outlined by Google in the assistance division on how to build a Transformation using preview evaluation is currently the documented resolution for keeping an ad tag’s IP partially masked. Your consent procedure should contain any IP data used by these tags.</p> <h2>Looking Ahead</h2> <p>Tag-level IP handling for Google server containers is scheduled to commencement January 11, 2027. There are no references to IP addresses in either of Google’s server-side pages on <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">Transformations</a> or <a href="https://en.mycoding.id/category/business" target="_blank" target="_blank" rel="noopener">consent mode</a> as of Nov. 3.</p> <p>The Tag Manager publish notes may provision an authoritative notice whenever tag-level IP handling for server containers is accessible and the developer pages may have the detailed information. The Redaction assistance leaf have to be reviewed previous to creating your Transformation since that is how you do this now.</p> <p><em>Featured Image: Stockinq/Shutterstock</em></p> </div> <div id="bcats" class="bottom-cat narrow-cont"> <span class="sej-category boxed cat-label">Category</span> <a href="https://en.mycoding.id/category/business" target="_blank">News</a> <a href="https://en.mycoding.id/category/business" target="_blank">PPC</a> </div> <div class="sej-above-author-widget"> <div class="sej-widget clearfix"> <div class="sej-badge-box"> <a href="https://en.mycoding.id/category/business" target="_blank" data-placement="Under Article" aria-label="Add Search Engine Journal as a preferred origin on Google"> <svg class="sej-gps-g" viewbox="0 0 48 48" aria-hidden="true" focusable="false"> <path fill="#EA4335" d="M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z"></path> <path fill="#4285F4" d="M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z"></path> <path fill="#FBBC05" d="M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z"></path> <path fill="#34A853" d="M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z"></path> </svg> <span class="sej-gps-text">Add <b>SEJ</b> as a preferred origin on Google</span> </a> </div> </div> </div> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/google-ad-tags-in-server-side-gtm-to-get-full-ip-addresses-75474</guid> <pubDate>Tue, 03 Nov 2026 20:30:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Matt G. Southern)]]></author> </item> <item> <title><![CDATA[7 Mistakes Founders and CEOs Make When Talking to the Media (and How to Avoid Them)]]></title> <description><![CDATA[7 Mistakes Founders and CEOs Make When Talking to the Media (and How to Avoid Them). Even accomplished endeavor leaders create mistakes during media interviews. Here's how to evade seven average missteps that can undermine your credibility and cost...]]></description> <media:thumbnail url="https://www.entrepreneur.com/wp-content/uploads/sites/2/2026/10/talking-to-press-mistakes-1026_g2280433686.jpg"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/7-mistakes-founders-and-ceos-make-when-talking-to-the-media-and-how-to-avoid-them-75479</link> <content:encoded><![CDATA[<p> Opinions expressed by Entrepreneur contributors are their own. </p><div> <div> <h2>Key Takeaways</h2> <ul> <li>You don&rsquo;t have to answer all question, but you do need to cognize your ability and communicate it clearly.</li> <li>Prepare three key messages, guide alongside your chief point, and evade unnecessary jargon.</li> <li>Journalists desire helpful insights, not revenue pitches. Credibility and preparedness are essential.</li> </ul> </div> <p>Being a prosperous CEO doesn&rsquo;t automatically create you a awesome <a href="https://en.mycoding.id/category/technology" target="_blank">media</a> spokesperson. I&rsquo;ve coached executives throughout financial services and another expert industries who can guide organizations, navigate complex challenges and command a boardroom, yet battle to communicate efficiently alongside journalists.</p> <p>Even the most accomplished executives can undermine their credibility by talking too much, making unsupported claims or turning <a href="https://en.mycoding.id/category/technology" target="_blank">interviews</a> into revenue pitches. Fortunately, these mistakes are avoidable. Here are seven I see most frequently and how to forestall them.</p> <h2 id="h-1-thinking-you-have-to-be-an-expert-on-everything">1. Thinking you have to be an expert on everything</h2> <p>One of the biggest misconceptions executives have is that they must answer all inquiry a newsman asks. You don&rsquo;t. Even whenever a inquiry relates to your industry, it may autumn exterior your particular expertise.</p> <p>Rather than guessing, say, &ldquo;I&rsquo;m not the finest individual to answer that, but I can nexus you alongside person who is,&rdquo; or &ldquo;That&rsquo;s exterior my area of expertise, but what I can inform you is&hellip;&rdquo; <a href="https://en.mycoding.id/category/technology" target="_blank">Journalists</a> don&rsquo;t anticipate you to cognize everything. They do anticipate you to cognize what you&rsquo;re talking about. Of course, declining to estimate isn&rsquo;t the identical as evading a legitimate, difficult inquiry concerning your business.</p> <h2 id="h-2-talking-too-much-before-getting-to-the-point">2. Talking too much before getting to the point</h2> <p>A newsman asks a straightforward question, and the administrator launches into a five-minute clarification filled alongside background, caveats and unnecessary details. By the period they create their point, the newsman may have misplaced involvement or run out of time.</p> <p>My advice? <strong>Lead alongside the headline.</strong> Answer the inquiry immediately in one or two sentences, afterward stop. If the newsman wants more, recommendation an anecdote or compelling example that illustrates your point. Journalists affection <a href="https://en.mycoding.id/category/technology" target="_blank">stories</a>, but don&rsquo;t inter your chief communication below layers of explanation. If the newsman remembers lone one sentence, create certain it&rsquo;s the one that matters.</p> <h2 id="h-3-failing-to-prepare-3-key-messages">3. Failing to prepared 3 key messages</h2> <p>Before all media interview, I trainer clients to acknowledge three key messages they desire to communicate. Not 10. Not 15. Three. These power connect to your business, expertise, merchandise or the matter being discussed.</p> <p>Ask yourself: If lone three things I say create it into the story, what should they be? Even whenever a newsman calls unexpectedly on deadline, it&rsquo;s sensible to ask, &ldquo;Can I call you rear in five minutes?&rdquo; Use that period to arrange your thoughts, assuming the reporter&rsquo;s deadline allows it.</p> <p>Don&rsquo;t be fearful to fortify crucial messages naturally throughout the conversation. <a href="https://en.mycoding.id/category/technology" target="_blank">Preparation</a> isn&rsquo;t concerning memorizing a script; it&rsquo;s concerning knowing what matters before the discussion begins.</p> <h2 id="h-4-using-jargon-and-underestimating-the-journalist">4. Using terminology and underestimating the journalist</h2> <p>Financial services, healthcare, biotechnology and another specialized industries are filled alongside acronyms, credentials and specialized terminology. But fair since a term is acquainted to you doesn&rsquo;t average the newsman understands it.</p> <p>I advance executives to explain complex concepts as although they&rsquo;re talking to a family associate about the meal table. Could your mother, grandma or 10-year-old comprehend your point? If not, simplify it.</p> <p>And don&rsquo;t confuse a journalist&rsquo;s unfamiliarity alongside <a href="https://en.mycoding.id/category/technology" target="_blank">industry terminology</a> for a deficiency of intelligence. Reporters shield multiple subjects, frequently under tight deadlines. A inquiry that seems apparent to you may be exactly what their readers need answered. You&rsquo;re the subject-matter expert. Help them understand.</p> <h2 id="h-5-turning-the-interview-into-a-commercial">5. Turning the discussion into a commercial</h2> <p>A media discussion <a href="https://en.mycoding.id/category/technology" target="_blank">isn&rsquo;t a revenue presentation</a>. Journalists aren&rsquo;t interviewing you to comprehend how fantastic your business is. They&rsquo;re looking for information, viewpoint and insights that assistance them inform a compelling story.</p> <p>Statements akin &ldquo;We&rsquo;re the finest in the industry&rdquo; or &ldquo;Our resolute offers unparalleled service&rdquo; aren&rsquo;t particularly useful. Excessive self-promotion can immediately undermine your <a href="https://en.mycoding.id/category/technology" target="_blank">credibility</a>.</p> <p>Instead, portion a amazing insight, explain an emerging trend, recommendation a contrarian viewpoint or provision a real-world example. It&rsquo;s fine to provision backdrop concerning your firm, but don&rsquo;t hijack the conversation alongside a commercial. </p> <p>The finest media sources create the journalist&rsquo;s narrative better, not their own business audio bigger.</p> <h2 id="h-6-making-claims-you-can-t-substantiate">6. Making claims you can&rsquo;t substantiate</h2> <p>Unsupported statistics, exaggerated claims and overconfident predictions can quickly damage your credibility, particularly whenever discussing financial markets, <a href="https://en.mycoding.id/category/technology" target="_blank">economic conditions</a> or another complex subjects anywhere forecasts are inherently uncertain.</p> <p>If you citation a statistic, cognize anywhere it came from and be prepared to provision the source. If you&rsquo;re making a prediction, differentiate your opinion from established fact. And if you don&rsquo;t cognize an answer, say so. There&rsquo;s nothing incorrect alongside telling a reporter, &ldquo;I don&rsquo;t have that fig in forefront of me, but I can inspect and prosecute up.&rdquo;</p> <p>Journalists recall sources they can trust. Don&rsquo;t provision them a logic to inquiry yours.</p> <h2 id="h-7-forgetting-that-everything-you-say-could-become-part-of-the-story">7. Forgetting that everything you say could rotate into part of the story</h2> <p>When speaking alongside a journalist, assume you&rsquo;re on the record. That includes informal remarks, offhand observations and comments made before or following the ceremonial interview.</p> <p>I powerfully alert executives concerning going &ldquo;off the record.&rdquo; Many misunderstand what that method or assume they can province item off the document following saying it. They can&rsquo;t. Such arrangements necessitate mutual accord before data is shared, and I mostly advise clients to evade them unless there&rsquo;s a compelling logic and plainly established terms.</p> <p>The safest method is simple: Don&rsquo;t say item to a newsman that you wouldn&rsquo;t be comfortable seeing in imprint or hearing repeated publicly.</p> <h2 id="h-the-best-interviews-are-conversations-not-performances">The finest interviews are conversations, not performances</h2> <p>A <a href="https://en.mycoding.id/category/technology" target="_blank">successful media interview</a> isn&rsquo;t concerning demonstrating how intelligent you are, answering all inquiry absolutely or finding opportunities to advance your business. It&rsquo;s concerning being a credible, informed and helpful source.</p> <p>The finest spokespeople prepared without sounding rehearsed, recommendation insights fairly than commercials and cognize whenever to halt talking. Ultimately, being quotable isn&rsquo;t concerning saying more. <strong>It&rsquo;s concerning having item meaningful to say and knowing how to say it clearly.</strong></p> </div>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/7-mistakes-founders-and-ceos-make-when-talking-to-the-media-and-how-to-avoid-them-75479</guid> <pubDate>Tue, 03 Nov 2026 20:30:00 +0700</pubDate> <author><![CDATA[support@mycoding.id (Amiee Watts)]]></author> </item> <item> <title><![CDATA[Introduction to Programming in ATS]]></title> <description><![CDATA[Introduction to Programming in ATS. Comments]]></description> <media:thumbnail url="https://en.mycoding.id/site/assets/img/og-image.png"/> <category><![CDATA[Technology]]></category> <link>https://en.mycoding.id/introduction-to-programming-in-ats-75471</link> <content:encoded><![CDATA[<a href="https://en.mycoding.id/category/technology" target="_blank">Comments</a>]]></content:encoded> <guid isPermaLink="true">https://en.mycoding.id/introduction-to-programming-in-ats-75471</guid> <pubDate>Tue, 03 Nov 2026 20:25:18 +0700</pubDate> <author><![CDATA[support@mycoding.id (Doris Putra)]]></author> </item> </channel> </rss>