Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://planet.mozilla.org/rss20.xml

  1. <?xml version="1.0"?>
  2. <rss version="2.0"
  3. xmlns:dc="http://purl.org/dc/elements/1.1/"
  4. xmlns:atom="http://www.w3.org/2005/Atom"
  5. >
  6.  
  7. <channel>
  8. <title>Planet Mozilla</title>
  9. <link>https://planet.mozilla.org/</link>
  10. <language>en</language>
  11. <description>Planet Mozilla - https://planet.mozilla.org/</description>
  12. <atom:link rel="self" href="https://planet.mozilla.org/rss20.xml" type="application/rss+xml"/>
  13.  
  14. <item>
  15. <title>Firefox Developer Experience: Firefox DevTools Newsletter — 127</title>
  16. <guid isPermaLink="false">https://fxdx.dev/?p=279</guid>
  17. <link>https://fxdx.dev/firefox-devtools-newsletter-127/</link>
  18. <description>&lt;p id=&quot;block-76c8a329-2aa9-4b20-b394-1c28c0f8b918&quot;&gt;&lt;em&gt;Developer Tools help developers write and debug websites on Firefox. This newsletter gives an overview of the work we’ve done as part of the Firefox 127 Nightly release cycle.&lt;/em&gt;&lt;/p&gt;
  19.  
  20.  
  21.  
  22. &lt;h3&gt;Performance project&lt;/h3&gt;
  23.  
  24.  
  25.  
  26. &lt;p&gt;If you’ve been reading us for a bit, you are now well aware that we’re focusing on performance for a few months to make our tools as fast as they can be.&lt;/p&gt;
  27.  
  28.  
  29.  
  30. &lt;p&gt;We made displaying rules in the Inspector &lt;strong&gt;5% faster&lt;/strong&gt; for the common case, and even &lt;strong&gt;600 times faster&lt;/strong&gt; on pages with very large stylesheets (going from &lt;a href=&quot;https://share.firefox.dev/3VAZlai&quot;&gt;~3 seconds&lt;/a&gt; to &lt;a href=&quot;https://share.firefox.dev/4ep0eez&quot;&gt;~5 milliseconds&lt;/a&gt; in a page using Tailwind)! This was made possible by moving away from our DevTools-specific, JS-written, CSS lexer &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1410184&quot;&gt;to a Rust-based implementation&lt;/a&gt;. In various places of the codebase, we need to know the different “parts” of a CSS selector, or a property declaration. To have a reliable way of analyzing a given CSS snippet, we use a CSS lexer which computes a sequence of tokens describing the different parts of the snippet. Since this tokenization is actually also done at the CSS engine level when a stylesheet is parsed, as described in the &lt;a href=&quot;https://www.w3.org/TR/css-syntax-3/#syntax-description&quot;&gt;CSS Syntax Module Level 3 specification&lt;/a&gt;. We were trying to do the same thing as the engine, and given that we do have access to the engine machinery, it felt silly not sharing the same code. This performance project was a nice opportunity to integrate with the Rust-based implementation the engine is using and ditch our JS-implementation.&lt;/p&gt;
  31.  
  32.  
  33.  
  34. &lt;h3&gt;Oh my bugs&lt;/h3&gt;
  35.  
  36.  
  37.  
  38. &lt;p&gt;As temperatures rise in the Northern hemisphere, we’re entering bugs season, and unfortunately, our project isn’t immune to that. First, we identified and addressed a pretty severe race condition that could result in the toolbox not opening at all (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1898490&quot;&gt;#1898490&lt;/a&gt;). We also got reports of Debugger crashing (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891699&quot;&gt;#1891699&lt;/a&gt;), as well as issues in the Console when displaying wasm stracktraces (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888645&quot;&gt;#1888645&lt;/a&gt;). Hopefully everything is now working correctly. &lt;/p&gt;
  39.  
  40.  
  41.  
  42. &lt;p&gt;If those could be thought of “killer bees” bugs, we also tackle some annoying “midge” bugs:&lt;/p&gt;
  43.  
  44.  
  45.  
  46. &lt;ul&gt;
  47. &lt;li&gt;The Network panel could be missing  requests made from iframes at the very end of their lifecycle, for example in the &lt;code&gt;unload&lt;/code&gt; event (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887852&quot;&gt;#1887852&lt;/a&gt;)&lt;/li&gt;
  48.  
  49.  
  50.  
  51. &lt;li&gt;When using the node picker, you can hold the &lt;kbd&gt;Shift&lt;/kbd&gt; key to be able to retrieve elements that are not receiving mouse events (e.g. having &lt;code&gt;pointer-events: none&lt;/code&gt; declaration). When using this feature, our heuristic should now better pick the “deepest” element under the mouse (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889500&quot;&gt;#1889500&lt;/a&gt;)&lt;/li&gt;
  52.  
  53.  
  54.  
  55. &lt;li&gt;Did you know that you could nest &lt;code&gt;@keyframes&lt;/code&gt; rule in other at-rules? In such case, we’re now properly detecting the rules, and displaying it in the Rules view, like non-nested keyframes rules (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894603&quot;&gt;#1894603&lt;/a&gt;)&lt;/li&gt;
  56.  
  57.  
  58.  
  59. &lt;li&gt;Firefox 125 added support for the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Popover_API&quot;&gt;Popover API&lt;/a&gt;, but it wasn’t possible to inspect their &lt;code&gt;::backdrop&lt;/code&gt; pseudo-element, it’s now fixed.&lt;/li&gt;
  60.  
  61.  
  62.  
  63. &lt;li&gt;Finally, last year, on OSX, we changed the location for screeshots taken in DevTools, from Downloads to Pictures. This was confusing for some people as Firefox Screenshots still put them in the Downloads folder, so we reverted our change.&lt;/li&gt;
  64. &lt;/ul&gt;
  65.  
  66.  
  67.  
  68. &lt;p class=&quot;has-background-secondary-background-color has-background&quot;&gt;&lt;strong&gt;And that’s it for this months folks, Thank you for reading this and using our tools, see you in a few weeks for a new round of updates &lt;img alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/strong&gt;&lt;/p&gt;</description>
  69. <pubDate>Tue, 18 Jun 2024 15:10:14 +0000</pubDate>
  70. <dc:creator>Nicolas Chevobbe</dc:creator>
  71. </item>
  72. <item>
  73. <title>The Mozilla Blog: Introducing Anonym: Raising the bar for privacy-preserving digital advertising</title>
  74. <guid isPermaLink="false">https://blog.mozilla.org/?p=75198</guid>
  75. <link>https://blog.mozilla.org/en/mozilla/mozilla-anonym-raising-the-bar-for-privacy-preserving-digital-advertising/</link>
  76. <description>&lt;p&gt;Mozilla has acquired &lt;a href=&quot;https://www.anonymco.com/&quot;&gt;Anonym&lt;/a&gt;, a trailblazer in privacy-preserving digital advertising. This strategic acquisition enables Mozilla to help raise the bar for the advertising industry by ensuring user privacy while delivering effective advertising solutions.&lt;/p&gt;
  77.  
  78.  
  79.  
  80. &lt;p&gt;The online advertising industry is undergoing a significant transformation. With growing consumer concerns and increasing scrutiny from regulators, it’s evident that current&lt;a href=&quot;https://stateof.mozilla.org/#privacy&quot;&gt; data practices&lt;/a&gt; are excessive and unsustainable. We are at the forefront of a pivotal shift in how privacy and advertising coexist, reshaping the digital landscape for advertisers, platforms, and consumers.&lt;/p&gt;
  81.  
  82.  
  83.  
  84. &lt;p&gt;Amidst this moment of change, Anonym stands out for its unique privacy-preserving technology. By securely combining encrypted data sets from platforms and advertisers, Anonym enables scalable, privacy-safe measurement and optimization of advertiser campaigns, thereby leading a shift toward a more sustainable advertising ecosystem.  &lt;/p&gt;
  85.  
  86.  
  87.  
  88. &lt;p&gt;Here’s how it works: &lt;/p&gt;
  89.  
  90.  
  91.  
  92. &lt;ul&gt;
  93. &lt;li&gt;Secure Environment: Data sets are matched in a highly secure environment, ensuring advertisers, publishers, and Anonym don’t access any user level data.&lt;/li&gt;
  94.  
  95.  
  96.  
  97. &lt;li&gt;Anonymized Analytics: The process results in anonymized insights and models, helping advertisers measure and improve campaign performance while safeguarding consumer privacy.&lt;/li&gt;
  98.  
  99.  
  100.  
  101. &lt;li&gt;Differential Privacy Algorithms: These algorithms add “noise” to the data, protecting it from being traced back to individual users.&lt;/li&gt;
  102. &lt;/ul&gt;
  103.  
  104.  
  105.  
  106. &lt;p&gt;This acquisition marks a significant step in addressing the urgent need for privacy-preserving advertising solutions. By combining Mozilla’s scale and trusted reputation with Anonym’s cutting-edge technology, we can enhance user privacy and advertising effectiveness, leveling the playing field for all stakeholders.&lt;/p&gt;
  107.  
  108.  
  109.  
  110. &lt;p&gt;Anonym was founded with two core beliefs: First, that people have a fundamental right to privacy in online interactions and second, that digital advertising is critical for the sustainability of free content, services and experiences. Mozilla and Anonym share the belief that advanced technologies can enable relevant and measurable advertising while still preserving user privacy.&lt;/p&gt;
  111.  
  112.  
  113.  
  114. &lt;p&gt;As we integrate Anonym into the Mozilla family, we are excited about the possibilities this partnership brings. While Anonym will continue to serve its customer base, together, we are poised to lead the industry toward a future where privacy and effective advertising go hand in hand, supporting a free and open internet. &lt;/p&gt;
  115.  
  116.  
  117.  
  118. &lt;p&gt;&lt;strong&gt;About Anonym&lt;/strong&gt;: &lt;em&gt;Anonym was founded in 2022 by former Meta executives Brad Smallwood and Graham Mudd. The company was backed by Griffin Gaming Partners, Norwest Venture Partners, Heracles Capital as well as a number of strategic individual investors.&lt;/em&gt;&lt;/p&gt;
  119. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-anonym-raising-the-bar-for-privacy-preserving-digital-advertising/&quot;&gt;Introducing Anonym: Raising the bar for privacy-preserving digital advertising&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  120. <pubDate>Mon, 17 Jun 2024 06:05:03 +0000</pubDate>
  121. <dc:creator>Laura Chambers</dc:creator>
  122. </item>
  123. <item>
  124. <title>Don Marti: happy Father’s Day, here’s a Dad joke</title>
  125. <guid isPermaLink="true">https://blog.zgp.org/fathers-day-joke/</guid>
  126. <link>https://blog.zgp.org/fathers-day-joke/</link>
  127. <description>&lt;p&gt;Ready? Joke time. Here’s an old one.&lt;/p&gt; &lt;p&gt;&lt;q&gt;What’s the difference between a donut and a turd?&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;q&gt;I don’t know.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;q&gt;Remind me never to send you out for donuts.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;What reminded me of that joke is all the surveillance advertising companies going on about how surveillance advertising is so good for small businesses. But if they &lt;a href=&quot;https://www.techpolicy.press/the-one-simple-trick-to-measuring-abuse-in-techs-440-billion-ads-business/&quot;&gt;have so much trouble telling small businesses and fraud apart&lt;/a&gt;, how can they know? Maybe surveillance ads are just better for fraud. The interesting comparison to make is not between a legit business at times they have surveillance advertising on or off, because the scammers competing to reach the same customers are leaving the surveillance ads on. IMHO you have to look from the customer side. If surveillance advertising helps legit companies reach people who can benefit from their products, then &lt;a href=&quot;https://blog.zgp.org/easy-experiment-behavioral-advertising/&quot;&gt;people who use ad blockers or privacy tools should be less happy with the stuff they buy&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Instead, &lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4635884&quot;&gt;people who installed ad blockers for a study turned out to be less likely to regret their recent purchases&lt;/a&gt;, and that’s surprising enough to be worth digging into. Maybe it’s not fraud, just drop-shippers. Lots of &lt;a href=&quot;https://www.reddit.com/r/dropship/&quot;&gt;drop-shippers/social media advertisers&lt;/a&gt; are finding existing cheap products, marking them up, and selling using surveillance ads. It’s not illegal, but the people who click the ads end up paying more money for the same stuff. Maybe the reason that the ad blocker users are happier as shoppers is that they search out and buy, say, a $20 product for $20 instead of paying a drop-shipper $99? Or maybe ad blocker users are just making fewer but better thought out purchases?&lt;/p&gt;</description>
  128. <pubDate>Sun, 16 Jun 2024 00:00:00 +0000</pubDate>
  129. </item>
  130. <item>
  131. <title>Don Marti: links for 15 June 2024</title>
  132. <guid isPermaLink="true">https://blog.zgp.org/mlp-2024-06-15/</guid>
  133. <link>https://blog.zgp.org/mlp-2024-06-15/</link>
  134. <description>&lt;p&gt;Just some reading material, more later. I did mess with the CSS on this blog a little, so pages with code on them should look a little better on small screens even if you have to scroll horizontally to see the code.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://nationalinterest.org/feature/eclipse-russian-arms-market-211455&quot;&gt;The Eclipse of the Russian Arms Market&lt;/a&gt; &lt;q&gt;China is entering the market for traditional Russian products.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://pressgazette.co.uk/platforms/devastating-potential-impact-of-google-ai-overviews-on-publisher-visibility-revealed/&quot;&gt;‘Devastating’ potential impact of Google AI Overviews on publisher visibility revealed&lt;/a&gt; (This is strange. Right at the time Google needs all the support they can get for their unpopular privacy and antitrust positions, they’re taking action against everyone else on the web. Not sure what the plan is here.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://stefanbohacek.com/blog/which-top-sites-block-ai-crawlers/&quot;&gt;Which top sites block AI crawlers?&lt;/a&gt; &lt;q&gt;All in all, most sites I looked at don’t care to have their content used to train AI.&lt;/q&gt; (IMHO this will be a big issue with the Fediverse—currently the only way to pass a &lt;code&gt;noai&lt;/code&gt; signal is to defederate. I made a FEP (&lt;a href=&quot;https://codeberg.org/fediverse/fep/src/branch/main/fep/5e53/fep-5e53.md&quot;&gt;fep-5e53&lt;/a&gt;) so will see what happens.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://mikeshields.substack.com/p/why-first-party-data-may-not-save&quot;&gt;Why First Party Data May Not Save Digital Advertising&lt;/a&gt; (This is why it’s going to be better to get real consent, later, from fewer people than bogus consent based on zero information about the brand or publisher.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://mylesyounger.substack.com/p/ai-wont-kill-ad-agencies-heres-why&quot;&gt;AI won’t kill ad agencies. Here’s why.&lt;/a&gt; &lt;q&gt;Why? Because an agency can amortize the cost of expertise across multiple different paying clients.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91138450/united-airlines-targeted-ads-seatback-screens-opt-out&quot;&gt;United Airlines wants to show you personalized seatback ads: Here’s how to opt out&lt;/a&gt; (Meanwhile, other airlines are getting rid of heavy seatback entertainment systems to save fuel, since passengers are bringing devices with better screens anyway.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.jwz.org/blog/2024/06/your-personal-information-is-very-important-to-us/&quot;&gt;“Your personal information is very important to us.”&lt;/a&gt; (XScreenSaver for Android has a privacy policy now.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.thebignewsletter.com/p/economic-termites-are-everywhere&quot;&gt;Economic Termites Are Everywhere&lt;/a&gt; &lt;q&gt;[E]conomic termites…are instances of monopolization big enough to make investors a huge amount of money, but not noticeable enough for most of us. An individual termite isn’t big enough to matter, but the existence of a termite is extremely bad news, because it means there are others. Add enough of them up, and you get our modern economic experience.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://arstechnica.com/?p=2029773&quot;&gt;Tesla may be in trouble, but other EVs are selling just fine&lt;/a&gt; (How much of this is the brand personality and how much is the problem that Teslas are expensive to insure? I think every car I have ever owned ended up costing a lot more in car insurance than its price.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/facebooks-taylor-swift-fan-pages-taken-over-by-bestiality-porn-and-scams-2/&quot;&gt;Facebook’s Taylor Swift Fan Pages Taken Over by Animal Abuse, Porn, and Scams&lt;/a&gt; (Moderation is the &lt;a href=&quot;https://blog.zgp.org/moderation-is-harder-than-editing/&quot;&gt;hard part&lt;/a&gt; of running any online forum, and &lt;q&gt;AI moderators&lt;/q&gt; are the new self-driving cars.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.atlasobscura.com/articles/red-zones-in-france&quot;&gt;You Can Still Die From World War I Dangers in France’s Red Zones&lt;/a&gt; (This is why Europe has an AI Act. They have &lt;a href=&quot;https://blog.zgp.org/trying-to-think-about-european-tech-policy-in-context/&quot;&gt;more important problems than building robots to take people’s art&lt;/a&gt;. &lt;a href=&quot;https://www.theverge.com/2024/6/14/24178591/meta-ai-assistant-europe-ireland-privacy-objections&quot;&gt;Putting limits on luxury and counterproductive uses of AI&lt;/a&gt; will free up money and developer time for the stuff they really need. Before people in the USA get mad about this, remember we did it too. There’s no such thing as a 1943 Cadillac Coupe de Ville.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.noemamag.com/we-need-to-rewild-the-internet/&quot;&gt;We need to rewild the internet&lt;/a&gt; &lt;q&gt;For California residents, GPC automates the request to “accept” or “reject” sales of your data, such as cookie-based tracking, on its websites. However, it isn’t yet supported by major default browsers like Chrome and Safari. Broad adoption will take time, but it’s a small step in changing real-world outcomes by driving antimonopoly practices deep into the standards stack — and it’s already being adopted elsewhere.&lt;/q&gt;&lt;/p&gt;</description>
  135. <pubDate>Sat, 15 Jun 2024 00:00:00 +0000</pubDate>
  136. </item>
  137. <item>
  138. <title>Frederik Braun: How I got a new domain name</title>
  139. <guid isPermaLink="false">tag:frederikbraun.de,2024-06-15:/new-domain.html</guid>
  140. <link>https://frederikbraun.de/new-domain.html</link>
  141. <description>&lt;p&gt;Welcome! If you're reading this, you might have noticed that my blog and this
  142. post is on my new domain name &lt;a href=&quot;https://frederik-braun.com/feeds/all.rss.xml&quot;&gt;frederikbraun.de&lt;/a&gt;.&lt;/p&gt;
  143. &lt;p&gt;And here is the story. The story of a young nerd in the 1990s. The story of
  144. my aunt, who went to the Miniatur Wunderland, left the …&lt;/p&gt;</description>
  145. <pubDate>Fri, 14 Jun 2024 22:00:00 +0000</pubDate>
  146. <dc:creator>Frederik</dc:creator>
  147. </item>
  148. <item>
  149. <title>Firefox UX: Coming Back to Firefox as a User Researcher</title>
  150. <guid isPermaLink="false">https://blog.mozilla.org/ux/?p=4485</guid>
  151. <link>https://blog.mozilla.org/ux/2024/06/coming-back-to-firefox-as-a-user-researcher/</link>
  152. <description>&lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;39ce&quot;&gt;&lt;em class=&quot;md&quot;&gt;Reflecting on two years of working on the browser that first showed me the internet&lt;/em&gt;&lt;/p&gt;
  153. &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;aligncenter wp-image-4486&quot; height=&quot;610&quot; src=&quot;https://blog.mozilla.org/ux/files/2024/06/Fox-doodle-300x291.jpg&quot; width=&quot;628&quot; /&gt;&lt;/p&gt;
  154. &lt;p style=&quot;text-align: center;&quot;&gt;&lt;em&gt;Firefox illustration by UX designer &lt;a href=&quot;https://www.gbrielle.design/&quot;&gt;Gabrielle Lussier&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  155. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;d0e0&quot;&gt;Last week marked two years of working on Firefox. For me, this was a return to the browser I fervently used in my early internet days (circa 2004–2011). I don’t recall exactly when I left, and whether it was abrupt or gradual, but at some point Firefox was out and Chrome was the browser on my screen. Looking back, I’m pretty sure it was notifications telling me Gmail would work better on Chrome that led me there. Oof.&lt;/p&gt;
  156. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;2c64&quot;&gt;I certainly wasn’t alone. The storied history of browsers (including not one, but two &lt;a class=&quot;af mt&quot; href=&quot;https://en.wikipedia.org/wiki/Browser_wars&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;browser wars&lt;/a&gt;) is marked by intense competition and shifting landscapes. Starting around &lt;a class=&quot;af mt&quot; href=&quot;https://upload.wikimedia.org/wikipedia/commons/7/70/BrowserUsageShare.png&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;2010–2011&lt;/a&gt;, as Chrome’s market share went up, Firefox’s went down.&lt;/p&gt;
  157. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;ab0c&quot;&gt;&lt;strong class=&quot;lh fq&quot;&gt;&lt;em class=&quot;md&quot;&gt;A doorway to the internet&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  158. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;f387&quot;&gt;When I started working on Firefox, a colleague likened a browser to a doorway — you walk through several a day, but don’t think much about them. It’s a window to the internet, but it’s not the internet. It helps you search the web, but it’s not a search engine. It’s a universal product, but many struggle to describe it.&lt;/p&gt;
  159. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;1763&quot;&gt;So what is it, then, and why am I so happy I get to spend my days thinking about it?&lt;/p&gt;
  160. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;8260&quot;&gt;A browser is an enabler, facilitating online exploration, learning, work, communication, entertainment, shopping, and more. More technically, it renders web pages, uses code to display content, and provides navigation and organization tools that allow people to explore, interact with, and retrieve information on the web.&lt;/p&gt;
  161. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;01f3&quot;&gt;With use cases galore, there are challenges. It’s a product that needs to be good at many things.&lt;/p&gt;
  162. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;345f&quot;&gt;To help our design, product and engineering stakeholders meet these challenges, the Firefox User Research team tackles topics including managing information in the browser (what’s your relationship to tabs?), privacy in the browser, when and how people choose browsers (if they &lt;a class=&quot;af nl&quot; href=&quot;https://research.mozilla.org/browser-competition/5wg/&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;choose at all&lt;/a&gt;), and why they stay or leave. Fascinating research topics feel endless in the browser world.&lt;/p&gt;
  163. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;9563&quot;&gt;&lt;strong class=&quot;lz fq&quot;&gt;&lt;em class=&quot;mv&quot;&gt;My introduction to browser users&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  164. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;1674&quot;&gt;For my first project at Mozilla, I conducted 17, hour-long, in-depth interviews with browser users. A formative introduction to how people think about and use browsers. When I look back on that study, I recall how much I learned about a product that I previously hadn’t given much thought to. Here I summarize some of those initial learnings.&lt;/p&gt;
  165. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;1ee2&quot;&gt;&lt;strong class=&quot;lz fq&quot;&gt;&lt;em class=&quot;mv&quot;&gt;Browser adoption on desktop vs mobile&lt;/em&gt;&lt;/strong&gt;: Firefox is a browser that people opt-in to. Unlike other mainstream browsers, it doesn’t come pre-installed on devices. This means that users must actively choose Firefox, bypassing the default. While many people do this — close to &lt;a class=&quot;af nl&quot; href=&quot;https://data.firefox.com/dashboard/user-activity#:~:text=URL%3A%20https%3A%2F%2Fdata.firefox.com%2Fdashboard%2Fuser,100&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;200 million&lt;/a&gt; monthly on Firefox — using the default is common, and even more so on mobile. When talking to users of various browsers, the sentiment that “&lt;em class=&quot;mv&quot;&gt;I just use what came on the device&lt;/em&gt;” is particularly prevalent for mobile.&lt;/p&gt;
  166. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;e27c&quot;&gt;Why is this so? For one, people have different needs on their desktop and mobile browsers (e.g. conducting complex work vs quick searches), leading to different behaviors. The presence of stand-alone apps on mobile that help people accomplish some of the tasks they might have otherwise done in their browser (e.g. email, shopping) also differentiate the experience.&lt;/p&gt;
  167. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;1bf8&quot;&gt;That’s not the whole story, though. Gatekeeping practices by large tech companies, such as self-preferencing and interoperability, play a role. These practices, which Europe’s &lt;a class=&quot;af nl&quot; href=&quot;https://commission.europa.eu/strategy-and-policy/priorities-2019-2024/europe-fit-digital-age/digital-markets-act-ensuring-fair-and-open-digital-markets_en&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;Digital Markets Act&lt;/a&gt; and related remedies like &lt;a class=&quot;af nl&quot; href=&quot;https://research.mozilla.org/files/2023/09/Can-browser-choice-screens-be-effective_-Mozilla-experiment-report.pdf&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;browser choice screens&lt;/a&gt; aim to address, limit consumer choice and are especially potent on mobile. In my in-depth interviews, for example, I spoke with a devoted Firefox desktop user. When explaining to me why she used the default browser on her mobile phone, she held up her phone, pointing to the dock at the bottom of her home screen. She wanted quick access to her browser through this dock, and didn’t realize she could replace the default browser that came there with one of her choosing.&lt;/p&gt;
  168. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;2033&quot;&gt;&lt;strong class=&quot;lz fq&quot;&gt;&lt;em class=&quot;mv&quot;&gt;Online privacy dilemmas&lt;/em&gt;&lt;/strong&gt;&lt;em class=&quot;mv&quot;&gt;: &lt;/em&gt;Having worked on privacy and the protection of personal information in the past, I was keen to learn about users’ attitudes and behaviors towards online privacy. What were their stances? How did they protect themselves? My in-depth interviews revealed that attitudes and feelings range vastly: protective, indifferent, disempowered, resigned. And often, attitudes and values towards privacy don’t align with behaviors. In today’s online world, acting on your values can be hard.&lt;/p&gt;
  169. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;47f1&quot;&gt;The &lt;a class=&quot;af nl&quot; href=&quot;https://thedecisionlab.com/reference-guide/psychology/intention-action-gap&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;intention-action gap&lt;/a&gt; speaks to the many cases when our attitudes, values or goals are at odds with our behavior. While the draw of convenience and other tradeoffs are certainly at play in the online privacy gap, so too are &lt;a class=&quot;af nl&quot; href=&quot;https://foundation.mozilla.org/en/blog/mozilla-will-be-interrogating-deceptive-design/&quot; rel=&quot;noopener ugc nofollow&quot; target=&quot;_blank&quot;&gt;deceptive digital designs&lt;/a&gt; that make it all too difficult to use the internet on your own terms. These include buried privacy settings, complex opt-out processes, and deceptive cookie banners.&lt;/p&gt;
  170. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;9c7d&quot;&gt;Navigating online privacy risks can feel daunting and confusing — and for good reason. One participant in the interviews described it as something that she didn’t have the time or esoteric knowledge for, even though she cared about it:&lt;/p&gt;
  171. &lt;blockquote class=&quot;nm nn no&quot;&gt;
  172. &lt;p class=&quot;lx ly mv lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;8567&quot;&gt;&lt;em&gt;“It’s so big and complicated for a user like me, you really have to put in the time to figure it out, to understand it. And I don’t have the time for that, I honestly don’t. But that doesn’t stop me from doing things online, because, how, if being online is such an important part of my day?”&lt;/em&gt;&lt;/p&gt;
  173. &lt;/blockquote&gt;
  174. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;cf21&quot;&gt;On the browser side, the technical aspects of online privacy present a perennial challenge for communicating our protective measures to users. How do we communicate the safeguards we offer users in ways that are accessible and effective?&lt;/p&gt;
  175. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;a04a&quot;&gt;&lt;strong class=&quot;lz fq&quot;&gt;&lt;em class=&quot;mv&quot;&gt;Browser recommendations: &lt;/em&gt;&lt;/strong&gt;For a product that isn’t top of mind for most people, many are steered to their browsers by word of mouth and other types of recommendations. In fact, we consistently find that around one-third of our users report having recommended Firefox in the past month. That’s more people talking about browsers than I would have imagined.&lt;/p&gt;
  176. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;31c1&quot;&gt;The people I interviewed spoke about recommendations from family members (“&lt;em class=&quot;mv&quot;&gt;Mom, you need to step up your browser game!&lt;/em&gt;” one participant recalled her son saying as he guided her to a new browser), tech-oriented friends, IT departments at work, computer repair shops, and online forums and other communities.&lt;/p&gt;
  177. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;3029&quot;&gt;One factor behind personal recommendations is likely that most people are satisfied with their browser. Our quantitative user research team finds high levels of browser satisfaction among not only Firefox users, but the users of other popular browsers examined in their work.&lt;/p&gt;
  178. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;30ba&quot;&gt;&lt;strong class=&quot;lz fq&quot;&gt;&lt;em class=&quot;mv&quot;&gt;Wrapping up&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  179. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;5f43&quot;&gt;Coming back to Firefox involved a process of piecing together what had happened to the browser with the little fox. In doing so, I’ve learned a lot about what brings people to browsers, and away from them, and the constrained digital landscape in which these dynamics occur. The web has changed a great deal since Firefox 1.0 was released in 2004, but Mozilla’s goal of fostering an open and accessible internet remains constant.&lt;/p&gt;
  180. &lt;p class=&quot;pw-post-body-paragraph lx ly fp lz b ma mb mc md me mf mg mh mi mj mk ml mm mn mo mp mq mr ms mt mu fi bj&quot; id=&quot;f98c&quot;&gt;&lt;em class=&quot;mv&quot;&gt;Thank you for reviewing a draft of this post, Laura Lopez and Rosanne Scholl.&lt;/em&gt;&lt;/p&gt;
  181. &lt;p class=&quot;pw-post-body-paragraph lf lg fp lh b li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly lz ma mb mc fi bj&quot; id=&quot;f98c&quot;&gt;&lt;/p&gt;</description>
  182. <pubDate>Fri, 14 Jun 2024 13:50:41 +0000</pubDate>
  183. <dc:creator>Brooke Sykes</dc:creator>
  184. </item>
  185. <item>
  186. <title>Mozilla Addons Blog: Developer Spotlight: Dedalium — turn the entire web into an RPG game</title>
  187. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9185</guid>
  188. <link>https://blog.mozilla.org/addons/2024/06/13/developer-spotlight-dedalium-turn-the-entire-web-into-an-rpg-game/</link>
  189. <description>&lt;p&gt;You might be scrolling through your morning news, checking email, or any other routine online moment when suddenly you notice a small winged beast slowly glide across your screen. It’s a challenge. A chance to earn more crystals. A fight to the finish, should you choose to accept the duel. Since you’re not super busy and battles only take a few seconds — and you sure could use more crystals to upgrade gear — you click the angry creature and next thing you know your Network Guardian (avatar) and opponent appear on floating battle stations exchanging blows. It’s a close contest, but soon your nemesis succumbs to his injuries. The thrill of victory is fleeting, though. Gotta get back to those emails.&lt;/p&gt;
  190. &lt;p&gt; &lt;/p&gt;
  191. &lt;div class=&quot;wp-caption alignleft&quot; id=&quot;attachment_9186&quot; style=&quot;width: 590px;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;size-medium wp-image-9186&quot; height=&quot;343&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/06/blog_dedalium1-580x343.png&quot; width=&quot;580&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-9186&quot;&gt;Customize the skills, gear (and fashion!) of your own Network Guardian.&lt;/p&gt;&lt;/div&gt;
  192. &lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/firefox/addon/rpg-game-online-dedalium/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Dedalium&lt;/a&gt; is a novel game concept. There are a lot of &lt;a href=&quot;https://addons.mozilla.org/firefox/search/?q=games&amp;amp;sort=relevance&amp;amp;type=extension&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;browser games&lt;/a&gt; out there, but nothing quite like Dedalium, which turns the entire internet into a role-playing game, or RPG. You start by customizing the look and skills of your Network Guardian and then you’re ready to wait for battle invites to emerge; or you can go on the offensive and seek out challengers. Beyond battles, you’ll occasionally find crystals or loot boxes on the edges of your screen.&lt;/p&gt;
  193. &lt;p&gt;There’s also a solo Adventure mode featuring 100+ levels that lead to a final battle against the big boss &lt;a href=&quot;https://www.youtube.com/watch?v=IwBplEm2D_I&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Spamicus Wildpost&lt;/a&gt;, who has never been defeated since Dedalium’s beta launch last year.&lt;/p&gt;
  194. &lt;p&gt;“We’ve created something new and innovative,” says Dedalium co-creator Joel Corominas. “We call this concept ‘augmented web’ akin to augmented reality but within the web environment. While it may take time for players and browser users to fully appreciate, we strongly believe it will become a significant trend in the future. We are proud to have pioneered this concept and believe it adds a fun, interactive layer to web browsing.”&lt;/p&gt;
  195. &lt;p&gt;Dedalium is the debut title from &lt;a href=&quot;https://loycomgames.com/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Loycom Games&lt;/a&gt;, which Corominas co-founded in 2021 with his game development partner Adrián Quevedo. Loycom’s mission is to “gamify internet browsing.”&lt;/p&gt;
  196. &lt;p&gt;Still in beta, Dedalium is growing quickly. About 4,000 players currently engage with the game daily across various browsers. If you’re looking for an entirely unique browser gaming experience, Dedalium is definitely that. At first I was worried random game prompts would get annoying as I went about my business on the web, but to my delight I usually found myself eager to engage in a quick Dedalium detour. The game does a great job of never feeling intrusive. But even so, you can pause the game anytime and set specific websites as no-play zones.&lt;/p&gt;
  197. &lt;p&gt;If turning the entire web into an RPG sounds like a good time, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/rpg-game-online-dedalium/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;give Dedalium a shot&lt;/a&gt; and good luck gathering those crystals!&lt;/p&gt;
  198. &lt;hr /&gt;
  199. &lt;p&gt;&lt;i&gt;Do you have an intriguing extension development story? Do tell! Maybe your story should appear on this blog. Contact us at &lt;/i&gt;&lt;b&gt;&lt;i&gt;amo-featured [at] mozilla [dot] org&lt;/i&gt;&lt;/b&gt;&lt;i&gt; and let us know a bit about your extension development journey. &lt;/i&gt;&lt;/p&gt;
  200. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/06/13/developer-spotlight-dedalium-turn-the-entire-web-into-an-rpg-game/&quot;&gt;Developer Spotlight: Dedalium — turn the entire web into an RPG game&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  201. <pubDate>Thu, 13 Jun 2024 22:09:34 +0000</pubDate>
  202. <dc:creator>Scott DeVaney</dc:creator>
  203. </item>
  204. <item>
  205. <title>The Mozilla Blog: Firefox tips and tricks for creatives</title>
  206. <guid isPermaLink="false">https://blog.mozilla.org/?p=75143</guid>
  207. <link>https://blog.mozilla.org/en/products/firefox/firefox-tips/creatives/</link>
  208. <description>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  209.  
  210. &lt;/div&gt;&lt;/figure&gt;
  211.  
  212.  
  213.  
  214. &lt;p&gt;On my way to the airport last week, my driver asked what I do for a living. “I’m a content creator,” I replied. “I’m the video lead at Mozilla.”&lt;/p&gt;
  215.  
  216.  
  217.  
  218. &lt;p&gt;“Wow, that sounds fun,” he said.&lt;/p&gt;
  219.  
  220.  
  221.  
  222. &lt;p&gt;It can be! But, like lots of other creative professions: It’s not as glamorous as it sounds. Between the emails, meetings, docs, slides, more emails, contracts, spreadsheets, more meetings… alas, our days are not filled with boundless artistry.&lt;/p&gt;
  223.  
  224.  
  225.  
  226. &lt;p&gt;Thankfully, Firefox has a ton of built-in features that save me time, so I can focus on my creative work. Here are some of my favorites.&lt;/p&gt;
  227.  
  228.  
  229.  
  230. &lt;h3&gt;&lt;a href=&quot;https://blog.mozilla.org/en/products/firefox/firefox-picture-in-picture-for-videos/&quot;&gt;&lt;strong&gt;Picture-in-picture&lt;/strong&gt;&lt;/a&gt;&lt;/h3&gt;
  231.  
  232.  
  233.  
  234. &lt;p&gt;I produce video content, so naturally my job involves watching a LOT of videos. I try to keep up with what’s trending, particularly on YouTube. With the PiP tool, I can easily pin the latest gadget reviews and tech podcasts anywhere on my screen while I’m working. Best of all, the video window floats over any app, not just Firefox—and you can even mute it and turn on captions. Look, I’m not saying you &lt;em&gt;should&lt;/em&gt; sneak in a couple episodes of &lt;a href=&quot;https://www.youtube.com/playlist?list=PLFlAJDI87Jg2rc6x6OWt6dihaU4qAVCm5&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Firefox Presents&lt;/a&gt; during your next Zoom meeting; I’m just saying you &lt;em&gt;can&lt;/em&gt;.&lt;br /&gt;&lt;/p&gt;
  235.  
  236.  
  237.  
  238. &lt;h3&gt;&lt;strong&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/firefox/features/eyedropper/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Eyedropper tool&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
  239.  
  240.  
  241.  
  242. &lt;p&gt;This one frequently comes in handy for my designer colleagues. Just select the tool (under “More Tools” in the Firefox toolbar menu or under “Browser Tools” in the Tools menu), highlight any color on any website, and voilà: instant hexcode.&lt;/p&gt;
  243.  
  244.  
  245.  
  246. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;img alt=&quot;Firefox Eyedropper Tool Highlighting Hex Code #ff4a74 on a Gradient Background&quot; class=&quot;wp-image-75145&quot; height=&quot;520&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/06/eyedropper-high-res.7d27f67abc0a.png&quot; width=&quot;961&quot; /&gt;&lt;/figure&gt;
  247.  
  248.  
  249.  
  250. &lt;h3&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/firefox/features/pdf-editor/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;PDF editor&lt;/strong&gt;&lt;/a&gt;&lt;/h3&gt;
  251.  
  252.  
  253.  
  254. &lt;p&gt;Proposals, SOWs, and contracts, oh my! Creative work involves a lot of documents—which, thankfully, you can edit right inside the browser with ease.&lt;/p&gt;
  255.  
  256.  
  257.  
  258. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;PDF Document Editing with Highlighted Text and Fox Image Using Firefox PDF Viewer&quot; class=&quot;wp-image-75155&quot; height=&quot;501&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/06/edit-pdf-highlight-high-res.caa8171b6efe-1024x501.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  259.  
  260.  
  261.  
  262. &lt;h3&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/take-screenshots-firefox&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Screenshot tool&lt;/strong&gt;&lt;/a&gt;&lt;/h3&gt;
  263.  
  264.  
  265. &lt;p&gt;Screenshots have never been easier with the Screenshot tool right in your toolbar. Customize your Firefox toolbar by dragging the Screenshot button &lt;img alt=&quot;Icon of a pair of scissors cutting a dotted rectangle, representing the Firefox Screenshot Tool&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/06/screenshot.png&quot; style=&quot;height: auto;&quot; /&gt; from the Customize Toolbar menu. Once it’s set up, you can download or copy any part of your screen with a single click. For full instructions on adding the Screenshot tool to your browser, check out the guide here.&lt;/p&gt;
  266.  
  267.  
  268. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;Screenshot of the Firefox YouTube channel page showing 148K subscribers, with options to Copy or Download a selected video thumbnail.&quot; class=&quot;wp-image-75165&quot; height=&quot;706&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/06/firefox-screenshot-tool-1024x706.png&quot; width=&quot;1024&quot; /&gt;&lt;/figure&gt;
  269.  
  270.  
  271.  
  272. &lt;h3&gt;&lt;strong&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/change-website-appearance-settings-firefox&quot;&gt;Dark mode&lt;/a&gt;&lt;/strong&gt;&lt;/h3&gt;
  273.  
  274.  
  275.  
  276. &lt;p&gt;As a night owl, I can’t live without this. Even better, it works for both mobile and desktop. So, whether you’re &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/karen-ho-twitter-doomscrolling-reminder-lady/&quot;&gt;doomscrolling&lt;/a&gt; in bed, or catching up on email in a dark airplane cabin, you won’t fry your poor retinas. Here’s &lt;a href=&quot;https://support.mozilla.org/en-US/kb/change-website-appearance-settings-firefox&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;how to turn on dark mode on Firefox&lt;/a&gt;. &lt;/p&gt;
  277.  
  278.  
  279.  
  280. &lt;h3&gt;&lt;a href=&quot;https://color.firefox.com/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;Firefox Color&lt;/strong&gt;&lt;/a&gt;&lt;/h3&gt;
  281.  
  282.  
  283.  
  284. &lt;p&gt;Speaking of UI: Did you know you can create your own browser themes in Firefox? Not only can you customize the colors to your heart’s content; you can even upload your own background patterns. It might not hack your productivity, but the soothing feng shui is priceless.&lt;/p&gt;
  285.  
  286.  
  287.  
  288. &lt;p&gt;&lt;em&gt;There are endless ways to make Firefox your own, whether you’re a creative, a shopper, a &lt;/em&gt;&lt;a href=&quot;https://blog.mozilla.org/en/products/firefox/firefox-tips/gaming-browser/&quot;&gt;&lt;em&gt;gamer&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, a minimalist, a (tab) maximalist or however you choose to navigate the internet. We want to know how you customize Firefox. Let us know and tag us on &lt;a href=&quot;https://x.com/firefox/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.instagram.com/firefox/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt; at @Firefox.&lt;/em&gt;&lt;/p&gt;
  289.  
  290.  
  291.  
  292. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  293.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  294.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  295.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  296.     &lt;h4&gt;Get Firefox&lt;/h4&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  297. &lt;/a&gt;
  298. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/products/firefox/firefox-tips/creatives/&quot;&gt;Firefox tips and tricks for creatives&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  299. <pubDate>Thu, 13 Jun 2024 19:00:45 +0000</pubDate>
  300. <dc:creator>Steve Flavin</dc:creator>
  301. </item>
  302. <item>
  303. <title>Mozilla Addons Blog: Manifest V3 updates landed in Firefox 127</title>
  304. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9183</guid>
  305. <link>https://blog.mozilla.org/addons/2024/06/13/manifest-v3-updates-landed-in-firefox-127/</link>
  306. <description>&lt;p&gt;Welcome add-on developers! Below is the next installation in our series of community updates designed to provide clarity and transparency as we continue to deliver Manifest V3 related improvements with each new Firefox release.&lt;/p&gt;
  307. &lt;p&gt;The engineering team continues to build upon previous MV3 Chrome compatibility related work available in &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/126#changes_for_add-on_developers&quot;&gt;Firefox 126&lt;/a&gt; with several additional items that landed in &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/127#changes_for_add-on_developers&quot;&gt;Firefox 127&lt;/a&gt;, which was released on June 11. Beginning in the 127 release, the following improvements have launched:&lt;/p&gt;
  308. &lt;ul&gt;
  309. &lt;li&gt;Customized keyboard shortcuts associated with the &lt;code&gt;&lt;span style=&quot;color: #339966;&quot;&gt;_execute_browser_action&lt;/span&gt;&lt;/code&gt; command for MV2 extensions will be automatically associated with the &lt;code&gt;&lt;span style=&quot;color: #339966;&quot;&gt;_execute_action&lt;/span&gt;&lt;/code&gt; command when migrating the same extension to MV3. This allows the custom keyboard shortcuts to keep functioning as expected from an end user perspective.&lt;/li&gt;
  310. &lt;li&gt;declarativeNetRequest &lt;code&gt;&lt;span style=&quot;color: #339966;&quot;&gt;getDynamicRules&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span style=&quot;color: #339966;&quot;&gt;getSessonRules&lt;/span&gt;&lt;/code&gt; API methods now accept the additional &lt;span style=&quot;color: #339966;&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #339966;&quot;&gt;ruleIds&lt;/span&gt;&lt;/code&gt;&lt;/span&gt; filter as a parameter and the rule limits have been increased to match the limits enforced by other browsers.&lt;/li&gt;
  311. &lt;/ul&gt;
  312. &lt;p&gt;The team will land more Chrome compatibility enhancements in Firefox 128 in addition to delivering other Manifest V3 improvements, at which time MV3 will be supported on Firefox for Android.&lt;/p&gt;
  313. &lt;p&gt;And to reiterate a couple important points we’ve communicated in our previous updates published in &lt;a href=&quot;https://blog.mozilla.org/addons/2024/03/13/manifest-v3-manifest-v2-march-2024-update/&quot;&gt;March&lt;/a&gt; and &lt;a href=&quot;https://blog.mozilla.org/addons/2024/05/14/manifest-v3-updates/&quot;&gt;May&lt;/a&gt;:&lt;/p&gt;
  314. &lt;ul&gt;
  315. &lt;li&gt;The webRequest API is not on a deprecation path in Firefox&lt;/li&gt;
  316. &lt;li&gt;Mozilla has no plans to deprecate MV2&lt;/li&gt;
  317. &lt;/ul&gt;
  318. &lt;p&gt;For more information on adopting MV3, please refer to our &lt;a href=&quot;https://extensionworkshop.com/documentation/develop/manifest-v3-migration-guide/&quot;&gt;migration guide&lt;/a&gt;. If you have questions or feedback on our MV3 plans we would love to hear from you in the comments section below or if you prefer, drop us an &lt;a href=&quot;mailto:mozilla-add-ons-community@mozilla.com&quot;&gt;email&lt;/a&gt;. Thanks for reading and happy coding!&lt;/p&gt;
  319. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/06/13/manifest-v3-updates-landed-in-firefox-127/&quot;&gt;Manifest V3 updates landed in Firefox 127&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  320. <pubDate>Thu, 13 Jun 2024 15:20:29 +0000</pubDate>
  321. <dc:creator>Edward Sullivan</dc:creator>
  322. </item>
  323. <item>
  324. <title>The Rust Programming Language Blog: Announcing Rust 1.79.0</title>
  325. <guid isPermaLink="true">https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html</guid>
  326. <link>https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html</link>
  327. <description>&lt;p&gt;The Rust team is happy to announce a new version of Rust, 1.79.0. Rust is a programming language empowering everyone to build reliable and efficient software.&lt;/p&gt;
  328. &lt;p&gt;If you have a previous version of Rust installed via &lt;code&gt;rustup&lt;/code&gt;, you can get 1.79.0 with:&lt;/p&gt;
  329. &lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ rustup update stable
  330. &lt;/code&gt;&lt;/pre&gt;
  331. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot;&gt;get &lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the appropriate page on our website, and check out the &lt;a href=&quot;https://doc.rust-lang.org/nightly/releases.html#version-1790-2024-06-13&quot;&gt;detailed release notes for 1.79.0&lt;/a&gt;.&lt;/p&gt;
  332. &lt;p&gt;If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (&lt;code&gt;rustup default beta&lt;/code&gt;) or the nightly channel (&lt;code&gt;rustup default nightly&lt;/code&gt;). Please &lt;a href=&quot;https://github.com/rust-lang/rust/issues/new/choose&quot;&gt;report&lt;/a&gt; any bugs you might come across!&lt;/p&gt;
  333. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#whats-in-1790-stable&quot; id=&quot;whats-in-1790-stable&quot;&gt;&lt;/a&gt;What's in 1.79.0 stable&lt;/h3&gt;
  334. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#inline-const-expressions&quot; id=&quot;inline-const-expressions&quot;&gt;&lt;/a&gt;Inline &lt;code&gt;const&lt;/code&gt; expressions&lt;/h4&gt;
  335. &lt;p&gt;&lt;code&gt;const { ... }&lt;/code&gt; blocks are now stable in expression position, permitting
  336. explicitly entering a const context without requiring extra declarations (e.g.,
  337. defining &lt;code&gt;const&lt;/code&gt; items or associated constants on a trait).&lt;/p&gt;
  338. &lt;p&gt;Unlike const items (&lt;code&gt;const ITEM: ... = ...&lt;/code&gt;), inline consts are able to make
  339. use of in-scope generics, and have their type inferred rather than written explicitly, making them particularly useful for inline code snippets. For example, a pattern like:&lt;/p&gt;
  340. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;const EMPTY: Option&amp;lt;Vec&amp;lt;u8&amp;gt;&amp;gt; = None;
  341. let foo = [EMPTY; 100];
  342. &lt;/code&gt;&lt;/pre&gt;
  343. &lt;p&gt;can now be written like this:&lt;/p&gt;
  344. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;let foo = [const { None }; 100];
  345. &lt;/code&gt;&lt;/pre&gt;
  346. &lt;p&gt;Notably, this is also true of generic contexts, where previously a verbose trait declaration with an associated constant would be required:&lt;/p&gt;
  347. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn create_none_array&amp;lt;T, const N: usize&amp;gt;() -&amp;gt; [Option&amp;lt;T&amp;gt;; N] {
  348.    [const { None::&amp;lt;T&amp;gt; }; N]
  349. }
  350. &lt;/code&gt;&lt;/pre&gt;
  351. &lt;p&gt;This makes this code much more succinct and easier to read.&lt;/p&gt;
  352. &lt;p&gt;See the &lt;a href=&quot;https://doc.rust-lang.org/nightly/reference/expressions/block-expr.html#const-blocks&quot;&gt;reference documentation&lt;/a&gt; for details.&lt;/p&gt;
  353. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#bounds-in-associated-type-position&quot; id=&quot;bounds-in-associated-type-position&quot;&gt;&lt;/a&gt;Bounds in associated type position&lt;/h4&gt;
  354. &lt;p&gt;Rust 1.79 stabilizes the associated item bounds syntax, which allows us to put
  355. bounds in associated type position within other bounds, i.e.
  356. &lt;code&gt;T: Trait&amp;lt;Assoc: Bounds...&amp;gt;&lt;/code&gt;. This avoids the need to provide an extra,
  357. explicit generic type just to constrain the associated type.&lt;/p&gt;
  358. &lt;p&gt;This feature allows specifying bounds in a few places that previously either
  359. were not possible or imposed extra, unnecessary constraints on usage:&lt;/p&gt;
  360. &lt;ul&gt;
  361. &lt;li&gt;&lt;strong&gt;&lt;code&gt;where&lt;/code&gt; clauses&lt;/strong&gt; - in this position, this is equivalent to breaking up the bound into two (or more) &lt;code&gt;where&lt;/code&gt; clauses. For example, &lt;code&gt;where T: Trait&amp;lt;Assoc: Bound&amp;gt;&lt;/code&gt; is equivalent to &lt;code&gt;where T: Trait, &amp;lt;T as Trait&amp;gt;::Assoc: Bound&lt;/code&gt;.&lt;/li&gt;
  362. &lt;li&gt;&lt;strong&gt;Supertraits&lt;/strong&gt; - a bound specified via the new syntax is implied when the trait is used, unlike where clauses. Sample syntax: &lt;code&gt;trait CopyIterator: Iterator&amp;lt;Item: Copy&amp;gt; {}&lt;/code&gt;.&lt;/li&gt;
  363. &lt;li&gt;&lt;strong&gt;Associated type item bounds&lt;/strong&gt; - This allows constraining the &lt;em&gt;nested&lt;/em&gt; rigid projections that are associated with a trait's associated types. e.g. &lt;code&gt;trait Trait { type Assoc: Trait2&amp;lt;Assoc2: Copy&amp;gt;; }&lt;/code&gt;.&lt;/li&gt;
  364. &lt;li&gt;&lt;strong&gt;opaque type bounds (RPIT, TAIT)&lt;/strong&gt; - This allows constraining associated types that are associated with the opaque type without having to &lt;em&gt;name&lt;/em&gt; the opaque type. For example, &lt;code&gt;impl Iterator&amp;lt;Item: Copy&amp;gt;&lt;/code&gt; defines an iterator whose item is &lt;code&gt;Copy&lt;/code&gt; without having to actually name that item bound.&lt;/li&gt;
  365. &lt;/ul&gt;
  366. &lt;p&gt;See &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122055/#issue-2170532454&quot;&gt;the stabilization report&lt;/a&gt; for more details.&lt;/p&gt;
  367. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#extending-automatic-temporary-lifetime-extension&quot; id=&quot;extending-automatic-temporary-lifetime-extension&quot;&gt;&lt;/a&gt;Extending automatic temporary lifetime extension&lt;/h4&gt;
  368. &lt;p&gt;Temporaries which are immediately referenced in construction are now
  369. automatically lifetime extended in &lt;code&gt;match&lt;/code&gt; and &lt;code&gt;if&lt;/code&gt; constructs. This has the
  370. same behavior as lifetime extension for temporaries in block constructs.&lt;/p&gt;
  371. &lt;p&gt;For example:&lt;/p&gt;
  372. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;let a = if true {
  373.    ..;
  374.    &amp;amp;temp() // used to error, but now gets lifetime extended
  375. } else {
  376.    ..;
  377.    &amp;amp;temp() // used to error, but now gets lifetime extended
  378. };
  379. &lt;/code&gt;&lt;/pre&gt;
  380. &lt;p&gt;and&lt;/p&gt;
  381. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;let a = match () {
  382.    _ =&amp;gt; {
  383.        ..;
  384.        &amp;amp;temp() // used to error, but now gets lifetime extended
  385.    }
  386. };
  387. &lt;/code&gt;&lt;/pre&gt;
  388. &lt;p&gt;are now consistent with prior behavior:&lt;/p&gt;
  389. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;let a = {
  390.    ..;
  391.    &amp;amp;temp() // lifetime is extended
  392. };
  393. &lt;/code&gt;&lt;/pre&gt;
  394. &lt;p&gt;This behavior is backwards compatible since these programs used to fail compilation.&lt;/p&gt;
  395. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#frame-pointers-enabled-in-standard-library-builds&quot; id=&quot;frame-pointers-enabled-in-standard-library-builds&quot;&gt;&lt;/a&gt;Frame pointers enabled in standard library builds&lt;/h4&gt;
  396. &lt;p&gt;The standard library distributed by the Rust project is now compiled with
  397. &lt;code&gt;-Cforce-frame-pointers=yes&lt;/code&gt;, enabling downstream users to more easily profile
  398. their programs. Note that the standard library also continues to come up with
  399. line-level debug info (e.g., DWARF), though that is &lt;a href=&quot;https://blog.rust-lang.org/2024/03/21/Rust-1.77.0.html#enable-strip-in-release-profiles-by-default&quot;&gt;stripped by default&lt;/a&gt; in Cargo's release profiles.&lt;/p&gt;
  400. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#stabilized-apis&quot; id=&quot;stabilized-apis&quot;&gt;&lt;/a&gt;Stabilized APIs&lt;/h4&gt;
  401. &lt;ul&gt;
  402. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.i32.html#method.unchecked_add&quot;&gt;&lt;code&gt;{integer}::unchecked_add&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  403. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.i32.html#method.unchecked_mul&quot;&gt;&lt;code&gt;{integer}::unchecked_mul&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  404. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.i32.html#method.unchecked_sub&quot;&gt;&lt;code&gt;{integer}::unchecked_sub&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  405. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_unchecked&quot;&gt;&lt;code&gt;&amp;lt;[T]&amp;gt;::split_at_unchecked&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  406. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.slice.html#method.split_at_mut_unchecked&quot;&gt;&lt;code&gt;&amp;lt;[T]&amp;gt;::split_at_mut_unchecked&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  407. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.slice.html#method.utf8_chunks&quot;&gt;&lt;code&gt;&amp;lt;[u8]&amp;gt;::utf8_chunks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  408. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/str/struct.Utf8Chunks.html&quot;&gt;&lt;code&gt;str::Utf8Chunks&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  409. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/str/struct.Utf8Chunk.html&quot;&gt;&lt;code&gt;str::Utf8Chunk&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  410. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_aligned&quot;&gt;&lt;code&gt;&amp;lt;*const T&amp;gt;::is_aligned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  411. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_aligned-1&quot;&gt;&lt;code&gt;&amp;lt;*mut T&amp;gt;::is_aligned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  412. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.is_aligned&quot;&gt;&lt;code&gt;NonNull::is_aligned&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  413. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.len&quot;&gt;&lt;code&gt;&amp;lt;*const [T]&amp;gt;::len&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  414. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.len-1&quot;&gt;&lt;code&gt;&amp;lt;*mut [T]&amp;gt;::len&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  415. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_empty&quot;&gt;&lt;code&gt;&amp;lt;*const [T]&amp;gt;::is_empty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  416. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/primitive.pointer.html#method.is_empty-1&quot;&gt;&lt;code&gt;&amp;lt;*mut [T]&amp;gt;::is_empty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  417. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/ptr/struct.NonNull.html#method.is_empty&quot;&gt;&lt;code&gt;NonNull::&amp;lt;[T]&amp;gt;::is_empty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  418. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/ffi/c_str/struct.CStr.html#method.count_bytes&quot;&gt;&lt;code&gt;CStr::count_bytes&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  419. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Error.html#method.downcast&quot;&gt;&lt;code&gt;io::Error::downcast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  420. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/num/struct.NonZero.html&quot;&gt;&lt;code&gt;num::NonZero&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  421. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/path/fn.absolute.html&quot;&gt;&lt;code&gt;path::absolute&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  422. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/proc_macro/struct.Literal.html#method.byte_character&quot;&gt;&lt;code&gt;proc_macro::Literal::byte_character&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  423. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/proc_macro/struct.Literal.html#method.c_string&quot;&gt;&lt;code&gt;proc_macro::Literal::c_string&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  424. &lt;/ul&gt;
  425. &lt;p&gt;These APIs are now stable in const contexts:&lt;/p&gt;
  426. &lt;ul&gt;
  427. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/core/sync/atomic/struct.AtomicUsize.html#method.into_inner&quot;&gt;&lt;code&gt;Atomic*::into_inner&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  428. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.new&quot;&gt;&lt;code&gt;io::Cursor::new&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  429. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.get_ref&quot;&gt;&lt;code&gt;io::Cursor::get_ref&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  430. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Cursor.html#method.position&quot;&gt;&lt;code&gt;io::Cursor::position&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  431. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/fn.empty.html&quot;&gt;&lt;code&gt;io::empty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  432. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/fn.repeat.html&quot;&gt;&lt;code&gt;io::repeat&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  433. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/fn.sink.html&quot;&gt;&lt;code&gt;io::sink&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  434. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/panic/struct.Location.html#method.caller&quot;&gt;&lt;code&gt;panic::Location::caller&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  435. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/panic/struct.Location.html#method.file&quot;&gt;&lt;code&gt;panic::Location::file&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  436. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/panic/struct.Location.html#method.line&quot;&gt;&lt;code&gt;panic::Location::line&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  437. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/panic/struct.Location.html#method.column&quot;&gt;&lt;code&gt;panic::Location::column&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  438. &lt;/ul&gt;
  439. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#other-changes&quot; id=&quot;other-changes&quot;&gt;&lt;/a&gt;Other changes&lt;/h4&gt;
  440. &lt;p&gt;Check out everything that changed in &lt;a href=&quot;https://github.com/rust-lang/rust/releases/tag/1.79.0&quot;&gt;Rust&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-179-2024-06-13&quot;&gt;Cargo&lt;/a&gt;, and &lt;a href=&quot;https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-179&quot;&gt;Clippy&lt;/a&gt;.&lt;/p&gt;
  441. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/06/13/Rust-1.79.0.html#contributors-to-1790&quot; id=&quot;contributors-to-1790&quot;&gt;&lt;/a&gt;Contributors to 1.79.0&lt;/h3&gt;
  442. &lt;p&gt;Many people came together to create Rust 1.79.0. We couldn't have done it without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.79.0/&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</description>
  443. <pubDate>Thu, 13 Jun 2024 00:00:00 +0000</pubDate>
  444. <dc:creator>The Rust Release Team</dc:creator>
  445. </item>
  446. <item>
  447. <title>This Week In Rust: This Week in Rust 551</title>
  448. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-06-12:/blog/2024/06/12/this-week-in-rust-551/</guid>
  449. <link>https://this-week-in-rust.org/blog/2024/06/12/this-week-in-rust-551/</link>
  450. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  451. &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
  452. This is a weekly summary of its progress and community.
  453. Want something mentioned? Tag us at &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on X(formerly Twitter) or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
  454. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  455. &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
  456. If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
  457. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  458.  
  459.  
  460. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  461. &lt;ul&gt;
  462. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-06-10-bevy-014-rc2-powerglove-and-soup&quot;&gt;ThisWeekInBevy: Bevy0.14-rc.2, Powerglove, and Soup&lt;/a&gt;&lt;/li&gt;
  463. &lt;li&gt;&lt;a href=&quot;https://rust-osdev.com/this-month/2024-05/&quot;&gt;This Month in Rust OSDev: May 2024&lt;/a&gt;&lt;/li&gt;
  464. &lt;/ul&gt;
  465. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  466. &lt;ul&gt;
  467. &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1db8vmg/media_the_rust_to_net_compiler_backend_can_now/&quot;&gt;The Rust to .NET compiler (backend) can now properly compile the &quot;guessing game&quot; from the Rust book&lt;/a&gt;&lt;/li&gt;
  468. &lt;li&gt;&lt;a href=&quot;https://github.com/sdball/cattaca/releases/tag/v1.0.0&quot;&gt;Cattaca 1.0.0&lt;/a&gt;&lt;/li&gt;
  469. &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1d6d3be/bugstalker_020_debugger_for_rust_programs/&quot;&gt;BugStalker v0.2.0 - rust debugger&lt;/a&gt;&lt;/li&gt;
  470. &lt;/ul&gt;
  471. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  472. &lt;ul&gt;
  473. &lt;li&gt;&lt;a href=&quot;https://legendofworlds.com/blog/4&quot;&gt;How I spent 2 years building my own game engine (Rust, WASM, WebGPU)&lt;/a&gt;&lt;/li&gt;
  474. &lt;li&gt;&lt;a href=&quot;https://blog.polybdenum.com/2024/06/07/the-inconceivable-types-of-rust-how-to-make-self-borrows-safe.html&quot;&gt;The Inconceivable Types of Rust: How to Make Self-Borrows Safe&lt;/a&gt;&lt;/li&gt;
  475. &lt;li&gt;&lt;a href=&quot;https://www.claytonwramsey.com/blog/captree&quot;&gt;Making robots plan faster with SIMD and Rust&lt;/a&gt;&lt;/li&gt;
  476. &lt;li&gt;&lt;a href=&quot;https://levelup.gitconnected.com/learning-rust-bare-threading-1defb65038c9&quot;&gt;Learning Rust: Bare Threading&lt;/a&gt;&lt;/li&gt;
  477. &lt;li&gt;&lt;a href=&quot;https://lawngno.me/blog/2024/06/10/divine-provenance.html&quot;&gt;999 crates of Rust on the wall&lt;/a&gt;&lt;/li&gt;
  478. &lt;li&gt;&lt;a href=&quot;https://blog.rust.careers/post/compile_rust_faster/&quot;&gt;How-to compile rust faster&lt;/a&gt;&lt;/li&gt;
  479. &lt;li&gt;&lt;a href=&quot;https://tweedegolf.nl/en/blog/126/tock-binary-size&quot;&gt;Tock binary size&lt;/a&gt;&lt;/li&gt;
  480. &lt;li&gt;&lt;a href=&quot;https://jms55.github.io/posts/2024-06-09-virtual-geometry-bevy-0-14/&quot;&gt;Virtual Geometry in Bevy 0.14&lt;/a&gt;&lt;/li&gt;
  481. &lt;li&gt;&lt;a href=&quot;https://onevariable.com/blog/pods-from-scratch/&quot;&gt;Building Plain Old Data from Scratch&lt;/a&gt;&lt;/li&gt;
  482. &lt;li&gt;&lt;a href=&quot;https://exograph.dev/blog/wasm-pg-explorations-1&quot;&gt;Latency at the edge with Rust/WebAssembly and Postgres: Part 1&lt;/a&gt;, &lt;a href=&quot;https://exograph.dev/blog/wasm-pg-explorations-2&quot;&gt;Part 2&lt;/a&gt;&lt;/li&gt;
  483. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=RA-r4F4ZmXM&quot;&gt;Full-stack development of a B2B payment infrastructure with Rust - with Florent Bécart&lt;/a&gt;&lt;/li&gt;
  484. &lt;/ul&gt;
  485. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  486. &lt;ul&gt;
  487. &lt;li&gt;[series] &lt;a href=&quot;https://www.howtocodeit.com/articles/master-hexagonal-architecture-rust&quot;&gt;Master Hexagonal Architecture in Rust: Anatomy of a Bad Rust Application&lt;/a&gt;&lt;/li&gt;
  488. &lt;li&gt;&lt;a href=&quot;https://bencher.dev/learn/benchmarking/rust/custom-harness/&quot;&gt;How to build a Custom Benchmarking Harness in Rust&lt;/a&gt;&lt;/li&gt;
  489. &lt;li&gt;&lt;a href=&quot;https://medium.com/@otukof/from-sender-to-receiver-rusts-approach-to-local-file-transfers-e6a778020d90&quot;&gt;From Sender to Receiver: Rust’s Approach to Local File Transfers&lt;/a&gt;&lt;/li&gt;
  490. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/06/10/rust-miette-error-handling/&quot;&gt;Build with Naz - Rust error handling with miette&lt;/a&gt;&lt;/li&gt;
  491. &lt;/ul&gt;
  492. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  493. &lt;ul&gt;
  494. &lt;li&gt;&lt;a href=&quot;https://filtra.io/rust-may-24&quot;&gt;May 2024 Rust Jobs Report&lt;/a&gt;&lt;/li&gt;
  495. &lt;li&gt;&lt;a href=&quot;https://events.code-maven.com/&quot;&gt;Virtual Rust Events &lt;/a&gt;&lt;/li&gt;
  496. &lt;/ul&gt;
  497. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  498. &lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/dtzxporter/hydra&quot;&gt;hydra&lt;/a&gt;, an actor framework inspired by Erlang/Elixir.&lt;/p&gt;
  499. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1313&quot;&gt;DTZxPorter&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
  500. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
  501. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
  502. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  503. implementation and give feedback, especially before stabilization.  The following
  504. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  505. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing&quot;&gt;RFCs&lt;/a&gt;&lt;/h5&gt;
  506. &lt;ul&gt;
  507. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  508. &lt;/ul&gt;
  509. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/labels/call-for-testing&quot;&gt;Rust&lt;/a&gt;&lt;/h5&gt;
  510. &lt;ul&gt;
  511. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  512. &lt;/ul&gt;
  513. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rustup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rustup/labels/call-for-testing&quot;&gt;Rustup&lt;/a&gt;&lt;/h5&gt;
  514. &lt;ul&gt;
  515. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  516. &lt;/ul&gt;
  517. &lt;p&gt;If you are a feature implementer and would like your RFC to appear on the above list, add the new &lt;code&gt;call-for-testing&lt;/code&gt;
  518. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  519. need testing.&lt;/p&gt;
  520. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
  521. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  522. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  523. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  524. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  525. &lt;p&gt;&lt;em&gt;No Calls for participation were submitted this week.&lt;/em&gt;&lt;/p&gt;
  526. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  527. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
  528. &lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;
  529. &lt;ul&gt;
  530. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt; | Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  531. &lt;li&gt;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc9S_95oaCsFyrULF4iBQOIiTcMlOpG07izgquYLBCKFAYTKQ/viewform&quot;&gt;Rust Ukraine 2024&lt;/a&gt; | Closes 2024-07-06 | Online + Ukraine, Kyiv | Event date: 2024-07-27&lt;/li&gt;
  532. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  533. &lt;/ul&gt;
  534. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  535. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
  536. &lt;p&gt;409 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-06-04..2024-06-11&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  537. &lt;ul&gt;
  538. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126212&quot;&gt;fix: build on haiku&lt;/a&gt;&lt;/li&gt;
  539. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124482&quot;&gt;unsafe extern blocks&lt;/a&gt;&lt;/li&gt;
  540. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125920&quot;&gt;allow static mut definitions with &lt;code&gt;#[linkage]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  541. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125996&quot;&gt;closures are recursively reachable&lt;/a&gt;&lt;/li&gt;
  542. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125861&quot;&gt;&lt;code&gt;rustc_codegen_ssa&lt;/code&gt;: fix &lt;code&gt;get_rpath_relative_to_output&lt;/code&gt; panic when lib only contains file name&lt;/a&gt;&lt;/li&gt;
  543. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125608&quot;&gt;avoid follow-up errors if the number of generic parameters already doesn't match&lt;/a&gt;&lt;/li&gt;
  544. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125596&quot;&gt;convert &lt;code&gt;proc_macro_back_compat&lt;/code&gt; lint to an unconditional error&lt;/a&gt;&lt;/li&gt;
  545. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125572&quot;&gt;detect pub structs never constructed and unused associated constants&lt;/a&gt;&lt;/li&gt;
  546. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125407&quot;&gt;detect when user is trying to create a lending &lt;code&gt;Iterator&lt;/code&gt; and give a custom explanation&lt;/a&gt;&lt;/li&gt;
  547. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125406&quot;&gt;directly add extension instead of using &lt;code&gt;Path::with_extension&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  548. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125792&quot;&gt;don't drop &lt;code&gt;Unsize&lt;/code&gt; candidate in intercrate mode&lt;/a&gt;&lt;/li&gt;
  549. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125925&quot;&gt;don't trigger &lt;code&gt;unsafe_op_in_unsafe_fn&lt;/code&gt; for deprecated safe fns&lt;/a&gt;&lt;/li&gt;
  550. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122505&quot;&gt;don't walk the bodies of free constants for reachability&lt;/a&gt;&lt;/li&gt;
  551. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126040&quot;&gt;don't warn on fields in the &lt;code&gt;unreachable_pub&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  552. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125041&quot;&gt;enable GVN for &lt;code&gt;AggregateKind::RawPtr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  553. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125865&quot;&gt;fix ICE caused by ignoring EffectVars in type inference&lt;/a&gt;&lt;/li&gt;
  554. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126115&quot;&gt;fix ICE due to &lt;code&gt;unwrap&lt;/code&gt; in &lt;code&gt;probe_for_name_many&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  555. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125795&quot;&gt;improve renaming suggestion for names with leading underscores&lt;/a&gt;&lt;/li&gt;
  556. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126184&quot;&gt;interpret: do not ICE on padded non-pow2 SIMD vectors&lt;/a&gt;&lt;/li&gt;
  557. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125525&quot;&gt;make TLS accessors closures that return pointers&lt;/a&gt;&lt;/li&gt;
  558. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125982&quot;&gt;make deleting on LinkedList aware of the allocator&lt;/a&gt;&lt;/li&gt;
  559. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126057&quot;&gt;make html rendered by rustdoc allow searching non-English identifier / alias&lt;/a&gt;&lt;/li&gt;
  560. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126065&quot;&gt;mark binding undetermined if target name exist and not obtained&lt;/a&gt;&lt;/li&gt;
  561. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125168&quot;&gt;match ergonomics 2024: align implementation with RFC&lt;/a&gt;&lt;/li&gt;
  562. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125871&quot;&gt;orphanck (old solver): Consider opaque types to never cover type parameters&lt;/a&gt;&lt;/li&gt;
  563. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124214&quot;&gt;parse unsafe attributes&lt;/a&gt;&lt;/li&gt;
  564. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126059&quot;&gt;raise &lt;code&gt;DEFAULT_MIN_STACK_SIZE&lt;/code&gt; to at least 64KiB&lt;/a&gt;&lt;/li&gt;
  565. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124840&quot;&gt;resolve: mark it undetermined if single import has no bindings&lt;/a&gt;&lt;/li&gt;
  566. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126159&quot;&gt;scalarInt: size mismatches are a bug, do not delay the panic&lt;/a&gt;&lt;/li&gt;
  567. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126022&quot;&gt;set &lt;code&gt;has_unconstrained_ty_var&lt;/code&gt; when generalizing aliases in bivariant contexts&lt;/a&gt;&lt;/li&gt;
  568. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125667&quot;&gt;silence follow-up errors directly based on error types and regions&lt;/a&gt;&lt;/li&gt;
  569. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125967&quot;&gt;split smir &lt;code&gt;Const&lt;/code&gt; into &lt;code&gt;TyConst&lt;/code&gt; and &lt;code&gt;MirConst&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  570. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125968&quot;&gt;store the types of &lt;code&gt;ty::Expr&lt;/code&gt; arguments in the &lt;code&gt;ty::Expr&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  571. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125987&quot;&gt;when &lt;code&gt;derive&lt;/code&gt;ing, account for HRTB on &lt;code&gt;BareFn&lt;/code&gt; fields&lt;/a&gt;&lt;/li&gt;
  572. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125622&quot;&gt;winnow private method candidates instead of assuming any candidate of the right name will apply&lt;/a&gt;&lt;/li&gt;
  573. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125910&quot;&gt;add &lt;code&gt;SingleUseConsts&lt;/code&gt; mir-opt pass&lt;/a&gt;&lt;/li&gt;
  574. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3659&quot;&gt;miri: &lt;code&gt;simd_bitmask&lt;/code&gt;: nicer error when the mask is too big&lt;/a&gt;&lt;/li&gt;
  575. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3662&quot;&gt;miri: &lt;code&gt;simd_bitmask&lt;/code&gt;: work correctly for sizes like 24&lt;/a&gt;&lt;/li&gt;
  576. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3660&quot;&gt;miri: &lt;code&gt;simd_select_bitmask&lt;/code&gt;: fix intrinsic name in error&lt;/a&gt;&lt;/li&gt;
  577. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3640&quot;&gt;miri: add support for &lt;code&gt;pclmulqdq&lt;/code&gt; intrinsic&lt;/a&gt;&lt;/li&gt;
  578. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3663&quot;&gt;miri: don't panic if time computaton overflows&lt;/a&gt;&lt;/li&gt;
  579. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3653&quot;&gt;miri: fix futex with large timeout ICE&lt;/a&gt;&lt;/li&gt;
  580. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3654&quot;&gt;miri: fix stage in contributing&lt;/a&gt;&lt;/li&gt;
  581. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125928&quot;&gt;stabilize order of MonoItems in CGUs and disallow &lt;code&gt;query_instability&lt;/code&gt; lint for &lt;code&gt;rustc_monomorphize&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  582. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126089&quot;&gt;stabilize &lt;code&gt;Option::take_if&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  583. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124012&quot;&gt;stabilize &lt;code&gt;binary_heap_as_slice&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  584. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125951&quot;&gt;stabilize &lt;code&gt;error_in_core&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  585. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126096&quot;&gt;Allow &lt;code&gt;core_intrinsics&lt;/code&gt; when activated&lt;/a&gt; (RFC &lt;a href=&quot;https://rust-lang.github.io/rfcs/2011-generic-assert.html&quot;&gt;#2011&lt;/a&gt;)&lt;/li&gt;
  586. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/106186&quot;&gt;add function &lt;code&gt;core::iter::chain&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  587. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126150&quot;&gt;&lt;code&gt;offset_of&lt;/code&gt;: allow (unstably) taking the offset of slice tail fields&lt;/a&gt;&lt;/li&gt;
  588. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125253&quot;&gt;add &lt;code&gt;FRAC_1_SQRT_2PI&lt;/code&gt; constant to f16/f32/f64/f128&lt;/a&gt;&lt;/li&gt;
  589. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123168&quot;&gt;add &lt;code&gt;size_of&lt;/code&gt; and &lt;code&gt;size_of_val&lt;/code&gt; and &lt;code&gt;align_of&lt;/code&gt; and &lt;code&gt;align_of_val&lt;/code&gt; to the prelude&lt;/a&gt;&lt;/li&gt;
  590. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/hashbrown/pull/525&quot;&gt;hashbrown: feat: borsh serde&lt;/a&gt;&lt;/li&gt;
  591. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/portable-simd/pull/423&quot;&gt;portable SIMD: implement special swizzles for masks and remove {&lt;code&gt;to&lt;/code&gt;, &lt;code&gt;from&lt;/code&gt;}&lt;code&gt;_bitmask_vector&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  592. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/regex/pull/1203&quot;&gt;regex: escape invalid UTF-8 bytes in debug output for &lt;code&gt;Match&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  593. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/14024&quot;&gt;cargo lints: Add &lt;code&gt;unknown_lints&lt;/code&gt; to lints list&lt;/a&gt;&lt;/li&gt;
  594. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13921&quot;&gt;cargo toml: Convert warnings that &lt;code&gt;licence&lt;/code&gt; and &lt;code&gt;readme&lt;/code&gt; files do not exist into errors&lt;/a&gt;&lt;/li&gt;
  595. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13902&quot;&gt;cargo toml: remove &lt;code&gt;lib.plugin&lt;/code&gt; key support and make it warning&lt;/a&gt;&lt;/li&gt;
  596. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13892&quot;&gt;cargo: proc-macro example from dep no longer affects feature resolution&lt;/a&gt;&lt;/li&gt;
  597. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/14036&quot;&gt;cargo: remove &lt;code&gt;__CARGO_GITOXIDE_DISABLE_LIST_FILES&lt;/code&gt; env var&lt;/a&gt;&lt;/li&gt;
  598. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13971&quot;&gt;cargo: using &lt;code&gt;--release/debug&lt;/code&gt; and &lt;code&gt;--profile&lt;/code&gt; together becomes an error&lt;/a&gt;&lt;/li&gt;
  599. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13809&quot;&gt;cargo: rename --out-dir to --artifact-dir&lt;/a&gt;&lt;/li&gt;
  600. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/126176&quot;&gt;rustdoc-search: use lowercase, non-normalized name for type search&lt;/a&gt;&lt;/li&gt;
  601. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/107099&quot;&gt;rustdoc: add support for --remap-path-prefix&lt;/a&gt;&lt;/li&gt;
  602. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125946&quot;&gt;rustdoc: include trailing commas in wrapped function declarations&lt;/a&gt;&lt;/li&gt;
  603. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12827&quot;&gt;clippy: &lt;code&gt;lint_groups_priority&lt;/code&gt;: ignore lints &amp;amp; groups at the same level&lt;/a&gt;&lt;/li&gt;
  604. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12901&quot;&gt;clippy: &lt;code&gt;match_same_arms&lt;/code&gt;: add a test case with lifetimes&lt;/a&gt;&lt;/li&gt;
  605. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12700&quot;&gt;clippy: &lt;code&gt;overly_complex_bool_expr&lt;/code&gt;: Fix false positive on never type&lt;/a&gt;&lt;/li&gt;
  606. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/10632&quot;&gt;clippy: add &lt;code&gt;needless_maybe_sized&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  607. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12851&quot;&gt;clippy: add required parentheses around method receiver&lt;/a&gt;&lt;/li&gt;
  608. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12845&quot;&gt;clippy: dedup &lt;code&gt;nonminimal_bool_methods&lt;/code&gt; diags&lt;/a&gt;&lt;/li&gt;
  609. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12805&quot;&gt;clippy: don't lint blocks in closures for &lt;code&gt;blocks_in_conditions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  610. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12844&quot;&gt;clippy: fix &lt;code&gt;to_string_in_format_args&lt;/code&gt; with macro call receiver&lt;/a&gt;&lt;/li&gt;
  611. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12886&quot;&gt;clippy: fix false positive for &lt;code&gt;needless_character_iteration&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  612. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12877&quot;&gt;clippy: handle const effects inherited from parent correctly in &lt;code&gt;type_certainty&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  613. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12897&quot;&gt;clippy: lint &lt;code&gt;manual_unwrap_or_default&lt;/code&gt; for &lt;code&gt;Result&lt;/code&gt; as well&lt;/a&gt;&lt;/li&gt;
  614. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12822&quot;&gt;clippy: make &lt;code&gt;for_each_expr&lt;/code&gt; visit closures by default, rename the old version &lt;code&gt;for_each_expr_without_closures&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  615. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12884&quot;&gt;clippy: only run &lt;code&gt;suboptimal_flops&lt;/code&gt; on inherent method calls&lt;/a&gt;&lt;/li&gt;
  616. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17308&quot;&gt;rust-analyzer: add preference modifier for workspace-local crates when using auto import&lt;/a&gt;&lt;/li&gt;
  617. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17359&quot;&gt;rust-analyzer: add version info to status bar item&lt;/a&gt;&lt;/li&gt;
  618. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17346&quot;&gt;rust-analyzer: changed &lt;code&gt;package.json&lt;/code&gt; so vscode extension settings have submenus&lt;/a&gt;&lt;/li&gt;
  619. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17058&quot;&gt;rust-analyzer: TOML based config for rust-analyzer&lt;/a&gt;&lt;/li&gt;
  620. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17372&quot;&gt;rust-analyzer: compute native diagnostics in parallel&lt;/a&gt;&lt;/li&gt;
  621. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17282&quot;&gt;rust-analyzer: hide double underscored symbols from symbol search&lt;/a&gt;&lt;/li&gt;
  622. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17352&quot;&gt;rust-analyzer: do not resolve prelude within block modules&lt;/a&gt;&lt;/li&gt;
  623. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17381&quot;&gt;rust-analyzer: ensure that the parent of a &lt;code&gt;SourceRoot&lt;/code&gt; cannot be itself&lt;/a&gt;&lt;/li&gt;
  624. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17368&quot;&gt;rust-analyzer: fix generated markers not being patchable in &lt;code&gt;package.json&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  625. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17360&quot;&gt;rust-analyzer: fix renaming imports of foreign items touching foreign sources&lt;/a&gt;&lt;/li&gt;
  626. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17350&quot;&gt;rust-analyzer: highlight unlinked files consistently with inactive files&lt;/a&gt;&lt;/li&gt;
  627. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17353&quot;&gt;rust-analyzer: incorrect formatting of hover actions&lt;/a&gt;&lt;/li&gt;
  628. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17380&quot;&gt;rust-analyzer: remove extra parse cache from Semantics again&lt;/a&gt;&lt;/li&gt;
  629. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17004&quot;&gt;rust-analyzer: try caching macro calls more aggressively in Semantics&lt;/a&gt;&lt;/li&gt;
  630. &lt;/ul&gt;
  631. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  632. &lt;p&gt;This week saw more regressions than wins, caused mostly by code being reorganized within the
  633. compiler and a new feature being implemented. There have also been some nice improvements caused
  634. by better optimizing spans.&lt;/p&gt;
  635. &lt;p&gt;Triage done by &lt;strong&gt;@kobzol&lt;/strong&gt;.
  636. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=1d52972dd8592edf4026aa577c8ce69acc0ac2d1&amp;amp;end=b5b13568fb5da4ac988bde370008d6134d3dfe6c&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;1d52972d..b5b13568&lt;/a&gt;&lt;/p&gt;
  637. &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
  638. &lt;table&gt;
  639. &lt;thead&gt;
  640. &lt;tr&gt;
  641. &lt;th align=&quot;center&quot;&gt;(instructions:u)&lt;/th&gt;
  642. &lt;th align=&quot;center&quot;&gt;mean&lt;/th&gt;
  643. &lt;th align=&quot;center&quot;&gt;range&lt;/th&gt;
  644. &lt;th align=&quot;center&quot;&gt;count&lt;/th&gt;
  645. &lt;/tr&gt;
  646. &lt;/thead&gt;
  647. &lt;tbody&gt;
  648. &lt;tr&gt;
  649. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
  650. &lt;td align=&quot;center&quot;&gt;0.6%&lt;/td&gt;
  651. &lt;td align=&quot;center&quot;&gt;[0.2%, 2.7%]&lt;/td&gt;
  652. &lt;td align=&quot;center&quot;&gt;105&lt;/td&gt;
  653. &lt;/tr&gt;
  654. &lt;tr&gt;
  655. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
  656. &lt;td align=&quot;center&quot;&gt;1.0%&lt;/td&gt;
  657. &lt;td align=&quot;center&quot;&gt;[0.1%, 6.9%]&lt;/td&gt;
  658. &lt;td align=&quot;center&quot;&gt;74&lt;/td&gt;
  659. &lt;/tr&gt;
  660. &lt;tr&gt;
  661. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
  662. &lt;td align=&quot;center&quot;&gt;-0.5%&lt;/td&gt;
  663. &lt;td align=&quot;center&quot;&gt;[-1.0%, -0.2%]&lt;/td&gt;
  664. &lt;td align=&quot;center&quot;&gt;20&lt;/td&gt;
  665. &lt;/tr&gt;
  666. &lt;tr&gt;
  667. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
  668. &lt;td align=&quot;center&quot;&gt;-1.4%&lt;/td&gt;
  669. &lt;td align=&quot;center&quot;&gt;[-8.8%, -0.2%]&lt;/td&gt;
  670. &lt;td align=&quot;center&quot;&gt;32&lt;/td&gt;
  671. &lt;/tr&gt;
  672. &lt;tr&gt;
  673. &lt;td align=&quot;center&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
  674. &lt;td align=&quot;center&quot;&gt;0.5%&lt;/td&gt;
  675. &lt;td align=&quot;center&quot;&gt;[-1.0%, 2.7%]&lt;/td&gt;
  676. &lt;td align=&quot;center&quot;&gt;125&lt;/td&gt;
  677. &lt;/tr&gt;
  678. &lt;/tbody&gt;
  679. &lt;/table&gt;
  680. &lt;p&gt;5 Regressions, 3 Improvements, 4 Mixed; 5 of them in rollups
  681. 59 artifact comparisons made in total&lt;/p&gt;
  682. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/aba4c3895edeee39e7454f600a85c9dd3f8867cf/triage/2024-06-11.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  683. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
  684. &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
  685. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  686. &lt;ul&gt;
  687. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3599&quot;&gt;re-organise the compiler team&lt;/a&gt;&lt;/li&gt;
  688. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3617&quot;&gt;Precise capturing&lt;/a&gt;&lt;/li&gt;
  689. &lt;/ul&gt;
  690. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  691. &lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
  692. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  693. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  694. &lt;ul&gt;
  695. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3467&quot;&gt;UnsafePinned: allow aliasing of pinned mutable references&lt;/a&gt;&lt;/li&gt;
  696. &lt;li&gt;[disposition: postpone] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/2801&quot;&gt;RFC: make Cargo embed dependency versions in the compiled binary&lt;/a&gt;&lt;/li&gt;
  697. &lt;/ul&gt;
  698. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  699. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  700. &lt;ul&gt;
  701. &lt;li&gt;[disposition: close] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/99160&quot;&gt;Should we allow StorageLive on a live local?&lt;/a&gt;&lt;/li&gt;
  702. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/119131&quot;&gt;Tracking Issue for &lt;code&gt;hint::assert_unchecked&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  703. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/120752&quot;&gt;Collect relevant item bounds from trait clauses for nested rigid projections&lt;/a&gt;&lt;/li&gt;
  704. &lt;li&gt;[disposition: close] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/125763&quot;&gt;conflicting impl since nightly-2024-05-01&lt;/a&gt;&lt;/li&gt;
  705. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/125112&quot;&gt;Document behavior of create_dir_all wrt. empty path&lt;/a&gt;&lt;/li&gt;
  706. &lt;/ul&gt;
  707. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Cargo&lt;/a&gt;
  708. &lt;ul&gt;
  709. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13960&quot;&gt;Include vcs_info even if workspace is dirty&lt;/a&gt;&lt;/li&gt;
  710. &lt;/ul&gt;
  711. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-team&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc+&quot;&gt;Language Team&lt;/a&gt;
  712. &lt;ul&gt;
  713. &lt;li&gt;&lt;em&gt;No Language Team RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  714. &lt;/ul&gt;
  715. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-reference&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Language Reference&lt;/a&gt;
  716. &lt;ul&gt;
  717. &lt;li&gt;&lt;em&gt;No Language Reference RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  718. &lt;/ul&gt;
  719. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#unsafe-code-guidelines&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;
  720. &lt;ul&gt;
  721. &lt;li&gt;&lt;em&gt;No Unsafe Code Guideline RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  722. &lt;/ul&gt;
  723. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h6&gt;
  724. &lt;ul&gt;
  725. &lt;li&gt;[updated] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3655&quot;&gt;fix links of I/O safety RFC&lt;/a&gt;&lt;/li&gt;
  726. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3654&quot;&gt;RFC: Return Type Notation&lt;/a&gt;&lt;/li&gt;
  727. &lt;/ul&gt;
  728. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  729. &lt;p&gt;Rusty Events between 2024-06-12 - 2024-07-10 🦀&lt;/p&gt;
  730. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  731. &lt;ul&gt;
  732. &lt;li&gt;2024-06-12 | Virtual (Cardiff, UK)| &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
  733. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/301314544/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 8 - Asynchronous Programming&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  734. &lt;/ul&gt;
  735. &lt;/li&gt;
  736. &lt;li&gt;2024-06-13 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  737. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897800/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  738. &lt;/ul&gt;
  739. &lt;/li&gt;
  740. &lt;li&gt;2024-06-13 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  741. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945258/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  742. &lt;/ul&gt;
  743. &lt;/li&gt;
  744. &lt;li&gt;2024-06-16 | Virtual (Tel Aviv, IL) | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  745. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301294669/&quot;&gt;&lt;strong&gt;Workshop: Web development in Rust using Rocket (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  746. &lt;/ul&gt;
  747. &lt;/li&gt;
  748. &lt;li&gt;2024-06-18 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  749. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346963/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  750. &lt;/ul&gt;
  751. &lt;/li&gt;
  752. &lt;li&gt;2024-06-19 | Hybrid - Virtual and In-person (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  753. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298631733/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  754. &lt;/ul&gt;
  755. &lt;/li&gt;
  756. &lt;li&gt;2024-06-20 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  757. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477705/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  758. &lt;/ul&gt;
  759. &lt;/li&gt;
  760. &lt;li&gt;2024-06-25 | Virtual (Dallas, TX, US)| &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust User Group&lt;/a&gt;&lt;ul&gt;
  761. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcjbhc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  762. &lt;/ul&gt;
  763. &lt;/li&gt;
  764. &lt;li&gt;2024-06-25 | Virtual (Tel Aviv, IL) | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  765. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301487547/&quot;&gt;&lt;strong&gt;Using the Liquid template system in Rust (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  766. &lt;/ul&gt;
  767. &lt;/li&gt;
  768. &lt;li&gt;2024-06-27 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  769. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897826/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  770. &lt;/ul&gt;
  771. &lt;/li&gt;
  772. &lt;li&gt;2024-07-02 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  773. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300191673/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  774. &lt;/ul&gt;
  775. &lt;/li&gt;
  776. &lt;li&gt;2024-07-03 | Virtual | &lt;a href=&quot;https://www.eventbrite.com/o/training-4-programmers-llc-80387368983&quot;&gt;Training 4 Programmers LLC&lt;/a&gt;&lt;ul&gt;
  777. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/build-web-apps-with-rust-and-leptos-tickets-904804503627?aff=odcleoeventsincollection&quot;&gt;&lt;strong&gt;Build Web Apps with Rust and Leptos&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  778. &lt;/ul&gt;
  779. &lt;/li&gt;
  780. &lt;li&gt;2024-07-03 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  781. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/300328025/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  782. &lt;/ul&gt;
  783. &lt;/li&gt;
  784. &lt;li&gt;2024-07-04 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  785. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298488820/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  786. &lt;/ul&gt;
  787. &lt;/li&gt;
  788. &lt;li&gt;2024-07-06 | Virtual (Kampala, UG) | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  789. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  790. &lt;/ul&gt;
  791. &lt;/li&gt;
  792. &lt;li&gt;2024-07-09 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  793. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/299346976/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  794. &lt;/ul&gt;
  795. &lt;/li&gt;
  796. &lt;li&gt;2024-07-10 | Virtual | &lt;a href=&quot;https://www.eventbrite.co.nz/o/centre-for-eresearch-75893560993&quot;&gt;Centre for eResearch&lt;/a&gt;&lt;ul&gt;
  797. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/research-computing-with-the-rust-programming-language-tickets-908002037537?aff=ebdssbdestsearch&amp;amp;keep_tld=1&quot;&gt;&lt;strong&gt;Research Computing With The Rust Programming Language&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  798. &lt;/ul&gt;
  799. &lt;/li&gt;
  800. &lt;/ul&gt;
  801. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  802. &lt;ul&gt;
  803. &lt;li&gt;2024-06-22 | Bangalore, IN | &lt;a href=&quot;https://hasgeek.com/rustbangalore&quot;&gt;Rust Bangalore&lt;/a&gt;&lt;ul&gt;
  804. &lt;li&gt;&lt;a href=&quot;https://hasgeek.com/rustbangalore/june-2024-rustacean-meetup/&quot;&gt;&lt;strong&gt;June 2024 Rustacean meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  805. &lt;/ul&gt;
  806. &lt;/li&gt;
  807. &lt;li&gt;2024-06-30 | Kyoto, JP | &lt;a href=&quot;https://www.meetup.com/kyoto-rust/&quot;&gt;Kyoto Rust&lt;/a&gt;&lt;ul&gt;
  808. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/kyoto-rust/events/301499550/&quot;&gt;&lt;strong&gt;Rust Talk: Cross Platform Apps&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  809. &lt;/ul&gt;
  810. &lt;/li&gt;
  811. &lt;/ul&gt;
  812. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  813. &lt;ul&gt;
  814. &lt;li&gt;2024-06-12 | Reading, UK | &lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/&quot;&gt;Reading Rust Workshop&lt;/a&gt;&lt;ul&gt;
  815. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/events/301012491/&quot;&gt;&lt;strong&gt;Reading Rust Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  816. &lt;/ul&gt;
  817. &lt;/li&gt;
  818. &lt;li&gt;2024-06-18 | Frankfurt/Main, DE | &lt;a href=&quot;https://www.meetup.com/rust-frankfurt&quot;&gt;Rust Frankfurt Meetup&lt;/a&gt;&lt;ul&gt;
  819. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-frankfurt/events/301441434/&quot;&gt;&lt;strong&gt;Rust Frankfurt is Back!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  820. &lt;/ul&gt;
  821. &lt;/li&gt;
  822. &lt;li&gt;2024-06-19 - 2024-06-24 | Zürich, CH | &lt;a href=&quot;https://rustfest.ch/&quot;&gt;RustFest Zürich&lt;/a&gt;&lt;ul&gt;
  823. &lt;li&gt;&lt;a href=&quot;https://rustfest.ch/&quot;&gt;&lt;strong&gt;RustFest Zürich 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  824. &lt;/ul&gt;
  825. &lt;/li&gt;
  826. &lt;li&gt;2024-06-20 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  827. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/300865116/&quot;&gt;&lt;strong&gt;Talk Night at Trifork&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  828. &lt;/ul&gt;
  829. &lt;/li&gt;
  830. &lt;li&gt;2024-06-25 | Gdańsk, PL | &lt;a href=&quot;https://www.meetup.com/rust-gdansk/&quot;&gt;Rust Gdansk&lt;/a&gt;&lt;ul&gt;
  831. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-gdansk/events/301014697/&quot;&gt;&lt;strong&gt;Rust Gdansk Meetup #3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  832. &lt;/ul&gt;
  833. &lt;/li&gt;
  834. &lt;li&gt;2024-06-27 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  835. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288965/&quot;&gt;&lt;strong&gt;Rust and Tell - Title&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  836. &lt;/ul&gt;
  837. &lt;/li&gt;
  838. &lt;li&gt;2024-06-27 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  839. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458252/&quot;&gt;&lt;strong&gt;Rust meetup #48 sponsored by Google!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  840. &lt;/ul&gt;
  841. &lt;/li&gt;
  842. &lt;/ul&gt;
  843. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  844. &lt;ul&gt;
  845. &lt;li&gt;2024-06-12 | Detroit, MI, US | &lt;a href=&quot;https://www.meetup.com/detroitrust/&quot;&gt;Detroit Rust&lt;/a&gt;&lt;ul&gt;
  846. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/detroitrust/events/301387848/&quot;&gt;&lt;strong&gt;Detroit Rust Meet - Ann Arbor&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  847. &lt;/ul&gt;
  848. &lt;/li&gt;
  849. &lt;li&gt;2024-06-13 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  850. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020010/&quot;&gt;&lt;strong&gt;Monthly Meetup: Crafting an Interpreter in Rust, pt. 1&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  851. &lt;/ul&gt;
  852. &lt;/li&gt;
  853. &lt;li&gt;2024-06-14 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  854. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/301569401/&quot;&gt;&lt;strong&gt;Summer BBQ for Spokane's Local Tech User Groups at Saranac Pub Rooftop!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  855. &lt;/ul&gt;
  856. &lt;/li&gt;
  857. &lt;li&gt;2024-06-17 | Minneapolis, MN US | &lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/&quot;&gt;Minneapolis Rust Meetup&lt;/a&gt;&lt;ul&gt;
  858. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/events/301411625/&quot;&gt;&lt;strong&gt;Minneapolis Rust Meetup Happy Hour&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  859. &lt;/ul&gt;
  860. &lt;/li&gt;
  861. &lt;li&gt;2024-06-18 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
  862. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186953/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  863. &lt;/ul&gt;
  864. &lt;/li&gt;
  865. &lt;li&gt;2024-06-19 | Hybrid -  Vancouver, BC, CA | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  866. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298631733/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  867. &lt;/ul&gt;
  868. &lt;/li&gt;
  869. &lt;li&gt;2024-06-20 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  870. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509396/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  871. &lt;/ul&gt;
  872. &lt;/li&gt;
  873. &lt;li&gt;2024-06-24 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  874. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/301549722/&quot;&gt;&lt;strong&gt;Harvard Square Rust Lunch, June 24&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  875. &lt;/ul&gt;
  876. &lt;/li&gt;
  877. &lt;li&gt;2024-06-26 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATC&lt;/a&gt;&lt;ul&gt;
  878. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/301066942/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  879. &lt;/ul&gt;
  880. &lt;/li&gt;
  881. &lt;li&gt;2024-06-27 | Nashville, TN, US | &lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/&quot;&gt;Music City Rust Developers&lt;/a&gt;&lt;ul&gt;
  882. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/events/301411746/&quot;&gt;&lt;strong&gt;Music City Rust Developers: Holding Pattern&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  883. &lt;/ul&gt;
  884. &lt;/li&gt;
  885. &lt;li&gt;2024-07-05 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  886. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/301549737/&quot;&gt;&lt;strong&gt;Boston University Rust Lunch, July 5&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  887. &lt;/ul&gt;
  888. &lt;/li&gt;
  889. &lt;/ul&gt;
  890. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  891. &lt;ul&gt;
  892. &lt;li&gt;2024-06-14 | Melbourne, VIC, AU | &lt;a href=&quot;https://www.meetup.com/rust-melbourne/&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
  893. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-melbourne/events/301311680/&quot;&gt;&lt;strong&gt;June 2024 Rust Melbourne Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  894. &lt;/ul&gt;
  895. &lt;/li&gt;
  896. &lt;li&gt;2024-06-20 | Auckland, NZ | &lt;a href=&quot;https://www.meetup.com/rust-akl/&quot;&gt;Rust AKL&lt;/a&gt;&lt;ul&gt;
  897. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-akl/events/301193761/&quot;&gt;&lt;strong&gt;Rust AKL: Full Stack Rust + Writing a compiler for fun and (no) profit&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  898. &lt;/ul&gt;
  899. &lt;/li&gt;
  900. &lt;li&gt;2024-06-25 | Canberra, ACt, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group (CRUG)&lt;/a&gt;&lt;ul&gt;
  901. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300749371/&quot;&gt;&lt;strong&gt;June Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  902. &lt;/ul&gt;
  903. &lt;/li&gt;
  904. &lt;/ul&gt;
  905. &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
  906. it mentioned here. Please remember to add a link to the event too.
  907. Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
  908. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  909.  
  910.  
  911. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1cixuzr/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  912. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  913. &lt;blockquote&gt;
  914. &lt;p&gt;I like explicit but I hate noise...&lt;/p&gt;
  915. &lt;/blockquote&gt;
  916. &lt;p&gt;– &lt;a href=&quot;https://www.reddit.com/r/golang/comments/1d7tswh/comment/l71of8o/&quot;&gt;dlevac discussing error handling on /r/golang&lt;/a&gt;&lt;/p&gt;
  917. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1571&quot;&gt;robin&lt;/a&gt; for the suggestion!&lt;/p&gt;
  918. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
  919. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  920. &lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  921. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1deqkgg/this_week_in_rust_551/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  922. <pubDate>Wed, 12 Jun 2024 04:00:00 +0000</pubDate>
  923. <dc:creator>TWiR Contributors</dc:creator>
  924. </item>
  925. <item>
  926. <title>Don Marti: X-Robots-Tag for GPC</title>
  927. <guid isPermaLink="true">https://blog.zgp.org/x-robots-tag-for-gpc/</guid>
  928. <link>https://blog.zgp.org/x-robots-tag-for-gpc/</link>
  929. <description>&lt;p&gt;It’s easy to mock generative AI for weird stuff like &lt;a href=&quot;https://www.theverge.com/2024/6/11/24176490/mm-delicious-glue&quot;&gt;telling people to put glue on pizza, inspiring a reporter to write a story about making glue pizza, then training on the story&lt;/a&gt;. But there is a serious side to this stuff. Protecting the content of a web site from AI training is not just about trying to avoid market competition with copied and scrambled versions of your own content. &lt;span class=&quot;aside&quot;&gt;it’s not fair use, seriously, just read the &lt;a href=&quot;https://blog.library.gsu.edu/2016/02/23/50438/&quot;&gt;actual four factors of fair use&lt;/a&gt; or ask a librarian. It’s &lt;a href=&quot;https://www.understandingai.org/p/the-ai-community-needs-to-take-copyright&quot;&gt;just not a thing&lt;/a&gt;.&lt;/span&gt; &lt;a href=&quot;https://www.nytimes.com/2024/06/06/technology/bnn-breaking-ai-generated-news.html&quot;&gt;MSN boosted an AI-generated article stating that an Irish DJ and talk-show host was on trial over alleged sexual misconduct&lt;/a&gt;. When you put parts of your personal life on your web site, the &lt;a href=&quot;https://www.newyorker.com/tech/annals-of-technology/chatgpt-is-a-blurry-jpeg-of-the-web&quot;&gt;blurry compressed version of it that AI spews out&lt;/a&gt; has other, more personal, risks too. &lt;a href=&quot;https://www.404media.co/instagram-advertises-nonconsensual-ai-nude-apps/&quot;&gt;Nonconsensual Nude Apps&lt;/a&gt; are just the beginning.&lt;/p&gt; &lt;p&gt;AI-specific laws are still in progress, and copyright cases are still making their way through the court system. I still don’t know if all the stuff I did to &lt;a href=&quot;https://blog.zgp.org/block-ai-training-on-a-web-site/&quot;&gt;block AI training on a web site&lt;/a&gt; is going to be enforceable. But in the meantime we do have a tool that is already in place and &lt;a href=&quot;https://natlawreview.com/article/california-attorney-general-announces-first-ccpa-settlement-against-sephora&quot;&gt;tested&lt;/a&gt;. &lt;a href=&quot;https://privacycg.github.io/gpc-spec/&quot;&gt;Global Privacy Control&lt;/a&gt; is an opt-out preference signal (OOPS), a way to signal, in a legally enforceable way, that you opt out of the sale or sharing of your personal information.&lt;/p&gt; &lt;p&gt;GPC already protects residents of California, Colorado, Connecticut, and other states in the USA, and enforcement is coming on line in other jurisdications as well. Sounds like a useful tool, right? One missing piece. The current GPC standard covers a signal sent from the client to the server. When you visit a site as a user, this is just fine. But the missing piece is what happens when your personal info is on a &lt;strong&gt;server&lt;/strong&gt;, but the company looking to exploit it is running a &lt;strong&gt;client&lt;/strong&gt;—a crawler or scraper. That’s where we need to borrow from the &lt;a href=&quot;https://blog.zgp.org/block-ai-training-on-a-web-site/&quot;&gt;methods for blocking AI training on a web site&lt;/a&gt; and add a GPC meta tag and HTTP header.&lt;/p&gt; &lt;p&gt;The header is pretty easy. I just did it. Have a look at this site’s HTTP headers in developer tools or do a&lt;/p&gt; &lt;pre&gt;&lt;code&gt;curl -I -q https://blog.zgp.org/ | grep X-Robots-Tag&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;and there it is. Same with the meta tag.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;meta name=”robots” content=”noai, noimageai, GPC”&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;h3&gt;TODO items&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;Colorado has a process for registering OOPSs, so I will need to write this up and submit it so it’s valid there, but in other jurisdictions the OOPS is valid as long as it expresses the deliberate opt-out of the user, which mine does.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Just to make it extra clear, I need to put something in my &lt;a href=&quot;https://blog.zgp.org/web-site-user-agreement/&quot;&gt;Web Site User Agreement&lt;/a&gt;, the way a lot of sites do for &lt;q&gt;noai&lt;/q&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;continue to &lt;a href=&quot;https://blog.zgp.org/gpc-all-the-things/&quot;&gt;GPC all the things!&lt;/a&gt;&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Remember that laws are downstream of norms here. People generally believe in moral rights and some kind of copyrights for people who do creative work, and people generally believe in some kind of privacy right to control use of your personal information. The details will get worked out. Big AI will probably be able to make bogus legal arguments, delay, and lobby for a while, but in the long run the law will reflect norms more than it reflects billable hours spent trying to push a disliked business model uphill. Comments and suggestions welcome.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/gpc-all-the-things/&quot;&gt;GPC all the things!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/block-ai-training-on-a-web-site/&quot;&gt;Block AI training on a web site&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus link&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://theconversation.com/ai-chatbots-are-intruding-into-online-communities-where-people-are-trying-to-connect-with-other-humans-229473&quot;&gt;AI chatbots are intruding into online communities where people are trying to connect with other humans&lt;/a&gt; (not with &lt;q&gt;personal&lt;/q&gt; stories based on mine they’d better not)&lt;/p&gt;</description>
  930. <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
  931. </item>
  932. <item>
  933. <title>Firefox Developer Experience: Firefox WebDriver Newsletter — 127</title>
  934. <guid isPermaLink="false">https://fxdx.dev/?p=299</guid>
  935. <link>https://fxdx.dev/firefox-webdriver-newsletter-127/</link>
  936. <description>&lt;p&gt;&lt;em&gt;&lt;em&gt;WebDriver is a remote control interface that enables introspection and control of user agents.&lt;/em&gt;&lt;/em&gt; &lt;em&gt;As such it&lt;/em&gt; &lt;em&gt;can&lt;/em&gt; &lt;em&gt;help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the &lt;a href=&quot;https://www.w3.org/&quot;&gt;W3C&lt;/a&gt; and consists of two separate specifications: &lt;a href=&quot;https://w3c.github.io/webdriver/&quot;&gt;WebDriver classic&lt;/a&gt; (HTTP) and the new &lt;a href=&quot;https://w3c.github.io/webdriver-bidi/&quot;&gt;WebDriver BiDi &lt;/a&gt;(Bi-Directional).&lt;/em&gt;&lt;/p&gt;
  937.  
  938.  
  939.  
  940. &lt;p id=&quot;block-657c8643-6b93-4546-8626-3d7c3976c217&quot;&gt;&lt;em&gt;This newsletter gives an overview of the work we’ve done as part of the Firefox 127 release cycle&lt;/em&gt;.&lt;/p&gt;
  941.  
  942.  
  943.  
  944. &lt;h3&gt;Contributions&lt;/h3&gt;
  945.  
  946.  
  947.  
  948. &lt;p&gt;Firefox – including our WebDriver implementation – is developed as an open source project, and everyone is welcome to contribute. We are always grateful to receive external contributions, here are the ones which made it in 127:&lt;/p&gt;
  949.  
  950.  
  951.  
  952. &lt;ul&gt;
  953. &lt;li&gt;Victoria &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1798464&quot;&gt;simplified our implementation&lt;/a&gt; of the &lt;a href=&quot;https://www.w3.org/TR/webdriver/#is-element-enabled&quot;&gt;“Is Element Enabled” command&lt;/a&gt; for WebDriver classic in order to use regular DOM APIs instead of an external helper imported from Selenium. This cleanup will also make this command easier to maintain in the future.&lt;/li&gt;
  954.  
  955.  
  956.  
  957. &lt;li&gt;Gravyant &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1870880&quot;&gt;added a new &lt;code&gt;isInstance&lt;/code&gt; assertion helper&lt;/a&gt; which can be used in the WebDriver codebase to check that a given object is an instance of a specific class. &lt;/li&gt;
  958. &lt;/ul&gt;
  959.  
  960.  
  961.  
  962. &lt;p&gt;WebDriver code is written in JavaScript, Python, and Rust so any web developer can contribute! Read &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools/getting-started/README.html&quot;&gt;how to setup the work environment&lt;/a&gt; and check &lt;a href=&quot;https://codetribute.mozilla.org/projects/automation&quot;&gt;the list of mentored issues&lt;/a&gt; for Marionette.&lt;/p&gt;
  963.  
  964.  
  965.  
  966. &lt;h3&gt;General&lt;/h3&gt;
  967.  
  968.  
  969.  
  970. &lt;h4&gt;Bug fixes&lt;/h4&gt;
  971.  
  972.  
  973.  
  974. &lt;ul&gt;
  975. &lt;li&gt;Fixed a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885542&quot;&gt;bug with the &lt;code&gt;&quot;wheel&quot;&lt;/code&gt; action&lt;/a&gt;, which can be used both in WebDriver BiDi and WebDriver classic. We now correctly handle modifier keys such as &lt;code&gt;Shift&lt;/code&gt;, &lt;code&gt;Control&lt;/code&gt;, etc. With this, you can simulate a user action scrolling the wheel while holding a modifier.&lt;/li&gt;
  976. &lt;/ul&gt;
  977.  
  978.  
  979.  
  980. &lt;h3&gt;WebDriver BiDi&lt;/h3&gt;
  981.  
  982.  
  983.  
  984. &lt;h4&gt;New: Support for the “permissions.setPermission” command&lt;/h4&gt;
  985.  
  986.  
  987.  
  988. &lt;p&gt;The &lt;code&gt;permissions&lt;/code&gt; module is an extension to the WebDriver BiDi specification, defined in &lt;a href=&quot;https://www.w3.org/TR/permissions/#webdriver-bidi-module-permissions&quot;&gt;the Permissions specification&lt;/a&gt;. It is the first extension for WebDriver BiDi to be implemented in Firefox, with &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1875065&quot;&gt;the &lt;code&gt;permissions.setPermission&lt;/code&gt; command&lt;/a&gt;. This command allows you to grant, deny or prompt for a given permission, such as “geolocation”. The permission will be set for a provided origin, and optionally for a specific user context.&lt;/p&gt;
  989.  
  990.  
  991.  
  992. &lt;p&gt;The &lt;code&gt;descriptor&lt;/code&gt; argument should be a &lt;a href=&quot;https://www.w3.org/TR/permissions/#dom-permissiondescriptor&quot;&gt;Permission Descriptor&lt;/a&gt;, which is basically an object with a &lt;code&gt;name&lt;/code&gt; string property set to the name of the permission to update. The &lt;code&gt;state&lt;/code&gt; argument should be one of &lt;code&gt;&quot;granted&quot;&lt;/code&gt;, &lt;code&gt;&quot;denied&quot;&lt;/code&gt; or &lt;code&gt;&quot;prompt&quot;&lt;/code&gt;. The &lt;code&gt;origin&lt;/code&gt; argument should be the origin for which the permission setting will be set. And finally the optional argument &lt;code&gt;userContext&lt;/code&gt; should be the user context id where the permission should be applied (&lt;code&gt;&quot;default&quot;&lt;/code&gt; if omitted).&lt;/p&gt;
  993.  
  994.  
  995.  
  996. &lt;p&gt;Below is an example of setting the &lt;code&gt;&quot;geolocation&quot;&lt;/code&gt; permission to &lt;code&gt;&quot;prompt&quot;&lt;/code&gt; for the &lt;code&gt;&quot;https://www.google.com&quot;&lt;/code&gt; origin: &lt;/p&gt;
  997.  
  998.  
  999.  
  1000. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;-&amp;gt; {
  1001.  &quot;method&quot;: &quot;permissions.setPermission&quot;,
  1002.  &quot;params&quot;: {
  1003.    &quot;descriptor&quot;: {
  1004.      &quot;name&quot;: &quot;geolocation&quot;,
  1005.    },
  1006.    &quot;state&quot;: &quot;prompt&quot;,
  1007.    &quot;origin&quot;: &quot;https://www.google.com&quot;
  1008.  },
  1009.  &quot;id&quot;: 2
  1010. }
  1011.  
  1012. &amp;lt;- { &quot;type&quot;: &quot;success&quot;, &quot;id&quot;: 2, &quot;result&quot;: {} }&lt;/code&gt;&lt;/pre&gt;
  1013.  
  1014.  
  1015.  
  1016. &lt;p&gt;Afterwards, trying to use a geolocation feature on a website with the “https://www.google.com” origin such as Google Maps will trigger the permission prompt as shown below:&lt;/p&gt;
  1017.  
  1018.  
  1019.  
  1020. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Screenshot of Google Maps showing the &amp;quot;geolocation&amp;quot; permission prompt&quot; class=&quot;wp-image-302&quot; height=&quot;230&quot; src=&quot;https://fxdx.dev/files/2024/06/image-600x230.png&quot; width=&quot;600&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Google Maps shows the &lt;code&gt;&quot;geolocation&quot;&lt;/code&gt; permission prompt&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  1021.  
  1022.  
  1023.  
  1024. &lt;h4&gt;New: Support for accessibility locator in the “browsingContext.locateNodes” command &lt;/h4&gt;
  1025.  
  1026.  
  1027.  
  1028. &lt;p&gt;The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885577&quot;&gt;accessibility locator allows you to find elements&lt;/a&gt; matching a specific &lt;a href=&quot;https://www.w3.org/TR/core-aam-1.2/#roleMappingComputedRole&quot;&gt;computed role&lt;/a&gt; or &lt;a href=&quot;https://www.w3.org/TR/accname-1.2/#dfn-accessible-name&quot;&gt;accessible name&lt;/a&gt;. This locator has the type &lt;code&gt;&quot;accessibility&quot;&lt;/code&gt;, and for the value it expects an object with a &lt;code&gt;&quot;name&quot;&lt;/code&gt; property (for accessible name) and/or a &lt;code&gt;&quot;role&quot;&lt;/code&gt; property (for computed role). You may provide one or both properties at the same time. Note that the start nodes (&lt;code&gt;startNodes&lt;/code&gt; argument) can contain elements, documents and document fragments.&lt;/p&gt;
  1029.  
  1030.  
  1031.  
  1032. &lt;p&gt;For instance, considering the following markup, which attributes the &lt;code&gt;checkbox&lt;/code&gt; role to a &lt;code&gt;span&lt;/code&gt;, labelled by another &lt;code&gt;span&lt;/code&gt; element:&lt;/p&gt;
  1033.  
  1034.  
  1035.  
  1036. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-markup&quot;&gt;&amp;lt;!DOCTYPE html&amp;gt;
  1037. &amp;lt;html&amp;gt;
  1038.  &amp;lt;body&amp;gt;
  1039.    &amp;lt;span role=&quot;checkbox&quot; aria-checked=&quot;false&quot; tabindex=&quot;0&quot; aria-labelledby=&quot;tac&quot;
  1040.    &amp;gt;&amp;lt;/span&amp;gt;
  1041.    &amp;lt;span id=&quot;tac&quot;&amp;gt;Checkbox name&amp;lt;/span&amp;gt;
  1042.  &amp;lt;/body&amp;gt;
  1043. &amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  1044.  
  1045.  
  1046.  
  1047. &lt;p&gt;You can find the &lt;code&gt;checkbox&lt;/code&gt; element either by using the “role” accessibility locator:&lt;/p&gt;
  1048.  
  1049.  
  1050.  
  1051. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  1052.  &quot;method&quot;: &quot;browsingContext.locateNodes&quot;,
  1053.  &quot;params&quot;: {
  1054.    &quot;locator&quot;: {
  1055.      &quot;type&quot;: &quot;accessibility&quot;,
  1056.      &quot;value&quot;: {
  1057.        &quot;role&quot;: &quot;checkbox&quot;
  1058.      }
  1059.    },
  1060.    &quot;context&quot;: &quot;2a22b1c6-6fa8-4e62-b4af-32ed2ff1ced7&quot;
  1061.  },
  1062.  &quot;id&quot;: 19
  1063. }&lt;/code&gt;&lt;/pre&gt;
  1064.  
  1065.  
  1066.  
  1067. &lt;p&gt;Or by using the accessible &lt;code&gt;name&lt;/code&gt;, which is the value of the &lt;code&gt;aria-labelledby&lt;/code&gt; element:&lt;/p&gt;
  1068.  
  1069.  
  1070.  
  1071. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  1072.  &quot;method&quot;: &quot;browsingContext.locateNodes&quot;,
  1073.  &quot;params&quot;: {
  1074.    &quot;locator&quot;: {
  1075.      &quot;type&quot;: &quot;accessibility&quot;,
  1076.      &quot;value&quot;: {
  1077.        &quot;name&quot;: &quot;Checkbox name&quot;
  1078.      }
  1079.    },
  1080.    &quot;context&quot;: &quot;2a22b1c6-6fa8-4e62-b4af-32ed2ff1ced7&quot;
  1081.  },
  1082.  &quot;id&quot;: 20
  1083. }&lt;/code&gt;&lt;/pre&gt;
  1084.  
  1085.  
  1086.  
  1087. &lt;p&gt;Both commands will return the &lt;code&gt;span&lt;/code&gt; with &lt;code&gt;role=&quot;checkbox&quot;&lt;/code&gt;: &lt;/p&gt;
  1088.  
  1089.  
  1090.  
  1091. &lt;pre class=&quot;wp-block-prismatic-blocks&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;{
  1092.  &quot;type&quot;: &quot;success&quot;,
  1093.  &quot;id&quot;: 20,
  1094.  &quot;result&quot;: {
  1095.    &quot;nodes&quot;: [
  1096.      {
  1097.        &quot;type&quot;: &quot;node&quot;,
  1098.        &quot;sharedId&quot;: &quot;16d8d8ab-7404-4d4b-83e9-203fd9801f0a&quot;,
  1099.        &quot;value&quot;: {
  1100.          &quot;nodeType&quot;: 1,
  1101.          &quot;localName&quot;: &quot;span&quot;,
  1102.          &quot;namespaceURI&quot;: &quot;http://www.w3.org/1999/xhtml&quot;,
  1103.          &quot;childNodeCount&quot;: 0,
  1104.          &quot;attributes&quot;: {
  1105.            &quot;role&quot;: &quot;checkbox&quot;,
  1106.            &quot;aria-checked&quot;: &quot;false&quot;,
  1107.            &quot;tabindex&quot;: &quot;0&quot;,
  1108.            &quot;aria-labelledby&quot;: &quot;tac&quot;
  1109.          },
  1110.          &quot;shadowRoot&quot;: null
  1111.        }
  1112.      }
  1113.    ]
  1114.  }
  1115. }&lt;/code&gt;&lt;/pre&gt;
  1116.  
  1117.  
  1118.  
  1119. &lt;h4&gt;New: Support for “devicePixelRatio” parameter in the “browsingContext.setViewport” command&lt;/h4&gt;
  1120.  
  1121.  
  1122.  
  1123. &lt;p&gt;We now &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857961&quot;&gt;support the &lt;code&gt;devicePixelRatio&lt;/code&gt; parameter in the &lt;code&gt;browsingContext.setViewport&lt;/code&gt; command&lt;/a&gt;, which allows to emulate the behavior of screens with different device pixel ratio (such as high density displays). The &lt;code&gt;devicePixelRatio&lt;/code&gt; is expected to be a positive number.&lt;/p&gt;
  1124.  
  1125.  
  1126.  
  1127. &lt;h4&gt;Bug fixes&lt;/h4&gt;
  1128.  
  1129.  
  1130.  
  1131. &lt;ul&gt;
  1132. &lt;li&gt;We &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894305&quot;&gt;fixed a race condition in &lt;code&gt;browsingContext.navigate&lt;/code&gt;&lt;/a&gt; which could lead to unnecessary waiting when creating new tabs.&lt;/li&gt;
  1133. &lt;/ul&gt;
  1134.  
  1135.  
  1136.  
  1137. &lt;h3&gt;Marionette (WebDriver classic)&lt;/h3&gt;
  1138.  
  1139.  
  1140.  
  1141. &lt;h4&gt;Bug fixes&lt;/h4&gt;
  1142.  
  1143.  
  1144.  
  1145. &lt;ul&gt;
  1146. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1863266&quot;&gt;&lt;code&gt;WebDriver:ElementClear&lt;/code&gt; now works as expected&lt;/a&gt; with elements nested in a disabled &lt;code&gt;fieldset&lt;/code&gt;.&lt;/li&gt;
  1147.  
  1148.  
  1149.  
  1150. &lt;li&gt;We fixed a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888004&quot;&gt;bug with &lt;code&gt;WebDriver:GetElementText&lt;/code&gt;&lt;/a&gt; which failed to correctly capitalize text containing an underscore (&lt;code&gt;_&lt;/code&gt;).&lt;/li&gt;
  1151.  
  1152.  
  1153.  
  1154. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1817820&quot;&gt;&lt;code&gt;WebDriver:SwitchToFrame&lt;/code&gt; will no longer fail&lt;/a&gt; when called in the middle of an ongoing navigation.&lt;/li&gt;
  1155. &lt;/ul&gt;</description>
  1156. <pubDate>Tue, 11 Jun 2024 16:42:38 +0000</pubDate>
  1157. <dc:creator>Julian Descottes</dc:creator>
  1158. </item>
  1159. <item>
  1160. <title>Cameron Kaiser: macOS Sequoia</title>
  1161. <guid isPermaLink="false">tag:blogger.com,1999:blog-1015214236289077798.post-1710448525568484349</guid>
  1162. <link>http://tenfourfox.blogspot.com/2024/06/macos-sequoia.html</link>
  1163. <description>Do you like your computers to be big, fire-prone and inflexible? Then you'll love &lt;a href=&quot;https://arstechnica.com/gadgets/2024/06/apple-announces-macos-15-sequoia/&quot;&gt;macOS Sequoia&lt;/a&gt;, another missed naming opportunity from the company that should have brought you macOS Mettler, macOS Bolinas (now with &lt;a href=&quot;https://www.latimes.com/california/story/2024-06-10/dear-usps-this-marin-county-town-wants-its-post-office-back&quot;&gt;no support for mail&lt;/a&gt;), or macOS Weed. Plus, now you'll have to deal with pervasive &lt;a href=&quot;https://arstechnica.com/gadgets/2024/06/apple-integrates-chatgpt-into-siri-ios-and-mac-os/&quot;&gt;ChatGPT integration&lt;/a&gt;, meaning you won't have to watch the next &lt;i&gt;Mission: Impossible&lt;/i&gt; to find out &lt;a href=&quot;https://en.wikipedia.org/wiki/Mission:_Impossible_%E2%80%93_Dead_Reckoning_Part_One&quot;&gt;what the Entity AI will do to you&lt;/a&gt;.
  1164. &lt;p&gt;
  1165. Now that I've had my cup of snark, though, Intel Mac users beware: &lt;a href=&quot;https://discussions.apple.com/thread/255642766?answerId=255642766021&amp;amp;sortBy=best#255642766021&quot;&gt;this one almost uniformly requires a T2 chip&lt;/a&gt;, the Apple A10 derivative used as a security controller in the last generation of Intel Macs, and even at least one Mac that &lt;em&gt;does&lt;/em&gt; have one &lt;em&gt;isn't&lt;/em&gt; supported (the 2018 MacBook Air, presumably because of its lower-powered CPU-GPU, which is likely why the more powerful 2019 iMac without one &lt;em&gt;is&lt;/em&gt; supported, albeit incompletely). It would not be a stretch to conclude that this is the final macOS for Intel Macs, though Rosetta 2's integration to support x86_64 in VMs means Intel Mac software will likely stay supported on Apple silicon for awhile. But that shouldn't be particularly surprising. What I &lt;em&gt;did&lt;/em&gt; find a little more ominous is that only the 2020 MacBook Air and up is supported in their price segment, and since those Macs are about four years old now, it's possible some M1 Macs might not make the jump to macOS 16 either — whatever Apple ends up calling it.&lt;/p&gt;</description>
  1166. <pubDate>Mon, 10 Jun 2024 21:16:25 +0000</pubDate>
  1167. <author>noreply@blogger.com (ClassicHasClass)</author>
  1168. </item>
  1169. <item>
  1170. <title>The Mozilla Blog: Uncovering GenAI trends: Using local language models to explore 35 organizations</title>
  1171. <guid isPermaLink="false">https://blog.mozilla.org/?p=75140</guid>
  1172. <link>https://blog.mozilla.org/en/mozilla/ai/genai-trends/</link>
  1173. <description>&lt;p&gt;(To read the complete analysis as well as the results of each language model, visit the &lt;a href=&quot;https://blog.mozilla.ai/uncovering-genai-trends-using-local-language-models-to-explore-35-organizations/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;mozilla.ai blog here&lt;/a&gt;.)&lt;/p&gt;
  1174.  
  1175.  
  1176.  
  1177. &lt;p&gt;Over the past few months, Mozilla.ai has engaged with several organizations to learn how they are using language models in practice. We spoke with 35 organizations across various sectors, including finance, government, startups, and large enterprises. Our interviewees ranged from machine learning engineers to CTOs, capturing a diverse range of perspectives. &lt;/p&gt;
  1178.  
  1179.  
  1180.  
  1181. &lt;p&gt;To analyze these interviews, we used open-source local language models running on our laptops. The analysis confirmed the trends we had anticipated during our interviews and shed light on the &lt;a href=&quot;https://blog.mozilla.ai/uncovering-genai-trends-using-local-language-models-to-explore-35-organizations/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;differences in each model’s presentation of said trends&lt;/a&gt;.&lt;/p&gt;
  1182.  
  1183.  
  1184.  
  1185. &lt;h3&gt;&lt;strong&gt;Objective: Help shape our product vision&lt;/strong&gt;&lt;/h3&gt;
  1186.  
  1187.  
  1188.  
  1189. &lt;p&gt;Our primary aim was to identify patterns and trends that could inform our product development strategy. Despite the unique nature of each discussion, we usually focused on four critical areas:&lt;/p&gt;
  1190.  
  1191.  
  1192.  
  1193. &lt;ol&gt;
  1194. &lt;li&gt;LLM use cases being explored&lt;/li&gt;
  1195.  
  1196.  
  1197.  
  1198. &lt;li&gt;Technology, methodologies, and approaches employed&lt;/li&gt;
  1199.  
  1200.  
  1201.  
  1202. &lt;li&gt;Challenges in developing and delivering LLM solutions&lt;/li&gt;
  1203.  
  1204.  
  1205.  
  1206. &lt;li&gt;Desired capabilities and features&lt;/li&gt;
  1207. &lt;/ol&gt;
  1208.  
  1209.  
  1210.  
  1211. &lt;h3&gt;&lt;strong&gt;Data collection &amp;amp; model selection&lt;/strong&gt;&lt;/h3&gt;
  1212.  
  1213.  
  1214.  
  1215. &lt;p&gt;After each conversation, we wrote up summary notes. In total, these notes for the 35 conversations amounted to 18,481 words (approximately 24,600 &lt;a href=&quot;https://docs.mistral.ai/guides/tokenization/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;tokens&lt;/a&gt;), almost the length of a novella. To avoid confirmation bias and subjective interpretation, we decided to leverage language models for a more objective analysis of the data. By providing the models with the complete set of notes, we aimed to uncover patterns and trends without our pre-existing notions and biases.&lt;/p&gt;
  1216.  
  1217.  
  1218.  
  1219. &lt;p&gt;Given privacy concerns, we decided to keep the information local. Therefore, I selected a set of models that I could run on my MacBook Pro M3 (36GB) locally. Here’s an overview of the models and configurations used:&lt;/p&gt;
  1220.  
  1221.  
  1222.  
  1223. &lt;figure class=&quot;wp-block-table&quot;&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;strong&gt;Model&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Parameters&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Quantization&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://huggingface.co/gradientai/Llama-3-8B-Instruct-Gradient-1048k&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Llama-3-8B-Instruct-Gradient-1048k&lt;/a&gt; &lt;/td&gt;&lt;td&gt;8B&lt;/td&gt;&lt;td&gt;Q5_0&lt;/td&gt;&lt;td&gt;5.6GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://huggingface.co/microsoft/Phi-3-medium-128k-instruct&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Phi-3-medium-128k-instruct&lt;/a&gt;&lt;/td&gt;&lt;td&gt;14B&lt;/td&gt;&lt;td&gt;IQ3_M&lt;/td&gt;&lt;td&gt;6.47GB&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://huggingface.co/Qwen/Qwen1.5-7B-Chat&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Qwen1.5-7B-Chat&lt;/a&gt;&lt;/td&gt;&lt;td&gt;7B&lt;/td&gt;&lt;td&gt;1_5&lt;/td&gt;&lt;td&gt;5.53GB&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/figure&gt;
  1224.  
  1225.  
  1226.  
  1227. &lt;p&gt;There are a number of options to run LLMs locally, such as &lt;a href=&quot;https://ollama.com/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;ollama&lt;/a&gt;,&lt;a href=&quot;https://lmstudio.ai/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt; lm-studio&lt;/a&gt;, and &lt;a href=&quot;https://github.com/Mozilla-Ocho/llamafile&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;llamafile&lt;/a&gt;. I used both lm-studio and llamafile (an in-house solution by the &lt;a href=&quot;https://future.mozilla.org/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Mozilla Innovation Team&lt;/a&gt;).&lt;/p&gt;
  1228.  
  1229.  
  1230.  
  1231. &lt;h3&gt;&lt;strong&gt;Summarizing with local language models&lt;/strong&gt;&lt;/h3&gt;
  1232.  
  1233.  
  1234.  
  1235. &lt;p&gt;The prompt used to generate model outputs was: &lt;em&gt;“Summarize the following information to get the key takeaways about developing LLM solutions in 10 bullet points. Take the full information from start to finish into account. Never use company names or an individual’s name. [Full notes]”&lt;/em&gt;&lt;/p&gt;
  1236.  
  1237.  
  1238.  
  1239. &lt;p&gt;&lt;em&gt;To read the complete analysis as well as the results of each language model, visit the &lt;/em&gt;&lt;a href=&quot;https://blog.mozilla.ai/uncovering-genai-trends-using-local-language-models-to-explore-35-organizations/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;mozilla.ai blog here&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
  1240.  
  1241.  
  1242.  
  1243. &lt;h3&gt;&lt;strong&gt;Key takeaways&lt;/strong&gt;&lt;/h3&gt;
  1244.  
  1245.  
  1246.  
  1247. &lt;p&gt;I was impressed by the quality of the responses from these models, which were all capable of running locally on my laptop. They identified the majority of trends and patterns among the 35 organizations we studied. Each model also highlighted unique insights and communicated in different styles:&lt;/p&gt;
  1248.  
  1249.  
  1250.  
  1251. &lt;ul&gt;
  1252. &lt;li&gt;&lt;a href=&quot;https://huggingface.co/gradientai/Llama-3-8B-Instruct-Gradient-1048k&quot;&gt;Llama-3-8B-Instruct-Gradient-1048k&lt;/a&gt; emphasized the main LLM use-cases that were discussed and the difficulties moving from prototype to production. The style of the sentences generated can be quite long.&lt;/li&gt;
  1253.  
  1254.  
  1255.  
  1256. &lt;li&gt;&lt;a href=&quot;https://huggingface.co/microsoft/Phi-3-medium-128k-instruct&quot;&gt;Phi-3-medium-128k-instruct&lt;/a&gt; picked up on the reluctance of many organizations to finetune models. Its style feels more conversational than the other models.&lt;/li&gt;
  1257.  
  1258.  
  1259.  
  1260. &lt;li&gt;&lt;a href=&quot;https://huggingface.co/Qwen/Qwen1.5-7B-Chat&quot;&gt;Qwen1.5-7B-Chat&lt;/a&gt; highlighted the lack of technical expertise many organizations suffer from. Its style is more concise and straightforward, similar to the style of chatGPT.&lt;/li&gt;
  1261. &lt;/ul&gt;
  1262.  
  1263.  
  1264.  
  1265. &lt;h3&gt;Across all the models, three key takeaways stood out:&lt;/h3&gt;
  1266.  
  1267.  
  1268.  
  1269. &lt;ol&gt;
  1270. &lt;li&gt;&lt;strong&gt;Evaluation: &lt;/strong&gt;Many organizations highlight the challenges of evaluating LLMs, finding it time-consuming.&lt;/li&gt;
  1271.  
  1272.  
  1273.  
  1274. &lt;li&gt;&lt;strong&gt;Privacy: &lt;/strong&gt;Data privacy and security are major concerns influencing tool and platform choices.&lt;/li&gt;
  1275.  
  1276.  
  1277.  
  1278. &lt;li&gt;&lt;strong&gt;Reusability and customization: &lt;/strong&gt;Organizations value reusability and seek customizable models for specific tasks.&lt;/li&gt;
  1279. &lt;/ol&gt;
  1280.  
  1281.  
  1282.  
  1283. &lt;p&gt;This exercise showcased how well local language models can extract valuable insights from large text datasets. The discussion and feedback from our network and end-users will continue to guide our efforts at Mozilla.ai, helping us develop tools that support diverse use cases and make LLM solutions more accessible and effective for organizations of all sizes.&lt;/p&gt;
  1284. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/genai-trends/&quot;&gt;Uncovering GenAI trends: Using local language models to explore 35 organizations &lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1285. <pubDate>Mon, 10 Jun 2024 13:00:00 +0000</pubDate>
  1286. <dc:creator>Stefan French</dc:creator>
  1287. </item>
  1288. <item>
  1289. <title>Mozilla Thunderbird: Thunderbird: The Build and Release Process Explained</title>
  1290. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1765</guid>
  1291. <link>https://blog.thunderbird.net/2024/06/may-2024-community-office-hours-the-thunderbird-release-process/</link>
  1292. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/blog-banner-community-hours-FINAL-1-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  1293. &lt;p&gt;Our Community Office Hours session for May 2024 has concluded, and it was quite informative (especially for non-developers like me)! Wayne and Daniel shed light on Thunderbird’s build and release process, ran through a detailed presentation, answered questions, and treated us to live demos showing how a new Thunderbird build gets pushed and promoted to release.&lt;/p&gt;
  1294.  
  1295.  
  1296.  
  1297. &lt;p&gt;Below you’ll find a lightly edited recording of the session, and the presentation slides in PDF format. &lt;/p&gt;
  1298.  
  1299.  
  1300.  
  1301. &lt;p&gt;We’ll be announcing the topic of our June Office Hours session soon, so keep an eye on the Thunderbird blog. &lt;/p&gt;
  1302.  
  1303.  
  1304.  
  1305. &lt;figure class=&quot;wp-block-embed alignwide is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  1306.  
  1307. &lt;/div&gt;&lt;/figure&gt;
  1308.  
  1309.  
  1310.  
  1311. &lt;div class=&quot;wp-block-file&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/06/Build-Release-How-Its-Done.pdf&quot; id=&quot;wp-block-file--media-4acc63d7-3f19-480a-a3e5-694290a6c4b9&quot;&gt;PDF Presentation | Build &amp;amp; Release: How It’s Done&lt;/a&gt;&lt;a class=&quot;wp-block-file__button wp-element-button&quot; href=&quot;https://blog.thunderbird.net/files/2024/06/Build-Release-How-Its-Done.pdf&quot;&gt;Download&lt;/a&gt;&lt;/div&gt;
  1312.  
  1313.  
  1314.  
  1315. &lt;h3&gt;Links and Further Reading&lt;/h3&gt;
  1316.  
  1317.  
  1318.  
  1319. &lt;ul&gt;
  1320. &lt;li&gt;Download Channels: &lt;a href=&quot;https://www.thunderbird.net/download/esr/&quot;&gt;ESR&lt;/a&gt;, &lt;a href=&quot;https://www.thunderbird.net/download/beta/&quot;&gt;Beta&lt;/a&gt;, &lt;a href=&quot;https://www.thunderbird.net/download/daily/&quot;&gt;Daily&lt;/a&gt;, &lt;a href=&quot;https://www.thunderbird.net/download/&quot;&gt;default release&lt;/a&gt;&lt;/li&gt;
  1321.  
  1322.  
  1323.  
  1324. &lt;li&gt;&lt;a href=&quot;https://calendar.google.com/calendar/ical/c_f7b7f2cea6f65593ef05afaf2abfcfb48f87e25794468cd4a19d16495d17b6d1%40group.calendar.google.com/public/basic.ics&quot;&gt;Thunderbird’s release and events calendar&lt;/a&gt; (closely follows the &lt;a href=&quot;https://whattrainisitnow.com/calendar/&quot;&gt;Firefox release schedule&lt;/a&gt;)&lt;/li&gt;
  1325.  
  1326.  
  1327.  
  1328. &lt;li&gt;&lt;a href=&quot;https://www.thunderbird.net/en-US/thunderbird/releases/&quot;&gt;Thunderbird Release Notes&lt;/a&gt;&lt;/li&gt;
  1329.  
  1330.  
  1331.  
  1332. &lt;li&gt;&lt;a href=&quot;https://jfx2006.github.io/thunderbird-ci-docs/&quot;&gt;Thunderbird CI Docs&lt;/a&gt;&lt;/li&gt;
  1333.  
  1334.  
  1335.  
  1336. &lt;li&gt;&lt;a href=&quot;https://treeherder.mozilla.org/jobs?repo=comm-central&quot;&gt;Treeherder&lt;/a&gt;&lt;/li&gt;
  1337.  
  1338.  
  1339.  
  1340. &lt;li&gt;&lt;a href=&quot;https://stats.thunderbird.net/&quot;&gt;Thunderbird statistics&lt;/a&gt;&lt;/li&gt;
  1341.  
  1342.  
  1343.  
  1344. &lt;li&gt;&lt;a href=&quot;https://crash-stats.mozilla.org/home/product/Thunderbird&quot;&gt;Thunderbird crash statistics&lt;/a&gt;&lt;/li&gt;
  1345. &lt;/ul&gt;
  1346.  
  1347.  
  1348.  
  1349. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  1350.  
  1351.  
  1352.  
  1353. &lt;h3&gt;ORIGINAL ANNOUNCEMENT&lt;/h3&gt;
  1354.  
  1355.  
  1356.  
  1357. &lt;p&gt;Have you ever wondered what the release process of Thunderbird is like? Wanted to know if a particular bug would be fixed in the next release? Or how long release support lasts? Or just how many point releases are there?&lt;/p&gt;
  1358.  
  1359.  
  1360.  
  1361. &lt;p&gt;In the May Office Hours, we’ll demystify the current Thunderbird release process as we get closer to the next Extended Security Release on July 10, 2024. &lt;/p&gt;
  1362.  
  1363.  
  1364.  
  1365. &lt;h3&gt;May Office Hours: The Thunderbird Release Process&lt;/h3&gt;
  1366.  
  1367.  
  1368.  
  1369. &lt;p&gt;One of our guests you may know already: Wayne Mery, our release and community manager. Daniel Darnell, a key release engineer, will also join us. They’ll answer questions about what roles they play, how we stage releases, and when they know if releases are ready. Additionally, they’ll tell us about the future of Thunderbird releases, including working with add-on developers and exploring a monthly release cadence.&lt;/p&gt;
  1370.  
  1371.  
  1372.  
  1373. &lt;p&gt; Join us as our guests answer these questions and more in the next edition of our Community Office Hours! You can also submit your own questions about this topic beforehand and we’ll be sure to answer them: &lt;a href=&quot;mailto:officehours@thunderbird.net&quot;&gt;officehours@thunderbird.net&lt;/a&gt;&lt;/p&gt;
  1374.  
  1375.  
  1376.  
  1377. &lt;h3&gt;Catch Up On Last Month’s Thunderbird Community Office Hours&lt;/h3&gt;
  1378.  
  1379.  
  1380.  
  1381. &lt;p&gt;While you’re thinking of questions to ask, watch last month’s office hours where we chatted with three key developers bringing &lt;a href=&quot;https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/&quot;&gt;Rust and native Microsoft Exchange&lt;/a&gt; support into Thunderbird. You can find the video on our &lt;a href=&quot;https://tilvids.com/w/1np8cvwqBWtKNwuARtenHn&quot;&gt;TILvids page&lt;/a&gt;.&lt;/p&gt;
  1382.  
  1383.  
  1384.  
  1385. &lt;h3&gt;Join The Video Chat&lt;/h3&gt;
  1386.  
  1387.  
  1388.  
  1389. &lt;p&gt;We’ll be back in our Big Blue Button room, provided by KDE and the Linux Application Summit. We’re grateful for their support and to have an open source web conferencing solution for our community office hours.&lt;/p&gt;
  1390.  
  1391.  
  1392.  
  1393. &lt;p&gt;&lt;strong&gt;Date and Time: &lt;/strong&gt;Friday, May 31 at 17:30 UTC&lt;/p&gt;
  1394.  
  1395.  
  1396.  
  1397. &lt;p&gt;&lt;strong&gt;Direct URL to Join:&lt;/strong&gt; &lt;a href=&quot;https://meet.thunderbird.net/b/hea-uex-usn-rb1&quot;&gt;https://meet.thunderbird.net/b/hea-uex-usn-rb1&lt;/a&gt;&lt;/p&gt;
  1398.  
  1399.  
  1400.  
  1401. &lt;p&gt;&lt;strong&gt;Access Code: &lt;/strong&gt;964573&lt;/p&gt;
  1402. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/06/may-2024-community-office-hours-the-thunderbird-release-process/&quot;&gt;Thunderbird: The Build and Release Process Explained&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1403. <pubDate>Mon, 10 Jun 2024 10:00:00 +0000</pubDate>
  1404. <dc:creator>Jason Evangelho and Monica Ayhens-Madon</dc:creator>
  1405. </item>
  1406. <item>
  1407. <title>Don Marti: Block AI training on a web site</title>
  1408. <guid isPermaLink="true">https://blog.zgp.org/block-ai-training-on-a-web-site/</guid>
  1409. <link>https://blog.zgp.org/block-ai-training-on-a-web-site/</link>
  1410. <description>&lt;p&gt;&lt;em&gt;(Update 14 Jun 2024: Add darkvisitors.com API and GPC.)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;I’m going to start with a warning. You can’t completely block “AI” training from a web site. &lt;a href=&quot;https://blog.zgp.org/generative-ai-antimoats/&quot;&gt;Underground AI&lt;/a&gt; will always get through, and it might turn out that the future of AI-based infringement is bot accounts so that the sites that profit from it can just be &lt;q&gt;shocked&lt;/q&gt; at what one of &lt;q&gt;their users&lt;/q&gt; was doing—kind of like how big companies &lt;a href=&quot;https://blog.zgp.org/ad-supported-piracy/&quot;&gt;monetize copyright infringement&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;But there are some ways to tell the halfway crooks of the AI business to go away. Will update if I find others.&lt;/p&gt; &lt;h3&gt;robots.txt&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://darkvisitors.com/&quot;&gt;Dark Visitors - A List of Known AI Agents on the Internet&lt;/a&gt; is a good source of an up-to-date set of lines to add to your &lt;a href=&quot;https://www.robotstxt.org/orig.html&quot;&gt;robots.txt&lt;/a&gt; file.&lt;/p&gt; &lt;p&gt;This site uses the &lt;a href=&quot;https://darkvisitors.com/docs/robots-txt&quot;&gt;API&lt;/a&gt; to catch up on the latest. So if I fall behind on reading the technology news, the Makefile has me covered.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;# update AI crawlers blocking list from darkvisitors.com tmp/robots.txt : curl -X POST &quot;https://api.darkvisitors.com/robots-txts&quot; \ -H &quot;Authorization: Bearer $(shell pass darkvisitors-token)&quot; \ -H &quot;Content-Type: application/json&quot; \ -d '{&quot;agent_types&quot;: [&quot;AI Data Scraper&quot;, &quot;AI Assistant&quot;, &quot;Undocumented AI Agent&quot;, &quot;AI Search Crawler&quot;], &quot;disallow&quot;: &quot;/&quot;}' \ &amp;gt; $@ # The real robots.txt is built from the local lines # in the conf directory, with the # darkvisitors.com lines added public/robots.txt : conf/robots.txt tmp/robots.txt cat conf/robots.txt tmp/robots.txt &amp;gt; $@&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;One of my cleanup scripts gets rid of the &lt;code&gt;tmp/robots.txt&lt;/code&gt; fetched from Dark Visitors if it gets stale, and I use &lt;a href=&quot;https://www.passwordstore.org/&quot;&gt;Pass&lt;/a&gt; to store the token.&lt;/p&gt; &lt;h3&gt;X-Robots-Tag HTTP header&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.deviantart.com/team/journal/UPDATE-All-Deviations-Are-Opted-Out-of-AI-Datasets-934500371&quot;&gt;DeviantArt&lt;/a&gt; covers how to set the &lt;code&gt;X-Robots-Tag&lt;/code&gt; header (which also has &lt;a href=&quot;https://www.searchenginejournal.com/everything-you-need-to-know-about-the-x-robots-tag/314561/&quot;&gt;other uses to help control how search engines crawl your site&lt;/a&gt;) to express an opt-out.&lt;/p&gt; &lt;p&gt;On Apache httpd (I know, I’m old school) it’s something like this:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;Header Set X-Robots-Tag &quot;noai&quot;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;You can check it under “network” in browser developer tools. It should show up in response headers.&lt;/p&gt; &lt;h3&gt;noai meta tag&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://help.raptive.com/hc/en-us/articles/13764527993755-NoAI-Meta-Tag-FAQs&quot;&gt;Raptive Support covers the noai meta tag&lt;/a&gt;. Pretty easy, just put this in the HTML head with any other &lt;code&gt;meta&lt;/code&gt; and &lt;code&gt;link&lt;/code&gt; elements.&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&amp;lt;meta name=&quot;robots&quot; content=&quot;noai, noimageai&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;That support FAQ includes a good point that applies to all of these—the opt out is stronger if it’s backed up with the site Terms of Service or User Agreement. Big companies have invested hella lawyer hours in making these things more enforceable, and if they wanted to override ToS they would be acting against their other interests in keeping their sites in company town mode.&lt;/p&gt; &lt;h3&gt;new: GPC&lt;/h3&gt; &lt;p&gt;This is the first site to include the new &lt;a href=&quot;https://blog.zgp.org/x-robots-tag-for-gpc/&quot;&gt;meta tag and X-Robots-Tag header for Global Privacy Control&lt;/a&gt;. Basically you have legally enforceable rights in your personal information, blogs have personal information, but &lt;a href=&quot;https://globalprivacycontrol.org/&quot;&gt;regular GPC&lt;/a&gt; only works from your browser (client) to company on the server. This goes the other way, and sends a legally enforceable* &lt;span class=&quot;aside&quot;&gt;*yes, I know, this has not yet been tested in court, but give it a minute, we’re just getting started here&lt;/span&gt; privacy signal from a personal blog on the server to an AI scraper on the client side.&lt;/p&gt; &lt;p&gt;So the new header on here is&lt;/p&gt; &lt;pre&gt;&lt;code&gt;X-Robots-Tag: noai, noimageai, GPC&lt;/code&gt;&lt;/pre&gt; &lt;p&gt;So we’re up to four, somebody send me number five?&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/google-chrome-checklist/&quot;&gt;Google Chrome ad features checklist&lt;/a&gt; covers the client side of this— how to protect your personal info, and other people’s, from being fed to AI (among other abuses)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/custom-google-search/&quot;&gt;remove AI from Google Search on Firefox&lt;/a&gt;: how to remove the “AI”-generated material from Google search results&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wired.com/story/how-to-stop-your-data-from-being-used-to-train-ai/&quot;&gt;How to Stop Your Data From Being Used to Train AI | WIRED&lt;/a&gt; covers much other software including Adobe, Slack, and others. &lt;q&gt;The list below only includes companies currently with an opt-out process. For example, Microsoft’s Copilot does not offer users with personal accounts the option to have their prompts not used to improve the software.&lt;/q&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://aramzs.xyz/essays/the-internet-is-a-series-of-webs/&quot;&gt;The Internet is a Series of Webs&lt;/a&gt; &lt;q&gt;The future of the internet seems up in the air. Consumed by rotting behemoths. What we have now is failing, but it is also part of our every-day life, our politics, our society, our communities and our friendships. All of those are at risk, in part because the ways we communicate are under attack.&lt;/q&gt; (So if &lt;a href=&quot;https://techcrunch.com/2022/12/22/fbi-ad-blocker/&quot;&gt;Google search ads are scammy enough to get an FBI warning&lt;/a&gt;, &lt;a href=&quot;https://www.techpolicy.press/the-one-simple-trick-to-measuring-abuse-in-techs-440-billion-ads-business/&quot;&gt;Meta is a shitshow&lt;/a&gt;, and &lt;a href=&quot;https://justpublishingadvice.com/fake-pirated-and-counterfeit-books-a-big-problem-on-amazon/&quot;&gt;Amazon is full of fake and stolen stuff&lt;/a&gt;, what do you do? &lt;a href=&quot;https://blog.zgp.org/business-recommendations/&quot;&gt;Make a list of legit companies on your blog and hope others do the same?&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.bloodinthemachine.com/p/for-tech-ceos-the-dystopia-is-the&quot;&gt;For tech CEOs, the dystopia is the point&lt;/a&gt; &lt;q&gt;The CEOs obviously don’t much care what some flyby cultural critics think of their branding aspirations, but beyond even that, we have to bear in mind that these dystopias are actively useful to them.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/apple-removes-nonconsensual-ai-nude-apps-following-404-media-investigation/&quot;&gt;Apple Removes Nonconsensual AI Nude Apps Following 404 Media Investigation&lt;/a&gt; (think of how bad the Internet would be &lt;em&gt;without&lt;/em&gt; independent sites covering the big companies…then go subscribe to 404 Media.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.vox.com/culture/24128560/amazon-trash-ebooks-mikkelsen-twins-ai-publishing-academy-scam&quot;&gt;Amazon is filled with garbage ebooks. Here’s how they get made.&lt;/a&gt; &lt;q&gt;The biographer in question was just one in a vast, hidden ecosystem centered on the production and distribution of very cheap, low-quality ebooks about increasingly esoteric subjects. Many of them gleefully share misinformation or repackage basic facts from WikiHow behind a title that’s been search-engine-optimized to hell and back again. Some of them even steal the names of well-established existing authors and masquerade as new releases from those writers.&lt;/q&gt; (I’m going to the real bookstore.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://arstechnica.com/?p=2014866&quot;&gt;“Pink slime” local news outlets erupt all over US as election nears&lt;/a&gt; &lt;q&gt;Kathleen Carley, a computer science professor at Carnegie Mellon University, said her research suggests that following the 2022 midterms “a lot more money” is being poured into pink slime sites, including advertising on Meta.&lt;/q&gt;&lt;/p&gt;</description>
  1411. <pubDate>Sun, 09 Jun 2024 00:00:00 +0000</pubDate>
  1412. </item>
  1413. <item>
  1414. <title>Don Marti: business recommendations</title>
  1415. <guid isPermaLink="true">https://blog.zgp.org/business-recommendations/</guid>
  1416. <link>https://blog.zgp.org/business-recommendations/</link>
  1417. <description>&lt;p&gt;Since there’s a search quality crisis on, a lot of the companies you might find on social media are scams, and a lot of the stuff sold on big retail sites is fake, here are some real businesses I can recommend in several categories. Will fill in some more.&lt;/p&gt; &lt;p&gt;I personally know about all of these and would be happy to answer questions.&lt;/p&gt; &lt;h3&gt;art, crafts, gifts&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://modernmousegifts.com/&quot;&gt;Modern Mouse&lt;/a&gt; (A place for local artists and artisans to sell their work.)&lt;/p&gt; &lt;h3&gt;books&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.booksinc.net/&quot;&gt;Books Inc&lt;/a&gt; (Several Bay Area locations including SFO. If they don’t have it they can order it.)&lt;/p&gt; &lt;h3&gt;burritos&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://downtownalameda.com/bizdirectory/island-taqueria/&quot;&gt;Island Taqueria&lt;/a&gt; 1313 Park St., Alameda. (Bay Area’s best burritos. El Gran Taco in San Francisco would have been a contender but they’re gone now.)&lt;/p&gt; &lt;h3&gt;car repair&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.fredswrenchouse.net/&quot;&gt;Fred’s Wrenchouse&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;delicatessen&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.zingermansdeli.com/&quot;&gt;Zingerman’s Deli&lt;/a&gt; (mail order available)&lt;/p&gt; &lt;h3&gt;earbuds&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://jvcshop.us/products/hafx7&quot;&gt;JVC Gumy HAFX7&lt;/a&gt; These really sound good and come with a set of silicone ear pieces in different sizes, so in real-world listening situations they sound better than more expensive options that don’t fit as well. (In my experience most drama and waste from electronic devices are caused by apps, firmware, Terms of Service, radios, and batteries. These have none of those.)&lt;/p&gt; &lt;h3&gt;electrician&lt;/h3&gt; &lt;p&gt;sotelectric dot com &lt;span class=&quot;aside&quot;&gt;memo to self: check and fix link&lt;/span&gt;&lt;/p&gt; &lt;h3&gt;hardware&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://stores.truevalue.com/ca/alameda/8517/&quot;&gt;Encinal True Value Hardware&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.paganos-hardware.com/&quot;&gt;Paganos Hardware&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Internet service&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.monkeybrains.net/&quot;&gt;monkeybrains.net&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;pharmacy&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.mygnp.com/pharmacies/versailles-pharmacy-alameda-ca-94501/&quot;&gt;Versailles Pharmacy&lt;/a&gt; 2801 Encinal Ave., Alameda.&lt;/p&gt; &lt;h3&gt;plants&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.anniesannuals.com/&quot;&gt;Annie’s Annuals and Perennials&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;plumbing&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.gladiatorplumber.com/&quot;&gt;Gladiator Plumber&lt;/a&gt; 1752 Timothy Drive, San Leandro.&lt;/p&gt; &lt;h3&gt;roofing&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.planchonroofing.com/&quot;&gt;Planchon Roofing &amp;amp; Siding Co&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;sidewall shingling&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.nicasidewallshingling.com/&quot;&gt;Nica Sidewall Shingling&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;stereo repair&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;http://www.champlifier.com/index.html&quot;&gt;Champlifier&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://arstechnica.com/?p=2029806&quot;&gt;Microsoft is reworking Recall after researchers point out its security problems&lt;/a&gt; (Maybe this is downstream of extreme economic inequality? When so many decisions are made by an out-of-touch management class that shares few of the problems of regular people, new product news turns into an endless stream of weird shit that makes regular people’s problems worse.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91138222/new-york-ban-addictive-social-media-suggested-posts-feeds-kids&quot;&gt;New York to ban ‘addictive’ suggested posts on social media feeds for kids&lt;/a&gt; &lt;q&gt;In practice, the bill would stop platforms from showing suggested posts to people under the age of 18, content the legislation describes as &lt;q&gt;addictive.&lt;/q&gt; Instead, children would get posts only from accounts they follow. A minor could still get the suggested posts if he or she has what the bill defines as &lt;q&gt;verifiable parental consent.&lt;/q&gt;&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91136311/were-unprepared-for-the-threat-genai-on-instagram-facebook-and-whatsapp-poses-to-kids&quot;&gt;We’re unprepared for the threat GenAI on Instagram, Facebook, and Whatsapp poses to kids&lt;/a&gt; &lt;q&gt;Waves of Child Sexual Abuse Material (CSAM) are inundating social media platforms as bad actors target these sites for their accessibility and reach.&lt;/q&gt; (The other issue is labor organizing among social site moderators. The people who run social platforms seem to really think they can AI their way out of dealing with the moderators’ union.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://evanp.me/2024/06/03/i-turned-in-my-manuscript/&quot;&gt;I turned in my manuscript!&lt;/a&gt; (Looks like Evan’s ActivityPub book is coming soon. I put in a purchase request at the library already.)&lt;/p&gt;</description>
  1418. <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
  1419. </item>
  1420. <item>
  1421. <title>The Mozilla Blog: Firefox tips and tricks for gamers</title>
  1422. <guid isPermaLink="false">https://blog.mozilla.org/?p=75107</guid>
  1423. <link>https://blog.mozilla.org/en/products/firefox/firefox-tips/gaming-browser/</link>
  1424. <description>&lt;figure class=&quot;wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio&quot;&gt;&lt;div class=&quot;wp-block-embed__wrapper&quot;&gt;
  1425.  
  1426. &lt;/div&gt;&lt;/figure&gt;
  1427.  
  1428.  
  1429.  
  1430. &lt;p&gt;Once my work day is over and my baby is asleep, there’s nothing I love more than settling in with my weighted blanket, grabbing some pillows, and playing &lt;a href=&quot;https://blog.mozilla.org/en/tag/video-games/&quot;&gt;video games&lt;/a&gt;. I don’t get to play video games as much as I’d like to anymore, so I need every tool at my disposal working for me to make sure I can maximize my time. I reached out to my fellow gamers here at Mozilla, and here’s how we use Firefox to help us game.&lt;/p&gt;
  1431.  
  1432.  
  1433.  
  1434. &lt;h3&gt;&lt;a href=&quot;https://www.fakespot.com/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Fakespot &lt;/a&gt;&lt;/h3&gt;
  1435.  
  1436.  
  1437.  
  1438. &lt;p&gt;I have a deep love of Animal Crossing that extends to buying physical Amiibo Cards that allow me to invite villagers to my island for coffee in-game. Cards from the first sets are really hard to find locally, so I &lt;a href=&quot;https://blog.mozilla.org/en/products/how-to-use-fakespot/&quot;&gt;use Fakespot&lt;/a&gt; to examine reviews on Amazon, Walmart, and Best Buy and give me a seller rating so that I can buy my cards with confidence.&lt;/p&gt;
  1439.  
  1440.  
  1441.  
  1442. &lt;p&gt;I always use Fakespot when researching every game or accessory to ensure what I am buying has reliable reviews and comes from reputable sellers. Nothing can ruin the gaming experience more than if a product is used, damaged, repackaged or counterfeit. &lt;/p&gt;
  1443.  
  1444.  
  1445.  
  1446. &lt;h3&gt;&lt;a href=&quot;https://www.xbox.com/en-US/cloud-gaming&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Cloud gaming&lt;/a&gt; &lt;/h3&gt;
  1447.  
  1448.  
  1449.  
  1450. &lt;p&gt;One of my coworkers uses Firefox for Xbox Cloud Gaming, and has reported that Firefox works pretty great for this. You can play on the console, save your progress and continue your game on Firefox from anywhere.&lt;/p&gt;
  1451.  
  1452.  
  1453.  
  1454. &lt;h3&gt;&lt;a href=&quot;https://support.mozilla.org/en-US/kb/about-picture-picture-firefox&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Picture-in-Picture&lt;/a&gt;&lt;/h3&gt;
  1455.  
  1456.  
  1457.  
  1458. &lt;p&gt;I don’t have as much free time to game anymore, so when I’m looking for walkthroughs for how to find all of the Korok seeds, I find myself often using Picture in Picture. It allows me to keep a walkthrough video playing while I’m looking up other locations and maps at the same time in The Legend of Zelda: Breath of the Wild. The perfect companion for the completionist gamers out there.&lt;/p&gt;
  1459.  
  1460.  
  1461.  
  1462. &lt;h3&gt;&lt;a href=&quot;https://addons.mozilla.org/blog/level-up-your-steam-experience-with-a-browser-extension/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Steam add-ons&lt;/a&gt;&lt;/h3&gt;
  1463.  
  1464.  
  1465.  
  1466. &lt;p&gt;I love that Firefox has such an extensive library of add-ons to customize Firefox for what you need. Another coworker mentioned using some great extensions with the gaming platform Steam.&lt;br /&gt;&lt;/p&gt;
  1467.  
  1468.  
  1469.  
  1470. &lt;h3&gt;Sync&lt;/h3&gt;
  1471.  
  1472.  
  1473.  
  1474. &lt;p&gt;During the day I use my laptop, but during the evening I almost exclusively use my phone. Firefox’s &lt;a href=&quot;https://support.mozilla.org/en-US/kb/sync-bookmarks-tabs-history-and-passwords-android&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;mobile&lt;/a&gt; &lt;a href=&quot;https://support.mozilla.org/en-US/kb/sync-logins-firefox-ios&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;sync&lt;/a&gt; allows me to find guides and tips during the day. Later, when I’m deeply nestled in my blanket cocoon, I can sync the tabs I want from my laptop to my phone, and I don’t have to get up from my game to find that resource I was looking for.&lt;/p&gt;
  1475.  
  1476.  
  1477.  
  1478. &lt;h3&gt;Dark mode&lt;/h3&gt;
  1479.  
  1480.  
  1481.  
  1482. &lt;p&gt;While I’m working, I’m one of the few people I know who work in tech that actually prefers light mode to do work. However, at night, I am all about &lt;a href=&quot;https://support.mozilla.org/en-US/kb/using-dark-theme-firefox-android&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;dark&lt;/a&gt; &lt;a href=&quot;https://support.mozilla.org/en-US/kb/using-dark-theme-firefox-ios&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;mode&lt;/a&gt; on my phone. Nothing ruins your comfy gaming experience more than being temporarily blinded by your phone in the middle of the night. In Firefox on desktop and mobile it’s super easy to to switch modes by going to Settings &amp;gt; General &amp;gt; Language and Appearance. &lt;/p&gt;
  1483.  
  1484.  
  1485.  
  1486. &lt;p&gt;&lt;em&gt;There are endless ways to make Firefox your own, whether you’re a gamer, a &lt;a href=&quot;https://blog.mozilla.org/en/products/firefox/firefox-tips/creatives/&quot;&gt;creative&lt;/a&gt;, a shopper or however you choose to navigate the internet. We want to know how you customize Firefox. Let us know and tag us on &lt;a href=&quot;https://x.com/firefox/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Twitter&lt;/a&gt; or &lt;a href=&quot;https://www.instagram.com/firefox/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt; at @Firefox.&lt;/em&gt;&lt;/p&gt;
  1487.  
  1488.  
  1489.  
  1490. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  1491.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  1492.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  1493.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  1494.     &lt;h4&gt;Get Firefox&lt;/h4&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  1495. &lt;/a&gt;
  1496. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/products/firefox/firefox-tips/gaming-browser/&quot;&gt;Firefox tips and tricks for gamers&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1497. <pubDate>Thu, 06 Jun 2024 18:54:16 +0000</pubDate>
  1498. <dc:creator>Elise Blanchard</dc:creator>
  1499. </item>
  1500. <item>
  1501. <title>Mozilla Thunderbird: Our First Thunderbird Contributor Highlight!</title>
  1502. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1791</guid>
  1503. <link>https://blog.thunderbird.net/2024/06/contributor-highlight-arthur/</link>
  1504. <description>&lt;p&gt;&lt;img alt=&quot;A stylized graphic with the Thunderbird logo and the words 'Contributor Highlight' in the upper right corner, with a large capital A and the name 'Arthur' centered.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/06/contributor-highlight-B-arthur-768x431.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  1505. &lt;p&gt;Thunderbird wouldn’t be here today without its incredible and dedicated contributors. The people developing Thunderbird and all of its add-ons, testing new releases, and supporting fellow users, for example, are the wind beneath our wings. It’s time to give them the spotlight in our new Contributor Highlight series.&lt;/p&gt;
  1506.  
  1507.  
  1508.  
  1509. &lt;p&gt;We kick things off with Arthur, who contributes to Thunderbird by triaging and filing bug reports at Bugzilla, as well as assisting others. &lt;/p&gt;
  1510.  
  1511.  
  1512.  
  1513. &lt;h3&gt;Arthur, Chicago USA&lt;/h3&gt;
  1514.  
  1515.  
  1516.  
  1517. &lt;p&gt;&lt;em&gt;Why do you like using Thunderbird?&lt;/em&gt;&lt;/p&gt;
  1518.  
  1519.  
  1520.  
  1521. &lt;p&gt;Thunderbird helps me organize my life and I could not function in this world without its Calendar feature. It syncs well with things I do on my Android device and I can even run a portable version of it on my USB drive when I don’t have physical access to my home or office PC. Try doing that with that “other” email client.&lt;/p&gt;
  1522.  
  1523.  
  1524.  
  1525. &lt;p&gt;&lt;em&gt;What do you do in the Thunderbird community and why do you enjoy it? What motivates you to contribute?&lt;/em&gt;&lt;/p&gt;
  1526.  
  1527.  
  1528.  
  1529. &lt;p&gt;Being a user myself, I can help other users because I know where they’re coming from. Also, having a forum like Bugzilla allows regular users to bring bugs to the attention of the Devs and for me to interface with those users to see if I can reproduce bugs or help them resolve issues. Having a direct line to Mozilla is an amazing resource. If you don’t have skin in the game, you can’t complain about the direction in which a product goes.&lt;/p&gt;
  1530.  
  1531.  
  1532.  
  1533. &lt;p&gt;&lt;em&gt;How do you relate your professional background and volunteerism to your involvement in Thunderbird?&lt;/em&gt;&lt;/p&gt;
  1534.  
  1535.  
  1536.  
  1537. &lt;p&gt;As an IT veteran of 33+ years, I am very comfortable in user facing support and working with app vendors to resolve app problems but volunteering takes on many forms and is good for personal growth. Some choose to volunteer at their local Food Panty or Homeless shelter. I’ve found my comfort zone in leveraging my decades of IT experience to make something I know millions of users use and help make it better.&lt;/p&gt;
  1538.  
  1539.  
  1540.  
  1541. &lt;h3&gt;Share Your Contributor Highlight (or Get Involved!)&lt;/h3&gt;
  1542.  
  1543.  
  1544.  
  1545. &lt;p&gt;A big thanks to Arthur and all our Thunderbird contributors who have kept us alive and are helping us thrive! We’ll be back soon with more contributor highlights to spotlight more of our community.&lt;/p&gt;
  1546.  
  1547.  
  1548.  
  1549. &lt;p&gt;If you’re a contributor who would like to share your story, get in touch with us at &lt;a href=&quot;mailto:community@thunderbird.net&quot;&gt;community@thunderbird.net&lt;/a&gt;. If you’re reading this and want to know more about getting involved with Thunderbird, check out &lt;a href=&quot;https://www.thunderbird.net/en-US/participate/&quot;&gt;our new and improved guide&lt;/a&gt; to learn about all the ways to contribute your skills to Thunderbird.&lt;/p&gt;
  1550. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/06/contributor-highlight-arthur/&quot;&gt;Our First Thunderbird Contributor Highlight!&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1551. <pubDate>Thu, 06 Jun 2024 12:00:00 +0000</pubDate>
  1552. <dc:creator>Monica Ayhens-Madon</dc:creator>
  1553. </item>
  1554. <item>
  1555. <title>Don Marti: some good recent links</title>
  1556. <guid isPermaLink="true">https://blog.zgp.org/mlp-2024-06-06/</guid>
  1557. <link>https://blog.zgp.org/mlp-2024-06-06/</link>
  1558. <description>&lt;p&gt;Just in case you have a script for finding interesting links, here are some links from mine…&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.tbray.org/ongoing/When/202x/2024/06/01/Parable-of-the-Sofa&quot;&gt;Parable of the Sofa&lt;/a&gt; &lt;q&gt;It seems blindingly obvious that an economy with a higher proportion of lifestyle businesses is going to be more resilient, more humane, and immensely more pleasant than the one that the Leaders Of Industry are trying to build. How would we get there from here?&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://spectrum.ieee.org/tide-predictions&quot;&gt;Lord Kelvin and His Analog Computer&lt;/a&gt; &lt;q&gt;On Thomson’s tide-predicting machine, each of 10 components was associated with a specific tidal constituent and had its own gearing to set the amplitude. The components were geared together so that their periods were proportional to the periods of the tidal constituents. A single crank turned all of the gears simultaneously, having the effect of summing each of the cosine curves.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://cleantechnica.com/2024/06/02/solar-passes-100-of-power-demand-in-california/&quot;&gt;Solar Passes 100% of Power Demand in California! [UPDATED]&lt;/a&gt; (electricity prices going negative regularly is going to be a big opportunity)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91135674/what-is-the-cara-app&quot;&gt;What is the Cara app, and why are artists deleting Instagram for it?&lt;/a&gt; (nifty image sharing site with built-in poisoning for ML training)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.schneier.com/blog/archives/2024/06/online-privacy-and-overfishing.html&quot;&gt;Online Privacy and Overfishing&lt;/a&gt; &lt;q&gt;What seems normal to us in the security community is whatever was commonplace at the beginning of our careers.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://theintercept.com/2024/06/04/facebook-ads-algorithm-for-profit-colleges/&quot;&gt;One Facebook Ad Promotes a For-Profit College; Another a State School. Which Ad Do Black Users See?&lt;/a&gt; (algorithmic discrimination is already a hard problem to track down—and so-called &lt;q&gt;privacy-enhancing&lt;/q&gt; ad personalization systems are just making it harder.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://nathangoldwag.wordpress.com/2024/05/31/the-moral-economy-of-the-shire/&quot;&gt;The Moral Economy of the Shire&lt;/a&gt; &lt;q&gt;From everything we’re told, the Shire is a very agriculturally productive region, which helps explain the lack of debt-peonage or other forms of unfree labor. It also explains the relative “looseness” of the system we’re looking at here; the gap between the lower gentry and upper yeomanry isn’t very large, and most families are able to support themselves with only minimal assistance.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://jvns.ca/blog/2024/04/25/new-zine--how-git-works-/&quot;&gt;New zine: How Git Works!&lt;/a&gt; (memo to self: order this)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/amazon-sold-fake-copies-of-hotly-anticipated-ufo-book/&quot;&gt;Amazon Sold Fake Copies of Hotly Anticipated UFO Book&lt;/a&gt; (more news from the Big Tech #pivotToCrime. When Microsoft needed support in its antitrust courtroom drama, the MS-Windows OEMs and ISVs were right there. Amazon, Meta, and Google need support now—but they’re telling the content business to go eat a turd.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://futurism.com/the-byte/video-china-rifle-robot-dog&quot;&gt;Video Shows China’s Rifle-Equipped Robot Dog Opening Fire on Targets&lt;/a&gt; (If you thought &lt;q&gt;wow, AI means we don’t have to hire as many content moderators!&lt;/q&gt; was big news, get ready for &lt;q&gt;wow, AI means our country’s army will be able to get by without conscription!&lt;/q&gt; stories)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.lesswrong.com/posts/s2JqqidLxEE34fD7D/origins-of-the-lab-mouse&quot;&gt;Origins of the Lab Mouse&lt;/a&gt; &lt;q&gt;The early supply of mice for research depended on a late-19th century community of hobbyists—fanciers—who collected, bred, and sold unusual mice varieties. These “fancy” varieties were then standardized in the 1920s…&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://joanwestenberg.com/blog/wtf-quora-how-a-platform-eats-itself&quot;&gt;WTf Quora: how a platform eats itself&lt;/a&gt; &lt;q&gt;As Quora pursued AI-driven enhancements, things got weird.&lt;/q&gt; (At the very beginning of Quora, they tried populating it with bot-written questions. Then they cut back, it went through a human user phase, now back to crap.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://housefresh.com/how-google-decimated-housefresh/&quot;&gt;HouseFresh has virtually disappeared from Google Search results. Now what?&lt;/a&gt; (hard to swallow pills for Google management: employee hoarding and union contracts cost money, but are cheaper than trying to run a company in a layoffs-scheming-quality-revenue-layoffs doom spiral)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.lucidprivacy.io/the-tigers-at-the-gate/&quot;&gt;The Tigers at the Gate: Moving Privacy Forward Through Proactive Transparency&lt;/a&gt; GPC is easy to set up and listen for because it is a simple HTTP header. Perhaps too simple as it only conveys whether the choice mechanism is turned on or off (GPC=1 or GPC=0). Unlike the more complex IAB EU’s Transparency and Consent signal (TC String) signal itself does not encode information about the source of the opt-out signal, or provide details about how the signaling mechanism was implemented or presented to users. (imho this is a win. You have to respect GPC, but you can’t trust a sketchy site or adtech intermediary to set GPC correctly, therefore you can’t deal with sketchy sites or adtech intermediaries.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.baldurbjarnason.com/2024/the-deskilling-of-web-dev-is-harming-us-all/&quot;&gt;The deskilling of web dev is harming the product but, more importantly, it’s damaging our health – this is why burnout happens – Baldur Bjarnason&lt;/a&gt; &lt;q&gt;You’re expected to follow half-a-dozen different specialties, each relatively fast-paced and complex in its own right, and you’re supposed to do it without cutting into the hours where you do actual paid web development. Worse yet, you’re not actually expected to use any of it directly. Instead you’re also supposed to follow the developments of framework abstractions that are layered on top of the foundation specialties, at least doubling the number of complex fields a web dev has to follow and understand, right out of the gate.&lt;/q&gt; (I don’t know about you, but this site has a basic HTML template, Pandoc, and a Makefile. That’s about it.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://shkspr.mobi/blog/2024/02/a-tiny-incomplete-single-user-write-only-activitypub-server-in-php/&quot;&gt;A (tiny, incomplete, single user, write-only) ActivityPub server in PHP&lt;/a&gt; (lots of good news from the Fediverse. If it didn’t remind me of the original web already, it now has me pre-ordering &lt;a href=&quot;https://www.threads.net/@evanprodromou/post/C7xIRQbvapL&quot;&gt;from O’Reilly&lt;/a&gt; like it’s 1995 or something. Real 1995, not &lt;a href=&quot;http://www.antipope.org/charlie/blog-static/2024/04/the-radiant-future-of-1995.html&quot;&gt;The Radiant Future! (Of 1995)&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.mozilla.org/en/privacy-security/googles-protected-audience-protects-advertisers/&quot;&gt;Google’s Protected Audience Protects Advertisers (and Google) More Than It Protects You&lt;/a&gt; (If you have Google Chrome, you can still turn this stuff off: &lt;a href=&quot;https://blog.zgp.org/google-chrome-checklist/&quot;&gt;Google Chrome ad features checklist&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.cjchilvers.com/blog/why-i-went-back-to-buying-cds-and-you-should-too/&quot;&gt;Why I went back to buying CDs (and you should too)&lt;/a&gt; &lt;q&gt;The integrity of my audio library had been corrupted, at least in small ways. Horns were easy to spot, but how many other songs or albums had been messed with, without my knowledge? It turns out, way more than I had thought.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/google-says-ai-now-leading-disinformation-vector-and-is-severely-undercounting-the-problem/&quot;&gt;Google Researchers Say AI Now Leading Disinformation Vector (and Are Severely Undercounting the Problem)&lt;/a&gt; &lt;q&gt;As bad as the AI-generated images problem is according to the paper, it is very possibly much worse because the paper’s data sample is relying on public fact checker data, who are not selecting AI-generated image-based disinformation randomly. Sites like Snopes and Politifact, which have limited resources, are focusing on fact checking images that have earned some degree of virality or news coverage, so their fact checks serve a purpose or an audience.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/personal-blocklist/&quot;&gt;Personal Blocklist (not by Google)&lt;/a&gt; (useful browser extension to remove sites from search results when they’re better at SEO than actual content)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.ericgoldman.org/archives/2024/05/elon-musks-gifts-to-web-scrapers-guest-blog-post.htm&quot;&gt;Elon Musk’s Gifts to Web Scrapers (Guest Blog Post)&lt;/a&gt; &lt;q&gt;[B]y providing a foil in litigation against both the Center for Countering Digital Hate (“CCDH”) and Bright Data (the world’s largest seller of scraped data), he’s given judges in the most important district court in the country for tech legal issues, the Northern District of California, plenty of motivation to rule against him. As a result, judges have provided two landmark opinions in the last 45 days in favor of web scrapers. This creates powerful new precedent that will make it easier for web scrapers to prevail in litigation and will make it much harder for websites to prevent scraping.&lt;/q&gt;&lt;/p&gt;</description>
  1559. <pubDate>Thu, 06 Jun 2024 00:00:00 +0000</pubDate>
  1560. </item>
  1561. <item>
  1562. <title>Mozilla Security Blog: Firefox will upgrade more Mixed Content in Version 127</title>
  1563. <guid isPermaLink="false">https://blog.mozilla.org/security/?p=2877</guid>
  1564. <link>https://blog.mozilla.org/security/2024/06/05/firefox-will-upgrade-more-mixed-content-in-version-127/</link>
  1565. <description>&lt;p class=&quot;c1&quot;&gt;Most of the web already supports HTTPS: In fact, &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://glam.telemetry.mozilla.org/firefox/probe/http_transaction_is_ssl/explore&quot;&gt;93% of requests made by Firefox are already HTTPS&lt;/a&gt;&lt;/span&gt;. As a reminder, &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://datatracker.ietf.org/doc/html/rfc2818&quot;&gt;HTTP over TLS (HTTPS)&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;c2&quot;&gt; fixes the security shortcoming of HTTP by creating a secure and encrypted connection. Oftentimes, when web applications enable encryption with HTTPS on their servers, legacy content may still contain references using HTTP, even though that content would also be available over a secure and encrypted connection. When such a document gets loaded over HTTPS but subresources like images, audio and video are loaded using HTTP, it is referred to as “mixed content”.&lt;/span&gt;&lt;/p&gt;
  1566. &lt;p class=&quot;c1&quot;&gt;&lt;span class=&quot;c2&quot;&gt;Starting with version 127, Firefox is going to automatically upgrade audio, video, and image subresources from HTTP to HTTPS.&lt;/span&gt;&lt;/p&gt;
  1567. &lt;h3&gt;&lt;span class=&quot;c0&quot;&gt;Background&lt;/span&gt;&lt;/h3&gt;
  1568. &lt;p class=&quot;c1&quot;&gt;When introducing the notion of “&lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content&quot;&gt;mixed content&lt;/a&gt;&lt;/span&gt;” a long while ago, browsers used to make a fairly sharp distinction between active and passive mixed content: Loading scripts or iframes over HTTP can be really detrimental to the whole document’s security and has long since been blocked as “active mixed content”. Images and other resources were otherwise called “passive” or “display” mixed content. If a network attacker could modify them, they would not gain full control over the document. So, in hope of &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://www.w3.org/TR/html-design-principles/#support-existing-content&quot;&gt;supporting most existing content&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;c2&quot;&gt;, passive content had been allowed to load insecurely, albeit with a warning in the address bar.&lt;/span&gt;&lt;/p&gt;
  1569. &lt;p class=&quot;c8&quot;&gt;&lt;img alt=&quot;&quot; title=&quot;&quot; /&gt;&lt;/p&gt;
  1570. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_2879&quot; style=&quot;width: 2009px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2024/06/image2.png&quot;&gt;&lt;img alt=&quot;Previous behavior, without upgrading: Degraded lock icon, with a warning sign in the lower right corner.&quot; class=&quot;size-full wp-image-2879&quot; height=&quot;730&quot; src=&quot;https://blog.mozilla.org/security/files/2024/06/image2.png&quot; width=&quot;1999&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-2879&quot;&gt;Previous behavior, without upgrading: Degraded lock icon, with a warning sign in the lower right corner.&lt;/p&gt;&lt;/div&gt;
  1571. &lt;p class=&quot;c1&quot;&gt;With the web platform supporting many new and exciting forms of content (e.g., &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images&quot;&gt;responsive images&lt;/a&gt;&lt;/span&gt;), that notion became a bit blurry: Responsive images are not active in a sense that a malicious responsive image can take over the whole web page. However, with an impetus toward a more secure web, since 2018, &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://blog.mozilla.org/security/2018/01/15/secure-contexts-everywhere/&quot;&gt;we require that new features are only available when using HTTPS&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;c2&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1572. &lt;h3&gt;&lt;span class=&quot;c0&quot;&gt;Upgradable and blockable mixed content&lt;/span&gt;&lt;/h3&gt;
  1573. &lt;p class=&quot;c1&quot;&gt;Given these blurry lines between active and passive mixed content, the latest revision of the &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://w3c.github.io/webappsec-mixed-content/&quot;&gt;Mixed content standard&lt;/a&gt;&lt;/span&gt; distinguishes between blockable and upgradable content, where scripts, iframes, responsive images and really all other features are considered blockable. The formerly-called passive content types (&lt;code&gt;&lt;span class=&quot;c11&quot;&gt;&amp;lt;img&amp;gt;&lt;/span&gt;&lt;/code&gt;, &lt;code&gt;&lt;span class=&quot;c11&quot;&gt;&amp;lt;audio&amp;gt;&lt;/span&gt;&lt;/code&gt; and &lt;code&gt;&lt;span class=&quot;c11&quot;&gt;&amp;lt;video&amp;gt;&lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;c2&quot;&gt; elements) are now being upgraded by the browser to use HTTPS and are not loaded if they are unavailable via HTTPS.&lt;/span&gt;&lt;/p&gt;
  1574. &lt;p class=&quot;c1&quot;&gt;&lt;span class=&quot;c2&quot;&gt;This also introduces a behavior change in our security indicators: Firefox will no longer make use of the tiny warning sign in the lower right corner of the lock icon:&lt;/span&gt;&lt;/p&gt;
  1575. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_2880&quot; style=&quot;width: 2009px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/security/files/2024/06/image1.png&quot;&gt;&lt;img alt=&quot;After our change. A fully secure lock icon. The image load was successfully upgraded or failed (e.g. Connection Reset)&quot; class=&quot;size-full wp-image-2880&quot; height=&quot;730&quot; src=&quot;https://blog.mozilla.org/security/files/2024/06/image1.png&quot; width=&quot;1999&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-2880&quot;&gt;After our change. A fully secure lock icon. The image load was successfully upgraded or failed (e.g., Connection Reset).&lt;/p&gt;&lt;/div&gt;
  1576. &lt;p class=&quot;c1&quot;&gt;With Firefox 127, all mixed content will either be blocked or upgraded. Making sure that documents transferred with HTTPS remain fully secure and encrypted.&lt;/p&gt;
  1577. &lt;h3&gt;&lt;span class=&quot;c0&quot;&gt;Enterprise Users&lt;/span&gt;&lt;/h3&gt;
  1578. &lt;p class=&quot;c1&quot;&gt;&lt;span class=&quot;c2&quot;&gt;Enterprise users that do not want Firefox to perform an upgrade have the following options by changing the existing preferences:&lt;/span&gt;&lt;/p&gt;
  1579. &lt;ul class=&quot;c12 lst-kix_argb0s3apodo-0 start&quot;&gt;
  1580. &lt;li class=&quot;c1 c13 li-bullet-0&quot;&gt;&lt;span class=&quot;c2&quot;&gt;Set &lt;code&gt;security.mixed_content.upgrade_display_content&lt;/code&gt; to &lt;code&gt;false&lt;/code&gt;, such that Firefox will continue displaying mixed content insecurely (including the degraded lock icon from the first picture).&lt;/span&gt;&lt;/li&gt;
  1581. &lt;li class=&quot;c1 c13 li-bullet-0&quot;&gt;Set &lt;code&gt;security.mixed_content.block_display_content&lt;/code&gt; to &lt;code&gt;true&lt;/code&gt;, such that Firefox will block &lt;span class=&quot;c10&quot;&gt;all&lt;/span&gt; mixed content (including upgradable).&lt;/li&gt;
  1582. &lt;/ul&gt;
  1583. &lt;p class=&quot;c1&quot;&gt;Reasons for changing these preferences might include legacy infrastructure that does not support a secure HTTPS experience. We want to note that neither of these options are recommended because with those, Firefox would deviate from an interoperable web platform. Furthermore, these preferences do not receive the amount of support, scrutiny and quality assurance as those available in our &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://support.mozilla.org/en-US/kb/firefox-options-preferences-and-settings&quot;&gt;built-in settings page&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;c2&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1584. &lt;h3&gt;&lt;span class=&quot;c0&quot;&gt;Outlook&lt;/span&gt;&lt;/h3&gt;
  1585. &lt;p class=&quot;c1&quot;&gt;We will continue our mission where privacy and security is not optional, to bring yet more HTTPS to the web: Next up, we are going to default all addresses from the URL bar to prefer HTTPS, with a fallback to HTTP if the site does not load securely. This feature is already available in &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://www.mozilla.org/en-US/firefox/channel/desktop/#nightly&quot;&gt;Firefox Nightly&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;c2&quot;&gt;.&lt;/span&gt;&lt;/p&gt;
  1586. &lt;p class=&quot;c1&quot;&gt;We are also working on another iteration that upgrades more page loads with a fallback called “HTTPS-First” that should be in Firefox Nightly soon. Lastly, security-conscious users with a higher desire to not expose &lt;span class=&quot;c15&quot;&gt;any&lt;/span&gt; of their traffic to the network over HTTP can already make use of our strict &lt;span class=&quot;c3&quot;&gt;&lt;a class=&quot;c5&quot; href=&quot;https://support.mozilla.org/en-US/kb/https-only-prefs&quot;&gt;HTTPS-Only &lt;/a&gt;&lt;/span&gt;Mode,&lt;span class=&quot;c2&quot;&gt; which is available through Firefox settings. It requires all resource loads to happen over HTTPS or else be blocked.&lt;/span&gt;&lt;/p&gt;
  1587. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/security/2024/06/05/firefox-will-upgrade-more-mixed-content-in-version-127/&quot;&gt;Firefox will upgrade more Mixed Content in Version 127&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/security&quot;&gt;Mozilla Security Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1588. <pubDate>Wed, 05 Jun 2024 13:05:31 +0000</pubDate>
  1589. <dc:creator>Frederik Braun, Malte Jürgens, Simon Friedberger and Christoph Kerschbaumer</dc:creator>
  1590. </item>
  1591. <item>
  1592. <title>The Mozilla Blog: Keeping GenAI technologies secure is a shared responsibility</title>
  1593. <guid isPermaLink="false">https://blog.mozilla.org/?p=75065</guid>
  1594. <link>https://blog.mozilla.org/en/mozilla/keeping-genai-technologies-secure-is-a-shared-responsibility/</link>
  1595. <description>&lt;p&gt;Generative artificial intelligence (GenAI) is reshaping our world, from streamlining work tasks like coding to helping us plan summer vacations. As we increasingly adopt GenAI services and tools, we also face the emerging risks of their malicious use. Security is crucial, as even one vulnerability can jeopardize users’ information or worse. However, securing GenAI is too vast and complex for a single entity to handle alone. Mozilla believes sharing this responsibility is essential to successfully keep people safe. &lt;/p&gt;
  1596.  
  1597.  
  1598.  
  1599. &lt;h3&gt;The evolution of bug bounty programs&lt;/h3&gt;
  1600.  
  1601.  
  1602.  
  1603. &lt;p&gt;To combat both bugs and vulnerabilities, the concept of the bug bounty program – which incentivizes a community of independent participants to identify flaws and report them – &lt;a href=&quot;http://web.archive.org/web/19970501041756/www101.netscape.com/newsref/pr/newsrelease48.html&quot;&gt;was first&lt;/a&gt; launched in the mid-1990s by Netscape to crowd source bug discovery in the Netscape Navigator web browser. Fast forward to 2002 and the next generation of bounty programs was born when &lt;a href=&quot;https://www.darkreading.com/vulnerabilities-threats/idefense-revamps-bucks-for-bugs-contest&quot;&gt;iDefense &lt;/a&gt;rolled out the Vulnerability Contributor Program (&lt;a href=&quot;https://en.wikipedia.org/wiki/Coordinated_vulnerability_disclosure&quot;&gt;VCP&lt;/a&gt;), the first security-specific all-vendor public bounty program. Later, in 2005, &lt;a href=&quot;https://en.wikipedia.org/wiki/TippingPoint&quot;&gt;TippingPoint&lt;/a&gt; introduced the Zero Day Initiative (&lt;a href=&quot;https://www.zerodayinitiative.com/&quot;&gt;ZDI&lt;/a&gt;) which follows the same model, allowing researchers from anywhere in the world to profit from their auditing research on nearly any technology vendor.&lt;/p&gt;
  1604.  
  1605.  
  1606.  
  1607. &lt;p&gt;More recently, companies like HackerOne and BugCrowd have commoditized bounty programs, allowing participating companies to incentivize the community to report directly to them, versus going through an intermediary like the VCP or ZDI. Some GenAI companies are enrolled in these programs, providing bounties for defects found in supporting software, but not the models themselves. Others have hosted temporary model bounties while rapidly building their GenAI applications. However, this approach benefits their own models rather than the foundational technologies. As companies move at light speed to be the first to market, can we trust that they’ll work with the same scrutiny on security and consider future implications? History has demonstrated that this usually is an &lt;a href=&quot;https://www.theverge.com/2024/5/17/24159095/openai-jan-leike-superalignment-sam-altman-ai-safety&quot;&gt;afterthought&lt;/a&gt;. &lt;/p&gt;
  1608.  
  1609.  
  1610.  
  1611. &lt;h3&gt;&lt;a href=&quot;https://0din.ai/&quot;&gt;0Din&lt;/a&gt;, the next generation bug bounty program &lt;/h3&gt;
  1612.  
  1613.  
  1614.  
  1615. &lt;p&gt;As the technology landscape continues to evolve, we see the need for the next evolution in bug bounty programs, to further advance the GenAI ecosystem and address the flaws within the models themselves. These vulnerability classes include Prompt Injection, Training Data Poisoning, Denial of Service, and more. Today, we are investing in the next generation of GenAI security with the 0Day Investigative Network (&lt;a href=&quot;https://0din.ai/&quot;&gt;0Din&lt;/a&gt;) by Mozilla, a bug bounty program for large language models (LLMs) and other deep learning technologies. &lt;a href=&quot;https://0din.ai/&quot;&gt;0Din&lt;/a&gt; expands the scope to identify and fix GenAI security by delving beyond the application layer with a focus on emerging classes of vulnerabilities and weaknesses in these new generations of models.&lt;/p&gt;
  1616.  
  1617.  
  1618.  
  1619. &lt;p&gt;At Mozilla, we believe openness and collective participation are important in solving the emerging security challenges that lie ahead of us for GenAI. We have a long history of protecting users on the internet by building a secure and open-source browser, Firefox. We also have one of the &lt;a href=&quot;https://blog.mozilla.org/press/2004/08/mozilla-foundation-announces-security-bug-bounty-program/&quot;&gt;first&lt;/a&gt; and longest-standing&lt;a href=&quot;https://www.mozilla.org/en-US/security/bug-bounty/&quot;&gt; bug bounty programs&lt;/a&gt; on the web in order to encourage security researchers to report security vulnerabilities in the open. We know full well the power of working together as a community is one of the many ways to protect people. It’s been a part of &lt;a href=&quot;https://www.mozilla.org/en-US/mission/&quot;&gt;our mission&lt;/a&gt; and we want to continue to advance this work. &lt;/p&gt;
  1620.  
  1621.  
  1622.  
  1623. &lt;p&gt;Our hope for this program is to help independent researchers with an opportunity to contribute to the development of new security frameworks and best practices tailored for large language models, attention-based systems and generative models. They will play a key role in defining and strengthening AI security standards thus shaping the future of secure GenAI technologies and how we use them in our daily lives. By addressing these challenges, Mozilla aims to protect users and inspire future generations of developers and researchers to make security and privacy a priority right from the start. &lt;/p&gt;
  1624.  
  1625.  
  1626.  
  1627. &lt;h3&gt;Join our team to advance AI security&lt;/h3&gt;
  1628.  
  1629.  
  1630.  
  1631. &lt;p&gt;Researchers interested in submitting their findings to the program are welcome to start writing to us at &lt;a href=&quot;mailto:0din@mozilla.com&quot;&gt;0din@mozilla.com&lt;/a&gt; (&lt;a href=&quot;https://keys.openpgp.org/search?q=0din%40mozilla.com&quot;&gt;GPG key&lt;/a&gt;). If you’re looking to join the team, we are hiring! We’re looking for:&lt;/p&gt;
  1632.  
  1633.  
  1634.  
  1635. &lt;ul&gt;
  1636. &lt;li&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/careers/position/gh/6013190/&quot;&gt;Product/Program Manager&lt;/a&gt;&lt;/li&gt;
  1637.  
  1638.  
  1639.  
  1640. &lt;li&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/careers/position/gh/6013203/&quot;&gt;AI Researcher&lt;/a&gt;&lt;/li&gt;
  1641.  
  1642.  
  1643.  
  1644. &lt;li&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/careers/position/gh/6018060/&quot;&gt;Ruby-on-Rails Developer&lt;/a&gt;&lt;/li&gt;
  1645. &lt;/ul&gt;
  1646.  
  1647.  
  1648.  
  1649. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/careers/listings/&quot;&gt;
  1650.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  1651.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/06/cz2-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  1652.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  1653.     &lt;h4&gt;Advance GenAI security with us—apply now!&lt;/h4&gt;       &lt;/div&gt;
  1654. &lt;/a&gt;
  1655. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/keeping-genai-technologies-secure-is-a-shared-responsibility/&quot;&gt;Keeping GenAI technologies secure is a shared responsibility&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  1656. <pubDate>Wed, 05 Jun 2024 13:00:00 +0000</pubDate>
  1657. <dc:creator>Saoud Khalifah</dc:creator>
  1658. </item>
  1659. <item>
  1660. <title>This Week In Rust: This Week in Rust 550</title>
  1661. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-06-05:/blog/2024/06/05/this-week-in-rust-550/</guid>
  1662. <link>https://this-week-in-rust.org/blog/2024/06/05/this-week-in-rust-550/</link>
  1663. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  1664. &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
  1665. This is a weekly summary of its progress and community.
  1666. Want something mentioned? Tag us at &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on X(formerly Twitter) or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
  1667. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  1668. &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
  1669. If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
  1670. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  1671.  
  1672.  
  1673. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#foundation&quot;&gt;Foundation&lt;/a&gt;&lt;/h5&gt;
  1674. &lt;ul&gt;
  1675. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/welcoming-rust-c-interoperability-engineer-jon-bauman-to-the-rust-foundation-team/&quot;&gt;Welcoming Rust-C++ Interoperability Engineer Jon Bauman to the Rust Foundation Team&lt;/a&gt;&lt;/li&gt;
  1676. &lt;/ul&gt;
  1677. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rustnl-2024&quot;&gt;RustNL 2024&lt;/a&gt;&lt;/h5&gt;
  1678. &lt;ul&gt;
  1679. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=NPP2_6KMA60&quot;&gt;Visual Application Design for Rust - Rik Arends&lt;/a&gt;&lt;/li&gt;
  1680. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O09rje6yC90&quot;&gt;ThRust in Space: Initial Momentum - Michaël Melchiore&lt;/a&gt;&lt;/li&gt;
  1681. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=gr9v0FFXaZ8&quot;&gt;Arc in the Linux Kernel - Alice Ryhl&lt;/a&gt;&lt;/li&gt;
  1682. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=aENHzYAFkeE&quot;&gt;Making Connections - Mara Bos&lt;/a&gt;&lt;/li&gt;
  1683. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=10ymtv1J7Os&quot;&gt;Replacing OpenSSL One Step at a Time - Joe Birr-Pixton&lt;/a&gt;&lt;/li&gt;
  1684. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=O4sVw4YQB&quot;&gt;Fortifying Rust's FFI with Enscapsulated Functions - Leon Schuermann&lt;/a&gt;&lt;/li&gt;
  1685. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=KwZM0lSTvyk&quot;&gt;Oxidizing Education - Henk Oordt&lt;/a&gt;&lt;/li&gt;
  1686. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HtBFvTH5ZKE&quot;&gt;Postcard: An Unreasonably Effective Tool for Machine to Machine Communication - James Munns&lt;/a&gt;&lt;/li&gt;
  1687. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=c1isq1Bdmic&quot;&gt;Introducing June - Sophia Turner&lt;/a&gt;&lt;/li&gt;
  1688. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=Dg4hlfettn8&quot;&gt;Robius: Immersive and Seamless Multiplatform App Development in Rust - Kevin Boos&lt;/a&gt;&lt;/li&gt;
  1689. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=mvzHQdCLkOY&quot;&gt;Compression Carcinized: Implementing zlib in Rust - Folkert de Vries&lt;/a&gt;&lt;/li&gt;
  1690. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=GjDwj7RWOgs&quot;&gt;K23: A Secure Research OS Running WASM - Jonas Kruckenberg&lt;/a&gt;&lt;/li&gt;
  1691. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=H7NtzyP9q8E&quot;&gt;Async Rust in Embedded Systems with Embassy - Dario Nieuwenhuis&lt;/a&gt;&lt;/li&gt;
  1692. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=OvfNipIcRiQ&quot;&gt;Xilem: Let's Build High Performance Rust UI - Raph Levien&lt;/a&gt;&lt;/li&gt;
  1693. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=u6q9l89EOXI&quot;&gt;Rust Poisoning My Wrist for Fun - Ulf Lilleengen&lt;/a&gt;&lt;/li&gt;
  1694. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=9qLACD9Bfbk&quot;&gt;Type Theory for Busy Engineers - Niko Matsakis&lt;/a&gt;&lt;/li&gt;
  1695. &lt;/ul&gt;
  1696. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  1697. &lt;ul&gt;
  1698. &lt;li&gt;&lt;a href=&quot;https://gamedev.rs/news/051/&quot;&gt;This Month in Rust GameDev #51 - May 2024&lt;/a&gt;&lt;/li&gt;
  1699. &lt;/ul&gt;
  1700. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  1701. &lt;ul&gt;
  1702. &lt;li&gt;&lt;a href=&quot;https://andreaslongva.com/blog/enter-paradis/&quot;&gt;Enter paradis — A new chapter in Rust's parallelism story&lt;/a&gt;&lt;/li&gt;
  1703. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-06-03-tiny-glade-vj-performances-and-2d-lighting&quot;&gt;Tiny Glade, VJ performances, and 2d lighting&lt;/a&gt;&lt;/li&gt;
  1704. &lt;li&gt;&lt;a href=&quot;https://diesel.rs/news/2_2_0_release.html&quot;&gt;Diesel 2.2.0&lt;/a&gt;&lt;/li&gt;
  1705. &lt;li&gt;&lt;a href=&quot;https://github.com/andrewdavidmackenzie/pigg/releases/tag/0.1.0&quot;&gt;Pigg 0.1.0&lt;/a&gt;&lt;/li&gt;
  1706. &lt;li&gt;&lt;a href=&quot;https://git-cliff.org/blog/2.3.0&quot;&gt;git-cliff 2.3.0 is released! (highly customizable changelog generator)&lt;/a&gt;&lt;/li&gt;
  1707. &lt;/ul&gt;
  1708. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  1709. &lt;ul&gt;
  1710. &lt;li&gt;&lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2024/06/02/the-borrow-checker-within/&quot;&gt;The borrow checker within&lt;/a&gt;&lt;/li&gt;
  1711. &lt;li&gt;&lt;a href=&quot;https://corrode.dev/blog/lifetimes/&quot;&gt;Don't Worry About Lifetimes&lt;/a&gt;&lt;/li&gt;
  1712. &lt;li&gt;&lt;a href=&quot;https://o-santi.github.io/blog/rust-is-not-about-memory-safety/&quot;&gt;rust is not about memory safety&lt;/a&gt;&lt;/li&gt;
  1713. &lt;li&gt;&lt;a href=&quot;https://landaire.net/on-dependency-usage-in-rust/&quot;&gt;On Dependency Usage in Rust&lt;/a&gt;&lt;/li&gt;
  1714. &lt;li&gt;&lt;a href=&quot;https://blog.yoshuawuyts.com/achieving-undroppable-types-by-leveraging-context-managers/&quot;&gt;Context Managers: Undroppable Types for Free&lt;/a&gt;&lt;/li&gt;
  1715. &lt;li&gt;&lt;a href=&quot;https://john-millikin.com/rust-and-dynamically-sized-thin-pointers&quot;&gt;Rust and dynamically-sized thin pointers&lt;/a&gt;&lt;/li&gt;
  1716. &lt;li&gt;&lt;a href=&quot;https://barretts.club/posts/rust-for-the-engine/&quot;&gt;Rust is for the Engine, Not the Game&lt;/a&gt;&lt;/li&gt;
  1717. &lt;li&gt;[audio] &lt;a href=&quot;https://corrode.dev/podcast/s02e03-thunderbird/&quot;&gt;Thunderbird - Brendan Abolivier, Software Engineer&lt;/a&gt;&lt;/li&gt;
  1718. &lt;/ul&gt;
  1719. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  1720. &lt;ul&gt;
  1721. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/05/28/typestate-pattern-rust/&quot;&gt;Build with Naz : Rust typestate pattern&lt;/a&gt;&lt;/li&gt;
  1722. &lt;li&gt;&lt;a href=&quot;https://www.arroyo.dev/blog/rust-plugin-systems&quot;&gt;How to build a plugin system in Rust&lt;/a&gt;&lt;/li&gt;
  1723. &lt;li&gt;&lt;a href=&quot;https://isaacdaou.st/blog/forming-clouds/&quot;&gt;Forming Clouds&lt;/a&gt;&lt;/li&gt;
  1724. &lt;li&gt;&lt;a href=&quot;https://bitfieldconsulting.com/posts/rust-errors-option-result&quot;&gt;Rust error handling: Option &amp;amp; Result&lt;/a&gt;&lt;/li&gt;
  1725. &lt;li&gt;&lt;a href=&quot;https://marcobacis.com/blog/load-balancer-rust-3/&quot;&gt;Let's build a Load Balancer in Rust - Part 3&lt;/a&gt;&lt;/li&gt;
  1726. &lt;li&gt;&lt;a href=&quot;https://www.howtocodeit.com/articles/ultimate-guide-rust-newtypes&quot;&gt;The Ultimate Guide to Rust Newtypes&lt;/a&gt;&lt;/li&gt;
  1727. &lt;/ul&gt;
  1728. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  1729. &lt;ul&gt;
  1730. &lt;li&gt;&lt;a href=&quot;https://gamesbymason.com/2024/06/01/wor-ama/&quot;&gt;Highlights from &quot;I spent 6 years developing a puzzle game in Rust and it just shipped, AMA&quot;&lt;/a&gt;&lt;/li&gt;
  1731. &lt;/ul&gt;
  1732. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  1733. &lt;p&gt;This week's crate is &lt;a href=&quot;https://docs.rs/layoutparser-ort&quot;&gt;layoutparser-ort&lt;/a&gt;, a simplified port of LayoutParser for ML-based document layout element detection.&lt;/p&gt;
  1734. &lt;p&gt;Despite there being no suggestions, llogiq is reasonably happy with his choice. Are you?&lt;/p&gt;
  1735. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;No matter what your answer is, please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
  1736. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#calls-for-testing&quot;&gt;Calls for Testing&lt;/a&gt;&lt;/h4&gt;
  1737. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  1738. implementation and give feedback, especially before stabilization.  The following
  1739. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  1740. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing&quot;&gt;RFCs&lt;/a&gt;&lt;/h5&gt;
  1741. &lt;ul&gt;
  1742. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  1743. &lt;/ul&gt;
  1744. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/labels/call-for-testing&quot;&gt;Rust&lt;/a&gt;&lt;/h5&gt;
  1745. &lt;ul&gt;
  1746. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  1747. &lt;/ul&gt;
  1748. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rustup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rustup/labels/call-for-testing&quot;&gt;Rustup&lt;/a&gt;&lt;/h5&gt;
  1749. &lt;ul&gt;
  1750. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  1751. &lt;/ul&gt;
  1752. &lt;p&gt;If you are a feature implementer and would like your RFC to appear on the above list, add the new &lt;code&gt;call-for-testing&lt;/code&gt;
  1753. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  1754. need testing.&lt;/p&gt;
  1755. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
  1756. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  1757. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  1758. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  1759. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  1760. &lt;p&gt;&lt;em&gt;No Calls for participation in projects were submitted this week.&lt;/em&gt;&lt;/p&gt;
  1761. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  1762. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
  1763. &lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;
  1764. &lt;ul&gt;
  1765. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt; | Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  1766. &lt;li&gt;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc9S_95oaCsFyrULF4iBQOIiTcMlOpG07izgquYLBCKFAYTKQ/viewform&quot;&gt;Rust Ukraine 2024&lt;/a&gt; | Closes 2024-07-06 | Online + Ukraine, Kyiv | Event date: 2024-07-27&lt;/li&gt;
  1767. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  1768. &lt;/ul&gt;
  1769. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  1770. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
  1771. &lt;p&gt;308 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-05-28..2024-06-04&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  1772. &lt;ul&gt;
  1773. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125343&quot;&gt;&lt;code&gt;-Znext-solver&lt;/code&gt;: eagerly normalize when adding goals&lt;/a&gt;&lt;/li&gt;
  1774. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125695&quot;&gt;&lt;code&gt;fn_arg_sanity_check&lt;/code&gt;: fix panic message&lt;/a&gt;&lt;/li&gt;
  1775. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124320&quot;&gt;add &lt;code&gt;--print=check-cfg&lt;/code&gt; to get the expected configs&lt;/a&gt;&lt;/li&gt;
  1776. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124655&quot;&gt;add &lt;code&gt;-Zfixed-x18&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1777. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125796&quot;&gt;also InstSimplify &lt;code&gt;&amp;amp;raw*&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1778. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125807&quot;&gt;also resolve the type of constants, even if we already turned it into an error constant&lt;/a&gt;&lt;/li&gt;
  1779. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125774&quot;&gt;avoid unwrap diag.code directly in &lt;code&gt;note_and_explain_type_err&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1780. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125821&quot;&gt;check index &lt;code&gt;value &amp;lt;= 0xFFFF_FF00&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1781. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125700&quot;&gt;coverage: avoid overflow when the MC/DC condition limit is exceeded&lt;/a&gt;&lt;/li&gt;
  1782. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125756&quot;&gt;coverage: optionally instrument the RHS of lazy logical operators&lt;/a&gt;&lt;/li&gt;
  1783. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125754&quot;&gt;coverage: rename MC/DC &lt;code&gt;conditions_num&lt;/code&gt; to &lt;code&gt;num_conditions&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1784. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124650&quot;&gt;create const block DefIds in typeck instead of ast lowering&lt;/a&gt;&lt;/li&gt;
  1785. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125671&quot;&gt;do not equate &lt;code&gt;Const&lt;/code&gt;'s ty in &lt;code&gt;super_combine_const&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1786. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125397&quot;&gt;do not suggest unresolvable builder methods&lt;/a&gt;&lt;/li&gt;
  1787. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125433&quot;&gt;a small diagnostic improvement for &lt;code&gt;dropping_copy_types&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1788. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125790&quot;&gt;don't recompute &lt;code&gt;tail&lt;/code&gt; in &lt;code&gt;lower_stmts&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1789. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125640&quot;&gt;don't suggest turning non-char-literal exprs of ty &lt;code&gt;char&lt;/code&gt; into string literals&lt;/a&gt;&lt;/li&gt;
  1790. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/115105&quot;&gt;enable DestinationPropagation by default&lt;/a&gt;&lt;/li&gt;
  1791. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125786&quot;&gt;fold item bounds before proving them in &lt;code&gt;check_type_bounds&lt;/code&gt; in new solver&lt;/a&gt;&lt;/li&gt;
  1792. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124662&quot;&gt;implement &lt;code&gt;needs_async_drop&lt;/code&gt; in rustc and optimize async drop glue&lt;/a&gt;&lt;/li&gt;
  1793. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125089&quot;&gt;improve diagnostic output of &lt;code&gt;non_local_definitions&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  1794. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125598&quot;&gt;make &lt;code&gt;ProofTreeBuilder&lt;/code&gt; actually generic over &lt;code&gt;Interner&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1795. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125711&quot;&gt;make &lt;code&gt;body_owned_by&lt;/code&gt; return the &lt;code&gt;Body&lt;/code&gt; instead of just the &lt;code&gt;BodyId&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1796. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125311&quot;&gt;make &lt;code&gt;repr(packed)&lt;/code&gt; vectors work with SIMD intrinsics&lt;/a&gt;&lt;/li&gt;
  1797. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125531&quot;&gt;make lint: &lt;code&gt;lint_dropping_references lint_forgetting_copy_types lint_forgetting_references&lt;/code&gt; give suggestion if possible&lt;/a&gt;&lt;/li&gt;
  1798. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122662&quot;&gt;omit &lt;code&gt;non-needs_drop drop_in_place&lt;/code&gt; in vtables&lt;/a&gt;&lt;/li&gt;
  1799. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125864&quot;&gt;opt-in to &lt;code&gt;FulfillmentError&lt;/code&gt; generation to avoid doing extra work in the new solver&lt;/a&gt;&lt;/li&gt;
  1800. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125705&quot;&gt;reintroduce name resolution check for trying to access locals from an inline const&lt;/a&gt;&lt;/li&gt;
  1801. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125863&quot;&gt;reject &lt;code&gt;CVarArgs&lt;/code&gt; in &lt;code&gt;parse_ty_for_where_clause&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1802. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122597&quot;&gt;show files produced by &lt;code&gt;--emit foo&lt;/code&gt; in json artifact notifications&lt;/a&gt;&lt;/li&gt;
  1803. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125381&quot;&gt;silence some resolve errors when there have been glob import errors&lt;/a&gt;&lt;/li&gt;
  1804. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125776&quot;&gt;stop using &lt;code&gt;translate_args&lt;/code&gt; in the new solver&lt;/a&gt;&lt;/li&gt;
  1805. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125408&quot;&gt;support mdBook preprocessors for TRPL in rustbook&lt;/a&gt;&lt;/li&gt;
  1806. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125904&quot;&gt;test codegen for &lt;code&gt;repr(packed,simd)&lt;/code&gt; → &lt;code&gt;repr(simd)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1807. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125664&quot;&gt;tweak relations to no longer rely on &lt;code&gt;TypeTrace&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1808. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124294&quot;&gt;unroll first iteration of &lt;code&gt;checked_ilog&lt;/code&gt; loop&lt;/a&gt;&lt;/li&gt;
  1809. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125775&quot;&gt;uplift &lt;code&gt;{Closure,Coroutine,CoroutineClosure}Args&lt;/code&gt; and friends to &lt;code&gt;rustc_type_ir&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1810. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125778&quot;&gt;use parenthetical notation for &lt;code&gt;Fn&lt;/code&gt; traits&lt;/a&gt;&lt;/li&gt;
  1811. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125851&quot;&gt;add some more specific checks to the MIR validator&lt;/a&gt;&lt;/li&gt;
  1812. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125633&quot;&gt;miri: avoid making a full copy of all new allocations&lt;/a&gt;&lt;/li&gt;
  1813. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3644&quot;&gt;miri: fix &quot;local crate&quot; detection&lt;/a&gt;&lt;/li&gt;
  1814. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125360&quot;&gt;don't inhibit random field reordering on &lt;code&gt;repr(packed(1))&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1815. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125828&quot;&gt;avoid checking the edition as much as possible&lt;/a&gt;&lt;/li&gt;
  1816. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123572&quot;&gt;increase vtable layout size&lt;/a&gt;&lt;/li&gt;
  1817. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125551&quot;&gt;stabilise &lt;code&gt;IpvNAddr::&lt;/code&gt;{&lt;code&gt;BITS&lt;/code&gt;, &lt;code&gt;to_bits&lt;/code&gt;, &lt;code&gt;from_bits&lt;/code&gt;} (&lt;code&gt;ip_bits&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
  1818. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124577&quot;&gt;stabilize &lt;code&gt;custom_code_classes_in_docs&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
  1819. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125211&quot;&gt;stablize &lt;code&gt;const_binary_heap_constructor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1820. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124636&quot;&gt;make &lt;code&gt;std::env::&lt;/code&gt;{&lt;code&gt;set_var&lt;/code&gt;, &lt;code&gt;remove_var&lt;/code&gt;} unsafe in edition 2024&lt;/a&gt;&lt;/li&gt;
  1821. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125884&quot;&gt;implement feature &lt;code&gt;integer_sign_cast&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1822. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/117671&quot;&gt;NVPTX: avoid &lt;code&gt;PassMode::Direct&lt;/code&gt; for args in C abi&lt;/a&gt;&lt;/li&gt;
  1823. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125701&quot;&gt;genericize &lt;code&gt;ptr::from_raw_parts&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1824. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125577&quot;&gt;&lt;code&gt;std::pal::unix::thread&lt;/code&gt; fetching min stack size on netbsd&lt;/a&gt;&lt;/li&gt;
  1825. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124251&quot;&gt;add an intrinsic for &lt;code&gt;ptr::metadata&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1826. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121062&quot;&gt;change &lt;code&gt;f32::midpoint&lt;/code&gt; to upcast to f64&lt;/a&gt;&lt;/li&gt;
  1827. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-hash/pull/37&quot;&gt;rustc-hash: replace hash with faster and better finalized hash&lt;/a&gt;&lt;/li&gt;
  1828. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13973&quot;&gt;cargo test: Auto-redact elapsed time&lt;/a&gt;&lt;/li&gt;
  1829. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/14006&quot;&gt;cargo add: Avoid escaping double-quotes by using string literals&lt;/a&gt;&lt;/li&gt;
  1830. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13992&quot;&gt;cargo config: Ensure &lt;code&gt;--config net.git-fetch-with-cli=true&lt;/code&gt; is respected&lt;/a&gt;&lt;/li&gt;
  1831. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13987&quot;&gt;cargo new: Dont say were adding to a workspace when a regular package is in root&lt;/a&gt;&lt;/li&gt;
  1832. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13989&quot;&gt;cargo toml: Ensure targets are in a deterministic order&lt;/a&gt;&lt;/li&gt;
  1833. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/14004&quot;&gt;cargo vendor: Ensure sort happens for vendor&lt;/a&gt;&lt;/li&gt;
  1834. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13687&quot;&gt;cargo: allows the default git/gitoxide configuration to be obtained from the ENV and config&lt;/a&gt;&lt;/li&gt;
  1835. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13970&quot;&gt;cargo: adjust custom err from cert-check due to libgit2 1.8 change&lt;/a&gt;&lt;/li&gt;
  1836. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/14000&quot;&gt;cargo: skip deserialization of unrelated fields with overlapping name&lt;/a&gt;&lt;/li&gt;
  1837. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12859&quot;&gt;clippy: &lt;code&gt;many_single_char_names&lt;/code&gt;: deduplicate diagnostics&lt;/a&gt;&lt;/li&gt;
  1838. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12815&quot;&gt;clippy: add &lt;code&gt;needless_character_iteration&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  1839. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12875&quot;&gt;clippy: deprecate &lt;code&gt;maybe_misused_cfg&lt;/code&gt; and &lt;code&gt;mismatched_target_os&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1840. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12488&quot;&gt;clippy: disable &lt;code&gt;indexing_slicing&lt;/code&gt; for custom &lt;code&gt;Index&lt;/code&gt; impls&lt;/a&gt;&lt;/li&gt;
  1841. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12865&quot;&gt;clippy: fix &lt;code&gt;redundant_closure&lt;/code&gt; suggesting incorrect code with &lt;code&gt;F: Fn()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1842. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12857&quot;&gt;clippy: let &lt;code&gt;non_canonical_impls&lt;/code&gt; skip proc marco&lt;/a&gt;&lt;/li&gt;
  1843. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12864&quot;&gt;clippy: ignore array from &lt;code&gt;deref_addrof&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  1844. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12871&quot;&gt;clippy: make &lt;code&gt;str_to_string&lt;/code&gt; machine-applicable&lt;/a&gt;&lt;/li&gt;
  1845. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17312&quot;&gt;rust-analyzer: add &lt;code&gt;Function::fn_ptr_type(…)&lt;/code&gt; for obtaining name-erased function type&lt;/a&gt;&lt;/li&gt;
  1846. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17329&quot;&gt;rust-analyzer: don't mark &lt;code&gt;#[rustc_deprecated_safe_2024]&lt;/code&gt; functions as unsafe&lt;/a&gt;&lt;/li&gt;
  1847. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17328&quot;&gt;rust-analyzer: enable completions within derive helper attributes&lt;/a&gt;&lt;/li&gt;
  1848. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17326&quot;&gt;rust-analyzer: fix container search failing for tokens originating within derive attributes&lt;/a&gt;&lt;/li&gt;
  1849. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17302&quot;&gt;rust-analyzer: fix diagnostics clearing when flychecks run per-workspace&lt;/a&gt;&lt;/li&gt;
  1850. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17333&quot;&gt;rust-analyzer: only generate snippets for &lt;code&gt;extract_expressions_from_format_string&lt;/code&gt; if snippets are supported&lt;/a&gt;&lt;/li&gt;
  1851. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6169&quot;&gt;rustfmt: collapse nested if detected by clippy&lt;/a&gt;&lt;/li&gt;
  1852. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6173&quot;&gt;rustfmt: rustfmt should not remove inner attributes from inline const blocks&lt;/a&gt;&lt;/li&gt;
  1853. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6166&quot;&gt;rustfmt: rust rewrite &lt;code&gt;check_diff&lt;/code&gt; (Skeleton)&lt;/a&gt;&lt;/li&gt;
  1854. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustfmt/pull/6174&quot;&gt;rustfmt: use &lt;code&gt;with_capacity&lt;/code&gt; in &lt;code&gt;rewrite_path&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  1855. &lt;/ul&gt;
  1856. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  1857. &lt;p&gt;A quiet week; we did have one quite serious regression (#115105, &quot;enable
  1858. DestinationPropagation by default&quot;), but it was shortly reverted (#125794).
  1859. The only other PR identified as potentially problematic was rollup
  1860. &lt;a href=&quot;https://github.com/rust-lang/rust/pull/125824&quot;&gt;PR #125824&lt;/a&gt;, but even
  1861. that is relatively limited in its effect.&lt;/p&gt;
  1862. &lt;p&gt;Triage done by &lt;strong&gt;@pnkfelix&lt;/strong&gt;.
  1863. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=a59072ec4fb6824213df5e9de8cae4812fd4fe97&amp;amp;end=1d52972dd8592edf4026aa577c8ce69acc0ac2d1&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;a59072ec..1d52972d&lt;/a&gt;&lt;/p&gt;
  1864. &lt;p&gt;3 Regressions, 5 Improvements, 6 Mixed; 4 of them in rollups
  1865. 57 artifact comparisons made in total&lt;/p&gt;
  1866. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/fba75cc08937425ab274959581401b862a0b3068/triage/2024-06-03.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  1867. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
  1868. &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
  1869. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  1870. &lt;ul&gt;
  1871. &lt;li&gt;&lt;em&gt;No RFCs were approved this week.&lt;/em&gt;&lt;/li&gt;
  1872. &lt;/ul&gt;
  1873. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  1874. &lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
  1875. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  1876. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  1877. &lt;ul&gt;
  1878. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3646&quot;&gt;Change crates.io policy to not offer crate transfer mediation&lt;/a&gt;&lt;/li&gt;
  1879. &lt;/ul&gt;
  1880. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  1881. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  1882. &lt;ul&gt;
  1883. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/125447&quot;&gt;Allow constraining opaque types during subtyping in the trait system&lt;/a&gt;&lt;/li&gt;
  1884. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/117861&quot;&gt;TAIT decision on &quot;may define implies must define&quot;&lt;/a&gt;&lt;/li&gt;
  1885. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/117468&quot;&gt;Stabilize Wasm relaxed SIMD&lt;/a&gt;&lt;/li&gt;
  1886. &lt;/ul&gt;
  1887. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Cargo&lt;/a&gt;
  1888. &lt;ul&gt;
  1889. &lt;li&gt;&lt;em&gt;No Cargo Tracking Issues or PRs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  1890. &lt;/ul&gt;
  1891. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-team&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc+&quot;&gt;Language Team&lt;/a&gt;
  1892. &lt;ul&gt;
  1893. &lt;li&gt;&lt;em&gt;No Language Team RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  1894. &lt;/ul&gt;
  1895. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-reference&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Language Reference&lt;/a&gt;
  1896. &lt;ul&gt;
  1897. &lt;li&gt;&lt;em&gt;No Language Reference RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  1898. &lt;/ul&gt;
  1899. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#unsafe-code-guidelines&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;
  1900. &lt;ul&gt;
  1901. &lt;li&gt;&lt;em&gt;No Unsafe Code Guideline RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  1902. &lt;/ul&gt;
  1903. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h6&gt;
  1904. &lt;ul&gt;
  1905. &lt;li&gt;&lt;em&gt;No New or Updated RFCs were created this week.&lt;/em&gt;&lt;/li&gt;
  1906. &lt;/ul&gt;
  1907. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  1908. &lt;p&gt;Rusty Events between 2024-06-05 - 2024-07-03 🦀&lt;/p&gt;
  1909. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  1910. &lt;ul&gt;
  1911. &lt;li&gt;2024-06-05 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  1912. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047896/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1913. &lt;/ul&gt;
  1914. &lt;/li&gt;
  1915. &lt;li&gt;2024-06-06 | Virtual (Tel Aviv, IL) | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  1916. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301156302/&quot;&gt;&lt;strong&gt;Rust Maven Workshop: Your first contribution to an Open Source Rust project&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1917. &lt;/ul&gt;
  1918. &lt;/li&gt;
  1919. &lt;li&gt;2024-06-06 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  1920. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477702/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1921. &lt;/ul&gt;
  1922. &lt;/li&gt;
  1923. &lt;li&gt;2024-06-09 | Virtual (Tel Aviv, IL) | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  1924. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301215326/&quot;&gt;&lt;strong&gt;Rust Maven Workshop: GitHub pages for Rust developers (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1925. &lt;/ul&gt;
  1926. &lt;/li&gt;
  1927. &lt;li&gt;2024-06-11 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  1928. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341709/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1929. &lt;/ul&gt;
  1930. &lt;/li&gt;
  1931. &lt;li&gt;2024-06-12 | Virtual (Cardiff, UK)| &lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/&quot;&gt;Rust and C++ Cardiff&lt;/a&gt;&lt;ul&gt;
  1932. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-and-c-plus-plus-in-cardiff/events/301314544/&quot;&gt;&lt;strong&gt;Rust for Rustaceans Book Club: Chapter 8 - Asynchronous Programming&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1933. &lt;/ul&gt;
  1934. &lt;/li&gt;
  1935. &lt;li&gt;2024-06-13 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  1936. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897800/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1937. &lt;/ul&gt;
  1938. &lt;/li&gt;
  1939. &lt;li&gt;2024-06-13 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  1940. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945258/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1941. &lt;/ul&gt;
  1942. &lt;/li&gt;
  1943. &lt;li&gt;2024-06-16 | Virtual (Tel Aviv, IL) | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  1944. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301294669/&quot;&gt;&lt;strong&gt;Workshop: Web development in Rust using Rocket (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1945. &lt;/ul&gt;
  1946. &lt;/li&gt;
  1947. &lt;li&gt;2024-06-18 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  1948. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346963/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1949. &lt;/ul&gt;
  1950. &lt;/li&gt;
  1951. &lt;li&gt;2024-06-19 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  1952. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298631733/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1953. &lt;/ul&gt;
  1954. &lt;/li&gt;
  1955. &lt;li&gt;2024-06-20 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  1956. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477705/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1957. &lt;/ul&gt;
  1958. &lt;/li&gt;
  1959. &lt;li&gt;2024-06-25 | Virtual (Dallas, TX, US)| &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust User Group&lt;/a&gt;&lt;ul&gt;
  1960. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcjbhc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1961. &lt;/ul&gt;
  1962. &lt;/li&gt;
  1963. &lt;li&gt;2024-06-27 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  1964. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897826/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1965. &lt;/ul&gt;
  1966. &lt;/li&gt;
  1967. &lt;li&gt;2024-07-02 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  1968. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300191673/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1969. &lt;/ul&gt;
  1970. &lt;/li&gt;
  1971. &lt;li&gt;2024-07-03 | Virtual | &lt;a href=&quot;https://www.eventbrite.com/o/training-4-programmers-llc-80387368983&quot;&gt;Training 4 Programmers LLC&lt;/a&gt;&lt;ul&gt;
  1972. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/build-web-apps-with-rust-and-leptos-tickets-904804503627?aff=odcleoeventsincollection&quot;&gt;&lt;strong&gt;Build Web Apps with Rust and Leptos&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1973. &lt;/ul&gt;
  1974. &lt;/li&gt;
  1975. &lt;li&gt;2024-07-03 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  1976. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/300328025/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1977. &lt;/ul&gt;
  1978. &lt;/li&gt;
  1979. &lt;/ul&gt;
  1980. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  1981. &lt;ul&gt;
  1982. &lt;li&gt;2024-06-05 | Hamburg, DE | &lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/&quot;&gt;Rust Meetup Hamburg&lt;/a&gt;&lt;ul&gt;
  1983. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/events/299235215/&quot;&gt;&lt;strong&gt;Rust Hack &amp;amp; Learn June 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1984. &lt;/ul&gt;
  1985. &lt;/li&gt;
  1986. &lt;li&gt;2024-06-06 | Madrid, ES | &lt;a href=&quot;https://www.meetup.com/madrust/&quot;&gt;MadRust&lt;/a&gt;&lt;ul&gt;
  1987. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/madrust/events/301318288/&quot;&gt;&lt;strong&gt;Introducción a Rust y el futuro de los sistemas DLT&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1988. &lt;/ul&gt;
  1989. &lt;/li&gt;
  1990. &lt;li&gt;2024-06-06 | Vilnius, LT | &lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/&quot;&gt;Rust Vilnius&lt;/a&gt;&lt;ul&gt;
  1991. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/events/301012097/&quot;&gt;&lt;strong&gt;Enjoy our second Rust and ZIG event&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1992. &lt;/ul&gt;
  1993. &lt;/li&gt;
  1994. &lt;li&gt;2024-06-06 | Wrocław, PL | &lt;a href=&quot;https://www.meetup.com/rust-wroclaw/&quot;&gt;Rust Wroclaw&lt;/a&gt;&lt;ul&gt;
  1995. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-wroclaw/events/301322042/&quot;&gt;&lt;strong&gt;Rust Meetup #37&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  1996. &lt;/ul&gt;
  1997. &lt;/li&gt;
  1998. &lt;li&gt;2024-06-11 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  1999. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/301439744/&quot;&gt;&lt;strong&gt;Rust Hack Night #6: Discord bots&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2000. &lt;/ul&gt;
  2001. &lt;/li&gt;
  2002. &lt;li&gt;2024-06-11 | Paris, FR | &lt;a href=&quot;https://mobilizon.fr/@rust_paris&quot;&gt;Rust Paris&lt;/a&gt;&lt;ul&gt;
  2003. &lt;li&gt;&lt;a href=&quot;https://mobilizon.fr/events/681b42dd-a456-4bfc-99e2-d1c60e867cbb&quot;&gt;&lt;strong&gt;Paris Rust Meetup #69&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2004. &lt;/ul&gt;
  2005. &lt;/li&gt;
  2006. &lt;li&gt;2024-06-12 | Reading, UK | &lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/&quot;&gt;Reading Rust Workshop&lt;/a&gt;&lt;ul&gt;
  2007. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/reading-rust-workshop/events/301012491/&quot;&gt;&lt;strong&gt;Reading Rust Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2008. &lt;/ul&gt;
  2009. &lt;/li&gt;
  2010. &lt;li&gt;2024-06-18 | Frankfurt/Main, DE | &lt;a href=&quot;https://www.meetup.com/rust-frankfurt&quot;&gt;Rust Frankfurt Meetup&lt;/a&gt;&lt;ul&gt;
  2011. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-frankfurt/events/301441434/&quot;&gt;&lt;strong&gt;Rust Frankfurt is Back!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2012. &lt;/ul&gt;
  2013. &lt;/li&gt;
  2014. &lt;li&gt;2024-06-19 - 2024-06-24 | Zürich, CH | &lt;a href=&quot;https://rustfest.ch/&quot;&gt;RustFest Zürich&lt;/a&gt;&lt;ul&gt;
  2015. &lt;li&gt;&lt;a href=&quot;https://rustfest.ch/&quot;&gt;&lt;strong&gt;RustFest Zürich 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2016. &lt;/ul&gt;
  2017. &lt;/li&gt;
  2018. &lt;li&gt;2024-06-20 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  2019. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/300865116/&quot;&gt;&lt;strong&gt;Talk Night at Trifork&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2020. &lt;/ul&gt;
  2021. &lt;/li&gt;
  2022. &lt;li&gt;2024-06-25 | Gdańsk, PL | &lt;a href=&quot;https://www.meetup.com/rust-gdansk/&quot;&gt;Rust Gdansk&lt;/a&gt;&lt;ul&gt;
  2023. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-gdansk/events/301014697/&quot;&gt;&lt;strong&gt;Rust Gdansk Meetup #3&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2024. &lt;/ul&gt;
  2025. &lt;/li&gt;
  2026. &lt;li&gt;2024-06-27 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  2027. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288965/&quot;&gt;&lt;strong&gt;Rust and Tell - Title&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2028. &lt;/ul&gt;
  2029. &lt;/li&gt;
  2030. &lt;li&gt;2024-06-27 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  2031. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458252/&quot;&gt;&lt;strong&gt;Rust meetup #48 sponsored by Google!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2032. &lt;/ul&gt;
  2033. &lt;/li&gt;
  2034. &lt;/ul&gt;
  2035. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  2036. &lt;ul&gt;
  2037. &lt;li&gt;2024-06-08 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2038. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116799/&quot;&gt;&lt;strong&gt;Porter Square Rust Lunch, Jun 8&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2039. &lt;/ul&gt;
  2040. &lt;/li&gt;
  2041. &lt;li&gt;2024-06-11 | New York, NY, US | &lt;a href=&quot;https://www.meetup.com/rust-nyc/&quot;&gt;Rust NYC&lt;/a&gt;&lt;ul&gt;
  2042. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-nyc/events/301386836/&quot;&gt;&lt;strong&gt;Rust NYC Monthly Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2043. &lt;/ul&gt;
  2044. &lt;/li&gt;
  2045. &lt;li&gt;2024-06-12 | Detroit, MI, US | &lt;a href=&quot;https://www.meetup.com/detroitrust/&quot;&gt;Detroit Rust&lt;/a&gt;&lt;ul&gt;
  2046. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/detroitrust/events/301387848/&quot;&gt;&lt;strong&gt;Detroit Rust Meet - Ann Arbor&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2047. &lt;/ul&gt;
  2048. &lt;/li&gt;
  2049. &lt;li&gt;2024-06-13 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  2050. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020010/&quot;&gt;&lt;strong&gt;Monthly Meetup: Topic TBD!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2051. &lt;/ul&gt;
  2052. &lt;/li&gt;
  2053. &lt;li&gt;2024-06-17 | Minneapolis, MN US | &lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/&quot;&gt;Minneapolis Rust Meetup&lt;/a&gt;&lt;ul&gt;
  2054. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/minneapolis-rust-meetup/events/301411625/&quot;&gt;&lt;strong&gt;Minneapolis Rust Meetup Happy Hour&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2055. &lt;/ul&gt;
  2056. &lt;/li&gt;
  2057. &lt;li&gt;2024-06-18 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
  2058. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186953/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2059. &lt;/ul&gt;
  2060. &lt;/li&gt;
  2061. &lt;li&gt;2024-06-20 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  2062. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509396/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2063. &lt;/ul&gt;
  2064. &lt;/li&gt;
  2065. &lt;li&gt;2024-06-26 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATC&lt;/a&gt;&lt;ul&gt;
  2066. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/301066942/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2067. &lt;/ul&gt;
  2068. &lt;/li&gt;
  2069. &lt;li&gt;2024-06-27 | Nashville, TN, US | &lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/&quot;&gt;Music City Rust Developers&lt;/a&gt;&lt;ul&gt;
  2070. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/music-city-rust-developers/events/301411746/&quot;&gt;&lt;strong&gt;Music City Rust Developers: Holding Pattern&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2071. &lt;/ul&gt;
  2072. &lt;/li&gt;
  2073. &lt;/ul&gt;
  2074. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  2075. &lt;ul&gt;
  2076. &lt;li&gt;2024-06-14 | Melbourne, VIC, AU | &lt;a href=&quot;https://www.meetup.com/rust-melbourne/&quot;&gt;Rust Melbourne&lt;/a&gt;&lt;ul&gt;
  2077. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-melbourne/events/301311680/&quot;&gt;&lt;strong&gt;June 2024 Rust Melbourne Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2078. &lt;/ul&gt;
  2079. &lt;/li&gt;
  2080. &lt;li&gt;2024-06-20 | Auckland, NZ | &lt;a href=&quot;https://www.meetup.com/rust-akl/&quot;&gt;Rust AKL&lt;/a&gt;&lt;ul&gt;
  2081. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-akl/events/301193761/&quot;&gt;&lt;strong&gt;Rust AKL: Full Stack Rust + Writing a compiler for fun and (no) profit&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2082. &lt;/ul&gt;
  2083. &lt;/li&gt;
  2084. &lt;li&gt;2024-06-25 | Canberra, ACt, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group (CRUG)&lt;/a&gt;&lt;ul&gt;
  2085. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300749371/&quot;&gt;&lt;strong&gt;June Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2086. &lt;/ul&gt;
  2087. &lt;/li&gt;
  2088. &lt;/ul&gt;
  2089. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#south-america&quot;&gt;South America&lt;/a&gt;&lt;/h5&gt;
  2090. &lt;ul&gt;
  2091. &lt;li&gt;2024-06-06 | Buenos Aires, AR | &lt;a href=&quot;https://www.meetup.com/rust-argentina/&quot;&gt;Rust en Español | Rust Argentina&lt;/a&gt;&lt;ul&gt;
  2092. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-argentina/events/299740249&quot;&gt;&lt;strong&gt;Juntada de Junio&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  2093. &lt;/ul&gt;
  2094. &lt;/li&gt;
  2095. &lt;/ul&gt;
  2096. &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
  2097. it mentioned here. Please remember to add a link to the event too.
  2098. Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
  2099. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  2100.  
  2101.  
  2102. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1cixuzr/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  2103. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  2104. &lt;blockquote&gt;
  2105. &lt;p&gt;Every PR is Special™&lt;/p&gt;
  2106. &lt;/blockquote&gt;
  2107. &lt;p&gt;– &lt;a href=&quot;https://jieyouxu.github.io/blog/review-rotation/&quot;&gt;Hieyou Xu describing being on t-compiler review rotation&lt;/a&gt;&lt;/p&gt;
  2108. &lt;p&gt;Sadly, there was no suggestion, so llogiq came up with something hopefully suitable.&lt;/p&gt;
  2109. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
  2110. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  2111. &lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  2112. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1d97pjo/this_week_in_rust_550/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  2113. <pubDate>Wed, 05 Jun 2024 04:00:00 +0000</pubDate>
  2114. <dc:creator>TWiR Contributors</dc:creator>
  2115. </item>
  2116. <item>
  2117. <title>Mozilla Thunderbird: Thunderbird for Android / K-9 Mail: May 2024 Progress Report</title>
  2118. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1790</guid>
  2119. <link>https://blog.thunderbird.net/2024/06/thunderbird-for-android-k-9-mail-may-2024-progress-report/</link>
  2120. <description>&lt;p&gt;&lt;img alt=&quot;Featured graphic for &amp;quot;Thunderbird for Android May 2024 Progress Report&amp;quot; with stylized Thunderbird logo and K-9 Mail Android icon, resembling an envelope with dog ears.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/06/K-9-TfA-May-2024-progress-report-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  2121. &lt;p&gt;Welcome reader! This is the place where we, the Thunderbird for Android team, inform you about what we worked on in May 2024. &lt;/p&gt;
  2122.  
  2123.  
  2124.  
  2125. &lt;p&gt;We’ve been publishing monthly progress reports for quite a while now. If you haven’t subscribed to the RSS feed yet, now would be a good time to start. You can even use your favorite desktop app to do so – see &lt;a href=&quot;https://blog.thunderbird.net/2022/05/thunderbird-rss-feeds-guide-favorite-content-to-the-inbox/&quot;&gt;Thunderbird + RSS: How To Bring Your Favorite Content To The Inbox&lt;/a&gt;.&lt;/p&gt;
  2126.  
  2127.  
  2128.  
  2129. &lt;p&gt;And if you need a reminder on where we left off last month, head over to &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-for-android-k-9-mail-april-2024-progress-report/&quot;&gt;April’s progress report&lt;/a&gt;.&lt;/p&gt;
  2130.  
  2131.  
  2132.  
  2133. &lt;h3&gt;Material 3&lt;/h3&gt;
  2134.  
  2135.  
  2136.  
  2137. &lt;p&gt;The most noticeable development effort going on right now is the conversion of the user interface to the design system &lt;a href=&quot;https://m3.material.io/&quot;&gt;Material 3&lt;/a&gt;. You can follow our progress by &lt;a href=&quot;https://forum.k9mail.app/t/how-do-i-become-a-beta-tester/68&quot;&gt;becoming a beta tester&lt;/a&gt; and installing the K-9 Mail 6.9xx beta versions.&lt;/p&gt;
  2138.  
  2139.  
  2140.  
  2141. &lt;p&gt;The first step consisted of changing the theme to Material 3. That changes things like the style of buttons and dialogs. &lt;/p&gt;
  2142.  
  2143.  
  2144.  
  2145. &lt;p&gt;Next, we replaced the many icons used throughout the app. But when using the beta version we — and some of you — noticed that not all of the new icons are a good fit. So we’ll update those icons in the next design iteration.&lt;/p&gt;
  2146.  
  2147.  
  2148.  
  2149. &lt;p&gt;One of the main reasons for switching to Material 3 is the ability to support &lt;a href=&quot;https://m3.material.io/styles/color/dynamic/choosing-a-source&quot;&gt;dynamic colors&lt;/a&gt;. It will allow the app to (optionally) use the system color scheme e.g. derived from the wallpaper. But in order for this to work properly, we need to update many places in the app that currently use fixed theme colors. This is an ongoing effort.&lt;/p&gt;
  2150.  
  2151.  
  2152.  
  2153. &lt;h3&gt;Targeting Android 14&lt;/h3&gt;
  2154.  
  2155.  
  2156.  
  2157. &lt;p&gt;As mentioned in &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-for-android-k-9-mail-april-2024-progress-report/&quot;&gt;April’s progress report&lt;/a&gt;, we’ve included the changes necessary to &lt;a href=&quot;https://developer.android.com/about/versions/14/behavior-changes-14&quot;&gt;target Android 14&lt;/a&gt; in the latest beta versions. So far we haven’t seen any crashes or bug reports related to these changes. So we plan to include them in the next maintenance release – K-9 Mail 6.804.&lt;/p&gt;
  2158.  
  2159.  
  2160.  
  2161. &lt;h3&gt;F-Droid metadata (part 3)&lt;/h3&gt;
  2162.  
  2163.  
  2164.  
  2165. &lt;p&gt;Unfortunately, this topic was part of the last two progress reports. So we’re very happy to report that the app description is now finally available again on &lt;a href=&quot;https://f-droid.org/packages/com.fsck.k9/&quot;&gt;our F-Droid app listing&lt;/a&gt;.&lt;/p&gt;
  2166.  
  2167.  
  2168.  
  2169. &lt;h3&gt;Other things we’ve worked on&lt;/h3&gt;
  2170.  
  2171.  
  2172.  
  2173. &lt;h5&gt;Developer documentation&lt;/h5&gt;
  2174.  
  2175.  
  2176.  
  2177. &lt;p&gt;We’ve done some work on making our developer documentation more accessible. There’s now a table of contents and we have the capability to render it to HTML using &lt;a href=&quot;https://rust-lang.github.io/mdBook/&quot;&gt;mdbook&lt;/a&gt;. However, we haven’t set up automatic publishing yet. Until that happens, the documentation can be browsed on GitHub: &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/blob/main/docs/SUMMARY.md&quot;&gt;K-9 Mail developer documentation&lt;/a&gt;.&lt;/p&gt;
  2178.  
  2179.  
  2180.  
  2181. &lt;h5&gt;Small IMAP improvements&lt;/h5&gt;
  2182.  
  2183.  
  2184.  
  2185. &lt;p&gt;We took some time to have a closer look at the communication between the app and the server when using the IMAP protocol and noticed a few places where the app could be more efficient. We’ve started addressing some of these inefficiencies. The result is that K-9 Mail can now perform some action with fewer network packets going back and forth between the app and the server.&lt;/p&gt;
  2186.  
  2187.  
  2188.  
  2189. &lt;h4&gt;Support for predictive back&lt;/h4&gt;
  2190.  
  2191.  
  2192.  
  2193. &lt;p&gt;Google is working on improving the user experience of the back gesture in Android. This effort is called &lt;a href=&quot;https://developer.android.com/design/ui/mobile/guides/patterns/predictive-back&quot;&gt;predictive back&lt;/a&gt;. The idea is to reveal (part of) the screen to which a successful back gesture will navigate while the swipe gesture is still in progress.&lt;/p&gt;
  2194.  
  2195.  
  2196.  
  2197. &lt;p&gt;In order for this to work properly, apps that currently intercept the back button/gesture will have to make some changes. We’ve started making the necessary modifications. But it’s still a work in progress.&lt;/p&gt;
  2198.  
  2199.  
  2200.  
  2201. &lt;h3&gt;Community Contributions&lt;/h3&gt;
  2202.  
  2203.  
  2204.  
  2205. &lt;p&gt;GitHub user &lt;a href=&quot;https://github.com/Silas217209&quot;&gt;Silas217209&lt;/a&gt; added support for mailto: URIs on NFC tags (&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/pull/7804&quot;&gt;#7804&lt;/a&gt;). This was a feature a user &lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/issues/7755&quot;&gt;requested&lt;/a&gt; in April.&lt;/p&gt;
  2206.  
  2207.  
  2208.  
  2209. &lt;p&gt;Thank you for the contribution! &lt;img alt=&quot;❤&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/2764.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
  2210.  
  2211.  
  2212.  
  2213. &lt;h3&gt;Releases&lt;/h3&gt;
  2214.  
  2215.  
  2216.  
  2217. &lt;p&gt;In May 2024 we published the following stable release:&lt;/p&gt;
  2218.  
  2219.  
  2220.  
  2221. &lt;ul&gt;
  2222. &lt;li&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/releases/tag/6.803&quot;&gt;K-9 Mail v6.803&lt;/a&gt; (2024-05-10)&lt;/li&gt;
  2223. &lt;/ul&gt;
  2224.  
  2225.  
  2226.  
  2227. &lt;p&gt;… and the following beta versions:&lt;/p&gt;
  2228.  
  2229.  
  2230.  
  2231. &lt;ul&gt;
  2232. &lt;li&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/releases/tag/6.900&quot;&gt;K-9 Mail v6.900 (beta)&lt;/a&gt; (2024-05-15)&lt;/li&gt;
  2233.  
  2234.  
  2235.  
  2236. &lt;li&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/releases/tag/6.901&quot;&gt;K-9 Mail v6.901 (beta)&lt;/a&gt; (2024-05-15)&lt;/li&gt;
  2237. &lt;/ul&gt;
  2238.  
  2239.  
  2240.  
  2241. &lt;p&gt;Thanks for reading, testing, and participating. We’ll see you next month! &lt;/p&gt;
  2242. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/06/thunderbird-for-android-k-9-mail-may-2024-progress-report/&quot;&gt;Thunderbird for Android / K-9 Mail: May 2024 Progress Report&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  2243. <pubDate>Tue, 04 Jun 2024 16:13:03 +0000</pubDate>
  2244. <dc:creator>cketti</dc:creator>
  2245. </item>
  2246. <item>
  2247. <title>Firefox Add-on Reviews: What’s the best ad blocker for you?</title>
  2248. <guid isPermaLink="true">https://addons.mozilla.org/blog/whats-the-best-ad-blocker-for-you/</guid>
  2249. <link>https://addons.mozilla.org/blog/whats-the-best-ad-blocker-for-you/</link>
  2250. <description>&lt;p&gt;So you’ve decided to do something about all those annoying ads you’re barraged with online. What pushed you over the edge? Auto-play video ads? Blaring banners? Tired of your music interrupted by a sudden sponsorship? Was it the realization they intentionally make the ‘Close’ buttons [x] on ads super tiny so you accidentally click the very thing you’re trying to avoid? &lt;/p&gt;
  2251.  
  2252.  
  2253.  
  2254. &lt;p&gt;There are a number of approaches you can take to blocking ads with a browser extension—it just depends on what you’re trying to achieve. Here are some of the best ad blockers based on different goals…&lt;/p&gt;
  2255.  
  2256.  
  2257.  
  2258. &lt;h3&gt;&lt;em&gt;I just want an awesome, all-purpose ad blocker.&lt;/em&gt;&lt;/h3&gt;
  2259.  
  2260.  
  2261.  
  2262. &lt;p&gt;Keep in mind a benefit of any decent ad blocker is that you should experience a faster web, since fewer ads means there’s less content for your browser to load. It’s a win-win: ditch awful ads while speeding up your experience. &lt;/p&gt;
  2263.  
  2264.  
  2265.  
  2266. &lt;p&gt;Also know, however, that ad blockers can occasionally break web pages when innocent content gets caught in the ad blocking crossfire. Some websites will even detect ad blockers and restrict access until you disable the blocker.&lt;/p&gt;
  2267.  
  2268.  
  2269.  
  2270. &lt;h4&gt;uBlock Origin&lt;/h4&gt;
  2271.  
  2272.  
  2273.  
  2274. &lt;p&gt;By any measure &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/ublock-origin/&quot; rel=&quot;noreferrer noopener&quot;&gt;uBlock Origin&lt;/a&gt; is one of the gold standards in ad blocking. Not only an elite ad blocker that stops nearly every type of ad by default—including video and pop-ups—uBlock Origin is lightweight, so it doesn’t consume much CPU and memory. &lt;/p&gt;
  2275.  
  2276.  
  2277.  
  2278. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2279.  
  2280.  
  2281.  
  2282. &lt;p&gt;Not much setup required. Works brilliantly out of the box with a matrix of built-in filters (though you can import your own), including a few that block more than just ads but hidden malware sources, as well. Clicking its toolbar icon activates the extension’s minimalist pop-up menu where at a glance you can see blocked tracking sources and how much of the overall page was nearly impacted by advertising. &lt;/p&gt;
  2283.  
  2284.  
  2285.  
  2286. &lt;p&gt;Unlike some ad blockers that allow what they consider “non-intrusive” ads through their filters, uBlock Origin has no advertising whitelist by default and tries to block all ads, unless you tell it otherwise.&lt;/p&gt;
  2287.  
  2288.  
  2289.  
  2290. &lt;h3&gt;AdBlock for Firefox&lt;/h3&gt;
  2291.  
  2292.  
  2293.  
  2294. &lt;p&gt;Refined extension design and strong content filters make &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/adblock-for-firefox/&quot; rel=&quot;noreferrer noopener&quot;&gt;AdBlock for Firefox&lt;/a&gt; a solid choice for people who don’t necessarily despise all ads (just the super annoying, invasive kind) and perhaps recognize that advertising, however imperfect it may be, provides essential compensation for your favorite content creators and platforms. &lt;/p&gt;
  2295.  
  2296.  
  2297.  
  2298. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2299.  
  2300.  
  2301.  
  2302. &lt;p&gt;AdBlock blocks all types of ads by default, but lets users opt in to &lt;a href=&quot;https://acceptableads.com/about/&quot; rel=&quot;noreferrer noopener&quot;&gt;Acceptable Ads&lt;/a&gt; by choice. Acceptable Ads is an independent vetting program where advertisers can participate to have their ads pass through content filters if they meet certain &lt;a href=&quot;https://acceptableads.com/standard/&quot; rel=&quot;noreferrer noopener&quot;&gt;criteria&lt;/a&gt;, like only allowing display ads that fit within strict size parameters, or text ads that adhere to tight aesthetic restrictions. &lt;/p&gt;
  2303.  
  2304.  
  2305.  
  2306. &lt;p&gt;AdBlock also makes it easy for you to elect to accept certain niche types of advertising, like ads that don’t use third party tracking, or ads on your favorite YouTube and Twitch channels. &lt;/p&gt;
  2307.  
  2308.  
  2309.  
  2310. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-166&quot; height=&quot;574&quot; src=&quot;https://mozamo.wpengine.com/wp-content/uploads/2021/06/blog_ads_adblock-1024x574.jpg&quot; width=&quot;1024&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;AdBlock makes it easy to allow ads on your favorite YouTube and Twitch channels.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  2311.  
  2312.  
  2313.  
  2314. &lt;p&gt;AdBlock’s free tier works great, but indeed some of our favorite features—like device syncing and the ability to replace ads with custom pics of adorable animals!—sit behind a paid service.&lt;/p&gt;
  2315.  
  2316.  
  2317.  
  2318. &lt;h3&gt;&lt;em&gt;I want ad blocking with a privacy boost.  &lt;/em&gt;&lt;/h3&gt;
  2319.  
  2320.  
  2321.  
  2322. &lt;p&gt;Arguably all ad blockers enhance your privacy and security, simply by virtue of the fact they block ads that have &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/mozilla-explains/online-advertising-strategies/&quot; rel=&quot;noreferrer noopener&quot;&gt;tracking tools embedded&lt;/a&gt; into them. Or even scarier than secretive corporate tracking is &lt;em&gt;malvertising&lt;/em&gt;—ads maliciously infected with malware unbeknownst to even the advertising companies themselves, until it’s &lt;a href=&quot;https://www.theguardian.com/technology/2016/mar/16/major-sites-new-york-times-bbc-ransomware-malvertising&quot; rel=&quot;noreferrer noopener&quot;&gt;too late&lt;/a&gt;. &lt;/p&gt;
  2323.  
  2324.  
  2325.  
  2326. &lt;p&gt;So while all good ad blockers are privacy protective by nature, here are some that take additional steps…&lt;/p&gt;
  2327.  
  2328.  
  2329.  
  2330. &lt;h4&gt;AdGuard AdBlocker&lt;/h4&gt;
  2331.  
  2332.  
  2333.  
  2334. &lt;p&gt;Highly effective ad blocker and anti-tracker that even works well on Facebook and YouTube. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/adguard-adblocker/&quot; rel=&quot;noreferrer noopener&quot;&gt;AdGuard&lt;/a&gt; also smartly allows certain types of ads by default—like search ads (since you might be looking for a specific product or service) and “self promotion” ads (e.g. special deals on site-specific shopping platforms like “50% off today only!” sales, etc.)&lt;/p&gt;
  2335.  
  2336.  
  2337.  
  2338. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2339.  
  2340.  
  2341.  
  2342. &lt;p&gt;AdGuard goes to great lengths to not only block the ads you don’t want, but the trackers trying to profile you. It automatically knows to block more than two million malicious websites and has one of the largest tracking filters in the game. &lt;/p&gt;
  2343.  
  2344.  
  2345.  
  2346. &lt;p&gt;Sick of social media ‘Like’ and ‘Share’ buttons crowding your page? Enable AdGuard’s social media filter and all social widgets are scrubbed away.&lt;/p&gt;
  2347.  
  2348.  
  2349.  
  2350. &lt;h4&gt;Ghostery&lt;/h4&gt;
  2351.  
  2352.  
  2353.  
  2354. &lt;p&gt;Block ads and hidden browser trackers by default. Ad blocking is but a part of &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/ghostery/&quot; rel=&quot;noreferrer noopener&quot;&gt;Ghostery&lt;/a&gt;’s utility. &lt;/p&gt;
  2355.  
  2356.  
  2357.  
  2358. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2359.  
  2360.  
  2361.  
  2362. &lt;p&gt;Ghostery is quite powerful as a “privacy ad blocker,” but it also scores big points for being user-friendly and easy to operate. It’s simple to set Ghostery’s various core features, like enabling/disabling Enhanced Ad Blocking and Anti-Tracking. &lt;/p&gt;
  2363.  
  2364.  
  2365.  
  2366. &lt;h3&gt;&lt;em&gt;YouTube ads are out of control.&lt;/em&gt;&lt;/h3&gt;
  2367.  
  2368.  
  2369.  
  2370. &lt;h4&gt;AdBlocker for YouTube&lt;/h4&gt;
  2371.  
  2372.  
  2373.  
  2374. &lt;p&gt;If you don’t want to bother with any ad blocking other than YouTube, &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/adblock-for-youtube/&quot; rel=&quot;noreferrer noopener&quot;&gt;AdBlocker for YouTube&lt;/a&gt; is the choice. &lt;/p&gt;
  2375.  
  2376.  
  2377.  
  2378. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2379.  
  2380.  
  2381.  
  2382. &lt;p&gt;It very simply and effectively removes both video and display ads from YouTube. Period. Enjoy a faster and more focused YouTube experience. &lt;/p&gt;
  2383.  
  2384.  
  2385.  
  2386. &lt;h3&gt;&lt;em&gt;I want pop-up ads to go away forever. &lt;/em&gt;&lt;/h3&gt;
  2387.  
  2388.  
  2389.  
  2390. &lt;h4&gt;Popup Blocker (strict)&lt;/h4&gt;
  2391.  
  2392.  
  2393.  
  2394. &lt;p&gt;This lightweight extension simply stops pop-ups from deploying. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/popup-blocker/&quot; rel=&quot;noreferrer noopener&quot;&gt;Popup Blocker (strict)&lt;/a&gt; conveniently holds them for you in the background—giving you the choice to interact with them if you want. &lt;/p&gt;
  2395.  
  2396.  
  2397.  
  2398. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2399.  
  2400.  
  2401.  
  2402. &lt;p&gt;You’ll see a notification alert when pop-ups are blocked. Just click the notification for options. &lt;/p&gt;
  2403.  
  2404.  
  2405.  
  2406. &lt;h3&gt;&lt;em&gt;My webmail is bloated with ads.&lt;/em&gt;&lt;/h3&gt;
  2407.  
  2408.  
  2409.  
  2410. &lt;h4&gt;Webmail Ad Blocker&lt;/h4&gt;
  2411.  
  2412.  
  2413.  
  2414. &lt;p&gt;Tired of ads thrown in your face when all you want to do is check email? &lt;/p&gt;
  2415.  
  2416.  
  2417.  
  2418. &lt;div class=&quot;addon-card&quot;&gt;&lt;/div&gt;
  2419.  
  2420.  
  2421.  
  2422. &lt;p&gt;Remove ads and get more breathing room in and around your inbox. &lt;a href=&quot;https://addons.mozilla.org/firefox/addon/webmail-ad-blocker/&quot; rel=&quot;noreferrer noopener&quot;&gt;Webmail Ad Blocker&lt;/a&gt; not only blocks all the box ads crowding the edges of your webmail, it also obliterates those sneaky ads that appear as unread messages. Ugh, gross. &lt;/p&gt;
  2423.  
  2424.  
  2425.  
  2426. &lt;p&gt;These are some of our favorite ad blockers. Feel free to explore more &lt;a href=&quot;https://addons.mozilla.org/firefox/extensions/category/privacy-security/&quot; rel=&quot;noreferrer noopener&quot;&gt;privacy &amp;amp; security extensions&lt;/a&gt; on &lt;em&gt;addons.mozilla.org&lt;/em&gt;.&lt;/p&gt;</description>
  2427. <pubDate>Tue, 04 Jun 2024 00:30:18 +0000</pubDate>
  2428. <dc:creator>Scott DeVaney</dc:creator>
  2429. </item>
  2430. <item>
  2431. <title>Firefox Nightly: In a nutshell – These Weeks in Firefox: Issue 162</title>
  2432. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1647</guid>
  2433. <link>https://blog.nightly.mozilla.org/2024/06/03/in-a-nutshell-these-weeks-in-firefox-issue-162/</link>
  2434. <description>&lt;h3 dir=&quot;ltr&quot;&gt;Highlights&lt;/h3&gt;
  2435. &lt;ul&gt;
  2436. &lt;li&gt;
  2437. &lt;p&gt;The final patch for the new and improved text and layout menu in Reader Mode has landed. Try it out the full feature by flipping the improved_text_menu.enabled pref to true.&lt;/p&gt;
  2438. &lt;/li&gt;
  2439. &lt;/ul&gt;
  2440. &lt;p&gt;&lt;img alt=&quot;A panel in Firefox's Reader Mode is shown for controlling layout and text on the page. The panel lets users control the content width, line spacing, character spacing, word spacing, and text alignment of the text in reader mode.&quot; class=&quot;aligncenter wp-image-1646 size-large&quot; height=&quot;1110&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/05/image1-600x1110.png&quot; width=&quot;600&quot; /&gt;&lt;/p&gt;
  2441. &lt;ul&gt;
  2442. &lt;li&gt;As part of the ongoing work related to improving cross-browser compatibility for Manifest Version 3 extensions, starting from Firefox 128:
  2443. &lt;ul&gt;
  2444. &lt;li&gt;Context menus created by MV3 and MV2 WebExtensions with an event page are now persisted and preserved across browser updates – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1771328&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1771328&lt;/a&gt;&lt;/li&gt;
  2445. &lt;li&gt;MV3 extensions can use optional_host_permissions to specify a set of additional host permissions that are expected to not be granted automatically as part of the install flow (unlike the ones specified in the host_permissions which are now optional but granted automatically at install time) – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1766026&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1766026&lt;/a&gt;&lt;/li&gt;
  2446. &lt;li&gt;Many improvements on content script matching and support for the match_origin_as_fallback content script option:&lt;/li&gt;
  2447. &lt;li&gt;Fixed issue with content scripts unable to attach sandboxed http/file pages – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1411641&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1411641&lt;/a&gt;&lt;/li&gt;
  2448. &lt;li&gt;Added support for match_origin_as_fallback, and as a side effect of that the ability to inject content scripts into webpages loaded from data URLs – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1475831&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1475831&lt;/a&gt; / &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1853411&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1853411&lt;/a&gt; / &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897113&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1897113&lt;/a&gt;&lt;/li&gt;
  2449. &lt;li&gt;declarativeNetRequest API improvements:
  2450. &lt;ul&gt;
  2451. &lt;li&gt;accepts rules with unrecognized keys to aid cross-browser and backward compatibility of DNR rules – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886608&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1886608&lt;/a&gt;&lt;/li&gt;
  2452. &lt;li&gt;New API methods getDisabledRules / updateStaticRules to allow extensions to individually disable/enable rules part of static rulesets – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1810762&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1810762&lt;/a&gt;&lt;/li&gt;
  2453. &lt;/ul&gt;
  2454. &lt;/li&gt;
  2455. &lt;li&gt;webRequest chrome compatibility improvement:
  2456. &lt;ul&gt;
  2457. &lt;li&gt;Added support for asyncBlocking listeners for webRequest.onAuthRequired – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889897&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1889897&lt;/a&gt;&lt;/li&gt;
  2458. &lt;/ul&gt;
  2459. &lt;/li&gt;
  2460. &lt;li&gt;Thanks to Dave Vandyke for following up with adding test coverage for runtime.onPerformanceWarning event on Android builds (in addition to have previously have implemented this new WebExtensions API event in Firefox) – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884584&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1884584&lt;/a&gt;&lt;/li&gt;
  2461. &lt;/ul&gt;
  2462. &lt;/li&gt;
  2463. &lt;/ul&gt;
  2464. &lt;h3 dir=&quot;ltr&quot;&gt;Friends of the Firefox team&lt;/h3&gt;
  2465. &lt;h3 dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20%28excluding%20employees%29&amp;amp;quicksearch=28354%2C1894556%2C1895490%2C1895530%2C1895732%2C1818054%2C1884584%2C1896249%2C1565089%2C1897418%2C1874917%2C1892669&amp;amp;list_id=17052395&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h3&gt;
  2466. &lt;p dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://github.com/niklasbaumgardner/NewContributorScraper&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Script to find new contributors from bug list&lt;/a&gt;&lt;/p&gt;
  2467. &lt;h4 dir=&quot;ltr&quot;&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  2468. &lt;ul&gt;
  2469. &lt;li&gt;Joseph Webster added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1818054&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;PiP captions in Vimeo player&lt;/a&gt;&lt;/li&gt;
  2470. &lt;li&gt;Leeya &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1895490&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;removed inline event handlers&lt;/a&gt; from all tabs menu&lt;/li&gt;
  2471. &lt;li&gt;Steve P &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894556&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;replaced idleTasksFinishedPromise&lt;/a&gt; with idleTasksFinished.promise&lt;/li&gt;
  2472. &lt;li dir=&quot;ltr&quot;&gt;🌟 kravantokh &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=28354&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;added option “browser.tabs.allow_transparent_browser”&lt;/a&gt; to “about:config” to stop forcing opaque backgrounds&lt;/li&gt;
  2473. &lt;li dir=&quot;ltr&quot;&gt;tannal2409 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1895530&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;removed security.allow_disjointed_external_uri_loads&lt;/a&gt; pref&lt;/li&gt;
  2474. &lt;li dir=&quot;ltr&quot;&gt;Ujas Thakkar &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1874917&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;renamed SearchTestUtils.promiseNewSearchEngine&lt;/a&gt; to SearchTestUtils.installOpenSearchEngine&lt;/li&gt;
  2475. &lt;/ul&gt;
  2476. &lt;h3 dir=&quot;ltr&quot;&gt;Project Updates&lt;/h3&gt;
  2477. &lt;h4 dir=&quot;ltr&quot;&gt;Accessibility&lt;/h4&gt;
  2478. &lt;ul&gt;
  2479. &lt;li dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/mochitest-plain/faq.html#how-to-debug-a-failing-accessibility-test-a11y-checks&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Mochitest FAQ page&lt;/a&gt; was updated to include tips and tricks for &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/mochitest-plain/faq.html#how-to-debug-a-failing-accessibility-test-a11y-checks&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;debugging a11y-checks&lt;/a&gt;, when &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/mochitest-plain/faq.html#my-patch-is-failing-a11y-checks-can-i-skip-them-for-now&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;skipping tests&lt;/a&gt; is appropriate and when &lt;a href=&quot;https://firefox-source-docs.mozilla.org/testing/mochitest-plain/faq.html#what-are-the-exceptions-from-a11y-checks-when-and-how-should-i-implement-them&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;adding an exception&lt;/a&gt; is needed (and how to do it)&lt;/li&gt;
  2480. &lt;/ul&gt;
  2481. &lt;h4 dir=&quot;ltr&quot;&gt;Lint, Docs and Workflow&lt;/h4&gt;
  2482. &lt;ul&gt;
  2483. &lt;li dir=&quot;ltr&quot;&gt;We’ve improved the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897770&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;sjs environment definitions&lt;/a&gt;. sjs files no longer pick up the test environment, so you won’t have to ignore issues importing setTimeout &amp;amp; other items.&lt;/li&gt;
  2484. &lt;li dir=&quot;ltr&quot;&gt;Temporary rule adjustments (e.g. disabling on specific files, or setting to warn) for rollouts &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897898&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;now have their own file&lt;/a&gt; – &lt;a href=&quot;https://searchfox.org/mozilla-central/rev/893f350260faac2ee6bf2b14c627d55eb2babfb0/.eslintrc-rollouts.js&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;.eslintrc-rollouts.js&lt;/a&gt;. This is separated out from the main configuration so that it is clearer that these are temporary and are part of rollouts.&lt;/li&gt;
  2485. &lt;li dir=&quot;ltr&quot;&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1898556&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;eslint-plugin-file-header has been removed from use&lt;/a&gt;. This was doing the same job as the license linter, but only for devtools.&lt;/li&gt;
  2486. &lt;li dir=&quot;ltr&quot;&gt;A use of a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897891&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;deprecated nodejs function&lt;/a&gt; has been removed from eslint-plugin-mozilla, and :aminomancer &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889350&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;removed the chrome-worker environment&lt;/a&gt; that was broken and that we weren’t using anyway.&lt;/li&gt;
  2487. &lt;/ul&gt;
  2488. &lt;h4 dir=&quot;ltr&quot;&gt;Migration Improvements&lt;/h4&gt;
  2489. &lt;ul&gt;
  2490. &lt;li dir=&quot;ltr&quot;&gt;Work is ongoing for settings / preferences UI&lt;/li&gt;
  2491. &lt;li dir=&quot;ltr&quot;&gt;mconley is tackling bits and pieces for encrypting the backup file (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897278&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1897278&lt;/a&gt;) and preparing the archive file (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1896715&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1896715&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1897498&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1897498&lt;/a&gt;)&lt;/li&gt;
  2492. &lt;/ul&gt;
  2493. &lt;h4 dir=&quot;ltr&quot;&gt;New Tab Page&lt;/h4&gt;
  2494. &lt;ul&gt;
  2495. &lt;li dir=&quot;ltr&quot;&gt;Wallpapers v2 work is on going, adding categories and new wallpaper options&lt;/li&gt;
  2496. &lt;li dir=&quot;ltr&quot;&gt;Weather location picker work is also ongoing, working with DISCO team to expand the accuweather API.(&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893007&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Bug 1893007&lt;/a&gt;)&lt;/li&gt;
  2497. &lt;/ul&gt;
  2498. &lt;h4 dir=&quot;ltr&quot;&gt;Search and Navigation&lt;/h4&gt;
  2499. &lt;ul&gt;
  2500. &lt;li dir=&quot;ltr&quot;&gt;Daisuke enabled the history flooding prevention feature in Nightly.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1895831&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt; Bug 1895831&lt;/a&gt;&lt;/li&gt;
  2501. &lt;li dir=&quot;ltr&quot;&gt;Daisuke modified the favicons service when using setFaviconForPage to throw an error if the favicon was too large and can’t be optimized.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894821&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt; Bug 1894821&lt;/a&gt;&lt;/li&gt;
  2502. &lt;li dir=&quot;ltr&quot;&gt;Marco fixed a bug where opening the address bar would not hide already open menu popups.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1626741&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt; Bug 1626741&lt;/a&gt;&lt;/li&gt;
  2503. &lt;li dir=&quot;ltr&quot;&gt;Marco also fixed a bug related to the trim https feature where selecting a partial string from the beginning of the URL would also select the protocol that appears when the input field is focused.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893871&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt; Bug 1893871&lt;/a&gt;&lt;/li&gt;
  2504. &lt;li dir=&quot;ltr&quot;&gt;Karandeep updated the onEngagement event listener in UrlbarProviders to have this event triggered for its own results.&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857236&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt; Bug 1857236&lt;/a&gt;&lt;/li&gt;
  2505. &lt;/ul&gt;</description>
  2506. <pubDate>Mon, 03 Jun 2024 17:29:49 +0000</pubDate>
  2507. <dc:creator>Katherine Patenio</dc:creator>
  2508. </item>
  2509. <item>
  2510. <title>The Mozilla Blog: Building open, private AI with the Mozilla Builders Accelerator</title>
  2511. <guid isPermaLink="false">https://blog.mozilla.org/?p=75052</guid>
  2512. <link>https://blog.mozilla.org/en/mozilla/mozilla-builders-accelerator/</link>
  2513. <description>&lt;p&gt;AI tools are more accessible than ever. Big tech companies have made this possible, but their focus on growth and monetization prioritizes large-scale products. This leaves smaller AI projects in the shadows, despite their potential to better serve individual needs.&lt;/p&gt;
  2514.  
  2515.  
  2516.  
  2517. &lt;p&gt;That’s why we’re excited to introduce the &lt;a href=&quot;https://future.mozilla.org/builders/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Mozilla Builders Accelerator&lt;/a&gt;. This program is designed to empower independent AI and machine learning engineers with the resources and support they need to thrive. It aims to cultivate a more innovative AI ecosystem, and it’s one of &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozillas-biggest-ai-moments/&quot;&gt;Mozilla’s key initiatives&lt;/a&gt; to make AI meaningfully impactful — alongside efforts like &lt;a href=&quot;http://Mozilla.ai&quot;&gt;Mozilla.ai&lt;/a&gt;, the &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-launches-responsible-ai-challenge/&quot;&gt;Responsible AI Challenge&lt;/a&gt; and the &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-rise25-ai-nominations/&quot;&gt;Rise25 Awards&lt;/a&gt;.&lt;/p&gt;
  2518.  
  2519.  
  2520.  
  2521. &lt;p&gt;The Mozilla Builders Accelerator’s inaugural theme is local AI, which involves running AI models and applications directly on personal devices like laptops, smartphones, or edge devices rather than depending on cloud-based services.&lt;/p&gt;
  2522.  
  2523.  
  2524.  
  2525. &lt;h3&gt;&lt;strong&gt;Up to $100,000 in funding &lt;/strong&gt;&lt;/h3&gt;
  2526.  
  2527.  
  2528.  
  2529. &lt;p&gt;Projects selected for the Mozilla Builders Accelerator are eligible to receive up to $100,000 in funding. We’re also creating an environment where independent developers can flourish. So in addition to financial backing, the Mozilla Builders Accelerator will offer mentorship, foster community engagement and provide increased visibility for projects. &lt;/p&gt;
  2530.  
  2531.  
  2532.  
  2533. &lt;p&gt;Participants will engage in a structured 12-week program focused on the design, build and test phases of their projects, followed by an alumni phase for ongoing support. The program will include instructional sessions, guided workshops and practical assignments. Additionally, there will be opportunities to showcase projects through Mozilla’s channels and events, culminating in a demo day.&lt;/p&gt;
  2534.  
  2535.  
  2536.  
  2537. &lt;h3&gt;&lt;strong&gt;Why local AI?&lt;/strong&gt;&lt;/h3&gt;
  2538.  
  2539.  
  2540.  
  2541. &lt;p&gt;We chose Local AI as the theme for the Accelerator’s first cohort because it aligns with our core values of privacy, user empowerment, and open source innovation. This method offers several benefits including:&lt;/p&gt;
  2542.  
  2543.  
  2544.  
  2545. &lt;ul&gt;
  2546. &lt;li&gt;&lt;strong&gt;Privacy:&lt;/strong&gt; Data stays on the local device, minimizing exposure to potential breaches and misuse.&lt;/li&gt;
  2547.  
  2548.  
  2549.  
  2550. &lt;li&gt;&lt;strong&gt;Agency: &lt;/strong&gt;Users have greater control over their AI tools and data.&lt;/li&gt;
  2551.  
  2552.  
  2553.  
  2554. &lt;li&gt;&lt;strong&gt;Cost-effectiveness:&lt;/strong&gt; Reduces reliance on expensive cloud infrastructure, lowering costs for developers and users.&lt;/li&gt;
  2555.  
  2556.  
  2557.  
  2558. &lt;li&gt;&lt;strong&gt;Reliability:&lt;/strong&gt; Local processing ensures continuous operation even without internet connectivity.&lt;/li&gt;
  2559. &lt;/ul&gt;
  2560.  
  2561.  
  2562.  
  2563. &lt;h3&gt;&lt;strong&gt;Mozilla’s commitment to open source and AI innovation&lt;/strong&gt;&lt;/h3&gt;
  2564.  
  2565.  
  2566.  
  2567. &lt;p&gt;For over 25 years, Mozilla has championed the internet as a global public resource — open and accessible to everyone. This dedication has fostered a thriving community committed to innovation and collaboration. We believe the future of AI should be open, transparent and inclusive.&lt;/p&gt;
  2568.  
  2569.  
  2570.  
  2571. &lt;p&gt;With initiatives like &lt;a href=&quot;http://mozilla.ai&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Mozilla.ai&lt;/a&gt; and &lt;a href=&quot;https://hacks.mozilla.org/2023/11/introducing-llamafile/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Llamafile&lt;/a&gt;, we’ve made significant strides in advancing open source AI. The Mozilla Builders Accelerator is our next step in this journey. &lt;/p&gt;
  2572.  
  2573.  
  2574.  
  2575. &lt;p&gt;We invite AI and ML engineers dedicated to open source and local AI solutions to apply for the Mozilla Builders Accelerator. Join us in shaping the future of AI with openness and innovation at its core. Applications are open through Aug. 1, 2024. For more information and to apply, &lt;a href=&quot;https://future.mozilla.org/builders/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;visit here&lt;/a&gt;.&lt;/p&gt;
  2576. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-builders-accelerator/&quot;&gt;Building open, private AI with the Mozilla Builders Accelerator&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  2577. <pubDate>Mon, 03 Jun 2024 16:09:37 +0000</pubDate>
  2578. <dc:creator>Mozilla</dc:creator>
  2579. </item>
  2580. <item>
  2581. <title>Niko Matsakis: The borrow checker within</title>
  2582. <guid isPermaLink="false">https://smallcultfollowing.com/babysteps/blog/2024/06/02/the-borrow-checker-within/</guid>
  2583. <link>https://smallcultfollowing.com/babysteps/blog/2024/06/02/the-borrow-checker-within/?utm_source=atom_feed</link>
  2584. <description>&lt;p&gt;This post lays out a 4-part roadmap for the borrow checker that I call “the borrow checker within”. These changes are meant to help Rust become a better version of itself, enabling patterns of code which feel like they fit within Rust’s &lt;em&gt;spirit&lt;/em&gt;, but run afoul of the letter of its &lt;em&gt;law&lt;/em&gt;. I feel fairly comfortable with the design for each of these items, though work remains to scope out the details. My belief is that a-mir-formality will make a perfect place to do that work.&lt;/p&gt;
  2585. &lt;h3&gt;Rust’s &lt;em&gt;spirit&lt;/em&gt; is &lt;em&gt;mutation xor sharing&lt;/em&gt;&lt;/h3&gt;
  2586. &lt;p&gt;When I refer to the &lt;em&gt;spirit&lt;/em&gt; of the borrow checker, I mean the rules of &lt;em&gt;mutation xor sharing&lt;/em&gt; that I see as Rust’s core design ethos. This basic rule—that when you are mutating a value using the variable &lt;code&gt;x&lt;/code&gt;, you should not also be reading that data through a variable &lt;code&gt;y&lt;/code&gt;—is what enables Rust’s memory safety guarantees and also, I think, contributes to its overall sense of “if it compiles, it works”.&lt;/p&gt;
  2587. &lt;p&gt;&lt;em&gt;Mutation xor sharing&lt;/em&gt; is, in some sense, neither necessary nor sufficient. It’s not &lt;em&gt;necessary&lt;/em&gt; because there are many programs (like every program written in Java) that share data like crazy and yet still work fine&lt;sup id=&quot;fnref:1&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;. It’s also not &lt;em&gt;sufficient&lt;/em&gt; in that there are many problems that demand some amount of sharing – which is why Rust has “backdoors” like &lt;code&gt;Arc&amp;lt;Mutex&amp;lt;T&amp;gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;AtomicU32&lt;/code&gt;, and—the ultimate backdoor of them all—&lt;code&gt;unsafe&lt;/code&gt;.&lt;/p&gt;
  2588. &lt;p&gt;But to me the biggest surprise from working on Rust is how often this &lt;em&gt;mutation xor sharing&lt;/em&gt; pattern is “just right”, once you learn how to work with it&lt;sup id=&quot;fnref:2&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt;. The other surprise has been seeing the benefits over time: programs written in this style are fundamentally “less surprising” which, in turn, means they are more maintainable over time.&lt;/p&gt;
  2589. &lt;p&gt;In Rust today though there are a number of patterns that are rejected by the borrow checker despite fitting the &lt;em&gt;mutation xor sharing&lt;/em&gt; pattern. Chipping away at this gap, helping to make the borrow checker’s rules a more perfect reflection of &lt;em&gt;mutation xor sharing&lt;/em&gt;, is what I mean by &lt;em&gt;the borrow checker within&lt;/em&gt;.&lt;/p&gt;
  2590. &lt;blockquote&gt;
  2591. &lt;p&gt;I saw the angel in the marble and carved until I set him free. — Michelangelo&lt;/p&gt;
  2592. &lt;/blockquote&gt;
  2593. &lt;h3&gt;OK, enough inspirational rhetoric, let’s get to the code.&lt;/h3&gt;
  2594. &lt;p&gt;Ahem, right. Let’s do that.&lt;/p&gt;
  2595. &lt;h3&gt;Step 1: Conditionally return references easily with “Polonius”&lt;/h3&gt;
  2596. &lt;p&gt;Rust 2018 introduced &lt;a href=&quot;https://rust-lang.github.io/rfcs/2094-nll.html&quot;&gt;“non-lexical lifetimes”&lt;/a&gt; — this rather cryptic name refers to an extension of the borrow checker so that it understood the control flow within functions much more deeply. This change made using Rust a much more “fluid” experience, since the borrow checker was able to accept a lot more code.&lt;/p&gt;
  2597. &lt;p&gt;But NLL does not handle one important case&lt;sup id=&quot;fnref:3&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:3&quot;&gt;3&lt;/a&gt;&lt;/sup&gt;: conditionally returning references. Here is the canonical example, taken from Remy’s &lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2023/10/06/polonius-update.html&quot;&gt;Polonius update blog post&lt;/a&gt;:&lt;/p&gt;
  2598. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'r&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Hash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Copy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2599. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'r&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HashMap&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2600. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2601. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'r&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2602. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;match&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_mut&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2603. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Some&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2604. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;None&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2605. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;insert&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;default&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;());&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2606. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//  ------ 💥 Gets an error today,
  2607. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//            but not with polonius
  2608. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;get_mut&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;unwrap&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2609. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2610. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2611. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;  
  2612. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2023/10/06/polonius-update.html&quot;&gt;Remy’s post&lt;/a&gt; gives more details about why this occurs and how we plan to fix it. It’s mostly accurate except that the timeline has  stretched on more than I’d like (of course). But we are making steady progress these days.&lt;/p&gt;
  2613. &lt;h3&gt;Step 2: A syntax for lifetimes based on places&lt;/h3&gt;
  2614. &lt;p&gt;The next step is to add an explicit syntax for lifetimes based on “place expressions” (e.g., &lt;code&gt;x&lt;/code&gt; or &lt;code&gt;x.y&lt;/code&gt;). I wrote about this in my post &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2024/03/04/borrow-checking-without-lifetimes/&quot;&gt;Borrow checking without lifetimes&lt;/a&gt;. This is basically taking the formulation that underlies Polonius and adding a syntax.&lt;/p&gt;
  2615. &lt;p&gt;The idea would be that, in addition to the abstract lifetime parameters we have today, you could reference program variables and even fields as the “lifetime” of a reference. So you could write &lt;code&gt;’x&lt;/code&gt; to indicate a value that is “borrowed from the variable &lt;code&gt;x&lt;/code&gt;”. You could also write &lt;code&gt;’x.y&lt;/code&gt; to indicate that it was borrowed from the field &lt;code&gt;y&lt;/code&gt; of &lt;code&gt;x&lt;/code&gt;, and even &lt;code&gt;'(x.y, z)&lt;/code&gt; to mean borrowed from &lt;em&gt;either&lt;/em&gt; &lt;code&gt;x.y&lt;/code&gt; or &lt;code&gt;z&lt;/code&gt;. For example:&lt;/p&gt;
  2616. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2617. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;manufacturer&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2618. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2619. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2620. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
  2621. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2622. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;new_widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;nc&quot;&gt;Widget&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2623. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name_suffix&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;’&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2624. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;                       &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// ——- borrowed from “name”
  2625. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model_prefix&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;err&quot;&gt;’&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;model&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2626. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;                         &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// —————- borrowed from “self.model”
  2627. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2628. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2629. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This would make many of lifetime parameters we write today unnecessary. For example, the classic Polonius example where the function takes a parameter &lt;code&gt;map: &amp;amp;mut Hashmap&amp;lt;K, V&amp;gt;&lt;/code&gt; and returns a reference into the map can be written as follows:&lt;/p&gt;
  2630. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;get_default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Hash&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Eq&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Copy&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Default&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2631. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;map&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;HashMap&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2632. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;key&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;K&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2633. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'map&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;V&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2634. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//---- &quot;borrowed from the parameter map&quot;
  2635. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2636. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2637. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This syntax is more convenient — but I think its bigger impact will be to make Rust more teachable and learnable. Right now, lifetimes are in a tricky place, because&lt;/p&gt;
  2638. &lt;ul&gt;
  2639. &lt;li&gt;they represent a concept (spans of code) that isn’t normal for users to think explicitly about and&lt;/li&gt;
  2640. &lt;li&gt;they don’t have any kind of syntax.&lt;/li&gt;
  2641. &lt;/ul&gt;
  2642. &lt;p&gt;Syntax is useful when learning because it allows you to make everything explicit, which is a critical intermediate step to really internalizing a concept — what boats memorably called the &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/2071#issuecomment-329026602&quot;&gt;dialectical ratchet&lt;/a&gt;. Anecdotally I’ve been using a “place-based” syntax when teaching people Rust and I’ve found it is much quicker for them to grasp it.&lt;/p&gt;
  2643. &lt;h3&gt;Step 3: View types and interprocedural borrows&lt;/h3&gt;
  2644. &lt;p&gt;The next piece of the plan is &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2021/11/05/view-types/&quot;&gt;view types&lt;/a&gt;, which are a way to have functions declare which fields they access. Consider a struct like &lt;code&gt;WidgetFactory&lt;/code&gt;…&lt;/p&gt;
  2645. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2646. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;: &lt;span class=&quot;kt&quot;&gt;usize&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2647. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widgets&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Widget&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2648. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2649. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;…which has a helper function &lt;code&gt;increment_counter&lt;/code&gt;…&lt;/p&gt;
  2650. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2651. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;increment_counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2652. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2653. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2654. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2655. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Today, if we want to iterate over the widgets and occasionally increment the counter with &lt;code&gt;increment_counter&lt;/code&gt;, &lt;a href=&quot;https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021&amp;amp;gist=afeb1a8021ab1abf73639ffea0bbcae3&quot;&gt;we will encounter an error&lt;/a&gt;:&lt;/p&gt;
  2656. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2657. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;increment_counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2658. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    
  2659. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;pub&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;count_widgets&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2660. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widgets&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2661. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;widget&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;should_be_counted&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2662. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;increment_counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2663. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// ^ 💥 Can't borrow self as mutable
  2664. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;                &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//      while iterating over `self.widgets`
  2665. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;            &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2666. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    
  2667. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2668. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2669. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The problem is that the borrow checker operates one function at a time. It doesn’t know precisely which fields &lt;code&gt;increment_counter&lt;/code&gt; is going to mutate. So it conservatively assumes that &lt;code&gt;self.widgets&lt;/code&gt; may be changed, and that’s not allowed. There are a number of workarounds today, such as writing a “free function” that doesn’t take &lt;code&gt;&amp;amp;mut self&lt;/code&gt; but rather takes references to the individual fields (e.g., &lt;code&gt;counter: &amp;amp;mut usize&lt;/code&gt;) or even collecting those references into a “view struct” (e.g., &lt;code&gt;struct WidgetFactoryView&amp;lt;'a&amp;gt; { widgets: &amp;amp;'a [Widget], counter: &amp;amp;'a mut usize }&lt;/code&gt;) but these are non-obvious, annoying, and non-local (they require changing significant parts of your code)&lt;/p&gt;
  2670. &lt;p&gt;&lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2021/11/05/view-types/&quot;&gt;View types&lt;/a&gt; extend struct types so that instead of just having a type like &lt;code&gt;WidgetFactory&lt;/code&gt;, you can have a “view” on that type that included only a subset of the fields, like &lt;code&gt;{counter} WidgetFactory&lt;/code&gt;. We can use this to modify &lt;code&gt;increment_counter&lt;/code&gt; so that it declares that it will only access the field &lt;code&gt;counter&lt;/code&gt;:&lt;/p&gt;
  2671. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;impl&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;WidgetFactory&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2672. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;increment_counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2673. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//               -------------------
  2674. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// Equivalent to `self: &amp;amp;mut {counter} WidgetFactory`
  2675. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;counter&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;+=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2676. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2677. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2678. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This allows the compiler to compile &lt;code&gt;count_widgets&lt;/code&gt; just fine, since it can see that iterating over &lt;code&gt;self.widgets&lt;/code&gt; while modifying &lt;code&gt;self.counter&lt;/code&gt; is not a problem.&lt;sup id=&quot;fnref:4&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:4&quot;&gt;4&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  2679. &lt;h4&gt;View types also address phased initialization&lt;/h4&gt;
  2680. &lt;p&gt;There is another place where the borrow checker’s rules fall short: &lt;em&gt;phased initialization&lt;/em&gt;. Rust today follows the functional programming language style of requiring values for all the fields of a struct when it is created. Mostly this is fine, but sometimes you have structs where you want to initialize some of the fields and then invoke helper functions, much like &lt;code&gt;increment_counter&lt;/code&gt;, to create the remainder. In this scenario you are stuck, because those helper functions cannot take a reference to the struct since you haven’t created the struct yet. The workarounds (free functions, intermediate struct types) are very similar.&lt;/p&gt;
  2681. &lt;h4&gt;Start with private functions, consider scaling to public functions&lt;/h4&gt;
  2682. &lt;p&gt;View types as described here have limitations. Because the types involve the names of fields, they are not really suitable for public interfaces. They could also be annoying to use in practice because one will have sets of fields that go together that have to be manually copied and pasted. All of this is true but I think something that can be addressed later (e.g., with named groups of fields).&lt;/p&gt;
  2683. &lt;p&gt;What I’ve found is that the majority of times that I want to use view types, it is in &lt;em&gt;private&lt;/em&gt; functions. Private methods often do little bits of logic and make use of the struct’s internal structure. Public methods in contrast tend to do larger operations and to hide that internal structure from users. This isn’t a universal law – sometimes I have public functions that should be callable concurrently – but it happens less.&lt;/p&gt;
  2684. &lt;p&gt;There is also an advantage to the current behavior for public functions in particular: it preserves forward compatibilty. Taking &lt;code&gt;&amp;amp;mut self&lt;/code&gt; (versus some subset of fields) means that the function can change the set of fields that it uses without affecting its clients. This is not a concern for private functions.&lt;/p&gt;
  2685. &lt;h3&gt;Step 4: Internal references&lt;/h3&gt;
  2686. &lt;p&gt;Rust today cannot support structs whose fields refer to data owned by another. This gap is partially closed through crates like &lt;a href=&quot;https://crates.io/crates/rental&quot;&gt;rental&lt;/a&gt; (no longer maintained), though more often by &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2015/04/06/modeling-graphs-in-rust-using-vector-indices/&quot;&gt;modeling internal references with indices&lt;/a&gt;. We also have &lt;code&gt;Pin&lt;/code&gt;, which covers the related (but even harder) problem of immobile data.&lt;/p&gt;
  2687. &lt;p&gt;I’ve been chipping away at a solution to this problem for some time. I won’t be able to lay it out in full in this post, but I can sketch what I have in mind, and lay out more details in future posts (I have done some formalization of this, enough to convince myself it works).&lt;/p&gt;
  2688. &lt;p&gt;As an example, imagine that we have some kind of &lt;code&gt;Message&lt;/code&gt; struct consisting of a big string along with several references into that string. You could model that like so:&lt;/p&gt;
  2689. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2690. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2691. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2692. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2693. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2694. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This message would be constructed in the usual way:&lt;/p&gt;
  2695. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;: &lt;span class=&quot;nb&quot;&gt;String&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;parse_text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2696. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;parse_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2697. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2698. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;where &lt;code&gt;parse_message&lt;/code&gt; is some function like&lt;/p&gt;
  2699. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;k&quot;&gt;fn&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;parse_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;: &lt;span class=&quot;kp&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;-&amp;gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2700. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;Vec&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2701. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;'text&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;str&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2702. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2703. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;mut&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;fm&quot;&gt;vec!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[];&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2704. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// ...
  2705. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;headers&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2706. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2707. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Note that &lt;code&gt;Message&lt;/code&gt; doesn’t have any lifetime parameters – it doesn’t need any, because it doesn’t borrow from anything outside of itself. In fact, &lt;code&gt;Message: 'static&lt;/code&gt; is true, which means that I could send this &lt;code&gt;Message&lt;/code&gt; to another thread:&lt;/p&gt;
  2708. &lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;chroma&quot; tabindex=&quot;0&quot;&gt;&lt;code class=&quot;language-rust&quot;&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;// A channel of `Message` values:
  2709. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;sync&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;mpsc&lt;/span&gt;::&lt;span class=&quot;n&quot;&gt;channel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2710. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
  2711. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// A thread to consume those values:
  2712. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;std&lt;/span&gt;:&lt;span class=&quot;err&quot;&gt;🧵&lt;/span&gt;:&lt;span class=&quot;nc&quot;&gt;spawn&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;move&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;||&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2713. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;k&quot;&gt;in&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;rx&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2714. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// `message` here has type `Message`
  2715. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;        &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;process&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;body&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2716. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2717. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;});&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2718. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;
  2719. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;// Produce them:
  2720. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;c1&quot;&gt;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;loop&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2721. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;kd&quot;&gt;let&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;: &lt;span class=&quot;nc&quot;&gt;Message&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;w&quot;&gt; &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;next_message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2722. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;    &lt;/span&gt;&lt;span class=&quot;n&quot;&gt;tx&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;send&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2723. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;line&quot;&gt;&lt;span class=&quot;cl&quot;&gt;&lt;span class=&quot;w&quot;&gt;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;w&quot;&gt;
  2724. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3&gt;How far along are each of these ideas?&lt;/h3&gt;
  2725. &lt;p&gt;Roughly speaking…&lt;/p&gt;
  2726. &lt;ul&gt;
  2727. &lt;li&gt;Polonius – ‘just’ engineering&lt;/li&gt;
  2728. &lt;li&gt;Syntax – ‘just’ bikeshedding&lt;/li&gt;
  2729. &lt;li&gt;View types – needs modeling, one or two open questions in my mind&lt;sup id=&quot;fnref:5&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:5&quot;&gt;5&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
  2730. &lt;li&gt;Internal references – modeled in some detail for a simplified variant of Rust, have to port to Rust and explain the assumptions I made along the way&lt;sup id=&quot;fnref:6&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:6&quot;&gt;6&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
  2731. &lt;/ul&gt;
  2732. &lt;p&gt;…in other words, I’ve done enough work to to convince myself that these designs are practical, but plenty of work remains. :)&lt;/p&gt;
  2733. &lt;h3&gt;How do we prioritize this work?&lt;/h3&gt;
  2734. &lt;p&gt;Whenever I think about investing in borrow checker ergonomics and usability, I feel a bit guilty. Surely something so fun to think about must be a bad use of my time.&lt;/p&gt;
  2735. &lt;p&gt;Conversations at RustNL shifted my perspective. When I asked people about pain points, I kept hearing the same few themes arise, especially from people trying building applications or GUIs.&lt;/p&gt;
  2736. &lt;p&gt;I now think I had fallen victim to the dreaded “curse of knowledge”, forgetting how frustrating it can be to run into a limitation of the borrow checker and not know how to resolve it.&lt;/p&gt;
  2737. &lt;h3&gt;Conclusion&lt;/h3&gt;
  2738. &lt;p&gt;This post proposes four changes attacking some very long-standing problems:&lt;/p&gt;
  2739. &lt;ul&gt;
  2740. &lt;li&gt;&lt;strong&gt;Conditionally returned references&lt;/strong&gt;, solved by &lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2023/10/06/polonius-update.html&quot;&gt;Polonius&lt;/a&gt;&lt;/li&gt;
  2741. &lt;li&gt;&lt;strong&gt;No or awkward syntax for lifetimes&lt;/strong&gt;, solved by an &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2024/03/04/borrow-checking-without-lifetimes/&quot;&gt;explicit lifetime syntax&lt;/a&gt;&lt;/li&gt;
  2742. &lt;li&gt;&lt;strong&gt;Helper methods whose body must be inlined&lt;/strong&gt;, solved by &lt;a href=&quot;https://smallcultfollowing.com/babysteps/blog/2021/11/05/view-types/&quot;&gt;view types&lt;/a&gt;&lt;/li&gt;
  2743. &lt;li&gt;&lt;strong&gt;Can’t “package up” a value and references into that value&lt;/strong&gt;, solved by interior references&lt;/li&gt;
  2744. &lt;/ul&gt;
  2745. &lt;p&gt;You may have noticed that these changes build on one another. Polonius remodels borrowing in terms of “place expressions” (variables, fields). This enables an explicit lifetime syntax, which in turn is a key building block for interior references. View types in turn let us expose helper methods that can operate on ‘partially borrowed’ (or even partially initialized!) values.&lt;/p&gt;
  2746. &lt;h4&gt;Why these changes won’t make Rust “more complex” (or, if they do, it’s worth it)&lt;/h4&gt;
  2747. &lt;p&gt;You might wonder about the impact of these changes on Rust’s complexity. Certainly they grow the set of things the type system can express. But in my mind they, like &lt;a href=&quot;https://rust-lang.github.io/rfcs/2094-nll.html&quot;&gt;NLL&lt;/a&gt; before them, fall into that category of changes that will actually make using Rust feel &lt;em&gt;simpler&lt;/em&gt; overall.&lt;/p&gt;
  2748. &lt;p&gt;To see why, put yourself in the shoes of a user today who has written any one of the “obviously correct” programs we’ve seen in this post – for example, &lt;a href=&quot;https://play.rust-lang.org/?version=stable&amp;amp;mode=debug&amp;amp;edition=2021&amp;amp;gist=c9f5902084a631a8af5b769c094b69b6&quot;&gt;the &lt;code&gt;WidgetFactory&lt;/code&gt; code we saw in view types&lt;/a&gt;. Compiling this code today gives an error:&lt;/p&gt;
  2749. &lt;pre tabindex=&quot;0&quot;&gt;&lt;code&gt;error[E0502]: cannot borrow `*self` as mutable
  2750.              because it is also borrowed as immutable
  2751.  --&amp;gt; src/lib.rs:14:17
  2752.   |
  2753. 12 | for widget in &amp;amp;self.widgets {
  2754.   |               -------------
  2755.   |               |
  2756.   |               immutable borrow occurs here
  2757.   |               immutable borrow later used here
  2758. 13 |     if widget.should_be_counted() {
  2759. 14 |         self.increment_counter();
  2760.   |         ^^^^^^^^^^^^^^^^^^^^^^^^
  2761.   |         |
  2762.   |         mutable borrow occurs here
  2763. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Despite all our efforts to render it well, this error is &lt;strong&gt;inherently confusing&lt;/strong&gt;. It is not possible to explain why &lt;code&gt;WidgetFactory&lt;/code&gt; doesn’t work from an “intuitive” point-of-view because &lt;strong&gt;conceptually it &lt;em&gt;ought&lt;/em&gt; to work&lt;/strong&gt;, it just runs up against a limit of our type system.&lt;/p&gt;
  2764. &lt;p&gt;The only way to understand why &lt;code&gt;WidgetFactory&lt;/code&gt; doesn’t compile is to dive deeper into the engineering details of how the Rust type system functions, and that is precisely the kind of thing people &lt;em&gt;don’t&lt;/em&gt; want to learn. Moreover, once you’ve done that deep dive, what is your reward? At best you can devise an awkward workaround. Yay 🥳.&lt;sup id=&quot;fnref:7&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:7&quot;&gt;7&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  2765. &lt;p&gt;Now imagine what happens with view types. You still get an error, but now that error can come with a suggestion:&lt;/p&gt;
  2766. &lt;pre tabindex=&quot;0&quot;&gt;&lt;code&gt;help: consider declaring the fields
  2767.      accessed by `increment_counter` so that
  2768.      other functions can rely on that
  2769. 7 | fn increment_counter(&amp;amp;mut self) {
  2770.   |                      ---------
  2771.   |                      |
  2772.   |      help: annotate with accessed fields: `&amp;amp;mut {counter} self`
  2773. &lt;/code&gt;&lt;/pre&gt;&lt;p&gt;You now have two choices. First, you can apply the suggestion and move on – your code works! Next, at your leisure, you can dig in a bit deeper and understand what’s going on. You can learn about the semver hazards that motivate an explicit declaration here.&lt;/p&gt;
  2774. &lt;p&gt;Yes, you’ve learned a new detail of the type system, but you did so &lt;strong&gt;on your schedule&lt;/strong&gt; and, where extra annotations were required, they were well-motivated. Yay 🥳!&lt;sup id=&quot;fnref:8&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:8&quot;&gt;8&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  2775. &lt;h4&gt;Reifying the borrow checker into types&lt;/h4&gt;
  2776. &lt;p&gt;There is another theme running through here: moving the borrow checker analysis out from the compiler’s mind and into types that can be expressed. Right now, all types always represent fully initialized, unborrowed values. There is no way to express a type that captures the state of being in the midst of iterating over something or having moved one or two fields but not all of them. These changes address that gap.&lt;sup id=&quot;fnref:9&quot;&gt;&lt;a class=&quot;footnote-ref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fn:9&quot;&gt;9&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
  2777. &lt;h4&gt;This conclusion is too long&lt;/h4&gt;
  2778. &lt;p&gt;I know, I’m like Peter Jackson trying to end “The Return of the King”, I just can’t do it! I keep coming up with more things to say. Well, I’ll stop now. Have a nice weekend y’all.&lt;/p&gt;
  2779. &lt;div class=&quot;footnotes&quot;&gt;
  2780. &lt;hr /&gt;
  2781. &lt;ol&gt;
  2782. &lt;li id=&quot;fn:1&quot;&gt;
  2783. &lt;p&gt;Well, every program written in Java &lt;em&gt;does&lt;/em&gt; share data like crazy, but they do not all work fine. But you get what I mean. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:1&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2784. &lt;/li&gt;
  2785. &lt;li id=&quot;fn:2&quot;&gt;
  2786. &lt;p&gt;And I think learning how to work with &lt;em&gt;mutation xor sharing&lt;/em&gt; is a big part of what it means to learn Rust. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:2&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2787. &lt;/li&gt;
  2788. &lt;li id=&quot;fn:3&quot;&gt;
  2789. &lt;p&gt;NLL as implemented, anyway. The original design was meant to cover conditionally returning references, but the proposed type system was not feasible to implement. Moreover, and I say this as the one who designed it, the formulation in the NLL RFC was not good. It was mind-bending and hard to comprehend. Polonius is much better. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:3&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2790. &lt;/li&gt;
  2791. &lt;li id=&quot;fn:4&quot;&gt;
  2792. &lt;p&gt;In fact, view types will also allow us to implement the “disjoint closure capture” rules from &lt;a href=&quot;https://rust-lang.github.io/rfcs/2229-capture-disjoint-fields.html&quot;&gt;RFC 2229&lt;/a&gt; in a more efficient way. Currently a closure using &lt;code&gt;self.widgets&lt;/code&gt; and &lt;code&gt;self.counter&lt;/code&gt; will store 2 references, kind of an implicit “view struct”. Although &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/stream/189812-t-compiler.2Fwg-rfc-2229/topic/measure.20closure.20sizes&quot;&gt;we found this doesn’t really affect much code in practice&lt;/a&gt;, it still bothers me. With view types they could store 1. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:4&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2793. &lt;/li&gt;
  2794. &lt;li id=&quot;fn:5&quot;&gt;
  2795. &lt;p&gt;To me, the biggest open question for view types is how to accommodate “strong updates” to types. I’d like to be able to do &lt;code&gt;let mut wf: {} WidgetFactory = WidgetFactory {}&lt;/code&gt; to create a &lt;code&gt;WidgetFactory&lt;/code&gt; value that is completely uninitialized and then permit writing (for example) &lt;code&gt;wf.counter = 0&lt;/code&gt;. This should update the type of &lt;code&gt;wf&lt;/code&gt; to &lt;code&gt;{counter} WidgetFactory&lt;/code&gt;. Basically I want to link the information found in types with the borrow checker’s notion of what is initialized, but I haven’t worked that out in detail. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:5&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2796. &lt;/li&gt;
  2797. &lt;li id=&quot;fn:6&quot;&gt;
  2798. &lt;p&gt;As an example, to make this work I’m assuming some kind of “true deref” trait that indicates that &lt;code&gt;Deref&lt;/code&gt; yields a reference that remains valid even as the value being deref’d moves from place to place. We need a trait much like this for other reasons too. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:6&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2799. &lt;/li&gt;
  2800. &lt;li id=&quot;fn:7&quot;&gt;
  2801. &lt;p&gt;That’s a sarcastic “Yay 🥳”, in case you couldn’t tell. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:7&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2802. &lt;/li&gt;
  2803. &lt;li id=&quot;fn:8&quot;&gt;
  2804. &lt;p&gt;This “Yay 🥳” is genuine. &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:8&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2805. &lt;/li&gt;
  2806. &lt;li id=&quot;fn:9&quot;&gt;
  2807. &lt;p&gt;I remember years ago presenting Rust at some academic conference and a friendly professor telling me, “In my experience, you always want to get that state into the type system”. I think that professor was right, though I don’t regret not prioritizing it (always a million things to do, better to ask what is the right next step &lt;em&gt;now&lt;/em&gt; than to worry about what step might’ve been better in the past). Anyway, I wish I could remember &lt;em&gt;who&lt;/em&gt; that was! &lt;a class=&quot;footnote-backref&quot; href=&quot;http://smallcultfollowing.com/babysteps/atom.xml#fnref:9&quot;&gt;↩︎&lt;/a&gt;&lt;/p&gt;
  2808. &lt;/li&gt;
  2809. &lt;/ol&gt;
  2810. &lt;/div&gt;</description>
  2811. <pubDate>Sun, 02 Jun 2024 12:33:48 +0000</pubDate>
  2812. </item>
  2813. <item>
  2814. <title>Don Marti: cheese or woodstain?</title>
  2815. <guid isPermaLink="true">https://blog.zgp.org/cheese-or-woodstain/</guid>
  2816. <link>https://blog.zgp.org/cheese-or-woodstain/</link>
  2817. <description>&lt;p&gt;It has come to my attention that any blog that mentions advertising must do a post including the expression &lt;a href=&quot;https://www.ronseal.com/the-ronseal-phrase/&quot;&gt;Does Exactly What it Says on the Tin&lt;/a&gt;, so here is mine. Following up on &lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;the 30-40-30 rule&lt;/a&gt;, why are some people so fired up about personalized advertising, while others aren’t? Maybe it goes back to what kind of shopping use cases they’re optimizing for.&lt;/p&gt; &lt;p&gt;Phillip Nelson, in &lt;a href=&quot;https://www.journals.uchicago.edu/doi/epdf/10.1086/260231&quot;&gt;Advertising as Information&lt;/a&gt;, divides brand quaities into &lt;q&gt;search qualities&lt;/q&gt; and &lt;q&gt;experience qualities.&lt;/q&gt; A search quality is something you can check before buying the product, like tasting a sample of &lt;a href=&quot;https://adcontrarian.blogspot.com/2014/05/the-soon-to-be-legendary-45-day-cheese.html&quot;&gt;cheese&lt;/a&gt;. An experience quality is something you have to spend more time figuring out, like seeing if your &lt;a href=&quot;https://adaged.blogspot.com/2024/05/disconnect.html&quot;&gt;woodstain&lt;/a&gt; dries in the time printed on the tin. Shopping for cheese and woodstain are a lot different.&lt;/p&gt; &lt;h4&gt;Cheese shopping&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;Cheeses are similar as far as nutrition goes, so picking one is a matter of personal preference.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Cheese is easy to evaluate at the point of purchase. Mmm, sample cheese on a toothpick.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;My own cheese-tasting palate is a better guide for me than the opinions of a cheese expert.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Cost of a mistake is low.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Top priority: getting the best-matched product among a set of alternatives in a narrow quality range.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;h4&gt;Woodstain shopping&lt;/h4&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;Has quality metrics that are not different from person to person.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Hard to evaluate at the point of purchase. You have to do your project and wait for it to dry (or not?)&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;The knowledge of a woodstain expert is more valuable to me than how I might feel about a certain brand of woodstain at the hardware store.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Cost of a mistake is high.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Top priority: avoiding a low-quality or deceptively sold product.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;If you’re shopping for parts to build a PC, the mouse is cheese, the power supply is woodstain, and the video card is somewhere in the middle. If you’re buying a car, or a bike, or a pair of boots, it kind of depends on the ratio of your net worth and your budget for the item. Buyers who have a lot of money relative to the price of the product are more likely to be buying cheese, buyers who are sinking a lot of their assets into the purchase are buying woodstain.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://andrewchen.substack.com/p/ai-and-marketing-what-happens-next&quot;&gt;Andrew Chen says that AI will reinvent marketing&lt;/a&gt; because it makes it possible to do a personalized, automated sales call for every possible purchase. The cost of personalization relative to the cost of the actual product goes down. This might be great for cheese shoppers. Imagine an AI that understands my cheese palate so well that it will suggest the yummiest possible cheese for me, every time. But automated, personalized communications sound terrible for woodstain shoppers. When it’s harder to evaluate the product, &lt;a href=&quot;https://blog.zgp.org/personalization-risks/&quot;&gt;personalization just facilitates more kinds of deception&lt;/a&gt;, and &lt;a href=&quot;https://blog.zgp.org/when-can-deceptive-sellers-outbid-honest-sellers-for-ad-impressions/&quot;&gt;public, signaling-based advertising might be more appropriate&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/privacy-econ-sources/&quot;&gt;privacy economics sources&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/improving-web-advertising/&quot;&gt;improving web advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/marketer-journey/&quot;&gt;you’re on a customer journey, they’re on a marketer journey&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/behind-the-blog-googles-excuses-and-facing-reality/&quot;&gt;Behind the Blog: Google’s Excuses and Facing Reality&lt;/a&gt; (fwiw, New Coke won a scientific taste test, too.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.lucidprivacy.io/know-your-customer-law-comes-for-ad-data-licensors/&quot;&gt;‘Know Your Customer’ Law Comes For Ad Data Licensors&lt;/a&gt; (this #federalPrivacyLaw might be a bigger deal than it looks like. If some North Korean spies get busted for something else, and the FBI finds records of a company’s data sales/sharing to a North Korean owned shell company, they could be in big trouble. Publicly traded companies will have to disclose this as a risk, and put more gatekeeping around data sales/sharing.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://hintzelaw.com/blog/2023/4/9/wa-my-health-my-data-act-pt1-overview&quot;&gt;Washington State’s My Health My Data Act&lt;/a&gt; (coming into effect this summer, another area of compliance costs and friction. Get those Meta Pixels off your health-related content, or learn how good paralegals are at browser dev tools and word processor mail merge.)&lt;/p&gt;</description>
  2818. <pubDate>Sat, 01 Jun 2024 00:00:00 +0000</pubDate>
  2819. </item>
  2820. <item>
  2821. <title>The Mozilla Blog: Cassidoo, meme-maker and software developer, on her corner of the internet</title>
  2822. <guid isPermaLink="false">https://blog.mozilla.org/?p=75019</guid>
  2823. <link>https://blog.mozilla.org/en/internet-culture/cassidoo-software-developer-interview/</link>
  2824. <description>&lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;A woman smiling against a blue and pink backdrop.&quot; class=&quot;wp-image-75042&quot; height=&quot;683&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/05/moz_BlogHeader_Cassiddoo_2x-1024x683.png&quot; width=&quot;1024&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Cassidy Williams is a Chicago-based software developer building the AI-powered talk-out-loud app Brainstory at Contenda.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  2825.  
  2826.  
  2827.  
  2828. &lt;p&gt;&lt;em&gt;Here at Mozilla, we are the first to admit the internet isn’t perfect, but we know the internet is pretty darn magical. The internet opens up doors and opportunities, allows for human connection, and lets everyone find where they belong — their corners of the internet. We all have an internet story worth sharing. In &lt;/em&gt;&lt;a href=&quot;https://blog.mozilla.org/tag/my-corner-of-the-internet/&quot;&gt;&lt;em&gt;My Corner Of The Internet&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, we talk with people about the online spaces they can’t get enough of, the sites and forums that shaped them, and what reclaiming the internet really looks like.&lt;/em&gt;&lt;/p&gt;
  2829.  
  2830.  
  2831.  
  2832. &lt;p&gt;&lt;em&gt;This month we chat with Cassidy Williams, known as Cassidoo on &lt;a href=&quot;https://twitter.com/cassidoo&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;X&lt;/a&gt; and &lt;/em&gt;&lt;a href=&quot;https://www.tiktok.com/@cassidoo?lang=en&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;TikTok&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and is the CTO of the AI company &lt;/em&gt;&lt;a href=&quot;https://www.contenda.co/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;em&gt;Contenda&lt;/em&gt;&lt;/a&gt;&lt;em&gt;. We talk about the forums that shaped her career, building community online and off, and her favorite subreddit for niche drama.&lt;/em&gt;&lt;/p&gt;
  2833.  
  2834.  
  2835.  
  2836. &lt;h3&gt;&lt;strong&gt;What is your favorite corner of the internet? &lt;/strong&gt;&lt;/h3&gt;
  2837.  
  2838.  
  2839.  
  2840. &lt;p&gt;I have a Discord group through my &lt;a href=&quot;https://www.patreon.com/cassidoo&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Patreon&lt;/a&gt; [and] &lt;a href=&quot;https://www.twitch.tv/cassidoo&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Twitch&lt;/a&gt; that I originally made for resume reviews and interview prep, but it’s turned into my absolute favorite spot to just chat with friends on the daily! I think in the pandemic it was a really good “third place” for myself and a bunch of other folks and we’ve become really good friends talking about tech but also just helping each other out and learning together!&lt;/p&gt;
  2841.  
  2842.  
  2843.  
  2844. &lt;h3&gt;&lt;strong&gt;What is an internet deep dive that you can’t wait to jump back into?&lt;/strong&gt;&lt;/h3&gt;
  2845.  
  2846.  
  2847.  
  2848. &lt;p&gt;There’s a subreddit called &lt;a href=&quot;https://www.reddit.com/r/HobbyDrama/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;r/HobbyDrama&lt;/a&gt; where folks share detailed stories about hobby communities and the drama that happens within them, and I absolutely love it. It’s usually really specific hobbies and communities that I rarely knew existed, sharing dramatic stories of people being jerks, or some twist of fate changing things, or something along those lines. So many times I’ve ended up going deep into learning about a hobby purely because I have a bunch of specific information now that makes it more entertaining!&lt;/p&gt;
  2849.  
  2850.  
  2851.  
  2852. &lt;h3&gt;&lt;strong&gt;What is the one tab you always regret closing?&lt;/strong&gt;&lt;/h3&gt;
  2853.  
  2854.  
  2855.  
  2856. &lt;p&gt;The &lt;a href=&quot;https://developer.mozilla.org/en-US/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;MDN docs&lt;/a&gt;, I feel like for all the years I’ve been a developer, I always find myself checking on specific syntax, there!&lt;/p&gt;
  2857.  
  2858.  
  2859.  
  2860. &lt;h3&gt;&lt;strong&gt;What can you not stop talking about on the internet right now?&lt;/strong&gt;&lt;/h3&gt;
  2861.  
  2862.  
  2863.  
  2864. &lt;p&gt;Walkability and mixed-use housing. I have been going *very* deep on that lately because I think countries outside of the U.S. are pretty good at building community outside of individual homes by not being too car-centric and by having it be the norm to walk everywhere, have easy access to public transit, and live in a place that has everything really close by. I sincerely think that it would improve nearly everything about our country in general if we focused on that more, and… I will not shut up about it, ha!&lt;/p&gt;
  2865.  
  2866.  
  2867.  
  2868. &lt;h3&gt;&lt;strong&gt;What was the first online community you engaged with?&lt;/strong&gt;&lt;/h3&gt;
  2869.  
  2870.  
  2871.  
  2872. &lt;p&gt;Waaaay back in the early-to-mid 2000s, I was really active on some forums and message boards that taught me a ton about web design and tech in general. I don’t even remember how I initially discovered them, and most of them aren’t on the internet anymore, but those early forums of folks sharing knowledge totally changed the trajectory of my future career!&lt;/p&gt;
  2873.  
  2874.  
  2875.  
  2876. &lt;p&gt;Also… Neopets, heh.&lt;/p&gt;
  2877.  
  2878.  
  2879.  
  2880. &lt;h3&gt;&lt;strong&gt;If you could create your own corner of the internet, what would it look like?&lt;/strong&gt;&lt;/h3&gt;
  2881.  
  2882.  
  2883.  
  2884. &lt;p&gt;Outside of the Discord group I mentioned, I might have more of a content-sharing hub. I think we’re in a point on the internet where folks are very scattered, not all on Twitter, not all on Facebook, not all on Instagram, etc, and I would love to have a hub or feed of folks sharing with each other. RSS does fill that gap, a bit, so maybe a combo of chat + RSS? It sounds very old school!&lt;/p&gt;
  2885.  
  2886.  
  2887.  
  2888. &lt;h3&gt;&lt;strong&gt;What articles and/or videos are you waiting to read/watch right now?&lt;/strong&gt;&lt;/h3&gt;
  2889.  
  2890.  
  2891.  
  2892. &lt;p&gt;The &lt;a href=&quot;https://humanewebmanifesto.com/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Manifesto for a Humane Web&lt;/a&gt;, and Maya Rudolph’s SNL episode!&lt;/p&gt;
  2893.  
  2894.  
  2895.  
  2896. &lt;h3&gt;&lt;strong&gt;In a recent &lt;/strong&gt;&lt;a href=&quot;https://cassidoo.co/post/seattle-internet/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;strong&gt;blog post&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt; you compared living in Chicago to the internet of the past, where you made random but lasting friendships. What parts of the internet now make you optimistic about its future?&lt;/strong&gt;&lt;/h3&gt;
  2897.  
  2898.  
  2899.  
  2900. &lt;p&gt;I do think that Discord servers right now are the closest things I’ve seen to tight-knit communities like that. Also, I *love* the series &lt;a href=&quot;https://peopleandblogs.com/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;People &amp;amp; Blogs&lt;/a&gt;, where I’ve learned a ton about cool topics and writers I didn’t know before, and also the software and content from the folks at &lt;a href=&quot;https://goodenough.us/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Good Enough&lt;/a&gt;!&lt;/p&gt;
  2901.  
  2902.  
  2903.  
  2904. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  2905.  
  2906.  
  2907.  
  2908. &lt;p&gt;&lt;em&gt;Cassidy Williams is a Chicago-based software developer building the AI-powered talk-out-loud app &lt;a href=&quot;https://brainstory.ai/&quot;&gt;Brainstory&lt;/a&gt; at Contenda. She’s also a startup advisor and investor, developer experience expert, and meme-maker on the internet. She enjoys building mechanical keyboards, playing music and teaching in her free time. You can subscribe to her &lt;a href=&quot;https://cassidoo.co/newsletter/&quot;&gt;newsletter&lt;/a&gt; about the world of web development and play her word game, &lt;a href=&quot;https://jumblie.com/?utm_campaign=blahg&amp;amp;utm_source=github&quot;&gt;Jumblie&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  2909.  
  2910.  
  2911.  
  2912. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://getpocket.com/&quot;&gt;
  2913.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  2914.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;800&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/09/Unfck-Pocket-Blog-2-800x800.png&quot; width=&quot;800&quot; /&gt;  &lt;/div&gt;
  2915.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  2916.     &lt;h4&gt;Save and discover the best articles, stories and videos on the web&lt;/h4&gt;      &lt;span&gt;Get Pocket&lt;/span&gt;   &lt;/div&gt;
  2917. &lt;/a&gt;
  2918. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/internet-culture/cassidoo-software-developer-interview/&quot;&gt;Cassidoo, meme-maker and software developer, on her corner of the internet&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  2919. <pubDate>Fri, 31 May 2024 18:39:47 +0000</pubDate>
  2920. <dc:creator>Kristina Bravo</dc:creator>
  2921. </item>
  2922. <item>
  2923. <title>Hacks.Mozilla.Org: Experimenting with local alt text generation in Firefox Nightly</title>
  2924. <guid isPermaLink="false">https://hacks.mozilla.org/?p=48155</guid>
  2925. <link>https://hacks.mozilla.org/2024/05/experimenting-with-local-alt-text-generation-in-firefox-nightly/</link>
  2926. <description>&lt;p&gt;&lt;a href=&quot;https://connect.mozilla.org/t5/discussions/here-s-what-we-re-working-on-in-firefox/td-p/57694&quot;&gt;&lt;i&gt;As discussed on Mozilla Connect&lt;/i&gt;&lt;/a&gt;&lt;i&gt;, Firefox 130 will introduce an experimental new capability to automatically generate alt-text for images using a fully private on-device AI model. The feature will be available as part of Firefox’s built-in PDF editor, and our end goal is to make it available in general browsing for users with screen readers.&lt;/i&gt;&lt;/p&gt;
  2927. &lt;h3&gt;Why alt text?&lt;/h3&gt;
  2928. &lt;p&gt;Web pages have a fundamentally simple structure, with semantics that allow the browser to interpret the same content differently for different people based on their own needs and preferences. This is a big part of what we think &lt;a href=&quot;https://www.mozilla.org/en-US/about/webvision/full/#agency&quot;&gt;makes the Web special&lt;/a&gt;, and what enables the browser to act as a user agent, responsible for making the Web work for people.&lt;/p&gt;
  2929. &lt;p&gt;This is particularly useful for assistive technology such as screen readers, which are able to work alongside browser features to reduce obstacles for people to access and exchange information. For static web pages, this generally can be accomplished with very little interaction from the site, and this access has been enormously beneficial to many people.&lt;/p&gt;
  2930. &lt;p&gt;But even for a simple static page there are certain types of information, like &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/alt&quot;&gt;alternative text for images&lt;/a&gt;, that must be provided by the author to provide an understandable experience for people using assistive technology (as &lt;a href=&quot;https://html.spec.whatwg.org/multipage/images.html#alt&quot;&gt;required by the spec&lt;/a&gt;). Unfortunately, many authors don’t do this: the Web Almanac &lt;a href=&quot;https://almanac.httparchive.org/en/2022/seo#fig-27&quot;&gt;reported&lt;/a&gt; in 2022 that nearly half of images were missing alt text.&lt;/p&gt;
  2931. &lt;p&gt;Until recently it’s not been feasible for the browser to infer reasonably high quality alt text for images, without sending potentially sensitive data to a remote server. However, latest developments in AI have enabled this type of image analysis to happen efficiently, even on a CPU.&lt;/p&gt;
  2932. &lt;p&gt;We are adding a feature within the PDF editor in Firefox Nightly to validate this approach. As we develop it further and learn from the deployment, our goal is to offer it for users who’d like to use it when browsing to help them better understand images which would otherwise be inaccessible.&lt;/p&gt;
  2933. &lt;h3&gt;Generating alt text with small open source models&lt;/h3&gt;
  2934. &lt;p&gt;We are using Transformer-based machine learning models to describe images. These models are getting good at describing the contents of the image, yet are compact enough to operate on devices with limited resources. While can’t outperform a large language model like &lt;a href=&quot;https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/gpt-with-vision&quot;&gt;GPT-4 Turbo with Vision&lt;/a&gt;, or &lt;a href=&quot;https://llava-vl.github.io/&quot;&gt;LLaVA&lt;/a&gt;, they are sufficiently accurate to provide valuable insights on-device across a diversity of hardware.&lt;/p&gt;
  2935. &lt;p&gt;Model architectures like &lt;a href=&quot;https://huggingface.co/models?other=blip&quot;&gt;BLIP&lt;/a&gt; or even &lt;a href=&quot;https://en.wikipedia.org/wiki/Vision_transformer&quot;&gt;VIT&lt;/a&gt; that were trained on datasets like &lt;a href=&quot;https://cocodataset.org/#home&quot;&gt;COCO&lt;/a&gt; (Common Object In Context) or &lt;a href=&quot;https://shannon.cs.illinois.edu/DenotationGraph/&quot;&gt;Flickr30k&lt;/a&gt; are good at identifying objects in an image. When combined with a text decoder like OpenAI’s &lt;a href=&quot;https://en.wikipedia.org/wiki/GPT-2&quot;&gt;GPT-2&lt;/a&gt;, they can produce alternative text with 200M or fewer parameters. Once quantized, these models can be under 200MB on disk, and run in a couple of seconds on a laptop – a big reduction compared to the gigabytes and resources an LLM requires.&lt;/p&gt;
  2936. &lt;h4&gt;Example Output&lt;/h4&gt;
  2937. &lt;p&gt;The image below (pulled from the COCO dataset) is described by:&lt;/p&gt;
  2938. &lt;ul&gt;
  2939. &lt;li&gt;&lt;b&gt;FIREFOX&lt;/b&gt; – our 182M parameters model using a Distilled version of GPT-2 alongside a Vision Transformer (ViT) image encoder.&lt;/li&gt;
  2940. &lt;li&gt;&lt;b&gt;BASELINE MODEL&lt;/b&gt; – a slightly bigger ViT+GPT-2 model&lt;/li&gt;
  2941. &lt;li&gt;&lt;b&gt;HUMAN TEXT&lt;/b&gt; – the description provided by the dataset annotator.&lt;/li&gt;
  2942. &lt;/ul&gt;
  2943. &lt;p&gt; &lt;/p&gt;
  2944. &lt;p&gt;&lt;img alt=&quot;A person is standing in front of a cake with candles.&quot; class=&quot;alignnone size-medium wp-image-48156&quot; height=&quot;454&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2024/05/Screenshot-2024-05-27-at-17.43.26-250x454.png&quot; width=&quot;250&quot; /&gt;&lt;/p&gt;
  2945. &lt;p&gt;Both small models lose accuracy compared to the description provided by a person, and the baseline model is confused by the hands position. The Firefox model is doing slightly better in that case, and captures what is important.&lt;/p&gt;
  2946. &lt;p&gt;What matters can be suggestive in any case. Notice how the person did not write about the office settings or the cherries on the cake, and specified that the candles were long.&lt;/p&gt;
  2947. &lt;p&gt;If we run the same image on a model like &lt;a href=&quot;https://openai.com/index/hello-gpt-4o/&quot;&gt;GPT-4o&lt;/a&gt;, the results are extremely detailed:&lt;/p&gt;
  2948. &lt;p&gt;&lt;i&gt;The image depicts a group of people gathered around a cake with lit candles. The focus is on the cake, which has a red jelly topping and a couple of cherries. There are several lit candles in the foreground. In the background, there is a woman smiling, wearing a gray turtleneck sweater, and a few other people can be seen, likely in an office or indoor setting. The image conveys a celebratory atmosphere, possibly a birthday or a special occasion.&lt;/i&gt;&lt;/p&gt;
  2949. &lt;p&gt;But such level of detail in alt text is overwhelming and doesn’t prioritize the most important information. Brevity is not the only goal, but it’s a helpful starting point, and pithy accuracy in a first draft allows content creators to focus their edits on missing context and details.&lt;/p&gt;
  2950. &lt;p&gt;So if we ask the LLM for a one-sentence description, we get:&lt;/p&gt;
  2951. &lt;p&gt;&lt;i&gt;A group of people in an office celebrates with a lit birthday cake in the foreground and a smiling woman in the background.&lt;/i&gt;&lt;/p&gt;
  2952. &lt;p&gt;This has more detail than our small model, but can’t be run locally without sending your image to a server.&lt;/p&gt;
  2953. &lt;h4&gt;Small is beautiful&lt;/h4&gt;
  2954. &lt;p&gt;Running inference locally with small models offers many advantages:&lt;/p&gt;
  2955. &lt;ol&gt;
  2956. &lt;li&gt;&lt;b&gt;Privacy&lt;/b&gt;: All operations are contained within the device, ensuring data privacy. We won’t have access to your images, PDF content, generated captions, or final captions. Your data will not be used to train the model.&lt;/li&gt;
  2957. &lt;li&gt;&lt;b&gt;Resource Efficiency&lt;/b&gt;: Small models eliminate the need for high-powered GPUs in the cloud, reducing resource consumption and making it more environmentally friendly.&lt;/li&gt;
  2958. &lt;li&gt;&lt;b&gt;Increased Transparency&lt;/b&gt;: In-house management of models allows for direct oversight of the training datasets, offering more transparency compared to some large language models (LLMs).&lt;/li&gt;
  2959. &lt;li&gt;&lt;b&gt;Carbon Footprint Monitoring&lt;/b&gt;: Training models in-house facilitates precise tracking of CO2 emissions using tools such as &lt;a href=&quot;http://codecarbon.io/&quot;&gt;CodeCarbon&lt;/a&gt;.&lt;/li&gt;
  2960. &lt;li&gt;&lt;b&gt;Ease of Improvement&lt;/b&gt;: Since retraining can be completed in less than a day on a single piece of hardware, it allows for frequent updates and enhancements of the model.&lt;/li&gt;
  2961. &lt;/ol&gt;
  2962. &lt;h3&gt;Integrating Local Inference into Firefox&lt;/h3&gt;
  2963. &lt;h3&gt;Extending the Translations inference architecture&lt;/h3&gt;
  2964. &lt;p&gt;Firefox Translations uses the &lt;a href=&quot;https://browser.mt/&quot;&gt;Bergamot&lt;/a&gt; project powered by the &lt;a href=&quot;https://aclanthology.org/P18-4020/&quot;&gt;Marian C++&lt;/a&gt;  inference runtime. The runtime is compiled into WASM, and there’s a model file for each translation task.&lt;/p&gt;
  2965. &lt;p&gt;For example, if you run Firefox in French and visit an English page, Firefox will ask if you want to translate it to French and download the English-to-French model (~20MiB) alongside the inference runtime. This is a one-shot download: translations will happen completely offline once those files are on disk.&lt;/p&gt;
  2966. &lt;p&gt;The WASM runtime and models are both stored in the &lt;a href=&quot;https://remote-settings.readthedocs.io/en/latest/&quot;&gt;Firefox Remote Settings&lt;/a&gt; service, which allows us to distribute them at scale and manage versions.&lt;/p&gt;
  2967. &lt;p&gt;The inference task runs in a separate process, which prevents the browser or one of its tabs from crashing if the inference runtime crashes.&lt;/p&gt;
  2968. &lt;h4&gt;ONNX and Transformers.js&lt;/h4&gt;
  2969. &lt;p&gt;We’ve decided to embed the &lt;a href=&quot;https://onnxruntime.ai/&quot;&gt;ONNX runtime&lt;/a&gt; in Firefox Nightly along with the &lt;a href=&quot;https://huggingface.co/docs/transformers.js/index&quot;&gt;Transformers.js&lt;/a&gt; library to extend the translation architecture to perform different inference work.&lt;/p&gt;
  2970. &lt;p&gt;Like Bergamot, the ONNX runtime has a WASM distribution and can run directly into the browser. The ONNX project has recently introduced WebGPU support, which will eventually be activated in Firefox Nightly for this feature.&lt;/p&gt;
  2971. &lt;p&gt;Transformers.js provides a Javascript layer on top of the ONNX inference runtime, making it easy to add inference for a huge list of model architectures. The API mimics the very popular &lt;a href=&quot;https://huggingface.co/docs/transformers/en/index&quot;&gt;Python library&lt;/a&gt;. It does all the tedious work of preparing the data that is passed to the runtime and converting the output back to a usable result. It also deals with downloading models from Hugging Face and caching them.&lt;/p&gt;
  2972. &lt;p&gt;From the project’s documentation, this is how you can run a sentiment analysis model on a text:&lt;/p&gt;
  2973. &lt;pre&gt;import { pipeline } from '@xenova/transformers';
  2974.  
  2975. // Allocate a pipeline for sentiment-analysis
  2976. let pipe = await pipeline('sentiment-analysis');
  2977. let out = await pipe('I love transformers!');
  2978.  
  2979. // [{'label': 'POSITIVE', 'score': 0.999817686}]&lt;/pre&gt;
  2980. &lt;p&gt;Using Transformers.js gives us confidence when trying out a new model with ONNX. If its architecture is listed in the Transformers.js documentation, that’s a good indication it will work for us.&lt;/p&gt;
  2981. &lt;p&gt;To vendor it into Firefox Nightly, we’ve slightly changed its release to distribute ONNX separately from Transformers.js, dropped Node.js-related pieces, and fixed those annoying eval() calls the ONNX library ships with. You can find the build script &lt;a href=&quot;https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/ml/vendor/build.sh&quot;&gt;here&lt;/a&gt; which was used to populate that vendor directory.&lt;/p&gt;
  2982. &lt;p&gt;From there, we reused the Translation architecture to run the ONNX runtime inside its own process, and have Transformers.js run with a custom model cache system.&lt;/p&gt;
  2983. &lt;h4&gt;Model caching&lt;/h4&gt;
  2984. &lt;p&gt;The Transformers.js project can use local and remote models and has a caching mechanism using the browser cache. Since we are running inference in an isolated web worker, we don’t want to provide access to the file system or store models inside the browser cache. We also don’t want to use Hugging Face as the model hub in Firefox, and want to serve model files from our own servers.&lt;/p&gt;
  2985. &lt;p&gt;Since Transformers.js provides a callback for a custom cache, we have implemented a &lt;a href=&quot;https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/ml/content/ModelHub.sys.mjs&quot;&gt;specific model caching layer&lt;/a&gt; that downloads files from our own servers and caches them in IndexedDB.&lt;/p&gt;
  2986. &lt;p&gt;As the project grows, we anticipate the browser will store more models, which can take up significant space on disk. We plan to add an interface in Firefox to manage downloaded models so our users can list them and remove some if needed.&lt;/p&gt;
  2987. &lt;h4&gt;Fine-tuning a ViT + GPT-2 model&lt;/h4&gt;
  2988. &lt;p&gt;Ankur Kumar released a&lt;a href=&quot;https://huggingface.co/nlpconnect/vit-gpt2-image-captioning&quot;&gt; popular model&lt;/a&gt; on Hugging Face to generate alt text for images and&lt;a href=&quot;https://ankur3107.github.io/blogs/the-illustrated-image-captioning-using-transformers/&quot;&gt; blogged about it&lt;/a&gt;. This model was also published as ONNX weights by Joshua Lochner so it could be used in Transformers.js, see&lt;a href=&quot;https://huggingface.co/Xenova/vit-gpt2-image-captioning&quot;&gt; https://huggingface.co/Xenova/vit-gpt2-image-captioning&lt;/a&gt;&lt;/p&gt;
  2989. &lt;p&gt;The model is doing a good job – even if in some cases we had better results with&lt;a href=&quot;https://huggingface.co/microsoft/git-base-coco&quot;&gt; https://huggingface.co/microsoft/git-base-coco&lt;/a&gt; – But the GIT architecture is not yet supported in ONNX converters, and with less than 200M params, most of the accuracy is obtained by focusing on good training data. So we have picked ViT for our first model.&lt;/p&gt;
  2990. &lt;p&gt;Ankur used the &lt;a href=&quot;https://huggingface.co/google/vit-base-patch16-224-in21k&quot;&gt;google/vit-base-patch16-224-in21k&lt;/a&gt; image encoder and the GPT-2 text decoder and fine-tuned them using the COCO dataset, which is a dataset of over 120k labeled images.&lt;/p&gt;
  2991. &lt;p&gt;In order to reduce the model size and speed it up a little bit, we’ve decided to replace GPT-2 with &lt;a href=&quot;https://huggingface.co/distilbert/distilgpt2&quot;&gt;DistilGPT-2&lt;/a&gt; — which is 2 times faster and 33% smaller according to its documentation.&lt;/p&gt;
  2992. &lt;p&gt;Using that model in Transformers.js gave good results (see the training code at &lt;a href=&quot;https://github.com/mozilla/distilvit&quot;&gt;GitHub – mozilla/distilvit: image-to-text model for PDF.js&lt;/a&gt;).&lt;/p&gt;
  2993. &lt;p&gt;We further improved the model for our use case with an &lt;a href=&quot;https://huggingface.co/datasets/Mozilla/flickr30k-transformed-captions&quot;&gt;updated training dataset&lt;/a&gt; and some &lt;a href=&quot;https://huggingface.co/datasets/Mozilla/alt-text-validation&quot;&gt;supervised learning&lt;/a&gt; to simplify the output and mitigate some of the biases common in image to text models.&lt;/p&gt;
  2994. &lt;h4&gt;Alt text generation in PDF.js&lt;/h4&gt;
  2995. &lt;p&gt;Firefox is able to add an image in a PDF using our &lt;a href=&quot;http://pdf.js&quot;&gt;popular open source pdf.js library&lt;/a&gt;:&lt;/p&gt;
  2996. &lt;p&gt;&lt;img alt=&quot;A screenshot of the PDF.js alt text modal window&quot; class=&quot;alignnone size-medium wp-image-48158&quot; height=&quot;223&quot; src=&quot;https://hacks.mozilla.org/wp-content/uploads/2024/05/Screenshot-2024-05-28-at-18.39.17-250x223.png&quot; width=&quot;250&quot; /&gt;&lt;/p&gt;
  2997. &lt;p&gt;Starting in Firefox 130, we will automatically generate an alt text and let the user validate it. So every time an image is added, we get an array of pixels we pass to the ML engine and a few seconds after, we get a string corresponding to a description of this image (see the &lt;a href=&quot;https://github.com/mozilla/pdf.js/blob/d79aaee62a27c25774100d545a420020b8769717/src/display/editor/stamp.js#L430-L464&quot;&gt;code&lt;/a&gt;).&lt;/p&gt;
  2998. &lt;p&gt;The first time the user adds an image, they’ll have to wait a bit for downloading the model (which can take up to a few minutes depending on your connection) but the subsequent uses will be much faster since the model will be stored locally.&lt;/p&gt;
  2999. &lt;p&gt;In the future, we want to be able to provide an alt text for any existing image in PDFs, except images which just contain text (it’s usually the case for PDFs containing scanned books).&lt;/p&gt;
  3000. &lt;h3&gt;Next steps&lt;/h3&gt;
  3001. &lt;p&gt;Our alt text generator is far from perfect, but we want to take an iterative approach and improve it in the open. The inference engine has already landed in Firefox Nightly as a new &lt;a href=&quot;https://hg.mozilla.org/mozilla-central/file/tip/toolkit/components/ml&quot;&gt;ml component&lt;/a&gt; along with an&lt;a href=&quot;https://firefox-source-docs.mozilla.org/toolkit/components/ml/&quot;&gt; initial documentation page&lt;/a&gt;.&lt;/p&gt;
  3002. &lt;p&gt;We are currently working on improving the image-to-text datasets and model with what we’ve described in this blog post, which will be continuously updated on our &lt;a href=&quot;https://huggingface.co/Mozilla&quot;&gt;Hugging Face&lt;/a&gt; page.&lt;/p&gt;
  3003. &lt;p&gt;The code that produces the model lives in Github &lt;a href=&quot;https://github.com/mozilla/distilvit&quot;&gt;https://github.com/mozilla/distilvit&lt;/a&gt; and the web application we’re building for our team to improve the model is located at &lt;a href=&quot;https://github.com/mozilla/checkvite&quot;&gt;https://github.com/mozilla/checkvite&lt;/a&gt;. We want to make sure the models and datasets we build, and all the code used, are made available to the community.&lt;/p&gt;
  3004. &lt;p&gt;Once the alt text feature in PDF.js has matured and proven to work well, we hope to make the feature available in general browsing for users with screen readers.&lt;/p&gt;
  3005. &lt;p&gt;The post &lt;a href=&quot;https://hacks.mozilla.org/2024/05/experimenting-with-local-alt-text-generation-in-firefox-nightly/&quot;&gt;Experimenting with local alt text generation in Firefox Nightly&lt;/a&gt; appeared first on &lt;a href=&quot;https://hacks.mozilla.org&quot;&gt;Mozilla Hacks - the Web developer blog&lt;/a&gt;.&lt;/p&gt;</description>
  3006. <pubDate>Fri, 31 May 2024 16:43:46 +0000</pubDate>
  3007. <dc:creator>Tarek Ziadé</dc:creator>
  3008. </item>
  3009. <item>
  3010. <title>Mozilla Thunderbird: Thunderbird Monthly Development Digest: May 2024</title>
  3011. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1781</guid>
  3012. <link>https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-may-2024/</link>
  3013. <description>&lt;p&gt;&lt;img alt=&quot;Graphic with text &amp;quot;Thunderbird Dev Digest May 2024,&amp;quot; featuring abstract ASCII art of a dark Thunderbird logo background.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/TMDD-May-2024-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  3014. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  3015. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-may-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  3016.  
  3017.  
  3018.  
  3019. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-may-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  3020.  
  3021.  
  3022.  
  3023. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-may-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  3024. &lt;/div&gt;
  3025.  
  3026.  
  3027.  
  3028. &lt;p&gt;Hello Thunderbird Community!&lt;/p&gt;
  3029.  
  3030.  
  3031.  
  3032. &lt;p&gt;We’re tossing May behind our shoulders, which means we’re in the final sprint before the next ESR (Extended Support Release). During the next couple of weeks you can expect some official communication on all the things that are going in the next major release of Thunderbird. Until then, here are some appetizers on our most recent efforts.&lt;/p&gt;
  3033.  
  3034.  
  3035.  
  3036. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Rust-enabled builds&lt;/strong&gt;&lt;/h3&gt;
  3037.  
  3038.  
  3039.  
  3040. &lt;p&gt;Our build and release team is working hard to ship Rust enabled builds by default. The first beta version of 128 will ship with Rust enabled by default, which will allow all of you to test experimental features without needing to compile the code locally.&lt;/p&gt;
  3041.  
  3042.  
  3043.  
  3044. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Microsoft Exchange support&lt;/strong&gt;&lt;/h3&gt;
  3045.  
  3046.  
  3047.  
  3048. &lt;p&gt;We’re very very very close!&lt;/p&gt;
  3049.  
  3050.  
  3051.  
  3052. &lt;p&gt;So far we have the main flow completed, and we’re able to set up an account, fetch folders, fetch messages, and display messages. We’re finalizing the outgoing flow in order to send messages, and after that we will start an audit to ensure that all the usual features you expect from interacting with your email are working.&lt;/p&gt;
  3053.  
  3054.  
  3055.  
  3056. &lt;p&gt;Expect some future call to actions to test things and invites to switch the experimental pref ON.&lt;/p&gt;
  3057.  
  3058.  
  3059.  
  3060. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Native Linux system tray support&lt;/strong&gt;&lt;/h3&gt;
  3061.  
  3062.  
  3063.  
  3064. &lt;p&gt;Enabling Rust builds in Thunderbird also gives us the ability to implement some long awaited features much faster. We’re still testing and cleaning things up, but if you’re adventurous you can check out our GitHub repositories for &lt;a href=&quot;https://github.com/thunderbird/linux-sys-tray&quot;&gt;Linux System Tray&lt;/a&gt; and &lt;a href=&quot;https://github.com/thunderbird/dbus_hooks&quot;&gt;DBus hooks&lt;/a&gt; and run them locally.&lt;/p&gt;
  3065.  
  3066.  
  3067.  
  3068. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Folder multi-selection&lt;/strong&gt;&lt;/h3&gt;
  3069.  
  3070.  
  3071.  
  3072. &lt;p&gt;Folder pane multi-selection is almost completed and it should land soon. There are still some rough edges we need to tackle, mostly due to some C++ code not liking multiple folders copy/move and undo actions, but we’re confident that we will have this done before the end of June.&lt;/p&gt;
  3073.  
  3074.  
  3075.  
  3076. &lt;p&gt;You can check the code and follow the progress &lt;a href=&quot;https://phabricator.services.mozilla.com/D203232&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  3077.  
  3078.  
  3079.  
  3080. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Account color customization&lt;/strong&gt;&lt;/h3&gt;
  3081.  
  3082.  
  3083.  
  3084. &lt;p&gt;Another requested feature we’re aiming to ship in 128 is the customization of account colors. &lt;a href=&quot;https://phabricator.services.mozilla.com/D211687&quot;&gt;This&lt;/a&gt; is the first patch of an upcoming stack that will add some nice visual cues in the message list and the compose window for users with multiple accounts.&lt;/p&gt;
  3085.  
  3086.  
  3087.  
  3088. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Folder compaction&lt;/strong&gt;&lt;/h3&gt;
  3089.  
  3090.  
  3091.  
  3092. &lt;p&gt;We shared this in our &lt;a href=&quot;https://thunderbird.topicbox.com/groups/daily/T0badcdf6599c50dd/compact-changes&quot;&gt;Daily mailing list&lt;/a&gt;, but in case you missed it, we rebuilt the Folder Compaction code from scratch. This should potentially solve all the issues of profiles bubbling up in size, or compact operations silently failing and piling up on each other.&lt;/p&gt;
  3093.  
  3094.  
  3095.  
  3096. &lt;p&gt;These changes should be uplifted to Beta soon. Please test it as much as possible and report any bugs as soon as you encounter them.&lt;/p&gt;
  3097.  
  3098.  
  3099.  
  3100. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Native Windows notifications&lt;/strong&gt;&lt;/h3&gt;
  3101.  
  3102.  
  3103.  
  3104. &lt;p&gt;Another important achievement was the ability to completely support native Windows 10/11 notifications and make them fully functional.&lt;/p&gt;
  3105.  
  3106.  
  3107.  
  3108. &lt;p&gt;You can already consume this feature on Daily, and moving forward Thunderbird will be using native OS notifications by default.&lt;/p&gt;
  3109.  
  3110.  
  3111.  
  3112. &lt;p&gt;We plan to add some nice quick actions and improve the usefulness of native notifications in the future, so stay tuned!&lt;/p&gt;
  3113.  
  3114.  
  3115.  
  3116. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  3117.  
  3118.  
  3119.  
  3120. &lt;p&gt;As usual, if you want to see things as they land you can always check the &lt;a href=&quot;https://hg.mozilla.org/comm-central/pushloghtml&quot;&gt;pushlog &lt;/a&gt;and &lt;a href=&quot;https://ftp.mozilla.org/pub/thunderbird/nightly/2024/&quot;&gt;try running daily&lt;/a&gt;, which would be immensely helpful for catching bugs early.&lt;/p&gt;
  3121.  
  3122.  
  3123.  
  3124. &lt;p&gt;See ya next month.&lt;/p&gt;
  3125.  
  3126.  
  3127.  
  3128. &lt;p&gt;&lt;strong&gt;Alessandro Castellani&lt;/strong&gt; &lt;em&gt;(he, him)&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Director, Desktop and Mobile Apps&lt;/strong&gt;&lt;/p&gt;
  3129.  
  3130.  
  3131.  
  3132. &lt;figure class=&quot;wp-block-pullquote&quot; style=&quot;border-width: 2px; border-radius: 10px; font-style: normal; font-weight: 400;&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you’re interested in joining the technical discussion around Thunderbird development, consider joining one or several of our &lt;a href=&quot;https://thunderbird.topicbox.com&quot;&gt;mailing list groups here&lt;/a&gt;. &lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;
  3133. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-may-2024/&quot;&gt;Thunderbird Monthly Development Digest: May 2024&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  3134. <pubDate>Fri, 31 May 2024 13:54:54 +0000</pubDate>
  3135. <dc:creator>Alessandro Castellani</dc:creator>
  3136. </item>
  3137. <item>
  3138. <title>The Mozilla Blog: Here’s what we’re working on in Firefox</title>
  3139. <guid isPermaLink="false">https://blog.mozilla.org/?p=75025</guid>
  3140. <link>https://blog.mozilla.org/en/mozilla/heres-what-were-working-on-in-firefox/</link>
  3141. <description>&lt;p&gt;&lt;em&gt;Last week we shared a number of &lt;a href=&quot;https://connect.mozilla.org/t5/ideas/create-a-web-page-for-a-feature-roadmap/idi-p/5805&quot;&gt;updates&lt;/a&gt; with our community of users, and now we want to share them here&lt;/em&gt;:&lt;/p&gt;
  3142.  
  3143.  
  3144.  
  3145. &lt;p&gt;At Mozilla, we work hard to make Firefox the best browser for you. That’s why we’re always focused on building a browser that empowers you to choose your own path, that gives you the freedom to explore without worry or compromises. We’re excited to share more about the updates and improvements we have in store for you over the next year.&lt;/p&gt;
  3146.  
  3147.  
  3148.  
  3149. &lt;h3&gt;&lt;strong&gt;Bringing you the features you’ve been asking for&lt;/strong&gt;&lt;/h3&gt;
  3150.  
  3151.  
  3152.  
  3153. &lt;p&gt;We’ve been listening to your feedback, and we’re prioritizing the features you want most.&lt;/p&gt;
  3154.  
  3155.  
  3156.  
  3157. &lt;ul&gt;
  3158. &lt;li&gt;Productivity boosters like
  3159. &lt;ul&gt;
  3160. &lt;li&gt;&lt;strong&gt;Tab Grouping, Vertical Tabs, &lt;/strong&gt;and our handy &lt;strong&gt;Sidebar&lt;/strong&gt; will help you stay organized no matter how many tabs you have open — whether it’s 7 or &lt;a href=&quot;https://www.pcmag.com/news/firefox-power-user-keeps-7400-plus-browser-tabs-open-for-2-years&quot;&gt;7,500.&lt;/a&gt; &lt;/li&gt;
  3161.  
  3162.  
  3163.  
  3164. &lt;li&gt;Plus, our new &lt;strong&gt;Profile Management system&lt;/strong&gt; will help keep your school, work, and personal browsing separate but easily accessible. &lt;/li&gt;
  3165. &lt;/ul&gt;
  3166. &lt;/li&gt;
  3167.  
  3168.  
  3169.  
  3170. &lt;li&gt;&lt;strong&gt;Customizable new tab wallpapers&lt;/strong&gt; that will let you choose from a diverse range of photography, colors, and abstract images that suits you most. &lt;/li&gt;
  3171.  
  3172.  
  3173.  
  3174. &lt;li&gt;&lt;strong&gt;Intuitive privacy settings&lt;/strong&gt; that deliver all the power of our world-class anti-tracking technologies in a simplified, easy-to-understand way.&lt;/li&gt;
  3175.  
  3176.  
  3177.  
  3178. &lt;li&gt;&lt;strong&gt;More&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;strong&gt;streamlined menus&lt;/strong&gt; that reduce visual clutter and prioritize top user actions so you can get to the important things quicker.&lt;/li&gt;
  3179. &lt;/ul&gt;
  3180.  
  3181.  
  3182.  
  3183. &lt;h3&gt;&lt;strong&gt;Continuous work on speed, performance and compatibility&lt;/strong&gt;&lt;/h3&gt;
  3184.  
  3185.  
  3186.  
  3187. &lt;p&gt;Speed is everything when you’re online, so we’re continuing to work hard to make Firefox as fast and efficient as possible. You can expect even &lt;strong&gt;faster, smoother browsing on Firefox&lt;/strong&gt;,&lt;strong&gt; &lt;/strong&gt;thanks to&lt;strong&gt; quicker page loads and startup times&lt;/strong&gt; – all while &lt;strong&gt;saving more of your phone’s battery life&lt;/strong&gt;. We’ve already improved responsiveness by 20 percent as measured by &lt;a href=&quot;https://hacks.mozilla.org/2024/03/improving-performance-in-firefox-and-across-the-web-with-speedometer-3/&quot;&gt;Speedometer 3&lt;/a&gt;, a collaboration we’ve spearheaded with other leading tech companies. And in that collaborative spirit, we’re also working with the &lt;a href=&quot;https://hacks.mozilla.org/2024/02/announcing-interop-2024/&quot;&gt;Interop project&lt;/a&gt; to make it easy for people to build sites that work great across all browsers. We value your support in our efforts to improve cross-browser compatibility which is why we’ve added new features to easily report when websites aren’t working quite right; this feedback is critical as we look to address even small functionality issues that affect your day-to-day online experience.&lt;/p&gt;
  3188.  
  3189.  
  3190.  
  3191. &lt;h3&gt;&lt;strong&gt;Making the most of your time online — without sacrifice&lt;/strong&gt;&lt;/h3&gt;
  3192.  
  3193.  
  3194.  
  3195. &lt;p&gt;Ensuring your privacy is core to everything we do at Firefox. Unlike other companies, who ask you to exchange your data in order to do even basic, everyday things online — you don’t have to give up your personal information to get a faster, more efficient browser experience with Firefox. Reading a news story in a different language or signing a form for school or work shouldn’t require you to give up your privacy. So, we’ve worked hard to make things like translation and PDF editing in Firefox happen locally on your device, so you don’t have to ship off your personal data to a server farm for a company to use it how they see fit — to keep tabs on you, sell your information to the highest bidder, or train their AI. With Firefox, you have a lot of choice — but you don’t have to choose between utility and privacy. Your data is secure, and most importantly, just yours.&lt;/p&gt;
  3196.  
  3197.  
  3198.  
  3199. &lt;p&gt;We are approaching the use of AI in Firefox — which many, many of you have been asking about — in the same way. We’re focused on giving you AI features that solve tangible problems, respect your privacy, and give you real choice.&lt;/p&gt;
  3200.  
  3201.  
  3202.  
  3203. &lt;p&gt;We’re looking at how we can use local, on-device AI models — i.e., more private — to enhance your browsing experience further. One feature we’re starting with next quarter is &lt;strong&gt;AI-generated alt-text for images inserted into PDFs&lt;/strong&gt;, which makes it more accessible to visually impaired users and people with learning disabilities.&lt;/p&gt;
  3204.  
  3205.  
  3206.  
  3207. &lt;h3&gt;&lt;strong&gt;Join us on this journey&lt;/strong&gt;&lt;/h3&gt;
  3208.  
  3209.  
  3210.  
  3211. &lt;p&gt;Our progress is driven by a vibrant community of users and developers like you. We encourage you to contribute to our open-source projects and to engage with us on &lt;a href=&quot;https://connect.mozilla.org/&quot;&gt;Mozilla Connect&lt;/a&gt; or &lt;a href=&quot;https://discourse.mozilla.org/&quot;&gt;Discourse&lt;/a&gt;, and check out our recent &lt;a href=&quot;https://www.reddit.com/r/firefox/comments/1de7bu1/were_the_firefox_leadership_team_at_mozilla_ama/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;AMA on Reddit&lt;/a&gt;. Your participation is crucial in shaping what Firefox becomes next.&lt;/p&gt;
  3212.  
  3213.  
  3214.  
  3215. &lt;a class=&quot;ft-c-inline-cta&quot; href=&quot;https://www.mozilla.org/en-US/firefox/new?utm_medium=mozilla-websites&amp;amp;utm_source=blog.mozilla.org&amp;amp;utm_content=inline-cta&quot;&gt;
  3216.  &lt;div class=&quot;ft-c-inline-cta__media&quot;&gt;
  3217.  &lt;img alt=&quot;&quot; class=&quot;attachment-1x1 size-1x1&quot; height=&quot;512&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2020/12/Fx-Browser-icon-fullColor-512-512x512.png&quot; width=&quot;512&quot; /&gt;  &lt;/div&gt;
  3218.  &lt;div class=&quot;ft-c-inline-cta__content&quot;&gt;
  3219.     &lt;h4&gt;Get Firefox&lt;/h4&gt;      &lt;span&gt;Get the browser that protects what’s important&lt;/span&gt;   &lt;/div&gt;
  3220. &lt;/a&gt;
  3221. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/heres-what-were-working-on-in-firefox/&quot;&gt;Here’s what we’re working on in Firefox&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  3222. <pubDate>Thu, 30 May 2024 18:16:38 +0000</pubDate>
  3223. <dc:creator>Mozilla</dc:creator>
  3224. </item>
  3225. <item>
  3226. <title>Mozilla Thunderbird: Maximize Your Day: Time Blocking with Thunderbird</title>
  3227. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1770</guid>
  3228. <link>https://blog.thunderbird.net/2024/05/maximize-your-day-time-blocking-with-thunderbird/</link>
  3229. <description>&lt;p&gt;&lt;img alt=&quot;Maximize Your Day: Time Blocking with Thunderbird&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;321&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/Max-your-day-Timeblocking.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  3230. &lt;p&gt;This might be unexpected coming from an email app developer, but hear us out: we want you to spend the &lt;em&gt;least&lt;/em&gt; amount of time possible in your inbox.&lt;/p&gt;
  3231.  
  3232.  
  3233.  
  3234. &lt;p&gt;The Thunderbird Team wants to help you manage your most precious, nonrenewable resource: your time. This post kicks off a series of Thunderbird tips and tricks focusing on our favorite time management and productivity advice.&lt;/p&gt;
  3235.  
  3236.  
  3237.  
  3238. &lt;p&gt;When we asked Director of Product, Ryan Sipes, what time management strategy he wanted to share first, he said time blocking. Time blocking is a favorite of author and productivity guru Cal Newport. This technique schedules your entire day to minimize focus-stealing activities and maximize deep work that requires your full attention.&lt;/p&gt;
  3239.  
  3240.  
  3241.  
  3242. &lt;p&gt;This sounds daunting, but we’re on this productivity journey with you! All you need to start is your calendar or planner, whether it’s in Thunderbird, another app, or using pen and paper. Personally, we’re fans of having our notebook and laptop on hand when we schedule our day ahead.&lt;/p&gt;
  3243.  
  3244.  
  3245.  
  3246. &lt;p&gt;Don’t worry that an all-day schedule won’t leave time for fun or impromptu plans. You’ll be more present when you’re off work, whether it’s cherished time with loved ones or working on that novel you always wanted to write. And since you’re adjusting your schedule as you go, you’ll be able to add plans without overwhelming yourself.&lt;/p&gt;
  3247.  
  3248.  
  3249.  
  3250. &lt;p&gt;With that, let’s get started time blocking with Thunderbird!&lt;/p&gt;
  3251.  
  3252.  
  3253.  
  3254. &lt;h3&gt;Get Your Calendars in One Place&lt;/h3&gt;
  3255.  
  3256.  
  3257.  
  3258. &lt;p&gt;First, have all your calendars (work, personal, school, etc.) in one place. Thunderbird can combine online calendars from different accounts for you (and let you customize their colors)! &lt;a href=&quot;https://support.mozilla.org/en-US/kb/creating-new-calendars&quot;&gt;This SUMO article&lt;/a&gt; explains — with screenshots — how to add your calendars and create new ones.&lt;/p&gt;
  3259.  
  3260.  
  3261. &lt;div class=&quot;wp-block-image&quot;&gt;
  3262. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/ProductivityBlog1Calendars.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1771&quot; height=&quot;524&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/ProductivityBlog1Calendars.png&quot; width=&quot;353&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;
  3263.  
  3264.  
  3265. &lt;h3&gt;Suggestions for Getting Started&lt;/h3&gt;
  3266.  
  3267.  
  3268.  
  3269. &lt;figure class=&quot;wp-block-image size-full&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/Screenshot-2024-05-24-at-11.58.02 AM.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1779&quot; height=&quot;2880&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/Screenshot-2024-05-24-at-11.58.02 AM.png&quot; width=&quot;5120&quot; /&gt;&lt;/a&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;&lt;em&gt;Example of a time-blocked Thunderbird Calendar. For other examples, see &lt;a href=&quot;https://todoist.com/productivity-methods/time-blocking&quot;&gt;Todoist.&lt;/a&gt;&lt;/em&gt;&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  3270.  
  3271.  
  3272.  
  3273. &lt;p&gt;It’s hard to change some fixed blocks of time, like team meetings or scheduled personal obligations. But the spaces in between are a blank canvas waiting to be filled with everything you need and want to do. How you fill them is up to you, but here are some suggestions for time blocking with Thunderbird:&lt;/p&gt;
  3274.  
  3275.  
  3276.  
  3277. &lt;ol&gt;
  3278. &lt;li&gt;Know when you do your best work. If you can focus more in the morning, or after a 30-minute walk, schedule blocks of deep work around that. If you don’t know when you do your best work, observe how you work for a week or two! Take notes on your energy and focus levels during the day.&lt;/li&gt;
  3279.  
  3280.  
  3281.  
  3282. &lt;li&gt;Use your professional and personal priorities to fill out your time blocks. Whether your planning exists in project management software or handwritten notes, identify your urgent and important tasks that need your focus and time.&lt;/li&gt;
  3283.  
  3284.  
  3285.  
  3286. &lt;li&gt;Use breaks between longer blocks for less urgent and potentially distracting tasks like checking your email or catching up on chats. If you limit the amount of time you spend on these tasks (a technique known as time boxing), and minimize or turn off their notifications, your day becomes a &lt;em&gt;lot&lt;/em&gt; more productive.&lt;/li&gt;
  3287.  
  3288.  
  3289.  
  3290. &lt;li&gt;Adjust your schedule whenever you need it, not just at the end of the day or week. Move blocks, shorten or lengthen them, etc. As you learn to be more aware of how you use your time, you’ll become better at estimating how long you need for tasks, and the best time of day to do them.&lt;/li&gt;
  3291. &lt;/ol&gt;
  3292.  
  3293.  
  3294.  
  3295. &lt;h3&gt;Time Blocking and Beyond&lt;/h3&gt;
  3296.  
  3297.  
  3298.  
  3299. &lt;p&gt;Thanks for joining us for this first productivity newsletter. We hope this post and the ones to come help you reclaim the time for things you need and want to do. Next month we’ll share more advice, and techniques you can use in Thunderbird to maximize your valuable time.&lt;/p&gt;
  3300.  
  3301.  
  3302.  
  3303. &lt;p&gt;We’re on this journey with you, learning new skills and working them into our lives until they become habits. Making changes, even for the better, is hard. If a day or two or seven go by and you’re losing track of your time again, it’s okay. Make this the cue to start your productivity training montage, and let us be the awesome 80s rock soundtrack to support you.&lt;/p&gt;
  3304.  
  3305.  
  3306.  
  3307. &lt;p&gt;Until next time, stay productive!&lt;/p&gt;
  3308. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/maximize-your-day-time-blocking-with-thunderbird/&quot;&gt;Maximize Your Day: Time Blocking with Thunderbird&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  3309. <pubDate>Thu, 30 May 2024 12:39:35 +0000</pubDate>
  3310. <dc:creator>Monica Ayhens-Madon</dc:creator>
  3311. </item>
  3312. <item>
  3313. <title>The Servo Blog: This month in Servo: new CSS units, color emoji, servoshell, and more!</title>
  3314. <guid isPermaLink="true">https://servo.org/blog/2024/05/30/this-month-in-servo/</guid>
  3315. <link>https://servo.org/blog/2024/05/30/this-month-in-servo/</link>
  3316. <description>&lt;figure class=&quot;_figr&quot; style=&quot;clear: right;&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/ic-units.png&quot;&gt;&lt;img alt=&quot;servoshell with three boxes arranged around a large water radical (水), each the same size as that character by being 1ic x 1ic.&quot; src=&quot;https://servo.org/img/blog/ic-units.png&quot; /&gt;&lt;/a&gt;
  3317. &amp;lt;figcaption&amp;gt;‘ic’ units are now supported.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  3318. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;Servo now supports several CSS features in its nightly builds:&lt;/p&gt;
  3319. &lt;ul&gt;
  3320. &lt;li&gt;as of 2024-04-29, &lt;strong&gt;‘start’&lt;/strong&gt;, &lt;strong&gt;‘end’&lt;/strong&gt;, and &lt;strong&gt;‘space-evenly’&lt;/strong&gt; values in &lt;strong&gt;‘align-content’&lt;/strong&gt; and &lt;strong&gt;‘justify-content’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/nicoburns&quot;&gt;@nicoburns&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31724&quot;&gt;#31724&lt;/a&gt;), in flexbox layouts when the experimental feature is enabled (&lt;code&gt;--pref layout.flexbox.enabled&lt;/code&gt;)&lt;/li&gt;
  3321. &lt;li&gt;as of 2024-04-30, &lt;strong&gt;‘white-space-collapse’&lt;/strong&gt;, &lt;strong&gt;‘text-wrap-mode’&lt;/strong&gt;, and the new &lt;strong&gt;‘white-space’&lt;/strong&gt; shorthand (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32146&quot;&gt;#32146&lt;/a&gt;)&lt;/li&gt;
  3322. &lt;li&gt;as of 2024-05-03, &lt;strong&gt;‘ch’&lt;/strong&gt; and &lt;strong&gt;‘ic’ font-relative units&lt;/strong&gt; (&lt;a href=&quot;https://github.com/andreubotella&quot;&gt;@andreubotella&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32171&quot;&gt;#32171&lt;/a&gt;)&lt;/li&gt;
  3323. &lt;li&gt;as of 2024-05-19, basic support for &lt;strong&gt;‘border-collapse’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32309&quot;&gt;#32309&lt;/a&gt;)&lt;/li&gt;
  3324. &lt;li&gt;as of 2024-05-22, &lt;strong&gt;‘empty-cells’&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32331&quot;&gt;#32331&lt;/a&gt;)&lt;/li&gt;
  3325. &lt;li&gt;as of 2024-05-22, &lt;strong&gt;‘visibility: collapse’&lt;/strong&gt; on table parts (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32333&quot;&gt;#32333&lt;/a&gt;)&lt;/li&gt;
  3326. &lt;/ul&gt;
  3327. &lt;figure class=&quot;_figl&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/empty-cells.png&quot;&gt;&lt;img alt=&quot;Two pixel art smileys made from table cells, one with magenta eyes and background&quot; src=&quot;https://servo.org/img/blog/empty-cells.png&quot; /&gt;&lt;/a&gt;
  3328. &amp;lt;figcaption&amp;gt;Left: ‘empty-cells: show’.&lt;br /&gt;Right: ‘empty-cells: hide’.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  3329. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;Several DOM properties are now accessible, which should improve compatibility with scripts even though their effects are not yet implemented:&lt;/p&gt;
  3330. &lt;ul&gt;
  3331. &lt;li&gt;&lt;code&gt;value&lt;/code&gt;, &lt;code&gt;min&lt;/code&gt;, &lt;code&gt;max&lt;/code&gt;, &lt;code&gt;low&lt;/code&gt;, &lt;code&gt;high&lt;/code&gt;, and &lt;code&gt;optimum&lt;/code&gt; on HTMLMeterElement (&lt;a href=&quot;https://github.com/shanehandley&quot;&gt;@shanehandley&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32230&quot;&gt;#32230&lt;/a&gt;)&lt;/li&gt;
  3332. &lt;li&gt;&lt;code&gt;autofocus&lt;/code&gt; on HTMLElement and SVGElement, via HTMLOrSVGElement (&lt;a href=&quot;https://github.com/nolanlawson&quot;&gt;@nolanlawson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32170&quot;&gt;#32170&lt;/a&gt;)&lt;/li&gt;
  3333. &lt;li&gt;&lt;code&gt;role&lt;/code&gt; and 43 other ARIA string properties on Element (&lt;a href=&quot;https://github.com/nolanlawson&quot;&gt;@nolanlawson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32080&quot;&gt;#32080&lt;/a&gt;)&lt;/li&gt;
  3334. &lt;/ul&gt;
  3335. &lt;p&gt;We’ve also landed the first patch towards making Servo’s &lt;strong&gt;event loop comply with the HTML spec&lt;/strong&gt; (&lt;a href=&quot;https://github.com/gterzian&quot;&gt;@gterzian&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31505&quot;&gt;#31505&lt;/a&gt;).
  3336. This will hopefully address some complex timing issues between the renderer and other kinds of tasks like requestAnimationFrame and ResizeObserver callbacks.&lt;/p&gt;
  3337. &lt;p&gt;Together with correct sizing for &lt;strong&gt;floating tables&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32150&quot;&gt;#32150&lt;/a&gt;) and &lt;strong&gt;empty list items&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Loirooriol&quot;&gt;@Loirooriol&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32152&quot;&gt;#32152&lt;/a&gt;), as well as correct &lt;strong&gt;‘line-height’ based on the first font&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32165&quot;&gt;#32165&lt;/a&gt;), Servo has made some big strides in the Web Platform Tests this month:&lt;/p&gt;
  3338. &lt;ul&gt;
  3339. &lt;li&gt;90.8% (+1.6pp) in the &lt;strong&gt;CSS2 floats&lt;/strong&gt; tests&lt;/li&gt;
  3340. &lt;li&gt;68.7% (+5.7pp) in the &lt;strong&gt;CSS2 and CSS tables&lt;/strong&gt; tests&lt;/li&gt;
  3341. &lt;li&gt;53.3% (+4.0pp) in the &lt;strong&gt;CSS text&lt;/strong&gt; tests&lt;/li&gt;
  3342. &lt;li&gt;48.8% (+3.3pp) in the &lt;strong&gt;CSS position&lt;/strong&gt; tests&lt;/li&gt;
  3343. &lt;/ul&gt;
  3344. &lt;h3&gt;Font system changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/05/30/this-month-in-servo/#font-system-changes&quot;&gt;
  3345.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  3346.      &lt;/a&gt;&lt;/h3&gt;
  3347. &lt;figure class=&quot;_figr&quot;&gt;
  3348. &lt;table&gt;
  3349. &lt;thead&gt;
  3350. &lt;tr&gt;
  3351. &lt;th&gt;&lt;/th&gt;
  3352. &lt;th&gt;&lt;code&gt;sbix&lt;/code&gt;&lt;/th&gt;
  3353. &lt;th&gt;&lt;code&gt;CBDT&lt;/code&gt;&lt;/th&gt;
  3354. &lt;th&gt;&lt;code&gt;COLR&lt;/code&gt;&lt;/th&gt;
  3355. &lt;/tr&gt;
  3356. &lt;/thead&gt;
  3357. &lt;tbody&gt;
  3358. &lt;tr&gt;
  3359. &lt;td&gt;Windows&lt;/td&gt;
  3360. &lt;td&gt;❌︎&lt;/td&gt;
  3361. &lt;td&gt;❌︎&lt;/td&gt;
  3362. &lt;td&gt;❌︎&lt;/td&gt;
  3363. &lt;/tr&gt;
  3364. &lt;tr&gt;
  3365. &lt;td&gt;macOS&lt;/td&gt;
  3366. &lt;td&gt;✅&lt;/td&gt;
  3367. &lt;td&gt;❌︎&lt;/td&gt;
  3368. &lt;td&gt;❌︎&lt;/td&gt;
  3369. &lt;/tr&gt;
  3370. &lt;tr&gt;
  3371. &lt;td&gt;Linux&lt;/td&gt;
  3372. &lt;td&gt;❌︎&lt;/td&gt;
  3373. &lt;td&gt;✅&lt;/td&gt;
  3374. &lt;td&gt;❌︎&lt;/td&gt;
  3375. &lt;/tr&gt;
  3376. &lt;/tbody&gt;
  3377. &lt;/table&gt;
  3378. &amp;lt;figcaption&amp;gt;Overview of Servo’s current color emoji support by format and platform.&amp;lt;/figcaption&amp;gt;
  3379. &lt;/figure&gt;
  3380. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;Servo now supports the &lt;strong&gt;‘font-weight’&lt;/strong&gt;, &lt;strong&gt;‘font-style’&lt;/strong&gt;, &lt;strong&gt;‘font-stretch’&lt;/strong&gt;, and &lt;strong&gt;‘unicode-range’ descriptors&lt;/strong&gt; in &lt;a href=&quot;https://github.com/font-face&quot;&gt;@font-face&lt;/a&gt;, correctly matching fonts split by ‘unicode-range’ (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32164&quot;&gt;#32164&lt;/a&gt;) and correctly selecting the nearest weights and styles (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32366&quot;&gt;#32366&lt;/a&gt;).&lt;/p&gt;
  3381. &lt;p&gt;We also now support &lt;strong&gt;font fallback on OpenHarmony&lt;/strong&gt; (&lt;a href=&quot;https://github.com/jschwe&quot;&gt;@jschwe&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32141&quot;&gt;#32141&lt;/a&gt;), and &lt;strong&gt;bitmap color emoji&lt;/strong&gt; on Linux and macOS (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32203&quot;&gt;#32203&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32278&quot;&gt;#32278&lt;/a&gt;).
  3382. Note that the layered &lt;code&gt;COLR&lt;/code&gt; format is not yet supported, and that on macOS, we currently only support &lt;code&gt;sbix&lt;/code&gt; (like in Apple Color Emoji), not &lt;code&gt;CBDT&lt;/code&gt; (like in Noto Color Emoji).&lt;/p&gt;
  3383. &lt;p&gt;Our &lt;a href=&quot;https://github.com/servo/servo/issues/32033&quot;&gt;font system rework&lt;/a&gt; continues, &lt;strong&gt;saving up to 40 MB of memory&lt;/strong&gt; when loading &lt;a href=&quot;http://servo.org/&quot;&gt;servo.org&lt;/a&gt; by sharing font data and metadata across threads (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32205&quot;&gt;#32205&lt;/a&gt;).
  3384. We’ve fixed a bug where web fonts in one document can &lt;strong&gt;clobber fonts with the same name&lt;/strong&gt; in other documents (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32303&quot;&gt;#32303&lt;/a&gt;), and a bug where the &lt;strong&gt;font cache leaks unused web fonts&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32346&quot;&gt;#32346&lt;/a&gt;).&lt;/p&gt;
  3385. &lt;h3&gt;servoshell changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/05/30/this-month-in-servo/#servoshell-changes&quot;&gt;
  3386.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  3387.      &lt;/a&gt;&lt;/h3&gt;
  3388. &lt;figure class=&quot;_figr&quot;&gt;&lt;a href=&quot;https://servo.org/img/blog/servoshell-status-bar.png&quot;&gt;&lt;img alt=&quot;servoshell showing the URL of a hovered link at the bottom of the window.&quot; src=&quot;https://servo.org/img/blog/servoshell-status-bar.png&quot; /&gt;&lt;/a&gt;
  3389. &amp;lt;figcaption&amp;gt;servoshell now shows the URL of hovered links near the bottom of the window.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  3390. &lt;p&gt;&lt;span class=&quot;_floatmin&quot;&gt;&lt;/span&gt;servoshell now &lt;strong&gt;handles all known keycodes&lt;/strong&gt;, passing them to Servo where appropriate (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32228&quot;&gt;#32228&lt;/a&gt;), goes back and forward when &lt;strong&gt;pressing the mouse side buttons&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32283&quot;&gt;#32283&lt;/a&gt;), and shows the link URL in a &lt;strong&gt;status tooltip when hovering over links&lt;/strong&gt; (&lt;a href=&quot;https://github.com/iterminatorheart&quot;&gt;@iterminatorheart&lt;/a&gt;, &lt;a href=&quot;https://github.com/atbrakhi&quot;&gt;@atbrakhi&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32011&quot;&gt;#32011&lt;/a&gt;).&lt;/p&gt;
  3391. &lt;p&gt;Adding support for the mouse side buttons required a winit upgrade, but we ultimately ended up embarking on a three-month overhaul to upgrade a bunch of other deps (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31278&quot;&gt;#31278&lt;/a&gt;), including egui, glow, nix, raqote, font-kit, harfbuzz-sys, core-graphics, core-text, raw-window-handle, and jni (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32216&quot;&gt;#32216&lt;/a&gt;)!&lt;/p&gt;
  3392. &lt;p&gt;This in turn involved upgrading those deps in surfman (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/surfman/pull/275&quot;&gt;surfman#275&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/surfman/pull/280&quot;&gt;surfman#280&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/surfman/pull/283&quot;&gt;surfman#283&lt;/a&gt;), font-kit (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/font-kit/pull/234&quot;&gt;font-kit#234&lt;/a&gt;), and webrender (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/webrender/pull/4838&quot;&gt;webrender#4838&lt;/a&gt;), as well as several improvements being contributed upstream:&lt;/p&gt;
  3393. &lt;ul&gt;
  3394. &lt;li&gt;servoshell no longer throws &lt;strong&gt;spurious GL_INVALID_ENUM errors on Windows&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/emilk/egui/pull/3994&quot;&gt;emilk/egui#3994&lt;/a&gt;)&lt;/li&gt;
  3395. &lt;li&gt;harfbuzz now builds on Windows when using clang-cl (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/harfbuzz/harfbuzz/pull/4585&quot;&gt;harfbuzz/harfbuzz#4585&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/rust-harfbuzz/pull/248&quot;&gt;rust-harfbuzz#248&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/rust-harfbuzz/pull/253&quot;&gt;rust-harfbuzz#253&lt;/a&gt;)&lt;/li&gt;
  3396. &lt;li&gt;egui_glow no longer has to depend on an outdated version of raw-window-handle (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/emilk/egui/pull/4036&quot;&gt;emilk/egui#4036&lt;/a&gt;)&lt;/li&gt;
  3397. &lt;li&gt;raqote now depends on the latest version of font-kit (&lt;a href=&quot;https://github.com/Nopey&quot;&gt;@Nopey&lt;/a&gt;, &lt;a href=&quot;https://github.com/jrmuizel/raqote/pull/200&quot;&gt;jrmuizel/raqote#200&lt;/a&gt;)&lt;/li&gt;
  3398. &lt;/ul&gt;
  3399. &lt;h3&gt;Other changes &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/05/30/this-month-in-servo/#other-changes&quot;&gt;
  3400.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  3401.      &lt;/a&gt;&lt;/h3&gt;
  3402. &lt;p&gt;Servo for Android &lt;strong&gt;now builds on aarch64&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32137&quot;&gt;#32137&lt;/a&gt;), &lt;strong&gt;no longer crashes on startup&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32273&quot;&gt;#32273&lt;/a&gt;), and now supports the &lt;strong&gt;SpiderMonkey JIT on 64-bit builds&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mukilan&quot;&gt;@mukilan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/31134&quot;&gt;#31134&lt;/a&gt;).&lt;/p&gt;
  3403. &lt;p&gt;Servo should no longer cause intermittent errors and &lt;strong&gt;panics when exiting&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32207&quot;&gt;#32207&lt;/a&gt;), and &lt;strong&gt;ShowWebView&lt;/strong&gt; no longer fails if sent too quickly after a webview is created (&lt;a href=&quot;https://github.com/wusyong&quot;&gt;@wusyong&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32163&quot;&gt;#32163&lt;/a&gt;).&lt;/p&gt;
  3404. &lt;p&gt;We’ve also landed several dev changes:&lt;/p&gt;
  3405. &lt;ul&gt;
  3406. &lt;li&gt;You can now pass &lt;code&gt;--skip-platform&lt;/code&gt; to &lt;code&gt;mach bootstrap&lt;/code&gt; to &lt;strong&gt;install taplo and crown only&lt;/strong&gt; (&lt;a href=&quot;https://github.com/mrobinson&quot;&gt;@mrobinson&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32176&quot;&gt;#32176&lt;/a&gt;)&lt;/li&gt;
  3407. &lt;li&gt;&lt;code&gt;mach build&lt;/code&gt; &lt;strong&gt;no longer fails on Windows&lt;/strong&gt; due to &lt;code&gt;STATUS_DLL_NOT_FOUND&lt;/code&gt; in crown (&lt;a href=&quot;https://github.com/sagudev&quot;&gt;@sagudev&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32301&quot;&gt;#32301&lt;/a&gt;)&lt;/li&gt;
  3408. &lt;li&gt;&lt;code&gt;mach build&lt;/code&gt; &lt;strong&gt;no longer fails on Windows Server 2019&lt;/strong&gt; due to &lt;code&gt;UnsupportedPlatform&lt;/code&gt; in notifypy (&lt;a href=&quot;https://github.com/delan&quot;&gt;@delan&lt;/a&gt;, &lt;a href=&quot;https://github.com/servo/servo/pull/32352&quot;&gt;#32352&lt;/a&gt;)&lt;/li&gt;
  3409. &lt;/ul&gt;
  3410. &lt;h3&gt;Donations &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/05/30/this-month-in-servo/#donations&quot;&gt;
  3411.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  3412.      &lt;/a&gt;&lt;/h3&gt;
  3413. &lt;p&gt;Thanks again for your generous support!
  3414. We are now receiving &lt;strong&gt;1630 USD/month&lt;/strong&gt; (+20.9% over April) in recurring donations.
  3415. We are still receiving donations from &lt;strong&gt;15 people&lt;/strong&gt; on LFX, and we’re working on transferring the balance to our new fund, but we will stop accepting donations there soon — &lt;strong&gt;please move your recurring donations to &lt;a href=&quot;https://github.com/sponsors/servo&quot;&gt;GitHub&lt;/a&gt; or &lt;a href=&quot;https://opencollective.com/servo&quot;&gt;Open Collective&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;
  3416. &lt;p&gt;As always, use of these funds will be decided transparently in the Technical Steering Committee.
  3417. &lt;a href=&quot;https://github.com/servo/project/issues/88#issuecomment-2134485100&quot;&gt;Our first proposal&lt;/a&gt; hopes to spend some of these funds on a &lt;strong&gt;dedicated CI server&lt;/strong&gt;, which should make tryjobs and merge builds much faster!&lt;/p&gt;
  3418. &lt;p&gt;We’ve also updated our &lt;a href=&quot;https://servo.org/sponsorship/&quot;&gt;Sponsorship page&lt;/a&gt; with advice about how to make your donations most effective.
  3419. In short, donating via GitHub Sponsors is the best option, with 96% of the amount going to Servo in almost all cases.
  3420. Donations on Open Collective give Servo around 80% to 90%, depending on the amount and payment method.&lt;/p&gt;
  3421. &lt;figure class=&quot;_fig&quot; style=&quot;width: 100%; margin: 1em 0;&quot;&gt;&lt;div class=&quot;_flex&quot;&gt;
  3422.    &lt;div style=&quot;text-align: right;&quot;&gt;
  3423.        &lt;div&gt;&lt;strong&gt;1630&lt;/strong&gt; USD/month&lt;/div&gt;
  3424.        &lt;div&gt;&lt;/div&gt;
  3425.        &lt;div&gt;&lt;/div&gt;
  3426.        &lt;div style=&quot;padding-right: 1em;&quot;&gt;&lt;strong&gt;10000&lt;/strong&gt;&lt;/div&gt;
  3427.    &lt;/div&gt;
  3428.    &lt;progress max=&quot;10000&quot; value=&quot;1630&quot;&gt;&lt;/progress&gt;
  3429. &lt;/div&gt;&lt;/figure&gt;
  3430. &lt;h3&gt;Conferences and events &lt;a class=&quot;header-anchor&quot; href=&quot;https://servo.org/blog/2024/05/30/this-month-in-servo/#conferences-and-events&quot;&gt;
  3431.        &lt;span class=&quot;icon hashlink&quot;&gt;&lt;i class=&quot;fas fa-link&quot;&gt;&lt;/i&gt;&lt;/span&gt;
  3432.      &lt;/a&gt;&lt;/h3&gt;
  3433. &lt;p&gt;Recordings are now available for three recent talks about Servo:&lt;/p&gt;
  3434. &lt;ul&gt;
  3435. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=RdtlD_7JAs8&quot;&gt;&lt;strong&gt;A year of Servo reboot: where are we now?&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://servo.org/slides/2024-04-16-open-source-summit-NA/&quot;&gt;slides&lt;/a&gt;, &lt;a href=&quot;https://www.atbrakhi.dev/blog/oss-north-america&quot;&gt;transcript&lt;/a&gt;) by Rakhi Sharma, at &lt;a href=&quot;https://events.linuxfoundation.org/open-source-summit-north-america/&quot;&gt;Open Source Summit North America&lt;/a&gt;&lt;/li&gt;
  3436. &lt;li&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=EA_1jxzR85M&quot;&gt;&lt;strong&gt;Modular Servo: Three Paths Forward&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://servo.org/files/2024-05-06-modular-servo.pdf&quot;&gt;slides&lt;/a&gt;) by Gregory Terzian, at &lt;a href=&quot;https://europe2024.gosim.org/schedule#mobile-and-web-app&quot;&gt;GOSIM Conference 2024&lt;/a&gt;&lt;/li&gt;
  3437. &lt;li&gt;A talk that discusses &lt;a href=&quot;https://www.youtube.com/watch?v=MOhxXhUmgPM&quot;&gt;&lt;strong&gt;porting Servo to OpenHarmony OS&lt;/strong&gt;&lt;/a&gt; (&lt;a href=&quot;https://servo.org/files/2024-05-06-openharmony-os-for-next-gen-mobile.pdf&quot;&gt;slides&lt;/a&gt;) by Jonathan Schwender, at &lt;a href=&quot;https://europe2024.gosim.org/schedule#mobile-and-web-app&quot;&gt;GOSIM Conference 2024&lt;/a&gt;&lt;/li&gt;
  3438. &lt;/ul&gt;
  3439. &lt;p&gt;We’ll also be running a &lt;a href=&quot;https://github.com/Igalia/webengineshackfest/issues/28&quot;&gt;&lt;strong&gt;Servo breakout session&lt;/strong&gt;&lt;/a&gt; at the &lt;a href=&quot;https://webengineshackfest.org/&quot;&gt;Web Engines Hackfest 2024&lt;/a&gt; in A Coruña on &lt;strong&gt;4 June&lt;/strong&gt; at &lt;strong&gt;15:00 local time&lt;/strong&gt; (13:00 UTC).
  3440. &lt;strong&gt;Remote participation is welcome!&lt;/strong&gt;&lt;/p&gt;</description>
  3441. <pubDate>Thu, 30 May 2024 00:00:00 +0000</pubDate>
  3442. </item>
  3443. <item>
  3444. <title>This Week In Rust: This Week in Rust 549</title>
  3445. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-05-29:/blog/2024/05/29/this-week-in-rust-549/</guid>
  3446. <link>https://this-week-in-rust.org/blog/2024/05/29/this-week-in-rust-549/</link>
  3447. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  3448. &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
  3449. This is a weekly summary of its progress and community.
  3450. Want something mentioned? Tag us at &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on X(formerly Twitter) or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.&lt;/p&gt;
  3451. &lt;p&gt;Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  3452. &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
  3453. If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
  3454. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  3455.  
  3456.  
  3457. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
  3458. &lt;ul&gt;
  3459. &lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/inside-rust/2024/05/28/launching-pad-representative.html&quot;&gt;Welcome James Munns to the Leadership Council&lt;/a&gt;&lt;/li&gt;
  3460. &lt;/ul&gt;
  3461. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#newsletters&quot;&gt;Newsletters&lt;/a&gt;&lt;/h5&gt;
  3462. &lt;ul&gt;
  3463. &lt;li&gt;&lt;a href=&quot;https://thisweekinbevy.com/issue/2024-05-27-cyberpunk-ui-minecraft-simulation-and-volumetric-destruction&quot;&gt;Cyberpunk UI, Minecraft simulation, and volumetric destruction&lt;/a&gt;&lt;/li&gt;
  3464. &lt;/ul&gt;
  3465. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  3466. &lt;ul&gt;
  3467. &lt;li&gt;&lt;a href=&quot;https://fyrox.rs/blog/post/fyrox-game-engine-0-34/&quot;&gt;Fyrox Game Engine 0.34&lt;/a&gt;&lt;/li&gt;
  3468. &lt;li&gt;&lt;a href=&quot;https://wasmi-labs.github.io/blog/posts/wasmi-v0.32/&quot;&gt;Wasmi's New Execution Engine - Faster Than Ever&lt;/a&gt;&lt;/li&gt;
  3469. &lt;li&gt;&lt;a href=&quot;https://iroh.computer/blog/iroh-0-17-0-everything-is-a-little-better&quot;&gt;iroh@0.17.0 - Everything is a little better&lt;/a&gt;&lt;/li&gt;
  3470. &lt;li&gt;&lt;a href=&quot;https://github.com/plabayo/venndb/releases/tag/0.5.0&quot;&gt;venndb@0.5.0 - support multi dimensional filter options to be filtered in group&lt;/a&gt;&lt;/li&gt;
  3471. &lt;/ul&gt;
  3472. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  3473. &lt;ul&gt;
  3474. &lt;li&gt;&lt;a href=&quot;https://bencher.dev/learn/case-study/diesel/&quot;&gt;Diesel: Continuous Benchmarking Case Study&lt;/a&gt;&lt;/li&gt;
  3475. &lt;li&gt;&lt;a href=&quot;https://xav.io/blog/rust-formal-verification/&quot;&gt;Visions of the future: formal verification in Rust&lt;/a&gt;&lt;/li&gt;
  3476. &lt;li&gt;&lt;a href=&quot;https://blog.digital-horror.com/blog/how-to-avoid-over-reliance-on-mpsc/&quot;&gt;Avoiding Over-Reliance on &lt;code&gt;mpsc&lt;/code&gt; channels in Rust&lt;/a&gt;&lt;/li&gt;
  3477. &lt;li&gt;&lt;a href=&quot;https://www.datadoghq.com/blog/engineering/how-we-migrated-our-static-analyzer-from-java-to-rust/&quot;&gt;How We Migrated Our Static Analyzer From Java To Rust&lt;/a&gt;&lt;/li&gt;
  3478. &lt;li&gt;&lt;a href=&quot;https://www.shuttle.rs/blog/2024/05/23/building-agentic-rag-rust-qdrant&quot;&gt;Building Agentic RAG with Rust, Qdrant &amp;amp; OpenAI&lt;/a&gt;&lt;/li&gt;
  3479. &lt;li&gt;&lt;a href=&quot;https://vaktibabat.github.io/posts/Making_A_Secure_Chat_Rust_Crypto/&quot;&gt;Making a Secure Chat in Rust&lt;/a&gt;&lt;/li&gt;
  3480. &lt;li&gt;&lt;a href=&quot;https://blog.frankel.ch/structured-env-vars-rust/&quot;&gt;Parsing structured environment variables in Rust&lt;/a&gt;&lt;/li&gt;
  3481. &lt;li&gt;&lt;a href=&quot;https://ceronman.com/2024/05/28/types-and-self-documenting-code-in-rust/&quot;&gt;Types and self-documenting code in Rust&lt;/a&gt;&lt;/li&gt;
  3482. &lt;li&gt;&lt;a href=&quot;https://blog.iggy.rs/posts/one-year-of-building-the-message-streaming/&quot;&gt;Iggy.rs — one year of building the message streaming&lt;/a&gt;&lt;/li&gt;
  3483. &lt;li&gt;&lt;a href=&quot;https://quickwit.io/blog/performance-investigation&quot;&gt;When allocating unused memory boosts performance by 2x&lt;/a&gt;&lt;/li&gt;
  3484. &lt;li&gt;&lt;a href=&quot;https://www.byronwasti.com/polling-atomics/&quot;&gt;Atomic Polling Intervals for Highly Concurrent Workloads&lt;/a&gt;&lt;/li&gt;
  3485. &lt;li&gt;&lt;a href=&quot;https://orlp.net/blog/taming-float-sums/&quot;&gt;Taming Floating-Point Sums&lt;/a&gt;&lt;/li&gt;
  3486. &lt;li&gt;&lt;a href=&quot;https://cryptical.xyz/rust/send-mutex&quot;&gt;Send &amp;amp; Mutex - Misconceptions about Send&lt;/a&gt;&lt;/li&gt;
  3487. &lt;/ul&gt;
  3488. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  3489. &lt;ul&gt;
  3490. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/05/25/tokio-uring-exploration-rust/&quot;&gt;Build with Naz : Linux io_uring and tokio-uring exploration with Rust&lt;/a&gt;&lt;/li&gt;
  3491. &lt;li&gt;&lt;a href=&quot;https://www.sea-ql.org/blog/2024-05-28-getting-started-with-loco-seaorm/&quot;&gt;Getting Started with Loco &amp;amp; SeaORM&lt;/a&gt;&lt;/li&gt;
  3492. &lt;/ul&gt;
  3493. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  3494. &lt;ul&gt;
  3495. &lt;li&gt;&lt;a href=&quot;https://filtra.io/rust-amo-may-24&quot;&gt;Rebuilding Consumer Social In Rust&lt;/a&gt;&lt;/li&gt;
  3496. &lt;li&gt;&lt;a href=&quot;https://poignardazur.github.io/2024/05/25/report-on-rustnl-variadics/&quot;&gt;Report on variadic generics discussion at RustNL.&lt;/a&gt;&lt;/li&gt;
  3497. &lt;li&gt;&lt;a href=&quot;https://www.onlycoiners.com/user/steadylearner/blog/how-to-use-chatgpt-with-rust&quot;&gt;How to use ChatGPT with Rust&lt;/a&gt;&lt;/li&gt;
  3498. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=u85bozA3bv0&quot;&gt;Programming Education: Tailoring Tools and Techniques for Rust (Will Crichton in the RustRover livestream series)&lt;/a&gt;&lt;/li&gt;
  3499. &lt;/ul&gt;
  3500. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  3501. &lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/guapodero/pulso&quot;&gt;pulso&lt;/a&gt;, a simple metrics collector for TCP/IP.&lt;/p&gt;
  3502. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1312&quot;&gt;guapodero&lt;/a&gt; for the self-suggestion!&lt;/p&gt;
  3503. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
  3504. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  3505. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  3506. implementation and give feedback, especially before stabilization.  The following
  3507. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  3508. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing&quot;&gt;RFCs&lt;/a&gt;&lt;/h5&gt;
  3509. &lt;ul&gt;
  3510. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  3511. &lt;/ul&gt;
  3512. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/labels/call-for-testing&quot;&gt;Rust&lt;/a&gt;&lt;/h5&gt;
  3513. &lt;ul&gt;
  3514. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  3515. &lt;/ul&gt;
  3516. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rustup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rustup/labels/call-for-testing&quot;&gt;Rustup&lt;/a&gt;&lt;/h5&gt;
  3517. &lt;ul&gt;
  3518. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  3519. &lt;/ul&gt;
  3520. &lt;p&gt;If you are a feature implementer and would like your RFC to appear on the above list, add the new &lt;code&gt;call-for-testing&lt;/code&gt;
  3521. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  3522. need testing.&lt;/p&gt;
  3523. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
  3524. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  3525. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  3526. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  3527. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  3528. &lt;ul&gt;
  3529. &lt;li&gt;&lt;a href=&quot;https://github.com/google/zerocopy/issues/1312&quot;&gt;zerocopy - CI cache not including installed Cargo tools?&lt;/a&gt;&lt;/li&gt;
  3530. &lt;li&gt;&lt;a href=&quot;https://github.com/google/zerocopy/issues/1276&quot;&gt;zerocopy - Debug GitHub Actions issue&lt;/a&gt;&lt;/li&gt;
  3531. &lt;li&gt;&lt;a href=&quot;https://github.com/google/zerocopy/issues/1228&quot;&gt;zerocopy - Cargo doc step &lt;code&gt;jq&lt;/code&gt; error&lt;/a&gt;&lt;/li&gt;
  3532. &lt;/ul&gt;
  3533. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust?tab=readme-ov-file#call-for-participation-guidelines&quot;&gt;here&lt;/a&gt; or through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  3534. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-events&quot;&gt;CFP - Events&lt;/a&gt;&lt;/h5&gt;
  3535. &lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;
  3536. &lt;ul&gt;
  3537. &lt;li&gt;&lt;a href=&quot;https://sessionize.com/rust-argentina-june/&quot;&gt;Rust Argentina June 2024&lt;/a&gt; | Closes 2024-05-31 | Buenos Aires, AR | Event date: 2024-06-04&lt;/li&gt;
  3538. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt; | Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  3539. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt; | Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  3540. &lt;li&gt;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc9S_95oaCsFyrULF4iBQOIiTcMlOpG07izgquYLBCKFAYTKQ/viewform&quot;&gt;Rust Ukraine 2024&lt;/a&gt; | Closes 2024-07-06 | Online + Ukraine, Kyiv | Event date: 2024-07-27&lt;/li&gt;
  3541. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  3542. &lt;/ul&gt;
  3543. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt; or by reaching out on &lt;a href=&quot;https://x.com/ThisWeekInRust&quot;&gt;X (Formerly twitter)&lt;/a&gt; or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;Mastodon&lt;/a&gt;!&lt;/p&gt;
  3544. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
  3545. &lt;p&gt;397 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-05-21..2024-05-28&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  3546. &lt;ul&gt;
  3547. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125616&quot;&gt;MIR validation: ensure that downcast projection is followed by field projection&lt;/a&gt;&lt;/li&gt;
  3548. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125362&quot;&gt;actually use TAIT instead of emulating it&lt;/a&gt;&lt;/li&gt;
  3549. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124297&quot;&gt;allow coercing functions whose signature differs in opaque types in their defining scope into a shared function pointer type&lt;/a&gt;&lt;/li&gt;
  3550. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124516&quot;&gt;allow monomorphization time const eval failures if the cause is a type layout issue&lt;/a&gt;&lt;/li&gt;
  3551. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125259&quot;&gt;an async closure may implement &lt;code&gt;FnMut&lt;/code&gt;/&lt;code&gt;Fn&lt;/code&gt; if it has no self-borrows&lt;/a&gt;&lt;/li&gt;
  3552. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122382&quot;&gt;detect unused structs which implement private traits&lt;/a&gt;&lt;/li&gt;
  3553. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125049&quot;&gt;disallow cast with trailing braced macro in let-else&lt;/a&gt;&lt;/li&gt;
  3554. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125466&quot;&gt;don't continue probing for method if in suggestion and autoderef hits ambiguity&lt;/a&gt;&lt;/li&gt;
  3555. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125369&quot;&gt;don't do cc detection for synthetic targets&lt;/a&gt;&lt;/li&gt;
  3556. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125513&quot;&gt;don't eagerly monomorphize drop for types that are impossible to instantiate&lt;/a&gt;&lt;/li&gt;
  3557. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125412&quot;&gt;don't suggest adding the unexpected cfgs to the build-script it-self&lt;/a&gt;&lt;/li&gt;
  3558. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125413&quot;&gt;drop region constraints for ambiguous goals&lt;/a&gt;&lt;/li&gt;
  3559. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125523&quot;&gt;exit the process a short time after entering our ctrl-c handler&lt;/a&gt;&lt;/li&gt;
  3560. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125156&quot;&gt;expand &lt;code&gt;for_loops_over_fallibles&lt;/code&gt; lint to lint on fallibles behind references&lt;/a&gt;&lt;/li&gt;
  3561. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125571&quot;&gt;f32: use constants instead of reassigning a dummy value as PI&lt;/a&gt;&lt;/li&gt;
  3562. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125451&quot;&gt;fail relating constants of different types&lt;/a&gt;&lt;/li&gt;
  3563. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123623&quot;&gt;fix OutsideLoop's error suggestion: adding label &lt;code&gt;'block&lt;/code&gt; for &lt;code&gt;if&lt;/code&gt; block&lt;/a&gt;&lt;/li&gt;
  3564. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125296&quot;&gt;fix &lt;code&gt;unexpected_cfgs&lt;/code&gt; lint on std&lt;/a&gt;&lt;/li&gt;
  3565. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123122&quot;&gt;fix incorrect suggestion for undeclared hrtb lifetimes in where clauses&lt;/a&gt;&lt;/li&gt;
  3566. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125276&quot;&gt;fix parsing of erroneously placed semicolons&lt;/a&gt;&lt;/li&gt;
  3567. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123812&quot;&gt;follow-up fixes to &lt;code&gt;report_return_mismatched_types&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3568. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125306&quot;&gt;force the inner coroutine of an async closure to &lt;code&gt;move&lt;/code&gt; if the outer closure is &lt;code&gt;move&lt;/code&gt; and &lt;code&gt;FnOnce&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3569. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125054&quot;&gt;handle &lt;code&gt;ReVar&lt;/code&gt; in &lt;code&gt;note_and_explain_region&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3570. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124227&quot;&gt;make sure that the method resolution matches in &lt;code&gt;note_source_of_type_mismatch_constraint&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3571. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125326&quot;&gt;move &lt;code&gt;#[do_not_recommend]&lt;/code&gt; to the &lt;code&gt;#[diagnostic]&lt;/code&gt; namespace&lt;/a&gt;&lt;/li&gt;
  3572. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125046&quot;&gt;only allow immutable statics with &lt;code&gt;#[linkage]&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3573. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125467&quot;&gt;only suppress binop error in favor of semicolon suggestion if we're in an assignment statement&lt;/a&gt;&lt;/li&gt;
  3574. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/117804&quot;&gt;panic directly in &lt;code&gt;Arguments::new*&lt;/code&gt; instead of recursing&lt;/a&gt;&lt;/li&gt;
  3575. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125015&quot;&gt;pattern types: Prohibit generic args on const params&lt;/a&gt;&lt;/li&gt;
  3576. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125457&quot;&gt;properly deal with missing/placeholder types inside GACs&lt;/a&gt;&lt;/li&gt;
  3577. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124676&quot;&gt;relax restrictions on multiple sanitizers&lt;/a&gt;&lt;/li&gt;
  3578. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125468&quot;&gt;remove &lt;code&gt;DefId&lt;/code&gt; from &lt;code&gt;EarlyParamRegion&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3579. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125510&quot;&gt;remove proof tree formatting, make em shallow&lt;/a&gt;&lt;/li&gt;
  3580. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125409&quot;&gt;rename &lt;code&gt;FrameworkOnlyWindows&lt;/code&gt; to &lt;code&gt;RawDylibOnlyWindows&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3581. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125501&quot;&gt;resolve anon const's parent predicates to direct parent instead of opaque's parent&lt;/a&gt;&lt;/li&gt;
  3582. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125508&quot;&gt;stop SRoA'ing &lt;code&gt;DynMetadata&lt;/code&gt; in MIR&lt;/a&gt;&lt;/li&gt;
  3583. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124048&quot;&gt;support C23's Variadics Without a Named Parameter&lt;/a&gt;&lt;/li&gt;
  3584. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125519&quot;&gt;tag more stuff with &lt;code&gt;WG-trait-system-refactor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3585. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124661&quot;&gt;turn remaining non-structural-const-in-pattern lints into hard errors&lt;/a&gt;&lt;/li&gt;
  3586. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125355&quot;&gt;use &lt;code&gt;Backtrace::force_capture&lt;/code&gt; instead of &lt;code&gt;Backtrace::capture&lt;/code&gt; in &lt;code&gt;rustc_log&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3587. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125479&quot;&gt;validate the special layout restriction on &lt;code&gt;DynMetadata&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3588. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124187&quot;&gt;warn (or error) when &lt;code&gt;Self&lt;/code&gt; ctor from outer item is referenced in inner nested item&lt;/a&gt;&lt;/li&gt;
  3589. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125392&quot;&gt;wrap Context.ext in AssertUnwindSafe&lt;/a&gt;&lt;/li&gt;
  3590. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125359&quot;&gt;interpret: make overflowing binops just normal binops&lt;/a&gt;&lt;/li&gt;
  3591. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3628&quot;&gt;miri: add back some tokio features&lt;/a&gt;&lt;/li&gt;
  3592. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3625&quot;&gt;miri: bugfix &lt;code&gt;MiriAllocBytes&lt;/code&gt; to guarantee different addresses&lt;/a&gt;&lt;/li&gt;
  3593. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3631&quot;&gt;miri: completely refactor how we manage blocking and unblocking threads&lt;/a&gt;&lt;/li&gt;
  3594. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125410&quot;&gt;perf: Delay the construction of early lint diag structs&lt;/a&gt;&lt;/li&gt;
  3595. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121377&quot;&gt;stabilize &lt;code&gt;LazyCell&lt;/code&gt; and &lt;code&gt;LazyLock&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3596. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124667&quot;&gt;stabilize &lt;code&gt;div_duration&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3597. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125561&quot;&gt;stabilize &lt;code&gt;slice_flatten&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3598. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/116123&quot;&gt;rewrite native thread-local storage&lt;/a&gt;&lt;/li&gt;
  3599. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123724&quot;&gt;rewrite TLS on platforms without threads&lt;/a&gt;&lt;/li&gt;
  3600. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122494&quot;&gt;simplify key-based thread locals&lt;/a&gt;&lt;/li&gt;
  3601. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125011&quot;&gt;add opt-for-size core lib feature flag&lt;/a&gt;&lt;/li&gt;
  3602. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125609&quot;&gt;always use the general case char count with &lt;code&gt;optimize_for_size&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3603. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124097&quot;&gt;add &lt;code&gt;IntoIterator&lt;/code&gt; for &lt;code&gt;Box&amp;lt;[T]&amp;gt;&lt;/code&gt; + edition 2024-specific lints&lt;/a&gt;&lt;/li&gt;
  3604. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121571&quot;&gt;add &lt;code&gt;assert_unsafe_precondition&lt;/code&gt; to &lt;code&gt;unchecked_{add,sub,neg,mul,shl,shr}&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  3605. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/121150&quot;&gt;add a fast-path to &lt;code&gt;Debug&lt;/code&gt; ASCII &lt;code&gt;&amp;amp;str&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3606. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125527&quot;&gt;add manual &lt;code&gt;Sync&lt;/code&gt; impl for &lt;code&gt;ReentrantLockGuard&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3607. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123803&quot;&gt;fix &lt;code&gt;VecDeque::shrink_to&lt;/code&gt; UB when &lt;code&gt;handle_alloc_error&lt;/code&gt; unwinds&lt;/a&gt;&lt;/li&gt;
  3608. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125559&quot;&gt;simplify the &lt;code&gt;unchecked_sh[lr]&lt;/code&gt; ub-checks a bit&lt;/a&gt;&lt;/li&gt;
  3609. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122079&quot;&gt;less syscalls for the &lt;code&gt;copy_file_range&lt;/code&gt; probe&lt;/a&gt;&lt;/li&gt;
  3610. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125455&quot;&gt;make &lt;code&gt;clamp&lt;/code&gt; inline&lt;/a&gt;&lt;/li&gt;
  3611. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/122986&quot;&gt;fix &lt;code&gt;c_char&lt;/code&gt; on AIX&lt;/a&gt;&lt;/li&gt;
  3612. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125070&quot;&gt;panic if &lt;code&gt;PathBuf::set_extension&lt;/code&gt; would add a path separator&lt;/a&gt;&lt;/li&gt;
  3613. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125345&quot;&gt;codegen_llvm: add support for writing summary bitcode&lt;/a&gt;&lt;/li&gt;
  3614. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc_codegen_gcc/pull/519&quot;&gt;codegen_gcc: simd: implement pointer provenance intrinsics&lt;/a&gt;&lt;/li&gt;
  3615. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125263&quot;&gt;rust-lld: fallback to rustc's sysroot if there's no path to the linker in the target sysroot&lt;/a&gt;&lt;/li&gt;
  3616. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125417&quot;&gt;self-contained linker: retry linking without &lt;code&gt;-fuse-ld=lld&lt;/code&gt; on CCs that don't support it&lt;/a&gt;&lt;/li&gt;
  3617. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13951&quot;&gt;cargo: add more high level traces&lt;/a&gt;&lt;/li&gt;
  3618. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13946&quot;&gt;cargo: fetch specific commits even if the github fast path fails&lt;/a&gt;&lt;/li&gt;
  3619. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13969&quot;&gt;cargo: fix: check if rev is full commit sha for github fast path&lt;/a&gt;&lt;/li&gt;
  3620. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13910&quot;&gt;cargo: fix: remove symlink dir on Windows&lt;/a&gt;&lt;/li&gt;
  3621. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13956&quot;&gt;cargo: improve error description when deserializing partial field &lt;code&gt;struct&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3622. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13964&quot;&gt;cargo: test: switch from &lt;code&gt;drop&lt;/code&gt; to &lt;code&gt;let _&lt;/code&gt; due to nightly rustc change&lt;/a&gt;&lt;/li&gt;
  3623. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13948&quot;&gt;cargo: upgrade gix from 0.62 to 0.63&lt;/a&gt;&lt;/li&gt;
  3624. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13939&quot;&gt;cargo: use &lt;code&gt;i32&lt;/code&gt; rather than &lt;code&gt;usize&lt;/code&gt; as &quot;default integer&quot; in library template&lt;/a&gt;&lt;/li&gt;
  3625. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12740&quot;&gt;clippy: &lt;code&gt;significant_drop_in_scrutinee&lt;/code&gt;: Trigger lint only if lifetime allows early significant drop&lt;/a&gt;&lt;/li&gt;
  3626. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12765&quot;&gt;clippy: add new lint &lt;code&gt;while_float&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3627. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12842&quot;&gt;clippy: add parentheses to &lt;code&gt;let_and_return&lt;/code&gt;'s suggestion&lt;/a&gt;&lt;/li&gt;
  3628. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12398&quot;&gt;clippy: bug fix: lint &lt;code&gt;numbered_fields&lt;/code&gt; message error&lt;/a&gt;&lt;/li&gt;
  3629. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12809&quot;&gt;clippy: correctly handle closing parens in &lt;code&gt;missing_backticks&lt;/code&gt; doc lint&lt;/a&gt;&lt;/li&gt;
  3630. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12836&quot;&gt;clippy: Quick Fix for bare URLs&lt;/a&gt;&lt;/li&gt;
  3631. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12843&quot;&gt;clippy: fix &lt;code&gt;unnecessary_to_owned&lt;/code&gt; interaction with macro expansion&lt;/a&gt;&lt;/li&gt;
  3632. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12841&quot;&gt;clippy: fulfill expectations in &lt;code&gt;check_partial_eq_without_eq&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3633. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12804&quot;&gt;clippy: fulfill expectations in &lt;code&gt;check_unsafe_derive_deserialize&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3634. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12823&quot;&gt;clippy: suppress &lt;code&gt;iter_on_empty_collections&lt;/code&gt; if the iterator's concrete type is relied upon&lt;/a&gt;&lt;/li&gt;
  3635. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17258&quot;&gt;rust-analyzer: add &lt;code&gt;toggle_async_sugar&lt;/code&gt; assist code action&lt;/a&gt;&lt;/li&gt;
  3636. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17287&quot;&gt;rust-analyzer: allow sysroots to only consist of the source root dir&lt;/a&gt;&lt;/li&gt;
  3637. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17248&quot;&gt;rust-analyzer: clear diagnostics only after new ones were received&lt;/a&gt;&lt;/li&gt;
  3638. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17268&quot;&gt;rust-analyzer: more callable info&lt;/a&gt;&lt;/li&gt;
  3639. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17291&quot;&gt;rust-analyzer: fix &lt;code&gt;data_constructor&lt;/code&gt; ignoring generics for &lt;code&gt;struct&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3640. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17275&quot;&gt;rust-analyzer: fix inconsistent cwd of &lt;code&gt;run&lt;/code&gt; and &lt;code&gt;debug&lt;/code&gt; command in client&lt;/a&gt;&lt;/li&gt;
  3641. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17270&quot;&gt;rust-analyzer: ensure implied bounds from associated types are considered in autocomplete&lt;/a&gt;&lt;/li&gt;
  3642. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17279&quot;&gt;rust-analyzer: fix &lt;code&gt;format_args&lt;/code&gt; lowering passing incorrect parameters to &lt;code&gt;rustc_parse_format&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3643. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17174&quot;&gt;rust-analyzer: infer type of async block with tail return expr&lt;/a&gt;&lt;/li&gt;
  3644. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17251&quot;&gt;rust-analyzer: resolve extern prelude for local mods in block modules&lt;/a&gt;&lt;/li&gt;
  3645. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17284&quot;&gt;rust-analyzer: use correct toolchain channel when generating builtin type doc links&lt;/a&gt;&lt;/li&gt;
  3646. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17277&quot;&gt;rust-analyzer: various find path fixes&lt;/a&gt;&lt;/li&gt;
  3647. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17140&quot;&gt;rust-analyzer: handle &lt;code&gt;{self}&lt;/code&gt; when removing unused imports&lt;/a&gt;&lt;/li&gt;
  3648. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17253&quot;&gt;rust-analyzer: implement assist to switch between doc and normal comments&lt;/a&gt;&lt;/li&gt;
  3649. &lt;/ul&gt;
  3650. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  3651. &lt;p&gt;A relatively quiet week, with few large changes, the largest driven by further
  3652. increasing the scope of unsafe precondition checking.&lt;/p&gt;
  3653. &lt;p&gt;Triage done by &lt;strong&gt;@simulacrum&lt;/strong&gt;.
  3654. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=1d0e4afd4cac09078e12a232508c3e9f8d42535d&amp;amp;end=a59072ec4fb6824213df5e9de8cae4812fd4fe97&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;1d0e4afd..a59072ec&lt;/a&gt;&lt;/p&gt;
  3655. &lt;p&gt;2 Regressions, 3 Improvements, 5 Mixed; 3 of them in rollups
  3656. 51 artifact comparisons made in total&lt;/p&gt;
  3657. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/master/triage/2024-05-27.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  3658. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
  3659. &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
  3660. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  3661. &lt;ul&gt;
  3662. &lt;li&gt;&lt;em&gt;No RFCs were approved this week.&lt;/em&gt;&lt;/li&gt;
  3663. &lt;/ul&gt;
  3664. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  3665. &lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
  3666. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  3667. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  3668. &lt;ul&gt;
  3669. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3599&quot;&gt;re-organise the compiler team&lt;/a&gt;&lt;/li&gt;
  3670. &lt;/ul&gt;
  3671. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  3672. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  3673. &lt;ul&gt;
  3674. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/103765&quot;&gt;Tracking Issue for &lt;code&gt;Error&lt;/code&gt; in &lt;code&gt;core&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  3675. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/125380&quot;&gt;Make &lt;code&gt;WHERE_CLAUSES_OBJECT_SAFETY&lt;/code&gt; a regular object safety violation&lt;/a&gt;&lt;/li&gt;
  3676. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122597&quot;&gt;Show files produced by &lt;code&gt;--emit foo&lt;/code&gt; in json artifact notifications&lt;/a&gt;&lt;/li&gt;
  3677. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122192&quot;&gt;Do not try to reveal hidden types when trying to prove Freeze in the defining scope&lt;/a&gt;&lt;/li&gt;
  3678. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/122804&quot;&gt;Item bounds can reference self projections and still be object safe&lt;/a&gt;&lt;/li&gt;
  3679. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/125190&quot;&gt;Use a default lifetime of &lt;code&gt;'static&lt;/code&gt; in associated consts&lt;/a&gt;&lt;/li&gt;
  3680. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124577&quot;&gt;Stabilize &lt;code&gt;custom_code_classes_in_docs&lt;/code&gt; feature&lt;/a&gt;&lt;/li&gt;
  3681. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/99069&quot;&gt;Tracking issue for integer_atomics&lt;/a&gt;&lt;/li&gt;
  3682. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/112353&quot;&gt;Constification of BinaryHeap construction&lt;/a&gt;&lt;/li&gt;
  3683. &lt;/ul&gt;
  3684. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Cargo&lt;/a&gt;
  3685. &lt;ul&gt;
  3686. &lt;li&gt;&lt;em&gt;No Cargo Tracking Issues or PRs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  3687. &lt;/ul&gt;
  3688. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-team&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc+&quot;&gt;Language Team&lt;/a&gt;
  3689. &lt;ul&gt;
  3690. &lt;li&gt;&lt;em&gt;No Language Team RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  3691. &lt;/ul&gt;
  3692. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-reference&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Language Reference&lt;/a&gt;
  3693. &lt;ul&gt;
  3694. &lt;li&gt;&lt;em&gt;No Language Reference RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  3695. &lt;/ul&gt;
  3696. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#unsafe-code-guidelines&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;
  3697. &lt;ul&gt;
  3698. &lt;li&gt;&lt;em&gt;No Unsafe Code Guideline RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  3699. &lt;/ul&gt;
  3700. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h6&gt;
  3701. &lt;ul&gt;
  3702. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3649&quot;&gt;[RFC] Named macro capture groups&lt;/a&gt;&lt;/li&gt;
  3703. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3646&quot;&gt;Change crates.io policy to not offer crate transfer mediation&lt;/a&gt;&lt;/li&gt;
  3704. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3645&quot;&gt;Externally implementable traits&lt;/a&gt;&lt;/li&gt;
  3705. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3643&quot;&gt;[RFC] On_unimplemented_trait_use&lt;/a&gt;&lt;/li&gt;
  3706. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3642&quot;&gt;[RFC] Thread spawn hook (inheriting thread locals)&lt;/a&gt;&lt;/li&gt;
  3707. &lt;/ul&gt;
  3708. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  3709. &lt;p&gt;Rusty Events between 2024-05-29 - 2024-06-26 🦀&lt;/p&gt;
  3710. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  3711. &lt;ul&gt;
  3712. &lt;li&gt;2024-05-29 | Virtual | &lt;a href=&quot;https://www.eventbrite.com/o/training-4-programmers-llc-80387368983&quot;&gt;Training 4 Programmers LLC&lt;/a&gt;&lt;ul&gt;
  3713. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/enums-structs-and-traits-essential-building-blocks-of-rust-programming-tickets-904696681127&quot;&gt;&lt;strong&gt;Enums, Structs, and Traits - Essential Building Blocks of Rust Programming&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3714. &lt;/ul&gt;
  3715. &lt;/li&gt;
  3716. &lt;li&gt;2024-05-30 | Virtual + In Person (Barcelona, ES) | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/&quot;&gt;BcnRust&lt;/a&gt;&lt;ul&gt;
  3717. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/events/300765894/&quot;&gt;&lt;strong&gt;Rust for the web, Barcelona 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3718. &lt;/ul&gt;
  3719. &lt;/li&gt;
  3720. &lt;li&gt;2024-05-30 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3721. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298542326/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3722. &lt;/ul&gt;
  3723. &lt;/li&gt;
  3724. &lt;li&gt;2024-06-04 | Virtual | &lt;a href=&quot;https://www.meetup.com/women-in-rust/&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
  3725. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/300918713/&quot;&gt;&lt;strong&gt;Lunch &amp;amp; Learn: A Creative Thinker's Programming Language&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3726. &lt;/ul&gt;
  3727. &lt;/li&gt;
  3728. &lt;li&gt;2024-06-04 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3729. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300191681/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3730. &lt;/ul&gt;
  3731. &lt;/li&gt;
  3732. &lt;li&gt;2024-06-05 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  3733. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047896/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3734. &lt;/ul&gt;
  3735. &lt;/li&gt;
  3736. &lt;li&gt;2024-06-06 | Virtual | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  3737. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301156302/&quot;&gt;&lt;strong&gt;Rust Maven Workshop: Your first contribution to an Open Source Rust project&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3738. &lt;/ul&gt;
  3739. &lt;/li&gt;
  3740. &lt;li&gt;2024-06-06 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  3741. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477702/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3742. &lt;/ul&gt;
  3743. &lt;/li&gt;
  3744. &lt;li&gt;2024-06-09 | Virtual | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  3745. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301215326/&quot;&gt;&lt;strong&gt;Rust Maven Workshop: GitHub pages for Rust developers (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3746. &lt;/ul&gt;
  3747. &lt;/li&gt;
  3748. &lt;li&gt;2024-06-11 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  3749. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341709/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3750. &lt;/ul&gt;
  3751. &lt;/li&gt;
  3752. &lt;li&gt;2024-06-13 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3753. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897800/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3754. &lt;/ul&gt;
  3755. &lt;/li&gt;
  3756. &lt;li&gt;2024-06-13 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  3757. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945258/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3758. &lt;/ul&gt;
  3759. &lt;/li&gt;
  3760. &lt;li&gt;2024-06-16 | Virtual | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  3761. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301294669/&quot;&gt;&lt;strong&gt;Workshop: Web development in Rust using Rocket (English)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3762. &lt;/ul&gt;
  3763. &lt;/li&gt;
  3764. &lt;li&gt;2024-06-18 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  3765. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346963/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3766. &lt;/ul&gt;
  3767. &lt;/li&gt;
  3768. &lt;li&gt;2024-06-19 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  3769. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298631733/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3770. &lt;/ul&gt;
  3771. &lt;/li&gt;
  3772. &lt;li&gt;2024-06-20 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  3773. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477705/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3774. &lt;/ul&gt;
  3775. &lt;/li&gt;
  3776. &lt;li&gt;2024-06-25 | Virtual (Dallas, TX, US)| &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust User Group&lt;/a&gt;&lt;ul&gt;
  3777. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/mvdtgtygcjbhc/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3778. &lt;/ul&gt;
  3779. &lt;/li&gt;
  3780. &lt;/ul&gt;
  3781. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  3782. &lt;ul&gt;
  3783. &lt;li&gt;2024-06-01 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  3784. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3785. &lt;/ul&gt;
  3786. &lt;/li&gt;
  3787. &lt;/ul&gt;
  3788. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  3789. &lt;ul&gt;
  3790. &lt;li&gt;2024-05-28 - 2024-05-30 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize&lt;/a&gt;&lt;ul&gt;
  3791. &lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize Conf 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3792. &lt;/ul&gt;
  3793. &lt;/li&gt;
  3794. &lt;li&gt;2024-05-30 | Amsterdam, NL | &lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/&quot;&gt;Rust Developers Amsterdam Group&lt;/a&gt;&lt;ul&gt;
  3795. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/301065548/&quot;&gt;&lt;strong&gt;Rust Developer Meetup @ Avalor AI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3796. &lt;/ul&gt;
  3797. &lt;/li&gt;
  3798. &lt;li&gt;2024-05-30 | Barcelona, ES | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/&quot;&gt;BcnRust&lt;/a&gt;&lt;ul&gt;
  3799. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/events/300765894/&quot;&gt;&lt;strong&gt;Rust for the web, Barcelona 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3800. &lt;/ul&gt;
  3801. &lt;/li&gt;
  3802. &lt;li&gt;2024-05-30 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  3803. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288963/&quot;&gt;&lt;strong&gt;Rust and Tell - Title&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3804. &lt;/ul&gt;
  3805. &lt;/li&gt;
  3806. &lt;li&gt;2024-05-30 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  3807. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458222/&quot;&gt;&lt;strong&gt;Rust meetup #47 sponsored by Microsoft!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3808. &lt;/ul&gt;
  3809. &lt;/li&gt;
  3810. &lt;li&gt;2024-05-30 | Oslo, NO | &lt;a href=&quot;https://www.meetup.com/rust-oslo/events/&quot;&gt;Rust Oslo&lt;/a&gt;&lt;ul&gt;
  3811. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-oslo/events/300453310/&quot;&gt;&lt;strong&gt;Rust Hack'n'Learn at Kampen Bistro&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3812. &lt;/ul&gt;
  3813. &lt;/li&gt;
  3814. &lt;li&gt;2024-05-30 | Vienna, AT | &lt;a href=&quot;https://www.meetup.com/rust-vienna/&quot;&gt;Rust Vienna&lt;/a&gt;&lt;ul&gt;
  3815. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-vienna/events/301162548/&quot;&gt;&lt;strong&gt;Rust Vienna Meetup - May - Rust Backend 101&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3816. &lt;/ul&gt;
  3817. &lt;/li&gt;
  3818. &lt;li&gt;2024-06-05 | Hamburg, DE | &lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/&quot;&gt;Rust Meetup Hamburg&lt;/a&gt;&lt;ul&gt;
  3819. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/events/299235215/&quot;&gt;&lt;strong&gt;Rust Hack &amp;amp; Learn June 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3820. &lt;/ul&gt;
  3821. &lt;/li&gt;
  3822. &lt;li&gt;2025-06-06 | Vilnius, LT | &lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/&quot;&gt;Rust Vilnius&lt;/a&gt;&lt;ul&gt;
  3823. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/events/301012097/&quot;&gt;&lt;strong&gt;Enjoy our second Rust and ZIG event&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3824. &lt;/ul&gt;
  3825. &lt;/li&gt;
  3826. &lt;li&gt;2024-06-19 - 2024-06-24 | Zürich, CH | &lt;a href=&quot;https://rustfest.ch/&quot;&gt;RustFest Zürich&lt;/a&gt;&lt;ul&gt;
  3827. &lt;li&gt;&lt;a href=&quot;https://rustfest.ch/&quot;&gt;&lt;strong&gt;RustFest Zürich 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3828. &lt;/ul&gt;
  3829. &lt;/li&gt;
  3830. &lt;li&gt;2024-06-20 | Aarhus, DK | &lt;a href=&quot;https://www.meetup.com/rust-aarhus/&quot;&gt;Rust Aarhus&lt;/a&gt;&lt;ul&gt;
  3831. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-aarhus/events/300865116/&quot;&gt;&lt;strong&gt;Talk Night at Trifork&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3832. &lt;/ul&gt;
  3833. &lt;/li&gt;
  3834. &lt;/ul&gt;
  3835. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  3836. &lt;ul&gt;
  3837. &lt;li&gt;2024-05-30 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/&quot;&gt;Mountain View Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3838. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/events/300775547/&quot;&gt;&lt;strong&gt;Rust Meetup at Hacker Dojo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3839. &lt;/ul&gt;
  3840. &lt;/li&gt;
  3841. &lt;li&gt;2024-05-31 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3842. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116786/&quot;&gt;&lt;strong&gt;Boston Common Rust Lunch, May 31&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3843. &lt;/ul&gt;
  3844. &lt;/li&gt;
  3845. &lt;li&gt;2024-06-08 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  3846. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116799/&quot;&gt;&lt;strong&gt;Porter Square Rust Lunch, Jun 8&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3847. &lt;/ul&gt;
  3848. &lt;/li&gt;
  3849. &lt;li&gt;2024-06-13 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  3850. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020010/&quot;&gt;&lt;strong&gt;Monthly Meetup: Topic TBD!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3851. &lt;/ul&gt;
  3852. &lt;/li&gt;
  3853. &lt;li&gt;2024-06-18 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
  3854. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186953/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3855. &lt;/ul&gt;
  3856. &lt;/li&gt;
  3857. &lt;li&gt;2024-06-20 | Seattle, WA, US | &lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/&quot;&gt;Seattle Rust User Group&lt;/a&gt;&lt;ul&gt;
  3858. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/seattle-rust-user-group/events/299509396/&quot;&gt;&lt;strong&gt;Seattle Rust User Group Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3859. &lt;/ul&gt;
  3860. &lt;/li&gt;
  3861. &lt;/ul&gt;
  3862. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  3863. &lt;ul&gt;
  3864. &lt;li&gt;2024-06-25 | Canberra, ACt, AU | &lt;a href=&quot;https://www.meetup.com/rust-canberra/&quot;&gt;Canberra Rust User Group (CRUG)&lt;/a&gt;&lt;ul&gt;
  3865. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-canberra/events/300749371/&quot;&gt;&lt;strong&gt;June Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3866. &lt;/ul&gt;
  3867. &lt;/li&gt;
  3868. &lt;/ul&gt;
  3869. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#south-america&quot;&gt;South America&lt;/a&gt;&lt;/h5&gt;
  3870. &lt;ul&gt;
  3871. &lt;li&gt;2024-06-06 | Buenos Aires, AR | &lt;a href=&quot;https://www.meetup.com/rust-argentina/&quot;&gt;Rust en Español | Rust Argentina&lt;/a&gt;&lt;ul&gt;
  3872. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-argentina/events/299740249&quot;&gt;&lt;strong&gt;Juntada de Junio&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  3873. &lt;/ul&gt;
  3874. &lt;/li&gt;
  3875. &lt;/ul&gt;
  3876. &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
  3877. it mentioned here. Please remember to add a link to the event too.
  3878. Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
  3879. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  3880.  
  3881.  
  3882. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1cixuzr/official_rrust_whos_hiring_thread_for_jobseekers&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  3883. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  3884. &lt;blockquote&gt;
  3885. &lt;p&gt;I’ve said it before and I’ll say it again: as a child of OCaml and C++, Rust currently is the best language for production compiler-shaped things.&lt;/p&gt;
  3886. &lt;/blockquote&gt;
  3887. &lt;p&gt;– &lt;a href=&quot;https://lobste.rs/s/hjmrl1/how_we_migrated_our_static_analyzer_from#c_amxgiq&quot;&gt;Alex Kladov on lobste.rs&lt;/a&gt;&lt;/p&gt;
  3888. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1570&quot;&gt;Stephan Sokolow&lt;/a&gt; for the suggestion!&lt;/p&gt;
  3889. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
  3890. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  3891. &lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  3892. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1d4aysp/this_week_in_rust_549/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  3893. <pubDate>Wed, 29 May 2024 04:00:00 +0000</pubDate>
  3894. <dc:creator>TWiR Contributors</dc:creator>
  3895. </item>
  3896. <item>
  3897. <title>Mozilla Localization (L10N): Transforming Translations: How LLMs Can Help Improve Mozilla’s Pontoon</title>
  3898. <guid isPermaLink="false">https://blog.mozilla.org/l10n/?p=1686</guid>
  3899. <link>https://blog.mozilla.org/l10n/2024/05/28/transforming-translations-how-llms-can-help-improve-mozillas-pontoon/</link>
  3900. <description>&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1687&quot; style=&quot;width: 1034px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/image1.png&quot;&gt;&lt;img alt=&quot;A futuristic AI generated city&quot; class=&quot;wp-image-1687 size-full&quot; height=&quot;1024&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/image1.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1687&quot;&gt;Image generated by DALL-E 3&lt;/p&gt;&lt;/div&gt;
  3901. &lt;p&gt;Imagine a world where language barriers do not exist; a tool so intuitive that it can understand the subtleties of every dialect and the jargon of any industry.&lt;/p&gt;
  3902. &lt;p&gt;While we’re not quite there yet, advancements in Large Language Models (LLMs) are bringing us closer to this vision.&lt;/p&gt;
  3903. &lt;h3&gt;What are LLMs: Beyond the Buzz&lt;/h3&gt;
  3904. &lt;p&gt;2024 is buzzing with talk about “AI,” but what does it actually mean? Artificial Intelligence, especially LLMs, isn’t just a fad — it’s a fundamental shift in how we interface with technology. You’ve likely interacted with AI without even realizing it — when Google auto-completes your searches, when Facebook suggests who to tag in a photo, or when Netflix recommends what you should watch next.&lt;/p&gt;
  3905. &lt;p&gt;LLMs are a breed of AI designed to understand and generate human language by analyzing vast amounts of text. They can compose poetry, draft legal agreements, and yes, translate languages. They’re not just processing language; they’re understanding context, tone, and even the subtext of what’s being written or said.&lt;/p&gt;
  3906. &lt;h3&gt;The Evolution of Translation: From Machine Translation to LLMs&lt;/h3&gt;
  3907. &lt;p&gt;Remember the early days of Google Translate? You’d input a phrase in English and get a somewhat awkward French equivalent. This was typical of statistical machine translation, which relied on vast amounts of bilingual text to make educated guesses. It was magic for its time, but it was just the beginning.&lt;/p&gt;
  3908. &lt;p&gt;As technology advanced, we saw the rise of neural machine translation, which used AI to better understand context and nuance, resulting in more accurate translations. However, even these neural models have their limitations.&lt;/p&gt;
  3909. &lt;p&gt;Enter LLMs, which look at the big picture, compare multiple interpretations, and can even consider cultural nuances before suggesting a translation.&lt;/p&gt;
  3910. &lt;h3&gt;Pontoon: The Heart of Mozilla’s Localization Efforts&lt;/h3&gt;
  3911. &lt;p&gt;Pontoon isn’t just any translation tool; it’s the backbone of Mozilla’s localization efforts, where a vibrant community of localizers breathes life into strings of text, adapting Mozilla’s products for global audiences. However, despite integrating various machine translation sources, these tools often struggle with capturing the subtleties essential for accurate translation.&lt;/p&gt;
  3912. &lt;p&gt;How do we make localizers’ jobs easier? By integrating LLMs to assist not just in translating text but in understanding the spirit of what’s being conveyed. And crucially, this integration doesn’t replace our experienced localizers who supervise and refine these translations; it supports and enhances their invaluable work.&lt;/p&gt;
  3913. &lt;h3&gt;Leveraging Research: Making the Case for LLMs&lt;/h3&gt;
  3914. &lt;p&gt;Our journey began with a question: How can we enhance Pontoon with the latest AI technologies? Diving into research, we explored various LLM applications, from simplifying complex translation tasks to handling under-represented languages with grace.&lt;/p&gt;
  3915. &lt;p&gt;To summarize the research:&lt;/p&gt;
  3916. &lt;ul&gt;
  3917. &lt;li&gt;&lt;b&gt;Performance in Translation:&lt;/b&gt; Studies like “&lt;a href=&quot;https://arxiv.org/pdf/2302.14520.pdf&quot;&gt;Large Language Models Are State-of-the-Art Evaluators of Translation Quality&lt;/a&gt;” by Tom Kocmi and Christian Federmann demonstrated that LLMs, specifically GPT-3.5 and larger models, exhibit state-of-the-art capabilities in translation quality assessment. These models outperform other automatic metrics in quality estimation without a reference translation, especially at the system level.&lt;/li&gt;
  3918. &lt;li&gt;&lt;b&gt;Robustness and Versatility: &lt;/b&gt;The paper “&lt;a href=&quot;https://arxiv.org/pdf/2302.09210.pdf&quot;&gt;How Good Are GPT Models at Machine Translation? A Comprehensive Evaluation&lt;/a&gt;” by Amr Hendy et al. highlighted the competitive performance of GPT models in translating high-resource languages. It also discussed the limited capabilities for low-resource languages and the benefits of hybrid approaches that combine GPT models with other translation systems.&lt;/li&gt;
  3919. &lt;li&gt;&lt;b&gt;Innovative Approaches:&lt;/b&gt; Research on new trends in machine translation, such as “&lt;a href=&quot;https://arxiv.org/pdf/2305.01181.pdf&quot;&gt;New Trends in Machine Translation using Large Language Models: Case Examples with ChatGPT&lt;/a&gt;” explored innovative directions like stylized and interactive machine translation. These approaches allow for translations that match specific styles or genres and enable user participation in the translation process, enhancing accuracy and fluency.&lt;/li&gt;
  3920. &lt;/ul&gt;
  3921. &lt;p&gt;The findings were clear — LLMs present a significant opportunity to enhance Pontoon and improve translation quality.&lt;/p&gt;
  3922. &lt;h3&gt;Why We Chose This Path&lt;/h3&gt;
  3923. &lt;p&gt;Why go through this transformation? Because language is personal. Take the phrase “Firefox has your back.” In English, it conveys reliability and trust. A direct translation might miss this idiomatic expression, interpreting it literally as “someone has ownership of your back”, which could confuse or mislead users. LLMs can help maintain the intended meaning and nuance, ensuring that every translated phrase feels as though it was originally crafted in the user’s native language.&lt;/p&gt;
  3924. &lt;p&gt;We can utilize the in-context learning of LLMs to help with this. This is a technique that informs the model about your data and preferences as it generates its responses via an engineered prompt.&lt;/p&gt;
  3925. &lt;h3&gt;Experimenting: A Case Study with ChatGPT and GPT-4&lt;/h3&gt;
  3926. &lt;p&gt;To illustrate the effectiveness of our approach, I conducted a practical experiment with OpenAI’s &lt;a href=&quot;https://openai.com/chatgpt/&quot;&gt;ChatGPT&lt;/a&gt;, powered by GPT-4. I asked ChatGPT to translate the string “Firefox has your back” to Bengali. The initial translation roughly translates to “Firefox is behind you”, which doesn’t convey the original meaning of the string.&lt;/p&gt;
  3927. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1689&quot; style=&quot;width: 822px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/image3.png&quot;&gt;&lt;img alt=&quot;Screenshot of first interaction with ChatGPT&quot; class=&quot;wp-image-1689 size-full&quot; height=&quot;356&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/image3.png&quot; width=&quot;812&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1689&quot;&gt;Asking GPT-4 to translate the string “Firefox has your back” to Bengali.&lt;/p&gt;&lt;/div&gt;
  3928. &lt;p&gt;Now, it seems our friendly ChatGPT decided to go rogue and translated “Firefox” despite being told not to! Additionally, instead of simply providing the translation as requested, it gave a verbose introduction and even threw in an English pronunciation guide. This little mishap underscores a crucial point: the quality of the output heavily depends on how well the input is framed. It appears the AI got a bit too eager and forgot its instructions.&lt;/p&gt;
  3929. &lt;p&gt;This experiment shows that even advanced models like GPT-4 can stumble if the prompt isn’t just right. We’ll dive deeper into the art and science of prompt engineering later, exploring how to fine-tune prompts to guide the model towards more accurate and contextually appropriate translations.&lt;/p&gt;
  3930. &lt;p&gt;Next, I asked ChatGPT to translate the same string to Bengali, this time I specified to keep the original meaning of the string.&lt;/p&gt;
  3931. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1688&quot; style=&quot;width: 866px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/image2.png&quot;&gt;&lt;img alt=&quot;Screenshot of second interaction with ChatGPT&quot; class=&quot;wp-image-1688 size-full&quot; height=&quot;394&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/image2.png&quot; width=&quot;856&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1688&quot;&gt;Asking GPT-4 to translate the string “Firefox has your back” to Bengali, while maintaining the original meaning of the string.&lt;/p&gt;&lt;/div&gt;
  3932. &lt;p&gt;Adjusting the prompt, the translation evolved to “Firefox is with you”—a version that better captured the essence of the phrase.&lt;/p&gt;
  3933. &lt;p&gt;I then used &lt;a href=&quot;https://translate.google.ca/&quot;&gt;Google Translate&lt;/a&gt; to translate the same string.&lt;/p&gt;
  3934. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1690&quot; style=&quot;width: 713px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/image4.png&quot;&gt;&lt;img alt=&quot;Using Google Translate to translate the string “Firefox has your back” to Bengali.&quot; class=&quot;wp-image-1690 size-full&quot; height=&quot;277&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/image4.png&quot; width=&quot;703&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1690&quot;&gt;Using Google Translate to translate the string “Firefox has your back” to Bengali.&lt;/p&gt;&lt;/div&gt;
  3935. &lt;p&gt;For comparison, Google Translate offered a similar translation to the first attempt by GPT-4, which roughly translates to “Firefox is behind you”. This highlights the typical challenges faced by conventional machine translation tools.&lt;/p&gt;
  3936. &lt;p&gt;This experiment underscores the potential of stylized machine translation to enhance translation quality, especially for idiomatic expressions or specific styles like formal or informal language.&lt;/p&gt;
  3937. &lt;h3&gt;The Essential Role of Prompt Engineering in AI Translation&lt;/h3&gt;
  3938. &lt;p&gt;Building on these insights, we dove deeper into the art of prompt engineering, a critical aspect of working with LLMs. This process involves crafting inputs that precisely guide the AI to generate accurate and context-aware outputs. Effective prompt engineering enhances the accuracy of translations, streamlines the translation process by reducing the need for revisions, and allows for customization to meet specific cultural and stylistic preferences.&lt;/p&gt;
  3939. &lt;p&gt;Working together with the localization team, we tested a variety of prompts in languages like Italian, Slovenian, Japanese, Chinese, and French. We assessed each translation on its clarity and accuracy, categorizing them as unusable, understandable, or good. After several iterations, we refined our prompts to ensure they consistently delivered high-quality results, preparing them for integration into Pontoon’s Machinery tab.&lt;/p&gt;
  3940. &lt;h3&gt;How It Works: Bringing LLMs to Pontoon&lt;/h3&gt;
  3941. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1691&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/image5.gif&quot;&gt;&lt;img alt=&quot;LLM feature demonstration&quot; class=&quot;wp-image-1691 size-full&quot; height=&quot;654&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/image5.gif&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1691&quot;&gt;Above is a demonstration of using the “Rephrase” option on the string “Firefox has your back” for the Italian locale. The original suggestion from Google’s Machine Translation meant “Firefox covers your shoulders”, while the rephrased version means “Firefox protects you”.&lt;/p&gt;&lt;/div&gt;
  3942. &lt;p&gt;After working on the prompt engineering and implementation, we’re excited to announce the integration of LLM-assisted translations into Pontoon. For all locales utilizing Google Translate as a translation source, a new AI-powered option is now available within the ‘Machinery’ tab — the reason for limiting the feature to these locales is to gather insights on usage patterns before considering broader integration. Opening this dropdown will reveal three options:&lt;/p&gt;
  3943. &lt;ul&gt;
  3944. &lt;li&gt;&lt;code&gt;REPHRASE&lt;/code&gt;: Generate an alternative to this translation.&lt;/li&gt;
  3945. &lt;/ul&gt;
  3946. &lt;ul&gt;
  3947. &lt;li&gt;&lt;code&gt;MAKE FORMAL&lt;/code&gt;: Generate a more formal version of this translation.&lt;/li&gt;
  3948. &lt;/ul&gt;
  3949. &lt;ul&gt;
  3950. &lt;li&gt;&lt;code&gt;MAKE INFORMAL&lt;/code&gt;: Generate a more informal version of this translation.&lt;/li&gt;
  3951. &lt;/ul&gt;
  3952. &lt;p&gt;After selecting an option, the revised translation will replace the original suggestion. Once a new translation is generated, another option &lt;code&gt;SHOW ORIGINAL&lt;/code&gt; will be available in the dropdown menu. Selecting it will revert to the original suggestion.&lt;/p&gt;
  3953. &lt;h3&gt;The Future of Translation is Here&lt;/h3&gt;
  3954. &lt;p&gt;As we continue to integrate Large Language Models (LLMs) into Mozilla’s Pontoon, we’re not just transforming our translation processes — we’re redefining how linguistic barriers are overcome globally. By enhancing translation accuracy, maintaining cultural relevance, and capturing the nuances of language through the use of LLMs, we’re excited about the possibilities this opens up for users worldwide.&lt;/p&gt;
  3955. &lt;p&gt;However, it’s important to emphasize that the role of our dedicated community of localizers remains central to this process. LLMs and machine translation tools are not used without the supervision and expertise of experienced localizers. These tools are designed to support, not replace, the critical work of our localizers who ensure that translations are accurate and culturally appropriate.&lt;/p&gt;
  3956. &lt;p&gt;We are eager to hear your thoughts. How do you see this impacting your experience with Mozilla’s products? Do the translations meet your expectations for accuracy? Your feedback is invaluable as we strive to refine and perfect this technology. Please share your thoughts and experiences in the comments below or reach out to us on&lt;a href=&quot;https://chat.mozilla.org/#/room/#pontoon:mozilla.org&quot;&gt; Matrix&lt;/a&gt;, or&lt;a href=&quot;https://github.com/mozilla/pontoon/issues&quot;&gt; file an issue&lt;/a&gt;. Together, we can make the web a place without language barriers.&lt;/p&gt;</description>
  3957. <pubDate>Tue, 28 May 2024 15:00:55 +0000</pubDate>
  3958. <dc:creator>Ayanaa Rahman</dc:creator>
  3959. </item>
  3960. <item>
  3961. <title>Firefox Developer Experience: Deprecating CDP Support in Firefox: Embracing the Future with WebDriver BiDi</title>
  3962. <guid isPermaLink="false">https://fxdx.dev/?p=289</guid>
  3963. <link>https://fxdx.dev/deprecating-cdp-support-in-firefox-embracing-the-future-with-webdriver-bidi/</link>
  3964. <description>&lt;p&gt;Starting with &lt;a href=&quot;https://whattrainisitnow.com/release/?version=129&quot;&gt;Firefox 129&lt;/a&gt; support for the &lt;a href=&quot;https://chromedevtools.github.io/devtools-protocol/&quot;&gt;Chrome DevTools Protocol&lt;/a&gt; (CDP) in Firefox will be deprecated. Users of CDP in Firefox are encouraged to migrate to the &lt;a href=&quot;https://w3c.github.io/webdriver-bidi/&quot;&gt;W3C WebDriver BiDi&lt;/a&gt; protocol. This now offers a superset of the features that were provided by Firefox’s CDP implementation.&lt;/p&gt;
  3965.  
  3966.  
  3967.  
  3968. &lt;p&gt;During the depreciation period users have two choices to continue to use CDP with Firefox:&lt;/p&gt;
  3969.  
  3970.  
  3971.  
  3972. &lt;ul&gt;
  3973. &lt;li&gt;Use the &lt;a href=&quot;https://whattrainisitnow.com/release/?version=128&quot;&gt;ESR 128 release&lt;/a&gt;, which will continue to have the same behavior as today throughout its entire support period of about a year.&lt;/li&gt;
  3974.  
  3975.  
  3976.  
  3977. &lt;li&gt;Set the &lt;code&gt;remote.active-protocols&lt;/code&gt; preference to &lt;code&gt;2&lt;/code&gt; before starting Firefox.&lt;/li&gt;
  3978.  
  3979.  
  3980.  
  3981. &lt;li&gt;If WebDriver BiDi should be enabled as well, set the &lt;code&gt;remote.active-protocols&lt;/code&gt; preference to 3.&lt;/li&gt;
  3982. &lt;/ul&gt;
  3983.  
  3984.  
  3985.  
  3986. &lt;p&gt;Our current expectation is to remove the CDP support entirely at the end of 2024.&lt;/p&gt;
  3987.  
  3988.  
  3989.  
  3990. &lt;p&gt;Notably, Puppeteer users are not affected by the deprecation of CDP, as Puppeteer automatically sets the necessary preference based on the selected protocol (CDP or BiDi)&lt;/p&gt;
  3991.  
  3992.  
  3993.  
  3994. &lt;p&gt;If you have a client or tool that currently uses CDP and you wish to continue supporting Firefox, we would appreciate a brief notification, even if you do not need any assistance. Having a list of such clients will help us reach out with important information ahead of any future protocol changes.&lt;/p&gt;
  3995.  
  3996.  
  3997.  
  3998. &lt;p&gt;Also in case of any questions about transitioning to WebDriver BiDi, or concerns about this change, please &lt;a href=&quot;https://fxdx.dev/feed/#support&quot;&gt;reach out&lt;/a&gt; to us.&lt;/p&gt;
  3999.  
  4000.  
  4001.  
  4002. &lt;p&gt;Fore more details about the background to this change, read on.&lt;/p&gt;
  4003.  
  4004.  
  4005.  
  4006. &lt;h3&gt;&lt;strong&gt;The History of CDP Support in Firefox&lt;/strong&gt;&lt;/h3&gt;
  4007.  
  4008.  
  4009.  
  4010. &lt;p&gt;The implementation of the Chrome DevTools Protocol (CDP) in Firefox began as an initiative to provide access to modern web testing tools like &lt;a href=&quot;https://github.com/puppeteer/puppeteer&quot;&gt;Puppeteer&lt;/a&gt;, &lt;a href=&quot;https://www.cypress.io/&quot;&gt;Cypress&lt;/a&gt;, and &lt;a href=&quot;https://github.com/sitespeedio/browsertime&quot;&gt;Browsertime&lt;/a&gt;, which are widely used and largely rely on the CDP protocol. The development kicked off in 2019 with the introduction of the Remote Agent component in Firefox, and by early 2020 experimental support for CDP was made available in Firefox Nightly builds. A significant milestone was reached in February 2021 with the release of Firefox 86, where CDP support was enabled by default, supporting 82 APIs – a subset of the full range of APIs available through CDP.&lt;/p&gt;
  4011.  
  4012.  
  4013.  
  4014. &lt;h3&gt;&lt;strong&gt;Enhancing Cross-browser Testing with Firefox&lt;/strong&gt;&lt;/h3&gt;
  4015.  
  4016.  
  4017.  
  4018. &lt;p&gt;In a two-part series on &lt;a href=&quot;https://hacks.mozilla.org&quot;&gt;Mozilla Hacks&lt;/a&gt;, we already explored the challenges and advancements in cross-browser testing.&lt;/p&gt;
  4019.  
  4020.  
  4021.  
  4022. &lt;p&gt;The first post,&lt;a href=&quot;https://hacks.mozilla.org/2020/12/cross-browser-testing-part-1-web-app-testing-today/&quot;&gt; Cross-browser Testing, Part 1: Web App Testing Today&lt;/a&gt;, discusses the complexities of ensuring web applications function seamlessly across different browsers. It highlights the need for improved testing tools to address inconsistencies caused by varied web standard implementations.&lt;/p&gt;
  4023.  
  4024.  
  4025.  
  4026. &lt;p&gt;The second post,&lt;a href=&quot;https://hacks.mozilla.org/2021/01/improving-cross-browser-testing-part-2-new-automation-features-in-firefox-nightly/&quot;&gt; Improving Cross-browser Testing, Part 2: New Automation Features in Firefox Nightly&lt;/a&gt;, introduces new automation features in Firefox Nightly. These enhancements include improved WebDriver support and the new WebDriver BiDi protocol, aimed at providing more robust and reliable automation tools for developers. Our efforts in these areas are designed to simplify cross-browser testing and improve interoperability between browsers.&lt;/p&gt;
  4027.  
  4028.  
  4029.  
  4030. &lt;h3&gt;&lt;strong&gt;Adopting WebDriver BiDi in Puppeteer&lt;/strong&gt;&lt;/h3&gt;
  4031.  
  4032.  
  4033.  
  4034. &lt;p&gt;With the rise of WebDriver BiDi, the Puppeteer team began integrating support for this new protocol. Today, WebDriver BiDi in Firefox offers a broader range of features than its experimental CDP implementation, making it a more powerful and flexible option for web automation and testing. This includes features like using pre-load scripts to monitor DOM updates, network interception, and better logging, which are critical for modern web applications.&lt;/p&gt;
  4035.  
  4036.  
  4037.  
  4038. &lt;p&gt;We’ve been &lt;a href=&quot;https://hacks.mozilla.org/2023/12/puppeteer-webdriver-bidi/&quot;&gt;working with the Puppeteer team to enable BiDi-based support for Firefox&lt;/a&gt;, offering more features and higher quality than the previous CDP-based implementation. This shift reflects the growing industry preference for a standardized, cross-browser automation protocol. We believe this change will significantly improve automation workflows and ensure compatibility across different browser environments. Stay tuned as we finalize the implementation of the remaining required APIs. Our goal is to provide a seamless and enhanced automation experience for all users.&lt;/p&gt;
  4039.  
  4040.  
  4041.  
  4042. &lt;h3&gt;&lt;strong&gt;Deprecation of CDP&lt;/strong&gt;&lt;/h3&gt;
  4043.  
  4044.  
  4045.  
  4046. &lt;p&gt;As Firefox moves towards fully embracing WebDriver BiDi, CDP support in Firefox was put into limited maintenance mode. This means that no new features, aside from the existing automation-related APIs, have been or will be added any more. Also with tools like Selenium, Browsertime, and Puppeteer adopting WebDriver BiDi as their communication protocol, we see no reason to continue supporting CDP in Firefox. Therefore, &lt;a href=&quot;https://whattrainisitnow.com/release/?version=129&quot;&gt;starting with Firefox 129&lt;/a&gt;, the CDP protocol will no longer be enabled by default. However, &lt;a href=&quot;https://whattrainisitnow.com/release/?version=128&quot;&gt;Firefox 128 ESR&lt;/a&gt; will continue to have CDP enabled for another year, providing a transition period for users.&lt;/p&gt;
  4047.  
  4048.  
  4049.  
  4050. &lt;p&gt;Please note that the deprecation of CDP will not impact Puppeteer users, as we will wait until Puppeteer uses WebDriver BiDi by default for Firefox.&lt;/p&gt;
  4051.  
  4052.  
  4053.  
  4054. &lt;p&gt;However, if you are using a different CDP client, you can manually enable the protocol by setting the Firefox preference &lt;code&gt;remote.active-protocols&lt;/code&gt; to &lt;code&gt;2&lt;/code&gt; before starting Firefox or by restarting the browser. If WebDriver BiDi should be enabled as well, set the &lt;code&gt;remote.active-protocols&lt;/code&gt; preference to 3. Nonetheless, we strongly recommend migrating to WebDriver BiDi, as support for CDP is scheduled to be fully removed by the end of 2024.&lt;/p&gt;
  4055.  
  4056.  
  4057.  
  4058. &lt;h3&gt;Support and Collaboration&lt;/h3&gt;
  4059.  
  4060.  
  4061.  
  4062. &lt;p&gt;If you have any questions about WebDriver BiDi, please feel free to reach out to us. You can contact us via the &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/dev-webdriver&quot;&gt;Google dev-webdriver mailing list&lt;/a&gt; or join the conversation on &lt;a href=&quot;https://chat.mozilla.org/#/room/#webdriver:mozilla.org&quot;&gt;Matrix in the #webdriver channel&lt;/a&gt;. We are here to answer your questions and provide guidance on using WebDriver BiDi to communicate with Firefox effectively.&lt;/p&gt;
  4063.  
  4064.  
  4065.  
  4066. &lt;p&gt;&lt;/p&gt;</description>
  4067. <pubDate>Tue, 28 May 2024 08:52:28 +0000</pubDate>
  4068. <dc:creator>Henrik Skupin</dc:creator>
  4069. </item>
  4070. <item>
  4071. <title>Don Marti: hey kids, site search</title>
  4072. <guid isPermaLink="true">https://blog.zgp.org/hey-kids-site-search/</guid>
  4073. <link>https://blog.zgp.org/hey-kids-site-search/</link>
  4074. <description>&lt;p&gt;Just added &lt;a href=&quot;https://pagefind.app/&quot;&gt;Pagefind&lt;/a&gt; to this site. It’s a site search for sites built with a static site generator, works in the browser. There should now be a search box under the &lt;q&gt;similar posts&lt;/q&gt; list.&lt;/p&gt; &lt;p&gt;This site is built with make, so I just needed to&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;add a dependency to have it automatically rebuild when some content changes&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;add a little markup to the article template to have it know to use the post title and not the blog title as the title in the results.&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;That was about it. Does not add nearly as much to the site build time as some of my own code did. Still &lt;a href=&quot;https://blog.zgp.org/scale-2025/&quot;&gt;planning to pitch a talk for SCALE 2025&lt;/a&gt; on fun small projects that people can string together to make a site.&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.admonsters.com/surviving-the-seo-shake-up-publishers-vs-googles-new-game/&quot;&gt;Surviving the SEO Shake-Up: Publishers vs. Google’s New Game&lt;/a&gt; &lt;q&gt;[Google] gained $12.6 billion in Search revenue YoY, and only lost $1.5 billion in the Google Network. Google footnotes that the &lt;q&gt;The overall growth [in Search &amp;amp; other revenue] was driven by interrelated factors including increases in search queries resulting from growth in user adoption and usage on mobile devices; growth in advertiser spending; and improvements we have made in ad formats and delivery.&lt;/q&gt; Got that last part? You’re not going crazy. Total search queries are up, traffic to publishers is down, and Search revenue is up. Google is here for the ads, their own ads.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.bbc.com/future/article/20240524-how-googles-new-algorithm-will-shape-your-internet&quot;&gt;Google just updated its algorithm. The Internet will never be the same&lt;/a&gt; &lt;q&gt;AI Overviews are just one of a slew of dramatic changes Google has made to its core product over the past two years. The company says its recent effort to revamp Search will usher in an exciting new era of technology and help solve many of the issues plaguing the web. But critics say the opposite may be true. As Google retools its algorithms and uses AI to transition from a search engine to a search and answer engine, some worry the result could be no less than an extinction-level event for the businesses that make much of your favourite content.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.businessinsider.com/google-ai-glue-pizza-i-tried-it-2024-5&quot;&gt;Google AI said to put glue in pizza — so I made a pizza with glue and ate it&lt;/a&gt; (anybody can make a listicle of funny Google AI answers, this takes dedication. See also: &lt;a href=&quot;https://www.404media.co/google-is-paying-reddit-60-million-for-fucksmith-to-tell-its-users-to-eat-glue/&quot;&gt;Google Is Paying Reddit $60 Million for Fucksmith to Tell Its Users to Eat Glue&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.vox.com/technology/351189/google-ai-overview-section-230&quot;&gt;You searched Google. The AI hallucinated an answer. Who’s legally responsible?&lt;/a&gt; (This is something I have been wondering about. If Google is the &lt;q&gt;publisher or speaker&lt;/q&gt; of an AI search result, how do they get Section 230 protection?)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://feed.tedium.co/link/15204/16685584/google-web-search-make-default&quot;&gt;Does One Line Fix Google?&lt;/a&gt; (yes, but for how long? This is as if Coca-Cola came out with New Coke, but the Coke machines still had a secret button combo that would get you &lt;q&gt;the real thing.&lt;/q&gt; Enjoy this for as long as they leave it up. The post &lt;a href=&quot;https://blog.zgp.org/custom-google-search/&quot;&gt;remove AI from Google Search on Firefox&lt;/a&gt; has links to tools and advice for doing this on other platforms too.)&lt;/p&gt;</description>
  4075. <pubDate>Mon, 27 May 2024 00:00:00 +0000</pubDate>
  4076. </item>
  4077. <item>
  4078. <title>The Mozilla Blog: Mozilla Corporation org changes to accelerate our path to the future</title>
  4079. <guid isPermaLink="false">https://blog.mozilla.org/?p=75021</guid>
  4080. <link>https://blog.mozilla.org/en/mozilla/mozilla-corporation-org-changes-to-accelerate-our-path-to-the-future/</link>
  4081. <description>&lt;p&gt;Over the past few months, we’ve been accelerating our ability to execute outstandingly, make faster decisions, and realize our multi-product ambitions. To help facilitate this, I’m excited to announce an organizational change within the product team. This change will enable us to better develop and scale products at different stages of development and maturity.&lt;/p&gt;
  4082.  
  4083.  
  4084.  
  4085. &lt;p&gt;Today, we have multiple groups across various teams working on new ideas and emerging products: Fakespot, PXI, Mozilla Social, and the Innovation Ecosystems team, plus some newer emerging pods around new product design sprints and ideation. To simplify and accelerate this work, we are consolidating our emerging and seed product portfolios under a single umbrella, led by &lt;a href=&quot;https://www.linkedin.com/in/adamjfishman/&quot;&gt;Adam Fishman,&lt;/a&gt; as our SVP of New Products, reporting directly to me.  &lt;/p&gt;
  4086.  
  4087.  
  4088.  
  4089. &lt;p&gt;By setting up Firefox as a standalone product organization, we will also be able to bring more focus to our continual efforts to improve the Firefox experience for everyone who uses it. Firefox is already a leader in foundational qualities like speed and privacy, and now we will be able to faster in developing solutions that bring more useful tools and more joyful experience to our users. Our recent announcement of new Firefox features is just the start, as we close in on Firefox’s 20th birthday in November.&lt;/p&gt;
  4090.  
  4091.  
  4092.  
  4093. &lt;p&gt;I am really excited about these changes as they help us accelerate our path to a strong, multi-product future as we simultaneously expand on our investment in our flagship core product, Firefox.&lt;/p&gt;
  4094.  
  4095.  
  4096.  
  4097. &lt;p&gt;Laura Chambers&lt;/p&gt;
  4098.  
  4099.  
  4100.  
  4101. &lt;p&gt;CEO, Mozilla Corporation&lt;/p&gt;
  4102. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/mozilla-corporation-org-changes-to-accelerate-our-path-to-the-future/&quot;&gt;Mozilla Corporation org changes to accelerate our path to the future&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  4103. <pubDate>Fri, 24 May 2024 18:31:25 +0000</pubDate>
  4104. <dc:creator>Laura Chambers</dc:creator>
  4105. </item>
  4106. <item>
  4107. <title>Don Marti: boring bots ftw</title>
  4108. <guid isPermaLink="true">https://blog.zgp.org/boring-bots-ftw/</guid>
  4109. <link>https://blog.zgp.org/boring-bots-ftw/</link>
  4110. <description>&lt;p&gt;&lt;a href=&quot;https://www.astralcodexten.com/p/mantic-monday-21924&quot;&gt;Scott Alexander writes&lt;/a&gt;, about bots on prediction markets,&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;Most of these bots are boring. They’re bots programmed to automatically buy some market once the price gets low enough, or to arbitrage basically-identical markets, or do some other technical finance maneuver.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;From the point of view of a active prediction market, where a lot of well-informed traders are speculating about well-known events, then those bots are not especially interesting.&lt;/p&gt; &lt;p&gt;The place where the &lt;q&gt;boring&lt;/q&gt; bots do make a big difference, though, is in incentivization markets.&lt;/p&gt; &lt;p&gt;An incentivization market is like a prediction market except that one trading strategy is to make an event being traded on either happen or not happen.&lt;/p&gt; &lt;p&gt;Some markets can be both. (A use case for &lt;a href=&quot;https://en.wikipedia.org/wiki/Policy_Analysis_Market&quot;&gt;Policy Analysis Market&lt;/a&gt; would have been for someone with advanced knowledge of a terrorist attack to trade on their knowledge, and create a price signal that could prevent the attack.)&lt;/p&gt; &lt;p&gt;One problem for incentivization markets to get over is the large number of thinly traded contracts. So a &lt;q&gt;boring&lt;/q&gt; bot would be just what you need for things like:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;trade across likely duplicate and dependent issues to create fewer and more lucrative opportunities for human experts (can be within or across projects)&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;bid up the price of FIXED based on encouraging CI results, enabling developers to get out of all or part of a position early&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;front-run issues on behalf of a developer based on their interests and available time&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The market helps compensate for erratic LLM behavior—an unproductive bot will lose its stake and get shut down. A bot doesn’t have to be run for max earnings, either. An arbitrage bot, for example, could break even or get subsidized to lose a little to keep the market smooth.&lt;/p&gt; &lt;p&gt;Incentivization market needs more noisy traders, LLMs need a cheap way to evaluate whether they’re doing something sensible. Seems like a cookies and milk situation.&lt;/p&gt;   &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://news.mit.edu/2024/mit-spinout-boston-metal-makes-steel-with-electricity-0522&quot;&gt;Making steel with electricity&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91128857/uber-and-lyft-will-stay-minnesota-amazing-victory-drivers&quot;&gt;Uber and Lyft will stay in Minnesota in an ‘amazing victory for drivers’&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.citationneeded.news/we-can-have-a-different-web/&quot;&gt;We can have a different web&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.thebignewsletter.com/p/monopoly-round-up-inflation-re-accelerating&quot;&gt;Monopoly Round-Up: Did Texas Join OPEC?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.fastcompany.com/91089311/this-building-wants-to-be-the-swiss-army-knife-of-urban-living&quot;&gt;This building wants to be the Swiss army knife of urban living&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://jeanmtwenge.substack.com/p/yes-its-the-phones-and-social-media&quot;&gt;Here are 13 other explanations for the adolescent mental health crisis. None of them work.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.tidelift.com/xz-tidelift-and-paying-the-maintainers&quot;&gt;xz, Tidelift, and paying the maintainers&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://arstechnica.com/?p=2014018&quot;&gt;Redis’ license change and forking are a mess that everybody can feel bad about&lt;/a&gt;&lt;/p&gt;</description>
  4111. <pubDate>Fri, 24 May 2024 00:00:00 +0000</pubDate>
  4112. </item>
  4113. <item>
  4114. <title>This Week In Rust: This Week in Rust 548</title>
  4115. <guid isPermaLink="false">tag:this-week-in-rust.org,2024-05-22:/blog/2024/05/22/this-week-in-rust-548/</guid>
  4116. <link>https://this-week-in-rust.org/blog/2024/05/22/this-week-in-rust-548/</link>
  4117. <description>&lt;p&gt;Hello and welcome to another issue of &lt;em&gt;This Week in Rust&lt;/em&gt;!
  4118. &lt;a href=&quot;https://www.rust-lang.org/&quot;&gt;Rust&lt;/a&gt; is a programming language empowering everyone to build reliable and efficient software.
  4119. This is a weekly summary of its progress and community.
  4120. Want something mentioned? Tag us at &lt;a href=&quot;https://twitter.com/ThisWeekInRust&quot;&gt;@ThisWeekInRust&lt;/a&gt; on Twitter or &lt;a href=&quot;https://mastodon.social/@thisweekinrust&quot;&gt;@ThisWeekinRust&lt;/a&gt; on mastodon.social, or &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;send us a pull request&lt;/a&gt;.
  4121. Want to get involved? &lt;a href=&quot;https://github.com/rust-lang/rust/blob/master/CONTRIBUTING.md&quot;&gt;We love contributions&lt;/a&gt;.&lt;/p&gt;
  4122. &lt;p&gt;&lt;em&gt;This Week in Rust&lt;/em&gt; is openly developed &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;on GitHub&lt;/a&gt; and archives can be viewed at &lt;a href=&quot;https://this-week-in-rust.org/&quot;&gt;this-week-in-rust.org&lt;/a&gt;.
  4123. If you find any errors in this week's issue, &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust/pulls&quot;&gt;please submit a PR&lt;/a&gt;.&lt;/p&gt;
  4124. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-rust-community&quot;&gt;Updates from Rust Community&lt;/a&gt;&lt;/h4&gt;
  4125.  
  4126.  
  4127. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#official&quot;&gt;Official&lt;/a&gt;&lt;/h5&gt;
  4128. &lt;ul&gt;
  4129. &lt;li&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html&quot;&gt;Faster linking times on nightly on Linux using &lt;code&gt;rust-lld&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4130. &lt;/ul&gt;
  4131. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#foundation&quot;&gt;Foundation&lt;/a&gt;&lt;/h5&gt;
  4132. &lt;ul&gt;
  4133. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/announcing-the-first-set-of-rustconf-2024-talks-keynotes/&quot;&gt; Announcing the First Set of RustConf 2024 Talks &amp;amp; Keynotes&lt;/a&gt;&lt;/li&gt;
  4134. &lt;li&gt;&lt;a href=&quot;https://foundation.rust-lang.org/news/unsafe-rust-in-the-wild-notes-on-the-current-state-of-unsafe-rust/&quot;&gt;Unsafe Rust in the Wild: Notes on the Current State of Unsafe Rust&lt;/a&gt;&lt;/li&gt;
  4135. &lt;/ul&gt;
  4136. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#projecttooling-updates&quot;&gt;Project/Tooling Updates&lt;/a&gt;&lt;/h5&gt;
  4137. &lt;ul&gt;
  4138. &lt;li&gt;&lt;a href=&quot;https://rust-exercises.com/&quot;&gt;100 Exercises To Learn Rust&lt;/a&gt;&lt;/li&gt;
  4139. &lt;li&gt;&lt;a href=&quot;https://blog.jetbrains.com/rust/2024/05/21/rustrover-is-released-and-includes-a-free-non-commercial-option/&quot;&gt;RustRover Is Released and Includes a Free Non-Commercial Option&lt;/a&gt;&lt;/li&gt;
  4140. &lt;li&gt;&lt;a href=&quot;https://blog.weiznich.de/blog/mysqlclient-sys-03/&quot;&gt;Mysqlclient-sys 0.3.0: Bundled builds and updated bindings&lt;/a&gt;&lt;/li&gt;
  4141. &lt;li&gt;&lt;a href=&quot;https://ratatui.rs/highlights/v0263/&quot;&gt;Ratatui 0.26.3 is released! - a Rust library for cooking up terminal user interfaces&lt;/a&gt;&lt;/li&gt;
  4142. &lt;li&gt;&lt;a href=&quot;https://github.com/maelstrom-software/maelstrom/releases/tag/v0.9.0&quot;&gt;Maelstrom v0.9.0: Added local-only tests, LPT scheduling, and more&lt;/a&gt;&lt;/li&gt;
  4143. &lt;li&gt;&lt;a href=&quot;https://github.com/r3bl-org/r3bl-open-core/blob/main/CHANGELOG.md#v053-2024-05-22&quot;&gt;r3bl_terminal_async v0.5.3 released&lt;/a&gt;&lt;/li&gt;
  4144. &lt;/ul&gt;
  4145. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#observationsthoughts&quot;&gt;Observations/Thoughts&lt;/a&gt;&lt;/h5&gt;
  4146. &lt;ul&gt;
  4147. &lt;li&gt;&lt;a href=&quot;https://graydon2.dreamwidth.org/312681.html&quot;&gt;Some notes on Rust, mutable aliasing and formal verification&lt;/a&gt;&lt;/li&gt;
  4148. &lt;li&gt;&lt;a href=&quot;https://swatinem.de/blog/thread-local-context/&quot;&gt;Towards fast &lt;code&gt;thread_local!&lt;/code&gt; context&lt;/a&gt;&lt;/li&gt;
  4149. &lt;li&gt;&lt;a href=&quot;https://ntietz.com/blog/rusts-iterators-optimize-footgun/&quot;&gt;Rust's iterators optimize nicely—and contain a footgun&lt;/a&gt;&lt;/li&gt;
  4150. &lt;li&gt;&lt;a href=&quot;https://iroh.computer/blog/why-we-forked-quinn&quot;&gt;Why We Forked Quinn&lt;/a&gt;&lt;/li&gt;
  4151. &lt;li&gt;[audio] &lt;a href=&quot;https://corrode.dev/podcast/s02e02-amp/&quot;&gt;AMP - Rust in Production Podcast&lt;/a&gt;&lt;/li&gt;
  4152. &lt;li&gt;[audio] &lt;a href=&quot;https://rustacean-station.org/episode/glen-de-cauwsemaecker/&quot;&gt;Rama with Glen De Cauwsemaecker&lt;/a&gt;&lt;/li&gt;
  4153. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=VpSXTJXX1YA&quot;&gt;What's New in Rust 1.72-1.78 Rustacean Station marathon&lt;/a&gt;&lt;/li&gt;
  4154. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=VoPbpn4u93I&quot;&gt;Rust 1.78.0: Last Rust News Video...ever?&lt;/a&gt;&lt;/li&gt;
  4155. &lt;li&gt;[video] &lt;a href=&quot;https://www.youtube.com/watch?v=DO4jJ1O3Cq4&quot;&gt;Devoxx UK - Rust 101: Understand the Hype&lt;/a&gt;&lt;/li&gt;
  4156. &lt;/ul&gt;
  4157. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-walkthroughs&quot;&gt;Rust Walkthroughs&lt;/a&gt;&lt;/h5&gt;
  4158. &lt;ul&gt;
  4159. &lt;li&gt;&lt;a href=&quot;https://lucumr.pocoo.org/2024/5/16/macro-vtable-magic/&quot;&gt;Using Rust Macros for Custom VTables&lt;/a&gt;&lt;/li&gt;
  4160. &lt;li&gt;&lt;a href=&quot;https://buttondown.email/jaffray/archive/null-bitmap-builds-a-database-1-the-log-is/&quot;&gt;NULL BITMAP Builds a Database #1: The Log is Literally the Database&lt;/a&gt;&lt;/li&gt;
  4161. &lt;li&gt;&lt;a href=&quot;https://www.sea-ql.org/blog/2024-05-20-async-rainbow-bridge/&quot;&gt;The rainbow bridge between sync and async Rust&lt;/a&gt;&lt;/li&gt;
  4162. &lt;li&gt;&lt;a href=&quot;https://developerlife.com/2024/05/19/effective-async-rust/&quot;&gt;developerlife.com - Effective async Rust, non-blocking, concurrent, parallel, event loops, cancellation safety&lt;/a&gt;&lt;/li&gt;
  4163. &lt;li&gt;&lt;a href=&quot;https://marcobacis.com/blog/load-balancer-rust-2/&quot;&gt;Let's build a Load Balancer in Rust - Part 2&lt;/a&gt;&lt;/li&gt;
  4164. &lt;/ul&gt;
  4165. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#miscellaneous&quot;&gt;Miscellaneous&lt;/a&gt;&lt;/h5&gt;
  4166. &lt;ul&gt;
  4167. &lt;li&gt;&lt;a href=&quot;https://rust-ebooks.code-maven.com/&quot;&gt;Free Rust ebooks for Amazon Kindle&lt;/a&gt;&lt;/li&gt;
  4168. &lt;/ul&gt;
  4169. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#crate-of-the-week&quot;&gt;Crate of the Week&lt;/a&gt;&lt;/h4&gt;
  4170. &lt;p&gt;This week's crate is &lt;a href=&quot;https://github.com/voiceapiai/ralertsinua&quot;&gt;ralertsinua&lt;/a&gt;, a text user interface for getting information about Russian air raids in Ukraine.&lt;/p&gt;
  4171. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704/1311&quot;&gt;Vladyslav Batyrenko&lt;/a&gt; for the suggestion!&lt;/p&gt;
  4172. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/crate-of-the-week/2704&quot;&gt;Please submit your suggestions and votes for next week&lt;/a&gt;!&lt;/p&gt;
  4173. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-testing&quot;&gt;Call for Testing&lt;/a&gt;&lt;/h4&gt;
  4174. &lt;p&gt;An important step for RFC implementation is for people to experiment with the
  4175. implementation and give feedback, especially before stabilization.  The following
  4176. RFCs would benefit from user testing before moving forward:&lt;/p&gt;
  4177. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/issues?q=label%3Acall-for-testing&quot;&gt;RFCs&lt;/a&gt;&lt;/h5&gt;
  4178. &lt;ul&gt;
  4179. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  4180. &lt;/ul&gt;
  4181. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/labels/call-for-testing&quot;&gt;Rust&lt;/a&gt;&lt;/h5&gt;
  4182. &lt;ul&gt;
  4183. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  4184. &lt;/ul&gt;
  4185. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rustup&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rustup/labels/call-for-testing&quot;&gt;Rustup&lt;/a&gt;&lt;/h5&gt;
  4186. &lt;ul&gt;
  4187. &lt;li&gt;&lt;em&gt;No calls for testing were issued this week.&lt;/em&gt;&lt;/li&gt;
  4188. &lt;/ul&gt;
  4189. &lt;p&gt;If you are a feature implementer and would like your RFC to appear on the above list, add the new &lt;code&gt;call-for-testing&lt;/code&gt;
  4190. label to your RFC along with a comment providing testing instructions and/or guidance on which aspect(s) of the feature
  4191. need testing.&lt;/p&gt;
  4192. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#call-for-participation-projects-and-speakers&quot;&gt;Call for Participation; projects and speakers&lt;/a&gt;&lt;/h4&gt;
  4193. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-projects&quot;&gt;CFP - Projects&lt;/a&gt;&lt;/h5&gt;
  4194. &lt;p&gt;Always wanted to contribute to open-source projects but did not know where to start?
  4195. Every week we highlight some tasks from the Rust community for you to pick and get started!&lt;/p&gt;
  4196. &lt;p&gt;Some of these tasks may also have mentors available, visit the task page for more information.&lt;/p&gt;
  4197.  
  4198.  
  4199. &lt;ul&gt;
  4200. &lt;li&gt;&lt;a href=&quot;https://github.com/juspay/hyperswitch/issues/3746&quot;&gt;hyperswitch - [FEATURE]: add pagination support for customers list&lt;/a&gt; &lt;/li&gt;
  4201. &lt;li&gt;&lt;a href=&quot;https://github.com/juspay/hyperswitch/issues/2227&quot;&gt;hyperswitch - [FEATURE]: [GlobalPayments] Currency Unit Conversion&lt;/a&gt; &lt;/li&gt;
  4202. &lt;li&gt;&lt;a href=&quot;https://github.com/juspay/hyperswitch/issues/4472&quot;&gt;hyperswitch - [FEATURE]: Add support for sending additional metadata in the MessagingInterface&lt;/a&gt; &lt;/li&gt;
  4203. &lt;/ul&gt;
  4204. &lt;p&gt;If you are a Rust project owner and are looking for contributors, please submit tasks &lt;a href=&quot;https://users.rust-lang.org/t/twir-call-for-participation/4821&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  4205. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cfp-speakers&quot;&gt;CFP - Speakers&lt;/a&gt;&lt;/h5&gt;
  4206. &lt;p&gt;Are you a new or experienced speaker looking for a place to share something cool? This section highlights events that are being planned and are accepting submissions to join their event as a speaker.&lt;/p&gt;
  4207. &lt;ul&gt;
  4208. &lt;li&gt;&lt;a href=&quot;https://sessionize.com/rust-argentina-june/&quot;&gt;Rust Argentina June 2024&lt;/a&gt; | Closes 2024-05-31 | Buenos Aires, AR | Event date: 2024-06-04&lt;/li&gt;
  4209. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/eurorust-2024&quot;&gt;EuroRust 2024&lt;/a&gt; | Closes 2024-06-03 | Vienna, Austria &amp;amp; online | Event date: 2024-10-10&lt;/li&gt;
  4210. &lt;li&gt;&lt;a href=&quot;https://scientificcomputing.rs/&quot;&gt;Scientific Computing in Rust 2024&lt;/a&gt; | Closes 2024-06-14 | online | Event date: 2024-07-17 - 2024-07-19&lt;/li&gt;
  4211. &lt;li&gt;&lt;a href=&quot;https://docs.google.com/forms/d/e/1FAIpQLSc9S_95oaCsFyrULF4iBQOIiTcMlOpG07izgquYLBCKFAYTKQ/viewform&quot;&gt;Rust Ukraine 2024&lt;/a&gt; | Closes 2024-07-06 | Online + Ukraine, Kyiv | Event date: 2024-07-27&lt;/li&gt;
  4212. &lt;li&gt;&lt;a href=&quot;https://www.papercall.io/conf42-rustlang-2024&quot;&gt;Conf42 Rustlang 2024&lt;/a&gt; | Closes 2024-07-22 | online | Event date: 2024-08-22&lt;/li&gt;
  4213. &lt;/ul&gt;
  4214. &lt;p&gt;If you are an event organizer hoping to expand the reach of your event, please submit a link to the submission website through a &lt;a href=&quot;https://github.com/rust-lang/this-week-in-rust&quot;&gt;PR to TWiR&lt;/a&gt;.&lt;/p&gt;
  4215. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#updates-from-the-rust-project&quot;&gt;Updates from the Rust Project&lt;/a&gt;&lt;/h4&gt;
  4216. &lt;p&gt;364 pull requests were &lt;a href=&quot;https://github.com/search?q=is%3Apr+org%3Arust-lang+is%3Amerged+merged%3A2024-05-14..2024-05-21&quot;&gt;merged in the last week&lt;/a&gt;&lt;/p&gt;
  4217. &lt;ul&gt;
  4218. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125023&quot;&gt;add &lt;code&gt;x86_64-unknown-linux-none&lt;/code&gt; target&lt;/a&gt;&lt;/li&gt;
  4219. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124129&quot;&gt;enable &lt;code&gt;rust-lld&lt;/code&gt; on nightly &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4220. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125084&quot;&gt;&lt;code&gt;rustc_hir_typeck&lt;/code&gt;: Account for &lt;code&gt;skipped_ref_pats&lt;/code&gt; in &lt;code&gt;expr_use_visitor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4221. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125105&quot;&gt;&lt;code&gt;rustc_resolve&lt;/code&gt; cleanups&lt;/a&gt;&lt;/li&gt;
  4222. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124708&quot;&gt;actually use the &lt;code&gt;#[do_not_recommend]&lt;/code&gt; attribute if present&lt;/a&gt;&lt;/li&gt;
  4223. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125252&quot;&gt;add &lt;code&gt;#[inline]&lt;/code&gt; to float &lt;code&gt;Debug&lt;/code&gt; fallback used by &lt;code&gt;cfg(no_fp_fmt_parse)&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4224. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125093&quot;&gt;add &lt;code&gt;fn into_raw_with_allocator&lt;/code&gt; to Rc/Arc/Weak&lt;/a&gt;&lt;/li&gt;
  4225. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125314&quot;&gt;add an experimental feature gate for global registration&lt;/a&gt;&lt;/li&gt;
  4226. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125006&quot;&gt;add and use &lt;code&gt;generics.is_empty()&lt;/code&gt; and &lt;code&gt;generics.is_own_empty,&lt;/code&gt; rather than using generics' attributes&lt;/a&gt;&lt;/li&gt;
  4227. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124990&quot;&gt;also expand weak alias tys inside consts inside &lt;code&gt;expand_weak_alias_tys&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4228. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125244&quot;&gt;android: use &lt;code&gt;posix_memalign&lt;/code&gt; for aligned allocations&lt;/a&gt;&lt;/li&gt;
  4229. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125003&quot;&gt;avoid using &lt;code&gt;aligned_alloc&lt;/code&gt;; &lt;code&gt;posix_memalign&lt;/code&gt; is better-behaved&lt;/a&gt;&lt;/li&gt;
  4230. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124917&quot;&gt;check whether the &lt;code&gt;next_node&lt;/code&gt; is else-less if in &lt;code&gt;get_return_block&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4231. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125108&quot;&gt;coverage: &lt;code&gt;CoverageIdsInfo::mcdc_bitmap_bytes&lt;/code&gt; is never needed&lt;/a&gt;&lt;/li&gt;
  4232. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125106&quot;&gt;coverage: memoize and simplify counter expressions&lt;/a&gt;&lt;/li&gt;
  4233. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125302&quot;&gt;defrost &lt;code&gt;RUST_MIN_STACK=ice rustc hello.rs&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4234. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123413&quot;&gt;delegation: implement list delegation&lt;/a&gt;&lt;/li&gt;
  4235. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124871&quot;&gt;don't ICE because recomputing overflow goals during &lt;code&gt;find_best_leaf_obligation&lt;/code&gt; causes inference side-effects&lt;/a&gt;&lt;/li&gt;
  4236. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125100&quot;&gt;don't do post-method-probe error reporting steps if we're in a suggestion&lt;/a&gt;&lt;/li&gt;
  4237. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125184&quot;&gt;fix ICE in non-operand &lt;code&gt;aggregate_raw_ptr&lt;/code&gt; intrinsic codegen&lt;/a&gt;&lt;/li&gt;
  4238. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125004&quot;&gt;fix println! ICE when parsing percent prefix number&lt;/a&gt;&lt;/li&gt;
  4239. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125301&quot;&gt;fix suggestion in E0373 for &lt;code&gt;!Unpin&lt;/code&gt; coroutines&lt;/a&gt;&lt;/li&gt;
  4240. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125135&quot;&gt;fix the dedup error because of spans from suggestion&lt;/a&gt;&lt;/li&gt;
  4241. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125180&quot;&gt;improve error message: missing &lt;code&gt;;&lt;/code&gt; in &lt;code&gt;macro_rules&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4242. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123337&quot;&gt;include line tables in compiler profile&lt;/a&gt;&lt;/li&gt;
  4243. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124500&quot;&gt;lldb-formatters: use StdSliceSyntheticProvider for &amp;amp;str&lt;/a&gt;&lt;/li&gt;
  4244. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125255&quot;&gt;make &lt;code&gt;EvalCtxt&lt;/code&gt; generic over &lt;code&gt;InferCtxtLike&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4245. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125032&quot;&gt;make crashes dump mir to build dir&lt;/a&gt;&lt;/li&gt;
  4246. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125282&quot;&gt;never type unsafe lint improvements&lt;/a&gt;&lt;/li&gt;
  4247. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124283&quot;&gt;note for E0599 if shadowed bindings has the method&lt;/a&gt;&lt;/li&gt;
  4248. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125080&quot;&gt;only find segs chain for missing methods when no available candidates&lt;/a&gt;&lt;/li&gt;
  4249. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125214&quot;&gt;only make GAT ambiguous in &lt;code&gt;match_projection_projections&lt;/code&gt; considering shallow resolvability&lt;/a&gt;&lt;/li&gt;
  4250. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125166&quot;&gt;refactor: add rustc-perf submodule to src/tools&lt;/a&gt;&lt;/li&gt;
  4251. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125191&quot;&gt;report better WF obligation leaf obligations in new solver&lt;/a&gt;&lt;/li&gt;
  4252. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/119838&quot;&gt;style-guide: when breaking binops handle multi-line first operand better&lt;/a&gt;&lt;/li&gt;
  4253. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124682&quot;&gt;suggest setting lifetime in borrowck error involving types with elided lifetimes&lt;/a&gt;&lt;/li&gt;
  4254. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125240&quot;&gt;temporarily revert to NonZeroUsize in rustc-abi to fix building on stable&lt;/a&gt;&lt;/li&gt;
  4255. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125308&quot;&gt;track cycle participants per root&lt;/a&gt;&lt;/li&gt;
  4256. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124844&quot;&gt;use a proper probe for shadowing impl&lt;/a&gt;&lt;/li&gt;
  4257. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125283&quot;&gt;use a single static for all default slice Arcs&lt;/a&gt;&lt;/li&gt;
  4258. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124228&quot;&gt;warn against changes in opaque lifetime captures in 2024&lt;/a&gt;&lt;/li&gt;
  4259. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3526&quot;&gt;miri: adjust Allocation Bytes used by Miri to custom MiriAllocBytes&lt;/a&gt;&lt;/li&gt;
  4260. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3319&quot;&gt;miri: directly implement native exception raise methods in miri&lt;/a&gt;&lt;/li&gt;
  4261. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3603&quot;&gt;miri: give &lt;code&gt;FileDescription::{read, write}&lt;/code&gt; access to the &lt;code&gt;MiriInterpCx&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4262. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3611&quot;&gt;miri: ignore the Helix configuration directory&lt;/a&gt;&lt;/li&gt;
  4263. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3616&quot;&gt;miri: make basic things work on Android&lt;/a&gt;&lt;/li&gt;
  4264. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3619&quot;&gt;miri: properly print error in 'cargo miri setup --print-sysroot'&lt;/a&gt;&lt;/li&gt;
  4265. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3585&quot;&gt;miri: support &lt;code&gt;aligned_alloc&lt;/code&gt; for unixes&lt;/a&gt;&lt;/li&gt;
  4266. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3610&quot;&gt;miri: use &lt;code&gt;throw_unsup_format!&lt;/code&gt; instead of returning &lt;code&gt;ENOTSUP&lt;/code&gt; in the mmap shim&lt;/a&gt;&lt;/li&gt;
  4267. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/miri/pull/3621&quot;&gt;miri: use a little arg-parsing helper for miri-script&lt;/a&gt;&lt;/li&gt;
  4268. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124050&quot;&gt;remove libc from MSVC targets&lt;/a&gt;&lt;/li&gt;
  4269. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124307&quot;&gt;optimize character escaping&lt;/a&gt;&lt;/li&gt;
  4270. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/99969&quot;&gt;alloc: implement FromIterator for &lt;code&gt;Box&amp;lt;str&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4271. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124640&quot;&gt;implemented Default for &lt;code&gt;Arc&amp;lt;str&amp;gt;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4272. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125123&quot;&gt;fix &lt;code&gt;read_exact&lt;/code&gt; and &lt;code&gt;read_buf_exact&lt;/code&gt; for &lt;code&gt;&amp;amp;[u8]&lt;/code&gt; and &lt;code&gt;io:Cursor&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4273. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125172&quot;&gt;fix assertion when attempting to convert &lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt; with &lt;code&gt;as&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4274. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125232&quot;&gt;inline &lt;code&gt;Duration&lt;/code&gt; construction into &lt;code&gt;Duration::from_&lt;/code&gt;{&lt;code&gt;secs&lt;/code&gt;, &lt;code&gt;millis&lt;/code&gt;, &lt;code&gt;micros&lt;/code&gt;, &lt;code&gt;nanos&lt;/code&gt;}&lt;/a&gt;&lt;/li&gt;
  4275. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123786&quot;&gt;remove bound checks from &lt;code&gt;BorrowedBuf&lt;/code&gt; and &lt;code&gt;BorrowedCursor&lt;/code&gt; methods&lt;/a&gt;&lt;/li&gt;
  4276. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123878&quot;&gt;optimize inplace collection of &lt;code&gt;Vec&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4277. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125279&quot;&gt;make &lt;code&gt;Debug&lt;/code&gt; impl for &lt;code&gt;Term&lt;/code&gt; simpler&lt;/a&gt;&lt;/li&gt;
  4278. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125038&quot;&gt;invert comparison in &lt;code&gt;u&lt;/code&gt;N&lt;code&gt;::checked_sub&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4279. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-builtins/pull/613&quot;&gt;add &lt;code&gt;f128&lt;/code&gt; float to integer conversion functions&lt;/a&gt;&lt;/li&gt;
  4280. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/compiler-builtins/pull/606&quot;&gt;add addition, subtraction, multiplication, and compare operations for &lt;code&gt;f128&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4281. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125188&quot;&gt;add &lt;code&gt;powi&lt;/code&gt; fo &lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4282. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/123816&quot;&gt;add v0 symbol mangling for &lt;code&gt;f16&lt;/code&gt; and &lt;code&gt;f128&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4283. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124728&quot;&gt;re-add &lt;code&gt;From&amp;lt;f16&amp;gt; for f64&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4284. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13913&quot;&gt;cargo: add special &lt;code&gt;check-cfg&lt;/code&gt; lint config for the &lt;code&gt;unexpected_cfgs&lt;/code&gt; lint&lt;/a&gt;&lt;/li&gt;
  4285. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13938&quot;&gt;cargo: fix warning about unused Permissions&lt;/a&gt;&lt;/li&gt;
  4286. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13930&quot;&gt;cargo: fix warning output in &lt;code&gt;build_with_symlink_to_path_dependency_with_build_script_in_git&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4287. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13572&quot;&gt;cargo: fix: make path dependencies with the same name stays locked&lt;/a&gt;&lt;/li&gt;
  4288. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13907&quot;&gt;cargo: fix: support IPv6-only network for cargo fix&lt;/a&gt;&lt;/li&gt;
  4289. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13927&quot;&gt;cargo: load &lt;code&gt;libsecret&lt;/code&gt; by its &lt;code&gt;SONAME&lt;/code&gt;, &lt;code&gt;libsecret-1.so.0&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4290. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13898&quot;&gt;cargo: preserve file permissions on unix during &lt;code&gt;write_atomic&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4291. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/pull/13929&quot;&gt;cargo: silence warnings running embedded unittests&lt;/a&gt;&lt;/li&gt;
  4292. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125300&quot;&gt;rustdoc: don't strip items with inherited visibility in &lt;code&gt;AliasedNonLocalStripper&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4293. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/125134&quot;&gt;rustdoc: negative impls are not notable&lt;/a&gt;&lt;/li&gt;
  4294. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/124611&quot;&gt;add &lt;code&gt;-&lt;/code&gt; (stdin) support in rustdoc&lt;/a&gt;&lt;/li&gt;
  4295. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12779&quot;&gt;clippy: &lt;code&gt;assigning_clones&lt;/code&gt;: move to &lt;code&gt;pedantic&lt;/code&gt; so it is allow by default&lt;/a&gt;&lt;/li&gt;
  4296. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12818&quot;&gt;clippy: &lt;code&gt;doc_lazy_continuation&lt;/code&gt;: do not warn on &lt;code&gt;End&lt;/code&gt; events&lt;/a&gt;&lt;/li&gt;
  4297. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12803&quot;&gt;clippy: add configuration option for ignoring &lt;code&gt;panic!()&lt;/code&gt; in tests&lt;/a&gt;&lt;/li&gt;
  4298. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12798&quot;&gt;clippy: don't lint path statements in &lt;code&gt;no_effect&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4299. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12790&quot;&gt;clippy: don't lint &lt;code&gt;missing_panic_docs&lt;/code&gt; for panics in &lt;code&gt;const&lt;/code&gt; environments&lt;/a&gt;&lt;/li&gt;
  4300. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12794&quot;&gt;clippy: improve &lt;code&gt;match_same_arms&lt;/code&gt; messages, enable rustfix test&lt;/a&gt;&lt;/li&gt;
  4301. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12706&quot;&gt;clippy: less aggressive &lt;code&gt;needless_borrows_for_generic_args&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4302. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12713&quot;&gt;clippy: make sure the msrv for &lt;code&gt;const_raw_ptr_deref&lt;/code&gt; is met when linting &lt;code&gt;missing_const_for_fn&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4303. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-clippy/pull/12812&quot;&gt;clippy: manually set library paths in .github/driver.sh&lt;/a&gt;&lt;/li&gt;
  4304. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17238&quot;&gt;rust-analyzer: fix metrics workflow not actually updating the toolchain&lt;/a&gt;&lt;/li&gt;
  4305. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17232&quot;&gt;rust-analyzer: fix: don't emit --keep-going for custom build script commands&lt;/a&gt;&lt;/li&gt;
  4306. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17225&quot;&gt;rust-analyzer: fix: expand macro recursively expands both fp-like and attribute macros when intertwined&lt;/a&gt;&lt;/li&gt;
  4307. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17216&quot;&gt;rust-analyzer: fix: extract mod to file should respect path attribute&lt;/a&gt;&lt;/li&gt;
  4308. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust-analyzer/pull/17227&quot;&gt;rust-analyzer: fix: hash file contents to verify whether file actually changed&lt;/a&gt;&lt;/li&gt;
  4309. &lt;/ul&gt;
  4310. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust-compiler-performance-triage&quot;&gt;Rust Compiler Performance Triage&lt;/a&gt;&lt;/h5&gt;
  4311. &lt;p&gt;Fairly quiet week with the exception of a very large improvement coming from the switch to &lt;code&gt;rust-lld&lt;/code&gt; on nightly Linux. This can have very large impacts on benchmarks where linking dominates the build time (e.g., &lt;code&gt;ripgrep&lt;/code&gt;, &lt;code&gt;exa&lt;/code&gt;, small binaries like &lt;code&gt;hello-world&lt;/code&gt;). Aside from that change, there were a few small regressions that were either deemed worth it or are still being investigated.&lt;/p&gt;
  4312. &lt;p&gt;Triage done by &lt;strong&gt;@rylev&lt;/strong&gt;.
  4313. Revision range: &lt;a href=&quot;https://perf.rust-lang.org/?start=9105c57b7f6623310e33f3ee7e48a3114e5190a7&amp;amp;end=1d0e4afd4cac09078e12a232508c3e9f8d42535d&amp;amp;absolute=false&amp;amp;stat=instructions%3Au&quot;&gt;9105c57b..1d0e4afd&lt;/a&gt;&lt;/p&gt;
  4314. &lt;p&gt;&lt;strong&gt;Summary&lt;/strong&gt;:&lt;/p&gt;
  4315. &lt;table&gt;
  4316. &lt;thead&gt;
  4317. &lt;tr&gt;
  4318. &lt;th align=&quot;center&quot;&gt;(instructions:u)&lt;/th&gt;
  4319. &lt;th align=&quot;center&quot;&gt;mean&lt;/th&gt;
  4320. &lt;th align=&quot;center&quot;&gt;range&lt;/th&gt;
  4321. &lt;th align=&quot;center&quot;&gt;count&lt;/th&gt;
  4322. &lt;/tr&gt;
  4323. &lt;/thead&gt;
  4324. &lt;tbody&gt;
  4325. &lt;tr&gt;
  4326. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (primary)&lt;/td&gt;
  4327. &lt;td align=&quot;center&quot;&gt;0.7%&lt;/td&gt;
  4328. &lt;td align=&quot;center&quot;&gt;[0.1%, 2.5%]&lt;/td&gt;
  4329. &lt;td align=&quot;center&quot;&gt;30&lt;/td&gt;
  4330. &lt;/tr&gt;
  4331. &lt;tr&gt;
  4332. &lt;td align=&quot;center&quot;&gt;Regressions ❌ &lt;br /&gt; (secondary)&lt;/td&gt;
  4333. &lt;td align=&quot;center&quot;&gt;0.5%&lt;/td&gt;
  4334. &lt;td align=&quot;center&quot;&gt;[0.2%, 0.8%]&lt;/td&gt;
  4335. &lt;td align=&quot;center&quot;&gt;5&lt;/td&gt;
  4336. &lt;/tr&gt;
  4337. &lt;tr&gt;
  4338. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (primary)&lt;/td&gt;
  4339. &lt;td align=&quot;center&quot;&gt;-30.4%&lt;/td&gt;
  4340. &lt;td align=&quot;center&quot;&gt;[-71.7%, -0.4%]&lt;/td&gt;
  4341. &lt;td align=&quot;center&quot;&gt;35&lt;/td&gt;
  4342. &lt;/tr&gt;
  4343. &lt;tr&gt;
  4344. &lt;td align=&quot;center&quot;&gt;Improvements ✅ &lt;br /&gt; (secondary)&lt;/td&gt;
  4345. &lt;td align=&quot;center&quot;&gt;-25.6%&lt;/td&gt;
  4346. &lt;td align=&quot;center&quot;&gt;[-70.9%, -0.5%]&lt;/td&gt;
  4347. &lt;td align=&quot;center&quot;&gt;75&lt;/td&gt;
  4348. &lt;/tr&gt;
  4349. &lt;tr&gt;
  4350. &lt;td align=&quot;center&quot;&gt;All ❌✅ (primary)&lt;/td&gt;
  4351. &lt;td align=&quot;center&quot;&gt;-16.1%&lt;/td&gt;
  4352. &lt;td align=&quot;center&quot;&gt;[-71.7%, 2.5%]&lt;/td&gt;
  4353. &lt;td align=&quot;center&quot;&gt;65&lt;/td&gt;
  4354. &lt;/tr&gt;
  4355. &lt;/tbody&gt;
  4356. &lt;/table&gt;
  4357. &lt;p&gt;4 Regressions, 1 Improvement, 4 Mixed; 2 of them in rollups
  4358. 66 artifact comparisons made in total&lt;/p&gt;
  4359. &lt;p&gt;&lt;a href=&quot;https://github.com/rust-lang/rustc-perf/blob/be3ac63543e49327e4bf42ade39a40016340026a/triage/2024-05-21.md&quot;&gt;Full report here&lt;/a&gt;&lt;/p&gt;
  4360. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#approved-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/commits/master&quot;&gt;Approved RFCs&lt;/a&gt;&lt;/h5&gt;
  4361. &lt;p&gt;Changes to Rust follow the Rust &lt;a href=&quot;https://github.com/rust-lang/rfcs#rust-rfcs&quot;&gt;RFC (request for comments) process&lt;/a&gt;. These
  4362. are the RFCs that were approved for implementation this week:&lt;/p&gt;
  4363. &lt;ul&gt;
  4364. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3336&quot;&gt;MaybeDangling&lt;/a&gt;&lt;/li&gt;
  4365. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3550&quot;&gt;RFC: New range types for Edition 2024&lt;/a&gt;&lt;/li&gt;
  4366. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3484&quot;&gt;Merge RFC 3484: Unsafe extern blocks&lt;/a&gt;&lt;/li&gt;
  4367. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3502&quot;&gt;RFC: cargo-script&lt;/a&gt;&lt;/li&gt;
  4368. &lt;/ul&gt;
  4369. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#final-comment-period&quot;&gt;Final Comment Period&lt;/a&gt;&lt;/h5&gt;
  4370. &lt;p&gt;Every week, &lt;a href=&quot;https://www.rust-lang.org/team.html&quot;&gt;the team&lt;/a&gt; announces the 'final comment period' for RFCs and key PRs
  4371. which are reaching a decision. Express your opinions now.&lt;/p&gt;
  4372. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rfcs_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/labels/final-comment-period&quot;&gt;RFCs&lt;/a&gt;&lt;/h6&gt;
  4373. &lt;ul&gt;
  4374. &lt;li&gt;&lt;em&gt;No RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  4375. &lt;/ul&gt;
  4376. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#tracking-issues-prs&quot;&gt;Tracking Issues &amp;amp; PRs&lt;/a&gt;&lt;/h6&gt;
  4377. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#rust_1&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Rust&lt;/a&gt;
  4378. &lt;ul&gt;
  4379. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123962&quot;&gt;change method resolution to constrain hidden types instead of rejecting method candidates&lt;/a&gt;&lt;/li&gt;
  4380. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/93332&quot;&gt;Tracking Issue for asm_const&lt;/a&gt;&lt;/li&gt;
  4381. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/107099&quot;&gt;rustdoc: Add support for --remap-path-prefix&lt;/a&gt;&lt;/li&gt;
  4382. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124636&quot;&gt;Make &lt;code&gt;std::env::{set_var, remove_var}&lt;/code&gt; unsafe in edition 2024&lt;/a&gt;&lt;/li&gt;
  4383. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/issues/95629&quot;&gt;Tracking Issue for &lt;code&gt;slice_flatten&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4384. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123508&quot;&gt;Edition 2024: Make &lt;code&gt;!&lt;/code&gt; fall back to &lt;code&gt;!&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4385. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124667&quot;&gt;Stabilize div_duration&lt;/a&gt;&lt;/li&gt;
  4386. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/125070&quot;&gt;Panic if &lt;code&gt;PathBuf::set_extension&lt;/code&gt; would add a path separator&lt;/a&gt;&lt;/li&gt;
  4387. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124048&quot;&gt;Support C23's Variadics Without a Named Parameter&lt;/a&gt;&lt;/li&gt;
  4388. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/121377&quot;&gt;Stabilize &lt;code&gt;LazyCell&lt;/code&gt; and &lt;code&gt;LazyLock&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  4389. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/124661&quot;&gt;Turn remaining non-structural-const-in-pattern lints into hard errors&lt;/a&gt;&lt;/li&gt;
  4390. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/rust/pull/123590&quot;&gt;Edition 2024: don't special-case diverging blocks&lt;/a&gt;&lt;/li&gt;
  4391. &lt;/ul&gt;
  4392. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#cargo&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/cargo/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Cargo&lt;/a&gt;
  4393. &lt;ul&gt;
  4394. &lt;li&gt;&lt;em&gt;No Cargo Tracking Issues or PRs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  4395. &lt;/ul&gt;
  4396. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-team&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/lang-team/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc+&quot;&gt;Language Team&lt;/a&gt;
  4397. &lt;ul&gt;
  4398. &lt;li&gt;&lt;em&gt;No Language Team RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  4399. &lt;/ul&gt;
  4400. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#language-reference&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/reference/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Language Reference&lt;/a&gt;
  4401. &lt;ul&gt;
  4402. &lt;li&gt;[disposition: merge] &lt;a href=&quot;https://github.com/rust-lang/reference/pull/1497&quot;&gt;document guarantee about evaluation of associated consts and const blocks&lt;/a&gt;&lt;/li&gt;
  4403. &lt;/ul&gt;
  4404. &lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#unsafe-code-guidelines&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/unsafe-code-guidelines/issues?q=is%3Aopen+label%3Afinal-comment-period+sort%3Aupdated-desc&quot;&gt;Unsafe Code Guidelines&lt;/a&gt;
  4405. &lt;ul&gt;
  4406. &lt;li&gt;&lt;em&gt;No Unsafe Code Guideline RFCs entered Final Comment Period this week.&lt;/em&gt;&lt;/li&gt;
  4407. &lt;/ul&gt;
  4408. &lt;h6&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#new-and-updated-rfcs&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://github.com/rust-lang/rfcs/pulls&quot;&gt;New and Updated RFCs&lt;/a&gt;&lt;/h6&gt;
  4409. &lt;ul&gt;
  4410. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3641&quot;&gt;[RFC] Add &lt;code&gt;#[export_ordinal(n)]&lt;/code&gt; attribute&lt;/a&gt;&lt;/li&gt;
  4411. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3639&quot;&gt;[RFC] Add &lt;code&gt;#[diagnostic::blocking]&lt;/code&gt; attribute&lt;/a&gt;&lt;/li&gt;
  4412. &lt;li&gt;[new] &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3637&quot;&gt;Guard Patterns&lt;/a&gt;&lt;/li&gt;
  4413. &lt;/ul&gt;
  4414. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#upcoming-events&quot;&gt;Upcoming Events&lt;/a&gt;&lt;/h4&gt;
  4415. &lt;p&gt;Rusty Events between 2024-05-22 - 2024-06-19 🦀&lt;/p&gt;
  4416. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#virtual&quot;&gt;Virtual&lt;/a&gt;&lt;/h5&gt;
  4417. &lt;ul&gt;
  4418. &lt;li&gt;2024-05-23 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  4419. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477699/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4420. &lt;/ul&gt;
  4421. &lt;/li&gt;
  4422. &lt;li&gt;2024-05-23 | Virtual (Israel) | &lt;a href=&quot;https://rust.org.il/&quot;&gt;Rust in Israel&lt;/a&gt;&lt;ul&gt;
  4423. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/300974367/&quot;&gt;&lt;strong&gt;Web development in Rust using Rocket (Hebrew)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4424. &lt;/ul&gt;
  4425. &lt;/li&gt;
  4426. &lt;li&gt;2024-05-24 | Virtual (Rotterdam, NL)| &lt;a href=&quot;https://www.meetup.com/bevy-game-development/&quot;&gt;Bevy Game Development&lt;/a&gt;&lt;ul&gt;
  4427. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bevy-game-development/events/300919821/&quot;&gt;&lt;strong&gt;Bevy Meetup #4&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4428. &lt;/ul&gt;
  4429. &lt;/li&gt;
  4430. &lt;li&gt;2024-05-28 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  4431. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/300533392/&quot;&gt;&lt;strong&gt;Last Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4432. &lt;/ul&gt;
  4433. &lt;/li&gt;
  4434. &lt;li&gt;2024-05-28 &amp;amp; 2024-05-28 | Virtual | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt;&lt;ul&gt;
  4435. &lt;li&gt;&lt;a href=&quot;https://ti.to/mainmatter/rust-telemetry-may-2024&quot;&gt;&lt;strong&gt;Remote Workshop: Telemetry for Rust APIs – you can't fix what you can't see (fee)&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4436. &lt;/ul&gt;
  4437. &lt;/li&gt;
  4438. &lt;li&gt;2024-05-29 | Virtual | &lt;a href=&quot;https://www.eventbrite.com/o/training-4-programmers-llc-80387368983&quot;&gt;Training 4 Programmers LLC&lt;/a&gt;&lt;ul&gt;
  4439. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/enums-structs-and-traits-essential-building-blocks-of-rust-programming-tickets-904696681127&quot;&gt;&lt;strong&gt;Enums, Structs, and Traits - Essential Building Blocks of Rust Programming&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4440. &lt;/ul&gt;
  4441. &lt;/li&gt;
  4442. &lt;li&gt;2024-05-30 | Virtual + In Person (Barcelona, ES) | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/&quot;&gt;BcnRust&lt;/a&gt;&lt;ul&gt;
  4443. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/events/300765894/&quot;&gt;&lt;strong&gt;Rust for the web, Barcelona 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4444. &lt;/ul&gt;
  4445. &lt;/li&gt;
  4446. &lt;li&gt;2024-05-30 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4447. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298542326/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4448. &lt;/ul&gt;
  4449. &lt;/li&gt;
  4450. &lt;li&gt;2024-06-04 | Virtual | &lt;a href=&quot;https://www.meetup.com/women-in-rust/&quot;&gt;Women in Rust&lt;/a&gt;&lt;ul&gt;
  4451. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/women-in-rust/events/300918713/&quot;&gt;&lt;strong&gt;Lunch &amp;amp; Learn: A Creative Thinker's Programming Language&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4452. &lt;/ul&gt;
  4453. &lt;/li&gt;
  4454. &lt;li&gt;2024-06-04 | Virtual (Buffalo, NY) | &lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/&quot;&gt;Buffalo Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4455. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/buffalo-rust-meetup/events/300191681/&quot;&gt;&lt;strong&gt;Buffalo Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4456. &lt;/ul&gt;
  4457. &lt;/li&gt;
  4458. &lt;li&gt;2024-06-05 | Virtual (Indianapolis, IN, US) | &lt;a href=&quot;https://www.meetup.com/indyrs/&quot;&gt;Indy Rust&lt;/a&gt;&lt;ul&gt;
  4459. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/indyrs/events/299047896/&quot;&gt;&lt;strong&gt;Indy.rs - with Social Distancing&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4460. &lt;/ul&gt;
  4461. &lt;/li&gt;
  4462. &lt;li&gt;2024-06-06 | Virtual | &lt;a href=&quot;https://www.meetup.com/code-mavens/&quot;&gt;Code Mavens&lt;/a&gt;&lt;ul&gt;
  4463. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/code-mavens/events/301156302/&quot;&gt;&lt;strong&gt;Rust Maven Workshop: Your first contribution to an Open Source Rust project&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4464. &lt;/ul&gt;
  4465. &lt;/li&gt;
  4466. &lt;li&gt;2024-06-06 | Virtual (Berlin, DE) | &lt;a href=&quot;https://berline.rs/&quot;&gt;OpenTechSchool Berlin&lt;/a&gt; + &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  4467. &lt;li&gt;&lt;a href=&quot;https://meet.jit.si/RustHackAndLearnBerlin&quot;&gt;&lt;strong&gt;Rust Hack and Learn&lt;/strong&gt;&lt;/a&gt; | &lt;a href=&quot;https://www.meetup.com/rust-berlin/events/298477702/&quot;&gt;&lt;strong&gt;Mirror: Rust Hack n Learn Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4468. &lt;/ul&gt;
  4469. &lt;/li&gt;
  4470. &lt;li&gt;2024-06-11 | Virtual (Dallas, TX, US) | &lt;a href=&quot;https://www.meetup.com/dallasrust/&quot;&gt;Dallas Rust&lt;/a&gt;&lt;ul&gt;
  4471. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/dallasrust/events/298341709/&quot;&gt;&lt;strong&gt;Second Tuesday&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4472. &lt;/ul&gt;
  4473. &lt;/li&gt;
  4474. &lt;li&gt;2024-06-13 | Virtual (Charlottesville, NC, US) | &lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/&quot;&gt;Charlottesville Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4475. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/charlottesville-rust-meetup/events/298897800/&quot;&gt;&lt;strong&gt;Crafting Interpreters in Rust Collaboratively&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4476. &lt;/ul&gt;
  4477. &lt;/li&gt;
  4478. &lt;li&gt;2024-06-13 | Virtual (Nürnberg, DE) | &lt;a href=&quot;https://www.meetup.com/rust-noris/&quot;&gt;Rust Nuremberg&lt;/a&gt;&lt;ul&gt;
  4479. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-noris/events/297945258/&quot;&gt;&lt;strong&gt;Rust Nürnberg online&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4480. &lt;/ul&gt;
  4481. &lt;/li&gt;
  4482. &lt;li&gt;2024-06-18 | Virtual (Washington, DC, US) | &lt;a href=&quot;https://www.meetup.com/rustdc/&quot;&gt;Rust DC&lt;/a&gt;&lt;ul&gt;
  4483. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rustdc/events/299346963/&quot;&gt;&lt;strong&gt;Mid-month Rustful&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4484. &lt;/ul&gt;
  4485. &lt;/li&gt;
  4486. &lt;li&gt;2024-06-19 | Virtual (Vancouver, BC, CA) | &lt;a href=&quot;https://www.meetup.com/vancouver-rust/&quot;&gt;Vancouver Rust&lt;/a&gt;&lt;ul&gt;
  4487. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/vancouver-rust/events/298631733/&quot;&gt;&lt;strong&gt;Rust Study/Hack/Hang-out&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4488. &lt;/ul&gt;
  4489. &lt;/li&gt;
  4490. &lt;/ul&gt;
  4491. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#africa&quot;&gt;Africa&lt;/a&gt;&lt;/h5&gt;
  4492. &lt;ul&gt;
  4493. &lt;li&gt;2024-06-01 | Kampala, UG | &lt;a href=&quot;https://www.eventbrite.com/o/rust-circle-kampala-65249289033&quot;&gt;Rust Circle Kampala&lt;/a&gt;&lt;ul&gt;
  4494. &lt;li&gt;&lt;a href=&quot;https://www.eventbrite.com/e/rust-circle-meetup-tickets-628763176587&quot;&gt;&lt;strong&gt;Rust Circle Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4495. &lt;/ul&gt;
  4496. &lt;/li&gt;
  4497. &lt;/ul&gt;
  4498. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#asia&quot;&gt;Asia&lt;/a&gt;&lt;/h5&gt;
  4499. &lt;ul&gt;
  4500. &lt;li&gt;2024-05-22 | Singapore, SG | &lt;a href=&quot;https://www.meetup.com/rust-singapore/&quot;&gt;SG Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4501. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-singapore/events/300988123/&quot;&gt;&lt;strong&gt;SG Rustaceans! Updated - SG Rust Meetup at CraftsforGreen Whole Studio&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4502. &lt;/ul&gt;
  4503. &lt;/li&gt;
  4504. &lt;/ul&gt;
  4505. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#europe&quot;&gt;Europe&lt;/a&gt;&lt;/h5&gt;
  4506. &lt;ul&gt;
  4507. &lt;li&gt;2024-05-22 | Leiden, NL | &lt;a href=&quot;https://www.meetup.com/freshminds-future-proof-software-development/&quot;&gt;Future-proof Software Development by FreshMinds&lt;/a&gt;&lt;ul&gt;
  4508. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/freshminds-future-proof-software-development/events/300566391/&quot;&gt;&lt;strong&gt;Coding Dojo Session&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4509. &lt;/ul&gt;
  4510. &lt;/li&gt;
  4511. &lt;li&gt;2024-05-23 | Bern, CH | &lt;a href=&quot;https://www.meetup.com/de-DE/rust-bern/&quot;&gt;Rust Bern&lt;/a&gt;&lt;ul&gt;
  4512. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-bern/events/300286917/&quot;&gt;&lt;strong&gt;2024 Rust Talks Bern #2&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4513. &lt;/ul&gt;
  4514. &lt;/li&gt;
  4515. &lt;li&gt;2024-05-23 | Łodz, PL | &lt;a href=&quot;https://www.linkedin.com/posts/mobica_rust-programming-embeddedsoftware-activity-7193232853717946369-CK68/&quot;&gt;Mobica&lt;/a&gt;&lt;ul&gt;
  4516. &lt;li&gt;&lt;a href=&quot;https://www.interankiety.pl/f/b4D7G7xO&quot;&gt;&lt;strong&gt;Zapisz się na warsztat Rust / Embedded w Łodzi! / What's all the fuss about Rust?&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4517. &lt;/ul&gt;
  4518. &lt;/li&gt;
  4519. &lt;li&gt;2024-05-23 | Manchester, UK | &lt;a href=&quot;https://www.meetup.com/rust-manchester/&quot;&gt;Rust Manchester&lt;/a&gt;&lt;ul&gt;
  4520. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-manchester/events/300923207/&quot;&gt;&lt;strong&gt;Rust Manchester May Code Night&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4521. &lt;/ul&gt;
  4522. &lt;/li&gt;
  4523. &lt;li&gt;2024-05-23 | Salzburg, AT | &lt;a href=&quot;http://this-week-in-rust.org/atom.xml&quot;&gt;SRUG: Salzburg Rust User Group&lt;/a&gt;&lt;ul&gt;
  4524. &lt;li&gt;&lt;a href=&quot;https://data.local.cccsbg.at/apps/calendar/p/jrFa8wz3zZQESKrQ/dayGridMonth/now/view/sidebar/L3JlbW90ZS5waHAvZGF2L3B1YmxpYy1jYWxlbmRhcnMvanJGYTh3ejN6WlFFU0tyUS8yOTRBQTkzMS1GQjFCLTRDODItQTM0My0yMzU5NEE0RDMyNEYuaWNz/1716480000&quot;&gt;&lt;strong&gt;SRUG: Salzburg Rust User Group&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4525. &lt;/ul&gt;
  4526. &lt;/li&gt;
  4527. &lt;li&gt;2024-05-24 | Bordeaux, FR | &lt;a href=&quot;https://www.meetup.com/bordeaux-rust/&quot;&gt;Rust Bordeaux&lt;/a&gt;&lt;ul&gt;
  4528. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bordeaux-rust/events/300723854/&quot;&gt;&lt;strong&gt;Rust Bordeaux #3: Discussions&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4529. &lt;/ul&gt;
  4530. &lt;/li&gt;
  4531. &lt;li&gt;2024-05-25 | Stockholm, SE | &lt;a href=&quot;https://www.meetup.com/stockholm-rust/&quot;&gt;Stockholm Rust&lt;/a&gt;&lt;ul&gt;
  4532. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/stockholm-rust/events/301014982/&quot;&gt;&lt;strong&gt;Ferris' Fika Forum #3 [Embedded lab edition]&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4533. &lt;/ul&gt;
  4534. &lt;/li&gt;
  4535. &lt;li&gt;2024-05-25 | Tampere, FI | &lt;a href=&quot;https://www.meetup.com/finland-rust-meetup/&quot;&gt;Finland Rust-lang Group&lt;/a&gt;&lt;ul&gt;
  4536. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/finland-rust-meetup/events/301056235/&quot;&gt;&lt;strong&gt;May Meetup&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4537. &lt;/ul&gt;
  4538. &lt;/li&gt;
  4539. &lt;li&gt;2024-05-28 - 2024-05-30 | Berlin, DE | &lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;Oxidize&lt;/a&gt;&lt;ul&gt;
  4540. &lt;li&gt;&lt;a href=&quot;https://oxidizeconf.com/&quot;&gt;&lt;strong&gt;Oxidize Conf 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4541. &lt;/ul&gt;
  4542. &lt;/li&gt;
  4543. &lt;li&gt;2024-05-30 | Amsterdam, NL | &lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/&quot;&gt;Rust Developers Amsterdam Group&lt;/a&gt;&lt;ul&gt;
  4544. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-amsterdam-group/events/301065548/&quot;&gt;&lt;strong&gt;Rust Developer Meetup @ Avalor AI&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4545. &lt;/ul&gt;
  4546. &lt;/li&gt;
  4547. &lt;li&gt;2024-05-30 | Barcelona, ES | &lt;a href=&quot;https://mainmatter.com/&quot;&gt;Mainmatter&lt;/a&gt; &amp;amp; &lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/&quot;&gt;BcnRust&lt;/a&gt;&lt;ul&gt;
  4548. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/es-ES/bcnrust/events/300765894/&quot;&gt;&lt;strong&gt;Rust for the web, Barcelona 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4549. &lt;/ul&gt;
  4550. &lt;/li&gt;
  4551. &lt;li&gt;2024-05-30 | Berlin, DE | &lt;a href=&quot;https://www.meetup.com/rust-berlin/&quot;&gt;Rust Berlin&lt;/a&gt;&lt;ul&gt;
  4552. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-berlin/events/299288963/&quot;&gt;&lt;strong&gt;Rust and Tell - Title&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4553. &lt;/ul&gt;
  4554. &lt;/li&gt;
  4555. &lt;li&gt;2024-05-30 | Copenhagen, DK | &lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community&quot;&gt;Copenhagen Rust Community&lt;/a&gt;&lt;ul&gt;
  4556. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/copenhagen-rust-community/events/300458222/&quot;&gt;&lt;strong&gt;Rust meetup #47 sponsored by Microsoft!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4557. &lt;/ul&gt;
  4558. &lt;/li&gt;
  4559. &lt;li&gt;2024-05-30 | Oslo, NO | &lt;a href=&quot;https://www.meetup.com/rust-oslo/events/&quot;&gt;Rust Oslo&lt;/a&gt;&lt;ul&gt;
  4560. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-oslo/events/300453310/&quot;&gt;&lt;strong&gt;Rust Hack'n'Learn at Kampen Bistro&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4561. &lt;/ul&gt;
  4562. &lt;/li&gt;
  4563. &lt;li&gt;2024-05-30 | Vienna, AT | &lt;a href=&quot;https://www.meetup.com/rust-vienna/&quot;&gt;Rust Vienna&lt;/a&gt;&lt;ul&gt;
  4564. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-vienna/events/301162548/&quot;&gt;&lt;strong&gt;Rust Vienna Meetup - May - Rust Backend 101&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4565. &lt;/ul&gt;
  4566. &lt;/li&gt;
  4567. &lt;li&gt;2024-06-05 | Hamburg, DE | &lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/&quot;&gt;Rust Meetup Hamburg&lt;/a&gt;&lt;ul&gt;
  4568. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-meetup-hamburg/events/299235215/&quot;&gt;&lt;strong&gt;Rust Hack &amp;amp; Learn June 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4569. &lt;/ul&gt;
  4570. &lt;/li&gt;
  4571. &lt;li&gt;2025-06-06 | Vilnius, LT | &lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/&quot;&gt;Rust Vilnius&lt;/a&gt;&lt;ul&gt;
  4572. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-in-vilnius/events/301012097/&quot;&gt;&lt;strong&gt;Enjoy our second Rust and ZIG event&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4573. &lt;/ul&gt;
  4574. &lt;/li&gt;
  4575. &lt;li&gt;2024-06-19 - 2024-06-24 | Zürich, CH | &lt;a href=&quot;https://rustfest.ch/&quot;&gt;RustFest Zürich&lt;/a&gt;&lt;ul&gt;
  4576. &lt;li&gt;&lt;a href=&quot;https://rustfest.ch/&quot;&gt;&lt;strong&gt;RustFest Zürich 2024&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4577. &lt;/ul&gt;
  4578. &lt;/li&gt;
  4579. &lt;/ul&gt;
  4580. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#north-america&quot;&gt;North America&lt;/a&gt;&lt;/h5&gt;
  4581. &lt;ul&gt;
  4582. &lt;li&gt;2024-05-22 | Austin, TX, US | &lt;a href=&quot;https://www.meetup.com/rust-atx/&quot;&gt;Rust ATX&lt;/a&gt;&lt;ul&gt;
  4583. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-atx/events/xvkdgtygchbdc/&quot;&gt;&lt;strong&gt;Rust Lunch - Fareground&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4584. &lt;/ul&gt;
  4585. &lt;/li&gt;
  4586. &lt;li&gt;2024-05-25 | Chicago, IL, US | &lt;a href=&quot;https://www.meetup.com/deep-dish-rust/&quot;&gt;Deep Dish Rust&lt;/a&gt;&lt;ul&gt;
  4587. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/deep-dish-rust/events/300665520/&quot;&gt;&lt;strong&gt;Rust Talk Double Feature&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4588. &lt;/ul&gt;
  4589. &lt;/li&gt;
  4590. &lt;li&gt;2024-05-30 | Mountain View, CA, US | &lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/&quot;&gt;Mountain View Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4591. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/mv-rust-meetup/events/300775547/&quot;&gt;&lt;strong&gt;Rust Meetup at Hacker Dojo&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4592. &lt;/ul&gt;
  4593. &lt;/li&gt;
  4594. &lt;li&gt;2024-05-31 | Boston, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4595. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116786/&quot;&gt;&lt;strong&gt;Boston Common Rust Lunch, May 31&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4596. &lt;/ul&gt;
  4597. &lt;/li&gt;
  4598. &lt;li&gt;2024-06-08 | Somerville, MA, US | &lt;a href=&quot;https://www.meetup.com/bostonrust/&quot;&gt;Boston Rust Meetup&lt;/a&gt;&lt;ul&gt;
  4599. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/bostonrust/events/300116799/&quot;&gt;&lt;strong&gt;Porter Square Rust Lunch, Jun 8&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4600. &lt;/ul&gt;
  4601. &lt;/li&gt;
  4602. &lt;li&gt;2024-06-13 | Spokane, WA, US | &lt;a href=&quot;https://www.meetup.com/spokane-rust/&quot;&gt;Spokane Rust&lt;/a&gt;&lt;ul&gt;
  4603. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/spokane-rust/events/300020010/&quot;&gt;&lt;strong&gt;Monthly Meetup: Topic TBD!&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4604. &lt;/ul&gt;
  4605. &lt;/li&gt;
  4606. &lt;li&gt;2024-06-18 | San Francisco, CA, US | &lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/&quot;&gt;San Francisco Rust Study Group&lt;/a&gt;&lt;ul&gt;
  4607. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/san-francisco-rust-study-group/events/299186953/&quot;&gt;&lt;strong&gt;Rust Hacking in Person&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4608. &lt;/ul&gt;
  4609. &lt;/li&gt;
  4610. &lt;/ul&gt;
  4611. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#oceania&quot;&gt;Oceania&lt;/a&gt;&lt;/h5&gt;
  4612. &lt;ul&gt;
  4613. &lt;li&gt;2024-05-28 | Sydney, NSW, AU | &lt;a href=&quot;https://www.meetup.com/rust-sydney/&quot;&gt;Rust Sydney&lt;/a&gt;&lt;ul&gt;
  4614. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-sydney/events/300854266/&quot;&gt;&lt;strong&gt;a demo 🤯 &amp;amp; a lightning ⚡show ✨&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4615. &lt;/ul&gt;
  4616. &lt;/li&gt;
  4617. &lt;/ul&gt;
  4618. &lt;h5&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#south-america&quot;&gt;South America&lt;/a&gt;&lt;/h5&gt;
  4619. &lt;ul&gt;
  4620. &lt;li&gt;2024-06-06 | Buenos Aires, AR | &lt;a href=&quot;https://www.meetup.com/rust-argentina/&quot;&gt;Rust en Español | Rust Argentina&lt;/a&gt;&lt;ul&gt;
  4621. &lt;li&gt;&lt;a href=&quot;https://www.meetup.com/rust-argentina/events/299740249&quot;&gt;&lt;strong&gt;Juntada de Junio&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
  4622. &lt;/ul&gt;
  4623. &lt;/li&gt;
  4624. &lt;/ul&gt;
  4625. &lt;p&gt;If you are running a Rust event please add it to the &lt;a href=&quot;https://www.google.com/calendar/embed?src=apd9vmbc22egenmtu5l6c5jbfc%40group.calendar.google.com&quot;&gt;calendar&lt;/a&gt; to get
  4626. it mentioned here. Please remember to add a link to the event too.
  4627. Email the &lt;a href=&quot;mailto:community-team@rust-lang.org&quot;&gt;Rust Community Team&lt;/a&gt; for access.&lt;/p&gt;
  4628. &lt;h4&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#jobs&quot;&gt;Jobs&lt;/a&gt;&lt;/h4&gt;
  4629.  
  4630.  
  4631. &lt;p&gt;Please see the latest &lt;a href=&quot;https://www.reddit.com/r/rust/comments/1cixuzr/official_rrust_whos_hiring_thread_for_jobseekers/&quot;&gt;Who's Hiring thread on r/rust&lt;/a&gt;&lt;/p&gt;
  4632. &lt;h3&gt;&lt;a class=&quot;toclink&quot; href=&quot;http://this-week-in-rust.org/atom.xml#quote-of-the-week&quot;&gt;Quote of the Week&lt;/a&gt;&lt;/h3&gt;
  4633. &lt;blockquote&gt;
  4634. &lt;p&gt;In other words, I do not want the compiler to just insert code to uphold the bare minimum guarantees, I want the compiler to check my work for me and assist me in developing an algorithm I can confidently assert is right.&lt;/p&gt;
  4635. &lt;/blockquote&gt;
  4636. &lt;p&gt;– &lt;a href=&quot;https://without.boats/blog/references-are-like-jumps/&quot;&gt;without boats&lt;/a&gt;&lt;/p&gt;
  4637. &lt;p&gt;Thanks to &lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328/1568&quot;&gt;scottmcm&lt;/a&gt; for the suggestion!&lt;/p&gt;
  4638. &lt;p&gt;&lt;a href=&quot;https://users.rust-lang.org/t/twir-quote-of-the-week/328&quot;&gt;Please submit quotes and vote for next week!&lt;/a&gt;&lt;/p&gt;
  4639. &lt;p&gt;&lt;em&gt;This Week in Rust is edited by: &lt;a href=&quot;https://github.com/nellshamrell&quot;&gt;nellshamrell&lt;/a&gt;, &lt;a href=&quot;https://github.com/llogiq&quot;&gt;llogiq&lt;/a&gt;, &lt;a href=&quot;https://github.com/cdmistman&quot;&gt;cdmistman&lt;/a&gt;, &lt;a href=&quot;https://github.com/ericseppanen&quot;&gt;ericseppanen&lt;/a&gt;, &lt;a href=&quot;https://github.com/extrawurst&quot;&gt;extrawurst&lt;/a&gt;, &lt;a href=&quot;https://github.com/andrewpollack&quot;&gt;andrewpollack&lt;/a&gt;, &lt;a href=&quot;https://github.com/U007D&quot;&gt;U007D&lt;/a&gt;, &lt;a href=&quot;https://github.com/kolharsam&quot;&gt;kolharsam&lt;/a&gt;, &lt;a href=&quot;https://github.com/joelmarcey&quot;&gt;joelmarcey&lt;/a&gt;, &lt;a href=&quot;https://github.com/mariannegoldin&quot;&gt;mariannegoldin&lt;/a&gt;, &lt;a href=&quot;https://github.com/bennyvasquez&quot;&gt;bennyvasquez&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  4640. &lt;p&gt;&lt;em&gt;Email list hosting is sponsored by &lt;a href=&quot;https://foundation.rust-lang.org/&quot;&gt;The Rust Foundation&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
  4641. &lt;p&gt;&lt;small&gt;&lt;a href=&quot;https://www.reddit.com/r/rust/comments/1cygkmi/this_week_in_rust_548/&quot;&gt;Discuss on r/rust&lt;/a&gt;&lt;/small&gt;&lt;/p&gt;</description>
  4642. <pubDate>Wed, 22 May 2024 04:00:00 +0000</pubDate>
  4643. <dc:creator>TWiR Contributors</dc:creator>
  4644. </item>
  4645. <item>
  4646. <title>Daniel Stenberg: A history of a logo with a colon and two slashes</title>
  4647. <guid isPermaLink="false">https://daniel.haxx.se/blog/?p=24767</guid>
  4648. <link>https://daniel.haxx.se/blog/2024/05/21/a-history-of-a-logo-with-a-colon-and-two-slashes/</link>
  4649. <description>&lt;div class=&quot;wp-block-image&quot;&gt;
  4650. &lt;figure class=&quot;aligncenter size-full wp-lightbox-container&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-24779&quot; height=&quot;390&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2024/05/image.png&quot; width=&quot;970&quot; /&gt;&lt;button class=&quot;lightbox-trigger&quot; type=&quot;button&quot;&gt;
  4651. &lt;svg fill=&quot;none&quot; height=&quot;12&quot; viewBox=&quot;0 0 12 12&quot; width=&quot;12&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  4652. &lt;path d=&quot;M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z&quot; fill=&quot;#fff&quot;&gt;
  4653. &lt;/path&gt;&lt;/svg&gt;
  4654. &lt;/button&gt;&lt;/figure&gt;&lt;/div&gt;
  4655.  
  4656.  
  4657. &lt;p&gt;In the 2015 time frame I had come to the conclusion that the curl logo could use modernization and I was toying with ideas of how it could be changed. The original had served us well, but it definitely had a 1990s era feel to it.&lt;/p&gt;
  4658.  
  4659.  
  4660.  
  4661. &lt;p&gt;On June 11th 2015, I posted this image in the curl IRC channel as a proof of concept for a new curl logo idea I had: since curl works with URLs and all the URLs curl supports have the colon slash slash separator. Obviously I am not a designer so it was rough. This was back in the day when we still used this logo:&lt;/p&gt;
  4662.  
  4663.  
  4664. &lt;div class=&quot;wp-block-image&quot;&gt;
  4665. &lt;figure class=&quot;aligncenter size-full&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-8823&quot; height=&quot;175&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2016/04/curl-refined.jpg&quot; width=&quot;471&quot; /&gt;&lt;/figure&gt;&lt;/div&gt;
  4666.  
  4667.  
  4668. &lt;p&gt;Frank Gevarts had a go at it.  He took it further and tried to make something out of the idea. He showed us his tweaked take.&lt;/p&gt;
  4669.  
  4670.  
  4671. &lt;div class=&quot;wp-block-image&quot;&gt;
  4672. &lt;figure class=&quot;aligncenter size-full wp-lightbox-container&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-24780&quot; height=&quot;174&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2024/05/image-1.png&quot; width=&quot;500&quot; /&gt;&lt;button class=&quot;lightbox-trigger&quot; type=&quot;button&quot;&gt;
  4673. &lt;svg fill=&quot;none&quot; height=&quot;12&quot; viewBox=&quot;0 0 12 12&quot; width=&quot;12&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  4674. &lt;path d=&quot;M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z&quot; fill=&quot;#fff&quot;&gt;
  4675. &lt;/path&gt;&lt;/svg&gt;
  4676. &lt;/button&gt;&lt;/figure&gt;&lt;/div&gt;
  4677.  
  4678.  
  4679. &lt;p&gt;When we met up at the following FOSDEM in the end of January 2016, we sat down together and discussed the logo idea a bit to see if we could make it work somehow. Left from that exercise is this version below. As you can see, basically the same one. It was hard to make it work.&lt;/p&gt;
  4680.  
  4681.  
  4682. &lt;div class=&quot;wp-block-image&quot;&gt;
  4683. &lt;figure class=&quot;aligncenter size-full wp-lightbox-container&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-24781&quot; height=&quot;181&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2024/05/image-2.png&quot; width=&quot;500&quot; /&gt;&lt;button class=&quot;lightbox-trigger&quot; type=&quot;button&quot;&gt;
  4684. &lt;svg fill=&quot;none&quot; height=&quot;12&quot; viewBox=&quot;0 0 12 12&quot; width=&quot;12&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  4685. &lt;path d=&quot;M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z&quot; fill=&quot;#fff&quot;&gt;
  4686. &lt;/path&gt;&lt;/svg&gt;
  4687. &lt;/button&gt;&lt;/figure&gt;&lt;/div&gt;
  4688.  
  4689.  
  4690. &lt;p&gt;Later that spring, I was contacted by Soft Dreams, a designer company, who offered to help us &lt;a href=&quot;https://daniel.haxx.se/blog/2016/05/27/a-new-curl-logo/&quot;&gt;design a new logo&lt;/a&gt; at no cost to us. I showed them some of these rough outlines of the colon slash slash idea and we did a some back-and-forthing to see if we could make something work with it, but we could not figure out a way to get the colon slash slash sequence actually &lt;em&gt;into&lt;/em&gt; the word curl in a way that would look good. It just kept on looking different kinds of weird. Eventually we gave that up and we ended up putting it after the word, making it look like curl is a URL scheme. It was ended up much easier and ultimately the better and right choice for us. The new curl logo was made public in May 2016. Made by Adrian Burcea.&lt;/p&gt;
  4691.  
  4692.  
  4693. &lt;div class=&quot;wp-block-image&quot;&gt;
  4694. &lt;figure class=&quot;aligncenter size-large wp-lightbox-container&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-8936&quot; height=&quot;459&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2016/04/good_curl_logo-1200x459.png&quot; width=&quot;1200&quot; /&gt;&lt;button class=&quot;lightbox-trigger&quot; type=&quot;button&quot;&gt;
  4695. &lt;svg fill=&quot;none&quot; height=&quot;12&quot; viewBox=&quot;0 0 12 12&quot; width=&quot;12&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  4696. &lt;path d=&quot;M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z&quot; fill=&quot;#fff&quot;&gt;
  4697. &lt;/path&gt;&lt;/svg&gt;
  4698. &lt;/button&gt;&lt;/figure&gt;&lt;/div&gt;
  4699.  
  4700.  
  4701. &lt;p&gt;Just months later in 2016, Mozilla announced that they were working on a &lt;a href=&quot;https://daniel.haxx.se/blog/2016/08/31/mozillas-search-for-a-new-logo/&quot;&gt;revamp of their logo&lt;/a&gt;. They made several different skews and there was a voting process during which they would eventually pick a winner. One of the options used colon slash slash embedded in the name and during the process a number of person highlighted the fact that the curl project just recently changed logo to use the colon slash slash.&lt;/p&gt;
  4702.  
  4703.  
  4704.  
  4705. &lt;p&gt;In the Mozilla all-hands meeting in Hawaii in December 2016, I was approached by the Mozilla logo design team who asked me if I (we?) would have any issues with them moving forward with the logo version using the colon slash slash.&lt;/p&gt;
  4706.  
  4707.  
  4708.  
  4709. &lt;p&gt;I had no objections. I think that was the coolest of the new logo options they had and I also thought that it sort of validated our idea of using the symbols in our logo. I was perhaps a bit jealous how Mozilla is a better word to actually integrate the symbol into the name…. the way we tried so hard to do for curl, but had to give up.&lt;/p&gt;
  4710.  
  4711.  
  4712.  
  4713. &lt;p&gt;In January 2017 &lt;a href=&quot;https://daniel.haxx.se/blog/2017/01/18/curl-hearts-mozilla/&quot;&gt;Mozilla announce their new logo&lt;/a&gt;. With the colon slash slash.&lt;/p&gt;
  4714.  
  4715.  
  4716. &lt;div class=&quot;wp-block-image&quot;&gt;
  4717. &lt;figure class=&quot;alignright size-large wp-lightbox-container&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-9694&quot; height=&quot;814&quot; src=&quot;https://daniel.haxx.se/blog/wp-content/uploads/2017/01/curl-hearts-mozilla-1200x814.png&quot; width=&quot;1200&quot; /&gt;&lt;button class=&quot;lightbox-trigger&quot; type=&quot;button&quot;&gt;
  4718. &lt;svg fill=&quot;none&quot; height=&quot;12&quot; viewBox=&quot;0 0 12 12&quot; width=&quot;12&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;
  4719. &lt;path d=&quot;M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z&quot; fill=&quot;#fff&quot;&gt;
  4720. &lt;/path&gt;&lt;/svg&gt;
  4721. &lt;/button&gt;&lt;/figure&gt;&lt;/div&gt;
  4722.  
  4723.  
  4724. &lt;p&gt;And now you too know how this happened.&lt;/p&gt;</description>
  4725. <pubDate>Tue, 21 May 2024 20:45:13 +0000</pubDate>
  4726. <dc:creator>Daniel Stenberg</dc:creator>
  4727. </item>
  4728. <item>
  4729. <title>The Mozilla Blog: Releasing a new paper on openness and artificial intelligence</title>
  4730. <guid isPermaLink="false">https://blog.mozilla.org/?p=74918</guid>
  4731. <link>https://blog.mozilla.org/en/mozilla/ai/new-framework-for-ai-openness-and-innovation/</link>
  4732. <description>&lt;p&gt;&lt;em&gt;For the past six months, the Columbia Institute of Global Politics and Mozilla have been working with leading AI scholars and practitioners to create a framework on openness and AI. Today, we are publishing a paper that lays out this new framework.&lt;/em&gt;&lt;/p&gt;
  4733.  
  4734.  
  4735.  
  4736. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://foundation.mozilla.org/en/research/library/towards-a-framework-for-openness-in-foundation-models/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Banner reading &amp;quot;The Columbia Convening on Openness and AI&amp;quot; with logos of Mozilla and the Institute of Global Politics on a light blue background. Abstract design featuring green and white semi-circles is present.&quot; class=&quot;wp-image-74940&quot; height=&quot;576&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/05/mozilla_media-header-full_convenining-on-ai-1024x576.png&quot; width=&quot;1024&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  4737.  
  4738.  
  4739.  
  4740. &lt;p&gt;During earlier eras of the internet, open source technologies played a &lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148&quot;&gt;core role&lt;/a&gt; in promoting innovation and safety. Open source technology provided a core set of building blocks that software developers have used to do everything from create art to design vaccines to develop apps that are used by people all over the world; it is &lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4693148&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;estimated&lt;/a&gt; that open source software is worth over $8 trillion in value. And, attempts to limit open innovation — such as export controls on encryption in early web browsers — ended up being counterproductive, further exemplifying the value of openness. &lt;/p&gt;
  4741.  
  4742.  
  4743.  
  4744. &lt;figure class=&quot;wp-block-pullquote&quot;&gt;&lt;blockquote&gt;&lt;p&gt;The &lt;a href=&quot;https://foundation.mozilla.org/en/research/library/towards-a-framework-for-openness-in-foundation-models/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;paper&lt;/a&gt; surveys existing approaches to defining openness in AI models and systems, and then proposes a descriptive framework to understand how each component of the foundation model stack contributes to openness.&lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;
  4745.  
  4746.  
  4747.  
  4748. &lt;p&gt;Today, open source approaches for &lt;a href=&quot;https://blog.mozilla.org/en/category/mozilla/ai/&quot;&gt;artificial intelligence&lt;/a&gt; — and especially for foundation models —  offer the promise of similar benefits to society. However, defining and empowering “open source” for foundation models has proven tricky, given its significant differences from traditional software development. This lack of clarity has made it harder to recommend specific approaches and standards for how developers should advance openness and unlock its benefits. Additionally, these conversations about openness in AI have often operated at a high level, making it harder to reason about the benefits and risks from openness in AI. Some policymakers and advocates have blamed open access to AI as the source of certain safety and security risks, often without concrete or rigorous evidence to justify those claims. On the other hand, people often tout the benefits of openness in AI, but without specificity about how to actually harness those opportunities. &lt;/p&gt;
  4749.  
  4750.  
  4751.  
  4752. &lt;p&gt;That’s why, in February, Mozilla and the Columbia Institute of Global Politics brought together over &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/introducing-columbia-convening-openness-and-ai/&quot;&gt;40 leading scholars and practitioners&lt;/a&gt; working on openness and AI for the Columbia Convening. These individuals — spanning prominent open source AI startups and companies, nonprofit AI labs, and civil society organizations — focused on exploring what “open” should mean in the AI era.&lt;/p&gt;
  4753.  
  4754.  
  4755.  
  4756. &lt;p&gt;Today, we are publishing a &lt;a href=&quot;https://foundation.mozilla.org/en/research/library/towards-a-framework-for-openness-in-foundation-models/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;paper&lt;/a&gt; that presents a framework for grappling with openness across the AI stack. The paper surveys existing approaches to defining openness in AI models and systems, and then proposes a descriptive framework to understand how each component of the foundation model stack contributes to openness. It enables — without prescribing — an analysis of how to unlock specific benefits from AI, based on desired model and system attributes. Furthermore, the paper also adds clarity to support further work on this topic, including work to develop stronger safety safeguards for open systems. &lt;/p&gt;
  4757.  
  4758.  
  4759.  
  4760. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;img alt=&quot;A flowchart outlining various categories for AI development: Product/UX, Documentation, Model Components, Licensing, Infrastructure, and Safeguards, each with subcategories detailing specific items.&quot; class=&quot;wp-image-74929&quot; height=&quot;1014&quot; src=&quot;https://blog.mozilla.org/wp-content/blogs.dir/278/files/2024/05/columbia-convening-1024x1014.png&quot; width=&quot;1024&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Framework from paper showing general-purpose AI system stack and dimensions of openness.&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  4761.  
  4762.  
  4763.  
  4764. &lt;p&gt;We believe this framework will support timely conversations around the technical and policy communities. For example, this week, as policymakers discuss AI policy at the AI Seoul Summit 2024, this framework can help clarify how openness in AI can support societal and political goals, including innovation, safety, competition, and human rights. And, as the technical community continues to build and deploy AI systems, this framework can support AI developers in ensuring their AI systems help achieve their intended goals, promote innovation and collaboration, and reduce harms. We look forward to working with the open source and AI community, as well as the policy and technical communities more broadly, to continue building on this framework going forward.&lt;/p&gt;
  4765. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/en/mozilla/ai/new-framework-for-ai-openness-and-innovation/&quot;&gt;Releasing a new paper on openness and artificial intelligence&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/en/&quot;&gt;The Mozilla Blog&lt;/a&gt;.&lt;/p&gt;</description>
  4766. <pubDate>Tue, 21 May 2024 16:00:00 +0000</pubDate>
  4767. <dc:creator>Ayah Bdeir and Camille François</dc:creator>
  4768. </item>
  4769. <item>
  4770. <title>Cameron Kaiser: Donnie Darko uses OS X</title>
  4771. <guid isPermaLink="false">tag:blogger.com,1999:blog-1015214236289077798.post-2552850778848757993</guid>
  4772. <link>http://tenfourfox.blogspot.com/2024/05/donnie-darko-uses-os-x.html</link>
  4773. <description>I think it's been previously commented upon, but we were watching &lt;a href=&quot;https://en.wikipedia.org/wiki/Donnie_Darko&quot;&gt;&lt;i&gt;Donnie Darko&lt;/i&gt;&lt;/a&gt; over the weekend (controversial opinion: we prefer the director's cut, we think it's an improvement) and noticed that Donnie's reality is powered by a familiar processor and operating system. These are direct grabs from the Blu-ray.
  4774.  
  4775. &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixq35NvJ_Qhs26gYJmRMjWNZr5-_KuKK7T6mLX2cRAylA-0gDySNJI0luqYKCGk5t5KNr0f3k5sXwh2tioJ57TLm8tNtB1sQ6VXMtRxgudAplvGoXgn7NlgnJSxKGHKGr1aNiGVRLLUXWPuT7wnC-klXOwPn6Q8Y5SNTJWzpgbwzieYUV-Xo0Of3FzWl69/s1920/vlcsnap-2024-05-19-07h22m21s997.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixq35NvJ_Qhs26gYJmRMjWNZr5-_KuKK7T6mLX2cRAylA-0gDySNJI0luqYKCGk5t5KNr0f3k5sXwh2tioJ57TLm8tNtB1sQ6VXMtRxgudAplvGoXgn7NlgnJSxKGHKGr1aNiGVRLLUXWPuT7wnC-klXOwPn6Q8Y5SNTJWzpgbwzieYUV-Xo0Of3FzWl69/s320/vlcsnap-2024-05-19-07h22m21s997.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  4776.  
  4777. &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66xBQqLn3JPbroOhl8sAF1SBhcd0yepUmyeOlf6owtwADseTW6Z9pJGA2d9VPQ4r4kUl1jbgthxXz_5G-4Yeur6a3i1b0CnJDlHBkCL8bE7rOSIax69K1bhYO7rJDKPEPnEFe4XwVwWHFYslAistvUsqCH6OxaohlDErHAEsvSjgIDzDTL0S30l0VT5YS/s1920/vlcsnap-2024-05-19-07h23m42s268.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66xBQqLn3JPbroOhl8sAF1SBhcd0yepUmyeOlf6owtwADseTW6Z9pJGA2d9VPQ4r4kUl1jbgthxXz_5G-4Yeur6a3i1b0CnJDlHBkCL8bE7rOSIax69K1bhYO7rJDKPEPnEFe4XwVwWHFYslAistvUsqCH6OxaohlDErHAEsvSjgIDzDTL0S30l0VT5YS/s320/vlcsnap-2024-05-19-07h23m42s268.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  4778.  
  4779. &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJR8BpVzdPFe0ukYCJU9ARkcl_alyibMI36euhH674Ri80AtbwS5FR36i0cmtGreraLuYlPy5w8Snx3NDNOras5ayr5_ek4mdNAEWoh556STc_uIYWaEHOrq2klhdZkXiYMgIfbHod01r37MLgdNJQ0iUoU0YjGhoN1FOk2cgr-7Yd-Bicj36p3TXkk2zi/s1920/vlcsnap-2024-05-19-07h30m21s439.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJR8BpVzdPFe0ukYCJU9ARkcl_alyibMI36euhH674Ri80AtbwS5FR36i0cmtGreraLuYlPy5w8Snx3NDNOras5ayr5_ek4mdNAEWoh556STc_uIYWaEHOrq2klhdZkXiYMgIfbHod01r37MLgdNJQ0iUoU0YjGhoN1FOk2cgr-7Yd-Bicj36p3TXkk2zi/s320/vlcsnap-2024-05-19-07h30m21s439.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  4780.  
  4781. &lt;div class=&quot;separator&quot; style=&quot;clear: both;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif7tzmF0ij0Kj1QOX1MVAdBU4qxbFOzGt-zmEn3LetdwRYnt1I7ilgjXwUNUihV_5GXX6TxbOJyooOczXK0ZPwFDKtnu6VnqkU53hiBkjQvxUDLJntan4VDBvEVnHXlDH8UjliwQ4Gc93d7RRBH7tatrs97Q0P0vWNrZhXb2M6W9g3VTiewfLO8VkVPwdg/s1920/vlcsnap-2024-05-19-07h30m38s646.png&quot; style=&quot;display: block; padding: 1em 0; text-align: center;&quot;&gt;&lt;img alt=&quot;&quot; border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEif7tzmF0ij0Kj1QOX1MVAdBU4qxbFOzGt-zmEn3LetdwRYnt1I7ilgjXwUNUihV_5GXX6TxbOJyooOczXK0ZPwFDKtnu6VnqkU53hiBkjQvxUDLJntan4VDBvEVnHXlDH8UjliwQ4Gc93d7RRBH7tatrs97Q0P0vWNrZhXb2M6W9g3VTiewfLO8VkVPwdg/s320/vlcsnap-2024-05-19-07h30m38s646.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
  4782.  
  4783. The entirety of the crash dump can't be seen and the scenes in which it/they appear are likely a composite of several unrelated traces, but the first two shots have a backtrace showing symbols from Unsanity Application Enhancer (APE), used for adding extra functionality to the OS like altering the mouse cursor and system menus. However, its infamous in-memory monkeypatching technique could sometimes make victim applications unstable and was unsurprisingly a source of some early crash reports in TenFourFox. (I never supported it for that reason, refused to even use it on principle, and still won't.) As a result, it wouldn't have been difficult for the art department to gin up a genuine crash backtrace as an insert. The second set of grabs appears when the Artifact returns to the Primary Universe and the Tangent Universe is purged (not a spoiler because it will make no sense to anyone who hasn't seen the movie).
  4784. &lt;p&gt;
  4785. All four are specific to the director's cut that premiered theatrically in May 2004. While APE was available at least as far back as Puma, i.e., OS X 10.1, Puma didn't come out until September 2001, months after the movie premiered in January of that year. In fact, the original movie is too early even for the release of Cheetah (10.0) in March. The first two images don't give an obvious version number but the second set shows a Darwin kernel version of 6.1, which corresponds to Jaguar 10.2.1 from September 2002. Although Panther 10.3 came out in October 2003, the recut movie would have moved to post-production (in its fashion) by then, and the shots may well have been done near the beginning of production when early versions of Jag remained current.
  4786. &lt;/p&gt;&lt;p&gt;
  4787. I'm waiting on the next Firefox ESR (128) in July, and there will be at least some maintenance updates then, so watch for that.&lt;/p&gt;</description>
  4788. <pubDate>Tue, 21 May 2024 04:37:13 +0000</pubDate>
  4789. <author>noreply@blogger.com (ClassicHasClass)</author>
  4790. </item>
  4791. <item>
  4792. <title>Wil Clouser: Retiring BrowserID on Mozilla Accounts</title>
  4793. <guid isPermaLink="false">http://192.168.10.201:4000/2024/05/19/retiring-browserid-on-mozilla-accounts</guid>
  4794. <link>http://192.168.10.201:4000/2024/05/19/retiring-browserid-on-mozilla-accounts/</link>
  4795. <description>&lt;p&gt;The &lt;abbr title=&quot;too long; didn't read&quot;&gt;tl;dr&lt;/abbr&gt; here is that Mozilla
  4796. Accounts is turning off SyncStorage BrowserID support and it probably doesn’t
  4797. affect you at all.&lt;/p&gt;
  4798.  
  4799. &lt;h3&gt;A little history&lt;/h3&gt;
  4800.  
  4801. &lt;p&gt;In 2011, when Mozilla Accounts (called “Firefox Accounts” back then) was first
  4802. built it used BrowserID identity certificates in its authentication model.  The
  4803. BrowserID protocol never took off and Mozilla’s work on it ended in 2016.
  4804. However, the sync service in Firefox continued to use BrowserID even as OAuth
  4805. support was added to Mozilla Accounts as an alternative for all other relying
  4806. parties.&lt;/p&gt;
  4807.  
  4808. &lt;p&gt;Over time, we recognized BrowserID was becoming a maintenance liability.  As a
  4809. non-standard protocol it created significant complexity in our codebase.
  4810. Therefore, we decided to migrate the Firefox clients off of it in favor of
  4811. OAuth.&lt;/p&gt;
  4812.  
  4813. &lt;p&gt;This was an enormous effort, and while much more could be written about this
  4814. transition, the main takeaway is that Firefox Sync’s BrowserID support ended
  4815. with Firefox 78, which shipped in June 2020 and reached its end of life in
  4816. November 2021.&lt;/p&gt;
  4817.  
  4818. &lt;h3&gt;Present day&lt;/h3&gt;
  4819.  
  4820. &lt;p&gt;We’ve been waiting a long time for the usage of Firefox 78 to drop.&lt;/p&gt;
  4821.  
  4822. &lt;p&gt;Aside from being an &lt;abbr title=&quot;Extended Support Release&quot;&gt;ESR&lt;/abbr&gt; version
  4823. there are a couple of other reasons for its extra longevity:&lt;/p&gt;
  4824.  
  4825. &lt;ul&gt;
  4826.  &lt;li&gt;It was the last version of the browser to support Flash&lt;/li&gt;
  4827.  &lt;li&gt;It was the last version of the browser to support OS X versions &amp;lt; 10.12&lt;/li&gt;
  4828. &lt;/ul&gt;
  4829.  
  4830. &lt;p&gt;With Flash now largely obsolete on the web and traffic from older operating
  4831. systems becoming rarer, we’ve decided that now is the appropriate time to turn
  4832. off support for this legacy protocol.&lt;/p&gt;
  4833.  
  4834. &lt;p&gt;To avoid surprises and not leave anyone behind, we attempted to email anyone
  4835. still using that endpoint earlier this year. We didn’t receive any feedback and
  4836. we continued with the plan.&lt;/p&gt;
  4837.  
  4838. &lt;h3&gt;Our method&lt;/h3&gt;
  4839.  
  4840. &lt;p&gt;Our plan is simple:  BrowserID requests are the only traffic hitting our
  4841. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/v1/certificate/sign&lt;/code&gt; endpoint.  We’ll begin returning &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;HTTP 404&lt;/code&gt; replies to a
  4842. small percentage of traffic from that endpoint and monitor for any issues.
  4843. Our testing showed no concerns but it’s challenging to be comprehensive with so
  4844. many combinations of browser versions and operating systems.  Over the next few
  4845. weeks we’ll continue to ramp up the percentage of 404s until we can remove the
  4846. endpoint completely and let the traffic bounce off the front-end like any other
  4847. 404.&lt;/p&gt;
  4848.  
  4849. &lt;h3&gt;Current status&lt;/h3&gt;
  4850.  
  4851. &lt;p&gt;Surprise!  I’m a few weeks late with this post.  We started returning 404s on
  4852. May 1 and are currently up to ~66% of traffic on that endpoint.  So far there
  4853. haven’t been any unexpected complications.  We’ll continue to increase over the
  4854. next few weeks and aim to have all the code removed this summer.&lt;/p&gt;</description>
  4855. <pubDate>Sun, 19 May 2024 07:00:00 +0000</pubDate>
  4856. <dc:creator>Wil Clouser</dc:creator>
  4857. </item>
  4858. <item>
  4859. <title>Don Marti: remove AI from Google Search on Firefox</title>
  4860. <guid isPermaLink="true">https://blog.zgp.org/custom-google-search/</guid>
  4861. <link>https://blog.zgp.org/custom-google-search/</link>
  4862. <description>&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; There is an easier way to do this now.&lt;/p&gt; &lt;ol type=&quot;1&quot;&gt; &lt;li&gt;&lt;p&gt;Install the &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/udm14/&quot;&gt;udm14&lt;/a&gt; extension.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;If you want to make this the default, go to Settings → Search and choose &lt;q&gt;udm14&lt;/q&gt; as your default search engine.&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;p&gt;All done. You may wish to enjoy a &lt;a href=&quot;https://en.wikipedia.org/wiki/Mexican_Coke&quot;&gt;cool beverage without HFCS&lt;/a&gt; to celebrate.&lt;/p&gt; &lt;p&gt;Some helpful related extensions are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/personal-blocklist/&quot;&gt;Personal Blocklist (not by Google)&lt;/a&gt; to remove crappy over-SEOed sites that keep coming up on topics you search frequently&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;&lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/clearurls/&quot;&gt;ClearURLs&lt;/a&gt; to remove tracking elements from URLs&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;figure&gt; &lt;img alt=&quot;I signed up for Google Search Console, and, wow, this site is getting like 200% more search clicks since I posted this. The Google algorithm is really into this blog post for some reason.&quot; src=&quot;https://blog.zgp.org/i/site-new-achievement.png&quot; /&gt;&amp;lt;figcaption&amp;gt;I signed up for Google Search Console, and, wow, this site is getting like 200% more search clicks since I posted this. The Google algorithm is really into this blog post for some reason.&amp;lt;/figcaption&amp;gt; &lt;/figure&gt; &lt;p&gt;Original version of this post:&lt;/p&gt; &lt;p&gt;This seems to work to remove “AI” stuff from the top of Google search results on Firefox. (Tested on desktop Firefox for Linux.)&lt;/p&gt; &lt;ol start=&quot;0&quot; type=&quot;1&quot;&gt; &lt;li&gt;&lt;p&gt;Go to the hamburger menu → Settings → Search and remove “Google Search.”&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Do a regular Google search for a word.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Bookmark the search result page.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Go to the hamburger menu → Bookmarks → Manage Bookmarks.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;(optional) Make a new folder for search and put the new bookmark in it.&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Edit the bookmark to include &lt;code&gt;udm=14&lt;/code&gt; as a URL parameter, like this: &lt;code&gt;https://www.google.com/search?q=%s&amp;amp;udm=14&lt;/code&gt;&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Add a keyword or keywords (I use &lt;code&gt;@gg&lt;/code&gt;).&lt;/p&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/google-search-web-filter-ai-overview/&quot;&gt;Revolutionary New Google Feature Hidden Under ‘More’ Tab Shows Links to Web Pages&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.tomshardware.com/software/google-chrome/bye-bye-ai-how-to-block-googles-annoying-ai-overviews-and-just-get-search-results&quot;&gt;Bye Bye, AI: How to turn off Google’s annoying AI overviews and just get search results | Tom’s Hardware&lt;/a&gt; Article that covers how to remove “AI” material on Google Chrome and mobile Firefox.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://tenbluelinks.org/&quot;&gt;How to Turn Off Google AI Overview and Set “Web” as Default&lt;/a&gt; Another list of browsers and instructions.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://tedium.co/2024/05/17/google-web-search-make-default/&quot;&gt;How I Made Google’s “Web” View My Default Search&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://darkvisitors.com/&quot;&gt;Dark Visitors - A List of Known AI Agents on the Internet&lt;/a&gt; is a good site for keeping track of “AI” crawlers if you want to block them in ads.txt. (This doesn’t work for blocking &lt;a href=&quot;https://blog.zgp.org/generative-ai-antimoats/&quot;&gt;underground&lt;/a&gt; “AI” but will put the big companies on notice.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/google-chrome-checklist/&quot;&gt;Google Chrome ad features checklist&lt;/a&gt; (For Google Chrome users, prevent Google AI from classifying you in ways that are hard to figure out)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://udm14.com/&quot;&gt;&amp;amp;udm=14 | the disenshittification Konami code&lt;/a&gt; is a site with a Google search form. Makes it easy to try this the first time before choosing to set as default.&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.understandingai.org/p/the-ukraine-war-is-driving-rapid&quot;&gt;The Ukraine war is driving rapid innovation in drone technology&lt;/a&gt; &lt;q&gt;Of course, there are new legal and moral questions that arise from giving drones the power to kill. But the CEO of this company points out there is a cost to not developing the technology. And in any case, this push to innovate—and defeat the invading enemy—has pushed off those questions for now.&lt;/q&gt; (imho this is going to be the number one immediate issue for AI in Europe. The only credible alternative to returning to large-scale conscription in European countries that have phased it out is for some European alliance to reach global leadership in autonomous military AI. Which explains why they’re &lt;a href=&quot;https://blog.zgp.org/trying-to-think-about-european-tech-policy-in-context/&quot;&gt;putting civilian AI and surveillance businesses on a tight leash&lt;/a&gt;—to free up qualified developers for defense jobs.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://searchengineland.com/doj-google-search-ad-price-manipulation-440207&quot;&gt;How Google harms search advertisers in 20 slides&lt;/a&gt; They’re not &lt;q&gt;raising prices,&lt;/q&gt; they’re &lt;q&gt;coming up with better prices or more fair prices, where those new prices are higher than the previous ones.&lt;/q&gt; lol&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.baldurbjarnason.com/2024/react-electron-llms-labour-arbitrage/&quot;&gt;React, Electron, and LLMs have a common purpose: the labour arbitrage theory of dev tool popularity&lt;/a&gt; &lt;q&gt;Why do some software frameworks and libraries grow in adoption while others don’t?…It’s not about output or productivity.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.theverge.com/2024/4/28/24141585/meta-ai-advantage-plus-automated-ad-glitch-cpm&quot;&gt;Meta’s ‘set it and forget it’ AI ad tools are misfiring and blowing through cash&lt;/a&gt; &lt;q&gt;Small businesses have seen their ad dollars get wiped out and wasted as a result, and some have said the bouts of overspending are driving them from Meta’s platforms.&lt;/q&gt; (considering where Meta ad money goes— &lt;a href=&quot;https://www.theguardian.com/technology/article/2024/may/16/eu-investigates-facebook-owner-meta-over-child-safety-and-mental-health-concerns&quot;&gt;child safety and mental health concerns&lt;/a&gt; are just the latest—this seems like a good thing. Also &lt;a href=&quot;https://techcrunch.com/2024/04/25/meta-ads-data-retention-ag-opinion/&quot;&gt;Meta could face further squeeze on surveillance ads model in EU&lt;/a&gt;)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.404media.co/microsoft-deleted-its-llm-because-it-didnt-get-a-safety-test-but-now-its-everywhere/&quot;&gt;Microsoft Deleted Its LLM Because It Didn’t Get a Safety Test, But Now It’s Everywhere&lt;/a&gt; &lt;q&gt;404 Media has not tested the model and we don’t know if it is easily producing harmful or “toxic” answers, or if Microsoft only took it down because it didn’t check either way. Since the model is open source, it is also possible other people could have downloaded it and create &lt;q&gt;uncensored&lt;/q&gt; versions of the model that would produce controversial answers anyway, as we’ve reported people have done previously.&lt;/q&gt; (underground AI is less capable but more predictable than big company AI APIs. From the point of view of an API caller, the AI you were using gets randomly nerfed because the provider is acting on a moderation issue you weren’t aware of.)&lt;/p&gt;</description>
  4863. <pubDate>Sun, 19 May 2024 00:00:00 +0000</pubDate>
  4864. </item>
  4865. <item>
  4866. <title>Firefox Nightly: Today’s Forecast: Browser Improvements – These Weeks in Firefox: Issue 161</title>
  4867. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1641</guid>
  4868. <link>https://blog.nightly.mozilla.org/2024/05/17/todays-forecast-browser-improvements-these-weeks-in-firefox-issue-161/</link>
  4869. <description>&lt;h3&gt;Highlights&lt;/h3&gt;
  4870. &lt;ul&gt;
  4871. &lt;li&gt;Volunteer contributor tamas.beno12 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=28354&quot;&gt;has fixed a 5 digit (25 year old) bug&lt;/a&gt;! The patch for the bug makes it easier to create transparent windows&lt;/li&gt;
  4872. &lt;li&gt;The newtab team is experimenting with a weather widget! It’s still early days, but you can turn it on in Nightly with a set of 2 prefs found in about:config:
  4873. &lt;ul&gt;
  4874. &lt;li&gt;Set the following to true:
  4875. &lt;ul&gt;
  4876. &lt;li&gt;browser.newtabpage.activity-stream.showWeather&lt;/li&gt;
  4877. &lt;li&gt;browser.newtabpage.activity-stream.system.showWeather&lt;/li&gt;
  4878. &lt;/ul&gt;
  4879. &lt;/li&gt;
  4880. &lt;li&gt;&lt;img src=&quot;https://blog.nightly.mozilla.org/files/2024/05/headlines161_0.png&quot; /&gt;&lt;/li&gt;
  4881. &lt;li&gt;If you notice any bugs with it, you can &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&amp;amp;bug_ignored=0&amp;amp;bug_severity=--&amp;amp;bug_status=NEW&amp;amp;cf_a11y_review_project_flag=---&amp;amp;cf_accessibility_severity=---&amp;amp;cf_fx_iteration=---&amp;amp;cf_fx_points=---&amp;amp;cf_has_str=---&amp;amp;cf_install_update_workflow=---&amp;amp;cf_performance_impact=---&amp;amp;cf_status_firefox126=---&amp;amp;cf_status_firefox127=---&amp;amp;cf_status_firefox128=---&amp;amp;cf_status_firefox_esr115=---&amp;amp;cf_tracking_firefox126=---&amp;amp;cf_tracking_firefox127=---&amp;amp;cf_tracking_firefox128=---&amp;amp;cf_tracking_firefox_esr115=---&amp;amp;cf_tracking_firefox_relnote=---&amp;amp;cf_webcompat_priority=---&amp;amp;component=New%20Tab%20Page&amp;amp;contenttypemethod=list&amp;amp;contenttypeselection=text%2Fplain&amp;amp;defined_groups=1&amp;amp;filed_via=standard_form&amp;amp;flag_type-203=X&amp;amp;flag_type-37=X&amp;amp;flag_type-41=X&amp;amp;flag_type-607=X&amp;amp;flag_type-708=X&amp;amp;flag_type-721=X&amp;amp;flag_type-737=X&amp;amp;flag_type-748=X&amp;amp;flag_type-787=X&amp;amp;flag_type-799=X&amp;amp;flag_type-803=X&amp;amp;flag_type-846=X&amp;amp;flag_type-855=X&amp;amp;flag_type-864=X&amp;amp;flag_type-930=X&amp;amp;flag_type-936=X&amp;amp;flag_type-937=X&amp;amp;flag_type-963=X&amp;amp;needinfo_role=other&amp;amp;needinfo_type=needinfo_from&amp;amp;op_sys=Unspecified&amp;amp;priority=--&amp;amp;product=Firefox&amp;amp;rep_platform=Unspecified&amp;amp;target_milestone=---&amp;amp;version=unspecified&quot;&gt;file them under Firefox :: New Tab Page&lt;/a&gt;&lt;/li&gt;
  4882. &lt;/ul&gt;
  4883. &lt;/li&gt;
  4884. &lt;li&gt;Some nice updates to Picture-in-Picture:
  4885. &lt;ul&gt;
  4886. &lt;li&gt;Volunteer contributor Joseph Webster &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1818054&quot;&gt;added captions support&lt;/a&gt; for Vimeo players!&lt;/li&gt;
  4887. &lt;li&gt;kpatenio &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888691&quot;&gt;added captions support and fixed some live video playback issues for Canal+ and Timvision&lt;/a&gt; when opened in the Picture-in-Picture player window
  4888. &lt;ul&gt;
  4889. &lt;li&gt;Thanks to leojellimann for helping identify how video captions are loaded. Without his help, this patch would not have been possible!&lt;/li&gt;
  4890. &lt;/ul&gt;
  4891. &lt;/li&gt;
  4892. &lt;/ul&gt;
  4893. &lt;/li&gt;
  4894. &lt;li&gt;Bounce Tracking Protection has been enabled in Nightly (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1846492&quot;&gt;Bug 1846492&lt;/a&gt;)
  4895. &lt;ul&gt;
  4896. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/security/2020/08/04/firefox-79-includes-protections-against-redirect-tracking/&quot;&gt;What is bounce tracking / redirect tracking?&lt;/a&gt;&lt;/li&gt;
  4897. &lt;li&gt;The feature detects bounce trackers based on redirect behaviour and periodically purges their cookies &amp;amp; site data to prevent tracking.&lt;/li&gt;
  4898. &lt;li&gt;If you notice that you lose site data or get logged out of sites more than usual please file a bug under &lt;a href=&quot;https://bugzilla.mozilla.org/enter_bug.cgi?assigned_to=nobody%40mozilla.org&amp;amp;bug_ignored=0&amp;amp;bug_severity=--&amp;amp;bug_status=NEW&amp;amp;cf_a11y_review_project_flag=---&amp;amp;cf_accessibility_severity=---&amp;amp;cf_fx_iteration=---&amp;amp;cf_fx_points=---&amp;amp;cf_has_str=---&amp;amp;cf_performance_impact=---&amp;amp;cf_status_firefox126=---&amp;amp;cf_status_firefox127=---&amp;amp;cf_status_firefox128=---&amp;amp;cf_status_firefox_esr115=---&amp;amp;cf_status_thunderbird_esr115=---&amp;amp;cf_tracking_firefox126=---&amp;amp;cf_tracking_firefox127=---&amp;amp;cf_tracking_firefox128=---&amp;amp;cf_tracking_firefox_esr115=---&amp;amp;cf_tracking_firefox_relnote=---&amp;amp;cf_tracking_thunderbird_esr115=---&amp;amp;cf_webcompat_priority=---&amp;amp;component=Privacy%3A%20Anti-Tracking&amp;amp;contenttypemethod=list&amp;amp;contenttypeselection=text%2Fplain&amp;amp;defined_groups=1&amp;amp;filed_via=standard_form&amp;amp;flag_type-203=X&amp;amp;flag_type-37=X&amp;amp;flag_type-41=X&amp;amp;flag_type-607=X&amp;amp;flag_type-721=X&amp;amp;flag_type-737=X&amp;amp;flag_type-787=X&amp;amp;flag_type-799=X&amp;amp;flag_type-803=X&amp;amp;flag_type-846=X&amp;amp;flag_type-855=X&amp;amp;flag_type-863=X&amp;amp;flag_type-864=X&amp;amp;flag_type-930=X&amp;amp;flag_type-936=X&amp;amp;flag_type-937=X&amp;amp;flag_type-963=X&amp;amp;needinfo_role=other&amp;amp;needinfo_type=needinfo_from&amp;amp;op_sys=Unspecified&amp;amp;priority=--&amp;amp;product=Core&amp;amp;rep_platform=Unspecified&amp;amp;target_milestone=---&amp;amp;version=unspecified&quot;&gt;Core :: Privacy: Anti-Tracking&lt;/a&gt; so we can investigate&lt;/li&gt;
  4899. &lt;li&gt;The feature is still in development so detected trackers are not yet counted as part of our regular ETP stats or on about:protections.&lt;/li&gt;
  4900. &lt;li&gt;Advanced: If you want to see which bounce trackers get detected and purged you can enable the logging by going to about:logging and adding the following logger: BounceTrackingProtection:3&lt;/li&gt;
  4901. &lt;/ul&gt;
  4902. &lt;/li&gt;
  4903. &lt;li&gt;Niklas &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1801957&quot;&gt;made the screenshots initial state (crosshairs) keyboard accessible&lt;/a&gt;
  4904. &lt;ul&gt;
  4905. &lt;li&gt;The arrow keys can be used to move the cursor around the content area. Enter will select the current hovered region and space will start the dragging state to draw a region.&lt;/li&gt;
  4906. &lt;/ul&gt;
  4907. &lt;/li&gt;
  4908. &lt;/ul&gt;
  4909. &lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
  4910. &lt;h3&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20%28excluding%20employees%29&amp;amp;quicksearch=1893985%2C1893607%2C1893935%2C1894063%2C1798464%2C1880909%2C1845151%2C1895154%2C1868943%2C1895564%2C1742889%2C1895398%2C1896034%2C1892052%2C1896360&amp;amp;list_id=17031415&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h3&gt;
  4911. &lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
  4912. &lt;ul&gt;
  4913. &lt;li&gt;Itiel&lt;/li&gt;
  4914. &lt;/ul&gt;
  4915. &lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  4916. &lt;ul&gt;
  4917. &lt;li&gt;endington543 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893985&quot;&gt;removed incorrect and unnecessary strict statement&lt;/a&gt; from FxAccountsProfileClient.sys.mjs&lt;/li&gt;
  4918. &lt;li&gt;Joseph Webster &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894063&quot;&gt;added PiP captions support&lt;/a&gt; for additional sites that use JWPlayer&lt;/li&gt;
  4919. &lt;li&gt;Leeya &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1742889&quot;&gt;rewrote consumers of whereToOpenLink&lt;/a&gt; to use BrowserUtils.whereToOpenLink&lt;/li&gt;
  4920. &lt;li&gt;Steve P &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880909&quot;&gt;moved gBrowserInit to its own file&lt;/a&gt;&lt;/li&gt;
  4921. &lt;/ul&gt;
  4922. &lt;h3&gt;Project Updates&lt;/h3&gt;
  4923. &lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
  4924. &lt;h5&gt;Addon Manager &amp;amp; about:addons&lt;/h5&gt;
  4925. &lt;ul&gt;
  4926. &lt;li&gt;As already anticipated in this meeting, starting from Firefox 127, installing new single-signed add-ons is disallowed. The QA verification has been completed and this restriction is now enabled on all channels and riding the Firefox 127 release train (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886160&quot;&gt;Bug 1886160&lt;/a&gt;).&lt;/li&gt;
  4927. &lt;/ul&gt;
  4928. &lt;h5&gt;WebExtension APIs&lt;/h5&gt;
  4929. &lt;ul&gt;
  4930. &lt;li&gt;Starting from Firefox 127, the installType property returned by the management API (e.g. management.getSelf) will be set to ”admin” for extensions that are installed through Enterprise Policy Settings (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1895341&quot;&gt;Bug 1895341&lt;/a&gt;)
  4931. &lt;ul&gt;
  4932. &lt;li&gt;Thanks to mkaply for working on this API improvement for Enterprise Firefox add-ons!&lt;/li&gt;
  4933. &lt;/ul&gt;
  4934. &lt;/li&gt;
  4935. &lt;li&gt;As part of the ongoing work related to improving cross-browser compatibility for Manifest Version 3 extensions, starting from Firefox 127:
  4936. &lt;ul&gt;
  4937. &lt;li&gt;Host permissions requested by Manifest V3 extensions will be listed in the install dialog and granted as part of the add-on installation flow (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889402&quot;&gt;Bug 1889402&lt;/a&gt;).&lt;/li&gt;
  4938. &lt;li&gt;Extensions using the ”incognito”: “split” mode will be allowed to install successfully in Firefox (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1876924&quot;&gt;Bug 1876924&lt;/a&gt;)
  4939. &lt;ul&gt;
  4940. &lt;li&gt;Incognito split mode is still not supported in Firefox, and so the extensions using this mode will not be allowed access to private browsing tabs.&lt;/li&gt;
  4941. &lt;/ul&gt;
  4942. &lt;/li&gt;
  4943. &lt;li&gt;The new runtime.getContexts API method is now supported (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1875480&quot;&gt;Bug 1875480&lt;/a&gt;).
  4944. &lt;ul&gt;
  4945. &lt;li&gt;This new API method allows extensions to discover their existing Extensions contexts (but unlike runtime.getViews it returns a json representation of the metadata for the related extension contexts).&lt;/li&gt;
  4946. &lt;/ul&gt;
  4947. &lt;/li&gt;
  4948. &lt;/ul&gt;
  4949. &lt;/li&gt;
  4950. &lt;/ul&gt;
  4951. &lt;h4&gt;Developer Tools&lt;/h4&gt;
  4952. &lt;h5&gt;DevTools&lt;/h5&gt;
  4953. &lt;ul&gt;
  4954. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=697330&quot;&gt;Pier Angelo Vendrame&lt;/a&gt; prevented new request data to be persisted in Private Browsing (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892052&quot;&gt;#1892052&lt;/a&gt;)&lt;/li&gt;
  4955. &lt;li&gt;Arai fixed exceptions that could happen when evaluating Services.prompt and Services.droppedLinkHandler in the Browser Console (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893611&quot;&gt;#1893611&lt;/a&gt;)&lt;/li&gt;
  4956. &lt;li&gt;Nicolas fixed an issue that was preventing users to see stacktrace from WASM-issued error messages (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888645&quot;&gt;#1888645&lt;/a&gt;)&lt;/li&gt;
  4957. &lt;li&gt;Alexandre managed to tackle an issue that would prevent DevTools to be initialized when a page was using Atomics.wait , e.g. &lt;a href=&quot;http://stackblitz.com&quot;&gt;stackblitz.com&lt;/a&gt; (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1821250&quot;&gt;#1821250&lt;/a&gt;)&lt;/li&gt;
  4958. &lt;li&gt;Nicolas added the new textInput event to the Event Listener Breakpoints in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892459&quot;&gt;#1892459&lt;/a&gt;)&lt;/li&gt;
  4959. &lt;li&gt;Hubert is making good progress migrating the Debugger to CodeMirror 6 (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887649&quot;&gt;#1887649&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889277&quot;&gt;#1889277&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889283&quot;&gt;#1889283&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894379&quot;&gt;#1894379&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894659&quot;&gt;#1894659&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889276&quot;&gt;#1889276&lt;/a&gt;)&lt;/li&gt;
  4960. &lt;li&gt;Nicolas made sure that ::backdrop pseudo-element rules are visible in the Rules view for popover elements (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893644&quot;&gt;#1893644&lt;/a&gt;), as well as @keyframes rules nested in other at-rules (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894603&quot;&gt;#1894603&lt;/a&gt;)&lt;/li&gt;
  4961. &lt;li&gt;Nicolas fixed performance issue in the Inspector when displaying deeply nested rule (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1844446&quot;&gt;#1844446&lt;/a&gt;)
  4962. &lt;ul&gt;
  4963. &lt;li&gt;for example, a 15-level deep rule was taking almost &lt;b&gt;9 seconds&lt;/b&gt; to be displayed, now it’s only &lt;b&gt;a few milliseconds &lt;/b&gt;&lt;/li&gt;
  4964. &lt;/ul&gt;
  4965. &lt;/li&gt;
  4966. &lt;li&gt;Julian removed code that was forcing the Performance tab to be always enabled in the Browser Toolbox, even if the user disabled it in a previous session (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1895434&quot;&gt;#1895434&lt;/a&gt;)&lt;/li&gt;
  4967. &lt;/ul&gt;
  4968. &lt;h5&gt;WebDriver BiDi&lt;/h5&gt;
  4969. &lt;ul&gt;
  4970. &lt;li&gt;Thanks to Victoria Ajala for replacing the usage of the “isElementEnabled” selenium atom with a custom implementation which is more lightweight and maintainable (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1798464&quot;&gt;#1798464&lt;/a&gt;)&lt;/li&gt;
  4971. &lt;li&gt;Sasha implemented the permissions.setPermission command which allows clients to set permissions such as geolocation, notifications, … (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1875065&quot;&gt;#1875065&lt;/a&gt;)&lt;/li&gt;
  4972. &lt;li&gt;Sasha fixed a bug where wheel scroll actions would not use the provided modifiers (eg shift, ctrl, …) (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885542&quot;&gt;#1885542&lt;/a&gt;)&lt;/li&gt;
  4973. &lt;li&gt;Sasha improved the implementation of the browsingContext.locateNodes command to also accept Document objects as the root to locate nodes. Previously this was restricted to Elements only, but Puppeteer relies heavily on using Document for this command. (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893922&quot;&gt;#1893922&lt;/a&gt;)&lt;/li&gt;
  4974. &lt;li&gt;Henrik fixed a bug where the WebDriver classic GetElementText command would fail to capitalise text containing a underscore (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888004&quot;&gt;#1888004&lt;/a&gt;)&lt;/li&gt;
  4975. &lt;/ul&gt;
  4976. &lt;h4&gt;Migration Improvements&lt;/h4&gt;
  4977. &lt;ul&gt;
  4978. &lt;li&gt;Device Migration
  4979. &lt;ul&gt;
  4980. &lt;li&gt;We’ve completed the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885369&quot;&gt;staging&lt;/a&gt; and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885955&quot;&gt;recovery&lt;/a&gt; metabugs, and have started into the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890579&quot;&gt;management UI metabug&lt;/a&gt;. We’re also branching a bit, and some of us are working on the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890322&quot;&gt;single-file archive metabug&lt;/a&gt;.&lt;/li&gt;
  4981. &lt;/ul&gt;
  4982. &lt;/li&gt;
  4983. &lt;/ul&gt;
  4984. &lt;h4&gt;New Tab Page&lt;/h4&gt;
  4985. &lt;ul&gt;
  4986. &lt;li&gt;Newtab wallpaper experiment going out either this release (next week) or next release, depending on some telemetry bug fix uplifts.
  4987. &lt;ul&gt;
  4988. &lt;li&gt;To enable wallpapers on HNT, set the following to TRUE:
  4989. &lt;ul&gt;
  4990. &lt;li&gt;browser.newtabpage.activity-stream.newtabWallpapers.enabled&lt;/li&gt;
  4991. &lt;/ul&gt;
  4992. &lt;/li&gt;
  4993. &lt;/ul&gt;
  4994. &lt;/li&gt;
  4995. &lt;li&gt;Newtab wallpapers are getting some updates soon. A bunch more wallpapers as options, and some tweaks to the customize menu, a nested menu, to better organize the wallpapers so it’s easier to explore as we add more options.&lt;/li&gt;
  4996. &lt;/ul&gt;
  4997. &lt;h4&gt;Picture-in-Picture&lt;/h4&gt;
  4998. &lt;ul&gt;
  4999. &lt;li&gt;Thanks to Joseph Webster for adding PiP captions support for more sites with our JWPlayer wrapper (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894063&quot;&gt;bug&lt;/a&gt;)&lt;/li&gt;
  5000. &lt;/ul&gt;
  5001. &lt;h4&gt;Performance&lt;/h4&gt;
  5002. &lt;ul&gt;
  5003. &lt;li&gt;mconley &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1503809&quot;&gt;has patches up that move the favicon-fetching part of the Windows Jump List off of the main thread&lt;/a&gt;.&lt;/li&gt;
  5004. &lt;/ul&gt;
  5005. &lt;h4&gt;Screenshots&lt;/h4&gt;
  5006. &lt;ul&gt;
  5007. &lt;li&gt;Thanks to Kelly for joining the screenshots team!&lt;/li&gt;
  5008. &lt;li&gt;Kelly &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1730169&quot;&gt;added the “take screenshot”&lt;/a&gt; item to image and video elements&lt;/li&gt;
  5009. &lt;li&gt;Niklas fixed a bug where &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894740&quot;&gt;clicking the preview copy or download buttons&lt;/a&gt; before the image loaded would not actually save the image&lt;/li&gt;
  5010. &lt;li&gt;Niklas &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892125&quot;&gt;refactored the screenshots preview&lt;/a&gt; to use LitElement and moz-button&lt;/li&gt;
  5011. &lt;li&gt;Niklas fixed an issue with &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893680&quot;&gt;RTL pages with negative scrollMinX&lt;/a&gt;&lt;/li&gt;
  5012. &lt;/ul&gt;
  5013. &lt;h4&gt;Search and Navigation&lt;/h4&gt;
  5014. &lt;ul&gt;
  5015. &lt;li&gt;Clipboard suggestions have been temporarily disabled in nightly as it was possible to freeze Firefox on Windows – we’re moving the feature to asynchronous clipboard API – &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1894614&quot;&gt;1894614&lt;/a&gt;&lt;/li&gt;
  5016. &lt;li&gt;Features for an update to the urlbar UX codenamed scotchBonnet have started landing, secondary Actions have landed and dedicated search button + others are in progress. These will be enabled in nightly at some point so keep an eye out. Meta bug tracking @ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891857&quot;&gt;1891857&lt;/a&gt;&lt;/li&gt;
  5017. &lt;li&gt;Mandy fixed an issue with stripping a leading question mark when the urlbar is already in search mode @ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1837624&quot;&gt;1837624&lt;/a&gt;&lt;/li&gt;
  5018. &lt;li&gt;Marco fixed protocols being trimmed when copying urls @ ​​&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893871&quot;&gt;1893871&lt;/a&gt;
  5019. &lt;ul&gt;
  5020. &lt;li&gt;In Nightly, when https stripping is enabled, the loaded URL will gain back the trimmed protocol when the user interacts with the urlbar input field text&lt;/li&gt;
  5021. &lt;/ul&gt;
  5022. &lt;/li&gt;
  5023. &lt;li&gt;Marco changed domain inline completion, so that when permanent private browsing is active domain will be picked based on the number of bookmarks to that domain. &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893840&quot;&gt;Bug 1893840&lt;/a&gt;&lt;/li&gt;
  5024. &lt;li&gt;The new search configuration (aka search consolidation) is now rolling out in FF 126 release.
  5025. &lt;ul&gt;
  5026. &lt;li&gt;Ebay support in Poland has been added to application provided engines in the new search configuration and so will become available during FF 126 @ &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885391&quot;&gt;1885391&lt;/a&gt;&lt;/li&gt;
  5027. &lt;/ul&gt;
  5028. &lt;/li&gt;
  5029. &lt;li&gt;For Places, Daisuke removed the ReplaceFaviconData() and ReplaceFaviconDataFromDataURL() APIs, replacing their use with a new SetFaviconForPage() API accepting a data URL for the favicon. Long term this is the API we want to use, Places should never fetch from the Network, only store data.&lt;/li&gt;
  5030. &lt;/ul&gt;
  5031. &lt;h4&gt;Storybook/Reusable Components&lt;/h4&gt;
  5032. &lt;ul&gt;
  5033. &lt;li&gt;Work has started on form components with an eye for the Sidebar Settings feature (and potentially the Experiments section of preferences). Initial components: moz-checkbox, moz-radio-group and moz-fieldset&lt;/li&gt;
  5034. &lt;/ul&gt;
  5035. &lt;p&gt;The message-bar component has been fully removed from the codebase (replaced by moz-message-bar) &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1845151&quot;&gt;Bug 1845151 – Remove all code associated with the message-bar component&lt;/a&gt; – Thanks Anna!&lt;/p&gt;</description>
  5036. <pubDate>Fri, 17 May 2024 20:24:08 +0000</pubDate>
  5037. <dc:creator>Niklas Baumgardner</dc:creator>
  5038. </item>
  5039. <item>
  5040. <title>Firefox Developer Experience: Firefox DevTools Newsletter — 126</title>
  5041. <guid isPermaLink="false">https://fxdx.dev/?p=273</guid>
  5042. <link>https://fxdx.dev/firefox-devtools-newsletter-126/</link>
  5043. <description>&lt;p id=&quot;block-42a3529c-86fa-43e3-a037-427905914805&quot;&gt;&lt;em&gt;Developer Tools help developers write and debug websites on Firefox. This newsletter gives an overview of the work we’ve done as part of the Firefox 126 Nightly release cycle.&lt;/em&gt;&lt;/p&gt;
  5044.  
  5045.  
  5046.  
  5047. &lt;hr class=&quot;wp-block-separator has-alpha-channel-opacity&quot; /&gt;
  5048.  
  5049.  
  5050.  
  5051. &lt;p id=&quot;block-af771a18-b7d9-4c63-9879-0a4a0dd015b4&quot;&gt;Firefox being an open source project, we are grateful to get contributions from people outside of Mozilla, like &lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=750915&quot;&gt;Artem Manushenkov&lt;/a&gt; who added a setting that can be used to disable &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools-user/web_console/split_console/index.html&quot;&gt;the split console&lt;/a&gt; (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1731635&quot;&gt;#1731635&lt;/a&gt;).&lt;/p&gt;
  5052.  
  5053.  
  5054.  
  5055. &lt;p&gt;&lt;/p&gt;
  5056.  
  5057.  
  5058.  
  5059. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox DevTools settings panel. Along side many items, there a new &amp;quot;Enable Split Console&amp;quot; checkbox in the Web Console section&quot; class=&quot;wp-image-286&quot; height=&quot;205&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-17-at-14.36.31-600x205.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;
  5060.  
  5061.  
  5062.  
  5063. &lt;p class=&quot;has-background-secondary-background-color has-background&quot; id=&quot;block-9944af63-0ae5-4c30-a32d-8ebfda4b5527&quot;&gt;Want to help? DevTools are written in HTML, CSS and JS so any web developer can contribute! Read &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools/getting-started/README.html&quot;&gt;how to setup the work environment&lt;/a&gt; and check &lt;a href=&quot;https://codetribute.mozilla.org/projects/devtools&quot;&gt;the list of mentored issues&lt;/a&gt;&lt;/p&gt;
  5064.  
  5065.  
  5066.  
  5067. &lt;h3&gt;Performance&lt;/h3&gt;
  5068.  
  5069.  
  5070.  
  5071. &lt;p&gt;As announced in &lt;a href=&quot;https://fxdx.dev/firefox-devtools-newsletter-124/&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;https://fxdx.dev/firefox-devtools-newsletter-125/&quot;&gt;newsletters&lt;/a&gt;, we’re focusing on performance for a few months to make our tools as fast as they can be.&lt;/p&gt;
  5072.  
  5073.  
  5074.  
  5075. &lt;p&gt;A few years back, we got a report from a user telling us that modifying a property in a rule from the Inspector was very slow (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1644138&quot;&gt;#1644138&lt;/a&gt;). The stylesheet they were using was massive, with 185K lines of code and a total size of approximately 4 MB, and our machinery to replace the rule content was not handling this well. After rewriting some old Javascript code in Rust (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882964&quot;&gt;#1882964&lt;/a&gt;), the function call that was taking more than &lt;strong&gt;500ms&lt;/strong&gt; on my machine now only takes about &lt;strong&gt;10ms&lt;/strong&gt;. Yes, that’s &lt;strong&gt;50 times faster&lt;/strong&gt;! This also shows in less extreme cases: our performance tests are reporting an almost 10% improvement to display Rules in the Inspector &lt;img alt=&quot;🎉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/1f389.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/p&gt;
  5076.  
  5077.  
  5078.  
  5079. &lt;p&gt;&lt;/p&gt;
  5080.  
  5081.  
  5082.  
  5083. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Chart where x is the time and y is duration, where we can see the values going from 750ms to 700ms around April 8th&quot; class=&quot;wp-image-287&quot; height=&quot;176&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-17-at-15.23.00-600x176.png&quot; width=&quot;600&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Performance test duration going from ~750ms to ~700ms&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  5084.  
  5085.  
  5086.  
  5087. &lt;p&gt;We also came across an issue that showed a pretty bad mistake when handling rules using pseudo-elements (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886947&quot;&gt;#1886947&lt;/a&gt;), and fixing it, alongside some minor tweak &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886818&quot;&gt;(#1886818&lt;/a&gt;), got us another ~10% improvement when displaying Rules in the Inspector. &lt;/p&gt;
  5088.  
  5089.  
  5090.  
  5091. &lt;p&gt;Finally, we realized we could have some unnecessary computation when editing a rule (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888079&quot;&gt;#1888079&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888081&quot;&gt;#1888081&lt;/a&gt;), so we fixed that for an even smoother experience.&lt;/p&gt;
  5092.  
  5093.  
  5094.  
  5095. &lt;h3&gt;Custom State&lt;/h3&gt;
  5096.  
  5097.  
  5098.  
  5099. &lt;p&gt;Firefox 126 adds support for &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CustomStateSet&quot;&gt;&lt;code&gt;CustomStateSet&lt;/code&gt;&lt;/a&gt; (mostly done by an external contributor, &lt;a href=&quot;https://www.keithcirkel.co.uk/&quot;&gt;Keith Cirkel&lt;/a&gt;):&lt;/p&gt;
  5100.  
  5101.  
  5102.  
  5103. &lt;blockquote class=&quot;wp-block-quote&quot;&gt;
  5104. &lt;p style=&quot;margin-top: 0; margin-bottom: 0;&quot;&gt;The &lt;strong&gt;&lt;code&gt;CustomStateSet&lt;/code&gt;&lt;/strong&gt; interface of the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Document_Object_Model&quot;&gt;Document Object Model&lt;/a&gt; stores a list of states for an &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Web_components/Using_custom_elements#types_of_custom_element&quot;&gt;autonomous custom element&lt;/a&gt;, and allows states to be added and removed from the set.&lt;/p&gt;
  5105.  
  5106.  
  5107.  
  5108. &lt;p&gt;The interface can be used to expose the internal states of a custom element, allowing them to be used in CSS selectors by code that uses the element.&lt;/p&gt;
  5109. &lt;cite&gt;MDN&lt;/cite&gt;&lt;/blockquote&gt;
  5110.  
  5111.  
  5112.  
  5113. &lt;p&gt;The &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/CustomStateSet&quot;&gt;MDN page&lt;/a&gt; has some nice examples on how this can be used to style custom elements based on a specific state. Rules using the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/CSS/:state&quot;&gt;&lt;code&gt;:state()&lt;/code&gt;&lt;/a&gt; pseudo-class are displayed in the Inspector and its properties can be modified like any other rules.&lt;/p&gt;
  5114.  
  5115.  
  5116.  
  5117. &lt;p&gt;&lt;/p&gt;
  5118.  
  5119.  
  5120.  
  5121. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox DevTools Inspector panel. The markup view has a `&amp;lt;label-checkbox&amp;gt;` custom element selected. In the rules view, we can see a few rules using `:state(checked)`, which are using to style the element&quot; class=&quot;wp-image-285&quot; height=&quot;242&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-17-at-14.24.16-600x242.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;
  5122.  
  5123.  
  5124.  
  5125. &lt;p&gt;You can quickly see which states are in the set when logging a CustomStateSet instance in the console (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1862896&quot;&gt;#1862896&lt;/a&gt;).&lt;/p&gt;
  5126.  
  5127.  
  5128.  
  5129. &lt;p&gt;&lt;/p&gt;
  5130.  
  5131.  
  5132.  
  5133. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox DevTools Console with the following code being executed: `document.querySelector(&amp;quot;labeled-checkbox&amp;quot;)._internals.states`  The results shows an object whose header is`CustomStateSet [ &amp;quot;checked&amp;quot; ]`. The object is expanded, and we can see that it has a `&amp;lt;entries&amp;gt;` node, which contains one item, which is `&amp;quot;checked&amp;quot;`&quot; class=&quot;wp-image-284&quot; height=&quot;123&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-17-at-14.24.40-600x123.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;
  5134.  
  5135.  
  5136.  
  5137. &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
  5138.  
  5139.  
  5140.  
  5141. &lt;h3&gt;And more…&lt;/h3&gt;
  5142.  
  5143.  
  5144.  
  5145. &lt;ul&gt;
  5146. &lt;li&gt;We’re currently working on migrating our CodeMirror usage to &lt;a href=&quot;https://codemirror.net/&quot;&gt;CodeMirror 6&lt;/a&gt; (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1773246&quot;&gt;#1773246&lt;/a&gt;), which we hope will allow for performance improvement in the Debugger. This is a pretty big task and we’ll report progress in the next newsletters!&lt;/li&gt;
  5147.  
  5148.  
  5149.  
  5150. &lt;li&gt;We added support for &lt;a href=&quot;https://github.com/WebAssembly/exception-handling/&quot;&gt;Wasm exception handling proposal&lt;/a&gt; in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885589&quot;&gt;#1885589&lt;/a&gt;)&lt;/li&gt;
  5151.  
  5152.  
  5153.  
  5154. &lt;li&gt;We’re now showing the color swatch when a CSS custom property is used in color definition (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1718894&quot;&gt;#1718894&lt;/a&gt;)&lt;/li&gt;
  5155.  
  5156.  
  5157.  
  5158. &lt;li&gt;In order to enable debugging Firefox on Android devices, we maintain an ADB extension,  we finally released a new version of the DevTools ADB extension that is used by &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools-user/about_colon_debugging/index.html&quot;&gt;about:debugging&lt;/a&gt;. The extension is now shipping with notarized binaries and can be used on recent macOS versions (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890843&quot;&gt;#1890843&lt;/a&gt;)&lt;/li&gt;
  5159. &lt;/ul&gt;
  5160.  
  5161.  
  5162.  
  5163. &lt;p class=&quot;has-text-align-center has-background-secondary-background-color has-background&quot;&gt;&lt;strong&gt;That’s all folks, see you in June for the 127 newsletter!&lt;/strong&gt;&lt;/p&gt;</description>
  5164. <pubDate>Fri, 17 May 2024 14:31:51 +0000</pubDate>
  5165. <dc:creator>Nicolas Chevobbe</dc:creator>
  5166. </item>
  5167. <item>
  5168. <title>Mozilla Thunderbird: The New Thunderbird Website Has Hatched</title>
  5169. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1756</guid>
  5170. <link>https://blog.thunderbird.net/2024/05/the-new-thunderbird-website-has-hatched/</link>
  5171. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;321&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/The-New-Thunderbird.net_.png&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  5172. &lt;p&gt;&lt;a href=&quot;http://Thunderbird.net&quot;&gt;Thunderbird.net&lt;/a&gt; has a new look, but the improvements go beyond that. We wanted a website where you could quickly find the information you need, from support to contribution, in clear and easy to understand text. While staying grateful to the many amazing contributors who have helped build and maintain our website over the past 20 years, we wanted to refresh our information along with our look. Finally, we wanted to partner with Freehive’s Ryan Gorley for their sleek, cohesive design vision and commitment to open source.&lt;/p&gt;
  5173.  
  5174.  
  5175.  
  5176. &lt;p&gt;We wanted a website that’s ready for the next 20 years of Thunderbird, including the upcoming arrival of Thunderbird on mobile devices. But you don’t have to wait for that future to experience the new website now.&lt;/p&gt;
  5177.  
  5178.  
  5179.  
  5180. &lt;h3&gt;The New Thunderbird.net&lt;/h3&gt;
  5181.  
  5182.  
  5183.  
  5184. &lt;p&gt;The new, more organized framework starts with the refreshed Home page. All the great content you’ve relied on is still here, just easier to find! The expanded navigation menu makes it almost effortless to find the information and resources you need.&lt;/p&gt;
  5185.  
  5186.  
  5187.  
  5188. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteResources.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1757&quot; height=&quot;337&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteResources-600x337.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5189.  
  5190.  
  5191.  
  5192. &lt;p&gt;&lt;/p&gt;
  5193.  
  5194.  
  5195.  
  5196. &lt;p&gt;Resources provide a quick link to all the news and updates in the Thunderbird Blog and the unmatched community assistance in Mozilla Support, aka SUMO. Release notes are linked from the &lt;a href=&quot;https://www.thunderbird.net/thunderbird/all/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;download and other options page&lt;/a&gt;. That page has also been simplified while still maintaining all the usual options. It’s now the main way to get links to download Beta and Daily, and in the future any other apps or versions we produce.&lt;/p&gt;
  5197.  
  5198.  
  5199.  
  5200. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteDownloads.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1758&quot; height=&quot;414&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteDownloads-600x414.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5201.  
  5202.  
  5203.  
  5204. &lt;p&gt;&lt;/p&gt;
  5205.  
  5206.  
  5207.  
  5208. &lt;p&gt;The About section introduces the values and the people behind the Thunderbird project, which includes our growing MZLA team. Our contact page connects you with the right community resources or team member, no matter your question or concern. And if you’d like to join us, or just see what positions are open, you’ll find a link to our career page here.&lt;/p&gt;
  5209.  
  5210.  
  5211.  
  5212. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/TBCommunity.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1759&quot; height=&quot;200&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/TBCommunity-600x200.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5213.  
  5214.  
  5215.  
  5216. &lt;p&gt;&lt;/p&gt;
  5217.  
  5218.  
  5219.  
  5220. &lt;p&gt;Whether it’s giving your time and skill or making a financial donation, it’s easy to discover all the ways to contribute to the project. Our new and improved Participate page shows how to get involved, from coding and testing to everyday advocacy. No matter your talents and experience, everyone can contribute!&lt;/p&gt;
  5221.  
  5222.  
  5223.  
  5224. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteCareer.gif&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1760&quot; height=&quot;410&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/TBWebsiteCareer-600x410.gif&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5225.  
  5226.  
  5227.  
  5228. &lt;p&gt;&lt;/p&gt;
  5229.  
  5230.  
  5231.  
  5232. &lt;p&gt;If you want to download the latest stable release, or to donate and help bring Thunderbird everywhere, those options are still an easy click from the navigation menu.&lt;/p&gt;
  5233.  
  5234.  
  5235.  
  5236. &lt;h3&gt;Your Feedback&lt;/h3&gt;
  5237.  
  5238.  
  5239.  
  5240. &lt;p&gt;We’d love to have your thoughts and feedback on the new website. Is there a new and improved section you love? Is there something we missed? Let us know in the comments below. Want to see all the changes we made? Check &lt;a href=&quot;https://github.com/thunderbird/thunderbird-website/commits/master/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;the repository&lt;/a&gt; for the detailed commit log.&lt;/p&gt;
  5241. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/the-new-thunderbird-website-has-hatched/&quot;&gt;The New Thunderbird Website Has Hatched&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  5242. <pubDate>Fri, 17 May 2024 11:00:00 +0000</pubDate>
  5243. <dc:creator>Monica Ayhens-Madon</dc:creator>
  5244. </item>
  5245. <item>
  5246. <title>The Rust Programming Language Blog: Faster linking times on nightly on Linux using `rust-lld`</title>
  5247. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html</guid>
  5248. <link>https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html</link>
  5249. <description>&lt;p&gt;TL;DR: rustc will use &lt;code&gt;rust-lld&lt;/code&gt; by default on &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt; on nightly to
  5250. significantly reduce linking times.&lt;/p&gt;
  5251. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html#some-context&quot; id=&quot;some-context&quot;&gt;&lt;/a&gt;Some context&lt;/h4&gt;
  5252. &lt;p&gt;Linking time is often a big part of compilation time. When rustc needs to build a binary or a shared
  5253. library, it will usually call the default linker installed on the system to do that (this can be
  5254. changed on the command-line or by the target for which the code is compiled).&lt;/p&gt;
  5255. &lt;p&gt;The linkers do an important job, with concerns about stability, backwards-compatibility and so on.
  5256. For these and other reasons, on the most popular operating systems they usually are older programs,
  5257. designed when computers only had a single core. So, they usually tend to be slow on a modern
  5258. machine. For example, when building ripgrep 13 in debug mode on Linux, roughly half of the time is
  5259. actually spent in the linker.&lt;/p&gt;
  5260. &lt;p&gt;There are different linkers, however, and the usual advice to improve linking times is to use one of
  5261. these newer and faster linkers, like LLVM's &lt;a href=&quot;https://lld.llvm.org/&quot;&gt;&lt;code&gt;lld&lt;/code&gt;&lt;/a&gt; or Rui Ueyama's
  5262. &lt;a href=&quot;https://github.com/rui314/mold&quot;&gt;&lt;code&gt;mold&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
  5263. &lt;p&gt;Some of Rust's wasm and aarch64 targets already use &lt;code&gt;lld&lt;/code&gt; by default. When using rustup, rustc ships
  5264. with a version of &lt;code&gt;lld&lt;/code&gt; for this purpose. When CI builds LLVM to use in the compiler, it also builds
  5265. the linker and packages it. It's referred to as &lt;code&gt;rust-lld&lt;/code&gt; to avoid colliding with any &lt;code&gt;lld&lt;/code&gt; already
  5266. installed on the user's machine.&lt;/p&gt;
  5267. &lt;p&gt;Since improvements to linking times are substantial, it would be a good default to use in the most
  5268. popular targets. This has been discussed for a long time, for example in issues
  5269. &lt;a href=&quot;https://github.com/rust-lang/rust/issues/39915&quot;&gt;#39915&lt;/a&gt; and
  5270. &lt;a href=&quot;https://github.com/rust-lang/rust/issues/71515&quot;&gt;#71515&lt;/a&gt;, and rustc already offers nightly flags to
  5271. use &lt;code&gt;rust-lld&lt;/code&gt;.&lt;/p&gt;
  5272. &lt;p&gt;By now, we believe we've done all the internal testing that we could, on CI, crater, and our
  5273. benchmarking infrastructure. We would now like to expand testing and gather real-world feedback and
  5274. use-cases. Therefore, we will enable &lt;code&gt;rust-lld&lt;/code&gt; to be the linker used by default on
  5275. &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt; for nightly builds.&lt;/p&gt;
  5276. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html#benefits&quot; id=&quot;benefits&quot;&gt;&lt;/a&gt;Benefits&lt;/h4&gt;
  5277. &lt;p&gt;While this also enables the compiler to use more linker features in the future, the most immediate
  5278. benefit is much improved linking times.&lt;/p&gt;
  5279. &lt;p&gt;Here are more details from the ripgrep example mentioned above: linking is reduced 7x, resulting in
  5280. a 40% reduction in end-to-end compilation times.&lt;/p&gt;
  5281. &lt;p&gt;&lt;img alt=&quot;Before/after comparison of a ripgrep debug build&quot; src=&quot;https://blog.rust-lang.org/../images/2024-05-17-enabling-rust-lld-on-linux/ripgrep-comparison.png&quot; /&gt;&lt;/p&gt;
  5282. &lt;p&gt;Most binaries should see some improvements here, but it's especially significant with e.g. bigger
  5283. binaries, or when involving debuginfo. These usually see bottlenecks in the linker.&lt;/p&gt;
  5284. &lt;p&gt;Here's &lt;a href=&quot;https://perf.rust-lang.org/compare.html?start=b3e117044c7f707293edc040edb93e7ec5f7040a&amp;amp;end=baed03c51a68376c1789cc373581eea0daf89967&amp;amp;stat=instructions%3Au&amp;amp;tab=compile&quot;&gt;a
  5285. link&lt;/a&gt;
  5286. to the complete results from our benchmarks.&lt;/p&gt;
  5287. &lt;p&gt;If testing goes well, we can then stabilize using this faster linker by default for
  5288. &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt; users, before maybe looking at other targets.&lt;/p&gt;
  5289. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html#possible-drawbacks&quot; id=&quot;possible-drawbacks&quot;&gt;&lt;/a&gt;Possible drawbacks&lt;/h4&gt;
  5290. &lt;p&gt;From our prior testing, we don't really expect issues to happen in practice. It is a drop-in
  5291. replacement for the vast majority of cases, but &lt;code&gt;lld&lt;/code&gt; is not &lt;em&gt;bug-for-bug&lt;/em&gt; compatible with GNU ld.&lt;/p&gt;
  5292. &lt;p&gt;In any case, using &lt;code&gt;rust-lld&lt;/code&gt; can be disabled if any problem occurs: use the &lt;code&gt;-Z linker-features=-lld&lt;/code&gt; flag to revert to using the system's default linker.&lt;/p&gt;
  5293. &lt;p&gt;Some crates somehow relying on these differences could need additional link args. For example, we
  5294. saw &amp;lt;20 crates in the crater run failing to link because of a different default about &lt;a href=&quot;https://lld.llvm.org/ELF/start-stop-gc&quot;&gt;encapsulation
  5295. symbols&lt;/a&gt;: these could require
  5296. &lt;code&gt;-Clink-arg=-Wl,-z,nostart-stop-gc&lt;/code&gt; to match the legacy GNU ld behavior.&lt;/p&gt;
  5297. &lt;p&gt;Some of the big gains in performance come from parallelism, which could be undesirable in
  5298. resource-constrained environments.&lt;/p&gt;
  5299. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/17/enabling-rust-lld-on-linux.html#summary&quot; id=&quot;summary&quot;&gt;&lt;/a&gt;Summary&lt;/h4&gt;
  5300. &lt;p&gt;rustc will use &lt;code&gt;rust-lld&lt;/code&gt; on &lt;code&gt;x86_64-unknown-linux-gnu&lt;/code&gt; nightlies, for much improved linking times,
  5301. starting in tomorrow's rustup nightly (&lt;code&gt;nightly-2024-05-18&lt;/code&gt;).
  5302. Let us know if you encounter problems, by &lt;a href=&quot;https://github.com/rust-lang/rust/issues/new/choose&quot;&gt;opening an
  5303. issue&lt;/a&gt; on GitHub.&lt;/p&gt;
  5304. &lt;p&gt;If that happens, you can revert to the default linker with the &lt;code&gt;-Z linker-features=-lld&lt;/code&gt; flag.
  5305. Either by adding it to the usual &lt;code&gt;RUSTFLAGS&lt;/code&gt; environment variable, or to a project's
  5306. &lt;a href=&quot;https://doc.rust-lang.org/cargo/reference/config.html&quot;&gt;&lt;code&gt;.cargo/config.toml&lt;/code&gt;&lt;/a&gt; configuration file,
  5307. like so:&lt;/p&gt;
  5308. &lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[target.x86_64-unknown-linux-gnu]
  5309. rustflags = [&quot;-Zlinker-features=-lld&quot;]
  5310. &lt;/code&gt;&lt;/pre&gt;</description>
  5311. <pubDate>Fri, 17 May 2024 00:00:00 +0000</pubDate>
  5312. <dc:creator>Rémy Rakic</dc:creator>
  5313. </item>
  5314. <item>
  5315. <title>Support.Mozilla.Org: Kitsune Release Notes – May 15, 2024</title>
  5316. <guid isPermaLink="false">https://blog.mozilla.org/sumo/?p=4123</guid>
  5317. <link>https://blog.mozilla.org/sumo/2024/05/16/kitsune-release-notes-may-15-2024/</link>
  5318. <description>&lt;p&gt;&lt;i&gt;See full platform release notes on &lt;/i&gt;&lt;a href=&quot;https://github.com/mozilla/kitsune/releases&quot;&gt;&lt;i&gt;GitHub&lt;/i&gt;&lt;/a&gt;&lt;i&gt;. &lt;/i&gt;&lt;/p&gt;
  5319. &lt;h3&gt;&lt;b&gt;New&lt;/b&gt;&lt;b&gt;&lt;br /&gt;
  5320. &lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;/h3&gt;
  5321. &lt;p&gt;&lt;i&gt;Description of new features, how it benefits the user, and any relevant details.&lt;/i&gt;&lt;/p&gt;
  5322. &lt;ul&gt;
  5323. &lt;li&gt;&lt;b&gt;Group messaging&lt;/b&gt;: &lt;i&gt;Staff&lt;/i&gt; group members can send messages to groups as well as individual users.&lt;/li&gt;
  5324. &lt;li&gt;&lt;b&gt;&lt;i&gt;Staff&lt;/i&gt;&lt;/b&gt;&lt;b&gt; group permissions&lt;/b&gt;: We are now using a user’s membership in the &lt;i&gt;Staff &lt;/i&gt;group rather than the user’s &lt;i&gt;is_staff &lt;/i&gt;attribute to determine elevated privileges like being able to send messages to groups or seeing restricted KB articles&lt;/li&gt;
  5325. &lt;li&gt;&lt;b&gt;In-product link on article page&lt;/b&gt;: You’ll now see an indicator on the KB article page for articles that are the target of in-product links. This is visible to users in the &lt;i&gt;Staff&lt;/i&gt; group.&lt;/li&gt;
  5326. &lt;/ul&gt;
  5327. &lt;p&gt;&lt;b&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-43-56-Tab-context-menu-in-Firefox-close-multiple-tabs-Firefox-Help.png&quot;&gt;&lt;img alt=&quot;Screenshot of the in-product indicator in a KB article&quot; class=&quot;size-full wp-image-4124 aligncenter&quot; height=&quot;135&quot; src=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-43-56-Tab-context-menu-in-Firefox-close-multiple-tabs-Firefox-Help.png&quot; width=&quot;215&quot; /&gt;&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
  5328. &lt;h3&gt;&lt;b&gt;Changed&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
  5329. &lt;i&gt;&lt;/i&gt;&lt;/h3&gt;
  5330. &lt;p&gt;&lt;i&gt;Explanation of the enhancements or changes to existing features, including performance improvements, user interface changes, etc.&lt;/i&gt;&lt;/p&gt;
  5331. &lt;ul&gt;
  5332. &lt;li&gt;&lt;b&gt;Conversion from GA3 to GA4 data API for gathering Google Analytics data&lt;/b&gt;: We recently migrated SUMO’s Google Analytics (GA) from GA3 to GA4. This has temporarily impacted our access to historical data on the &lt;a href=&quot;https://support.mozilla.org/en-US/contributors&quot;&gt;SUMO KB Dashboard&lt;/a&gt;. Data will now be pulled from GA4, which only has data since April 10, 2024. The number of “Visits” for the “Last 90 days” and “Last year” will only reflect the data gathered since this date. Stay tuned for additional dashboard updates, including the inclusion of GA3 data.&lt;/li&gt;
  5333. &lt;/ul&gt;
  5334. &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-45-39-Knowledge-Base-Dashboard-Mozilla-Support.png&quot;&gt;&lt;img alt=&quot;Screenshot of the Knowledge Base Dashboard in SUMO&quot; class=&quot;alignnone size-full wp-image-4125&quot; height=&quot;660&quot; src=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-45-39-Knowledge-Base-Dashboard-Mozilla-Support.png&quot; width=&quot;1090&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  5335. &lt;ul&gt;
  5336. &lt;li&gt;&lt;b&gt;Improved tabbed portion of the localization dashboard&lt;/b&gt;: Example &lt;a href=&quot;https://support.allizom.org/de/localization&quot;&gt;https://support.allizom.org/de/localization&lt;/a&gt;&lt;/li&gt;
  5337. &lt;li&gt;&lt;b&gt;Improved inbox and outbox message pages&lt;/b&gt;&lt;/li&gt;
  5338. &lt;/ul&gt;
  5339. &lt;p&gt;&lt;a href=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-48-40-Inbox-Mozilla-Support.png&quot;&gt;&lt;img alt=&quot;Screenshot of how the new SUMO inbox looks like&quot; class=&quot;alignnone size-full wp-image-4126&quot; height=&quot;290&quot; src=&quot;http://blog.mozilla.org/sumo/files/2024/05/Screenshot-2024-05-16-at-15-48-40-Inbox-Mozilla-Support.png&quot; width=&quot;747&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  5340. &lt;ul&gt;
  5341. &lt;li&gt;&lt;b&gt;Removed New Contributors link from the Contributor Tools&lt;/b&gt;: Discussions section of the top main menu (&lt;a href=&quot;https://github.com/mozilla/sumo/issues/1746&quot;&gt;#1746&lt;/a&gt;)&lt;/li&gt;
  5342. &lt;/ul&gt;
  5343. &lt;h3&gt;&lt;b&gt;Fixed &lt;/b&gt;&lt;b&gt;&lt;br /&gt;
  5344. &lt;/b&gt;&lt;i&gt;&lt;/i&gt;&lt;/h3&gt;
  5345. &lt;p&gt;&lt;i&gt;Brief description of the bug and how it was fixed, possibly including affected components.&lt;/i&gt;&lt;/p&gt;
  5346. &lt;p&gt;–&lt;/p&gt;
  5347. &lt;p&gt; &lt;/p&gt;</description>
  5348. <pubDate>Thu, 16 May 2024 09:01:56 +0000</pubDate>
  5349. <dc:creator>Rizki Kelimutu</dc:creator>
  5350. </item>
  5351. <item>
  5352. <title>Spidermonkey Development Blog: SpiderMonkey Newsletter (Firefox 126-127)</title>
  5353. <guid isPermaLink="false">https://spidermonkey.dev/blog/2024/05/15/newsletter-firefox-126-127</guid>
  5354. <link>https://spidermonkey.dev/blog/2024/05/15/newsletter-firefox-126-127.html</link>
  5355. <description>&lt;p&gt;Hello and welcome to our newest newsletter. As the northern hemisphere warms and the southern hemisphere cools, we write to talk about what’s happened in the world of SpiderMonkey in the Firefox 126-127 timeline.&lt;/p&gt;
  5356.  
  5357. &lt;h3 id=&quot;-performance&quot;&gt;🚀 Performance&lt;/h3&gt;
  5358.  
  5359. &lt;p&gt;Though Speedometer 3 has shipped, we cannot allow ourselves get lax with our performance. It’s important that SpiderMonkey be fast so Firefox can be fast!&lt;/p&gt;
  5360.  
  5361. &lt;ul&gt;
  5362.  &lt;li&gt;Arai added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1862273&quot;&gt;special bytecode for checking &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;typeof val == &quot;type&quot;&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  5363.  &lt;li&gt;Justin analyzed our caches for atoms, which turn out to be a reasonably hot path, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1879143&quot;&gt;and discovered that he could improve them&lt;/a&gt;. Our &lt;a href=&quot;https://treeherder.mozilla.org/perfherder/alerts?id=41941&quot;&gt;perf-alerts noticed some interesting speedups up to 8% on some tests&lt;/a&gt;!&lt;/li&gt;
  5364.  &lt;li&gt;Jan has been playing with &lt;a href=&quot;https://en.wikipedia.org/wiki/Trampoline_(computing)&quot;&gt;trampolines&lt;/a&gt;. Changing &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884360&quot;&gt;how we handle the comparator function to Array.prototype.sort&lt;/a&gt; improved performance, particularly at lower tiers, up to 4x!&lt;/li&gt;
  5365.  &lt;li&gt;Alex &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1881995&quot;&gt;added a new string type&lt;/a&gt; which holds a pointer to a corresponding atom, allowing cheap atom lookup.&lt;/li&gt;
  5366.  &lt;li&gt;André has &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889091&quot;&gt;worked on&lt;/a&gt; &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890513&quot;&gt;improving calls&lt;/a&gt; to native functions with variadic parameters.&lt;/li&gt;
  5367. &lt;/ul&gt;
  5368.  
  5369. &lt;h3 id=&quot;-contributor-spotlight&quot;&gt;🔦 Contributor Spotlight&lt;/h3&gt;
  5370.  
  5371. &lt;p&gt;This newsletter, we’d like to Spotlight Jonatan Klemets. In his own words,&lt;/p&gt;
  5372.  
  5373. &lt;blockquote&gt;
  5374.  &lt;p&gt;A full-stack web developer by day and a low-level enthusiast by night who likes tinkering with compilers, emulators, and other low-level projects&lt;/p&gt;
  5375. &lt;/blockquote&gt;
  5376.  
  5377. &lt;p&gt;Jonatan has been helping us for a few years now and has been the main force of late driving forwards our work on the &lt;a href=&quot;https://github.com/tc39/proposal-import-attributes&quot;&gt;Import Attributes proposal&lt;/a&gt;. Pushing this proposal forward has required jumping into many different parts of Firefox, and Jonatan has done really well, and we are very thankful for the effort he has put into working on the project.&lt;/p&gt;
  5378.  
  5379. &lt;h3 id=&quot;-wasm&quot;&gt;⚡ Wasm&lt;/h3&gt;
  5380.  
  5381. &lt;ul&gt;
  5382.  &lt;li&gt;Yury has been working on the &lt;a href=&quot;https://github.com/WebAssembly/js-promise-integration/blob/main/proposals/js-promise-integration/Overview.md&quot;&gt;JavaScript-Promise Integration Proposal&lt;/a&gt;, which when it’s all finished, will allow easier interop between Wasm and JS Promises.&lt;/li&gt;
  5383.  &lt;li&gt;Ben has done some work on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1863609&quot;&gt;optimizing out superfluous casts&lt;/a&gt;&lt;/li&gt;
  5384.  &lt;li&gt;Julien has shipped the&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1837683&quot;&gt; Wasm branch hinting proposal&lt;/a&gt;.&lt;/li&gt;
  5385. &lt;/ul&gt;
  5386.  
  5387. &lt;h3 id=&quot;️-web-features-work&quot;&gt;🕸️ Web Features Work&lt;/h3&gt;
  5388.  
  5389. &lt;ul&gt;
  5390.  &lt;li&gt;Dan &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1805038&quot;&gt;has shipped&lt;/a&gt; the &lt;a href=&quot;https://github.com/tc39/proposal-set-methods&quot;&gt;new Set methods proposal&lt;/a&gt;&lt;/li&gt;
  5391. &lt;/ul&gt;
  5392.  
  5393. &lt;h3 id=&quot;️--other-work&quot;&gt;👷🏽‍♀️  Other Work&lt;/h3&gt;
  5394.  
  5395. &lt;ul&gt;
  5396.  &lt;li&gt;&lt;a href=&quot;https://www.mozilla.org/en-US/security/advisories/mfsa2024-15/&quot;&gt;We were Pwned&lt;/a&gt; by Manfred Paul at Pwn2Own 2024, but &lt;a href=&quot;https://blog.mozilla.org/security/2024/04/04/rapidly-leveling-up-firefox-security/&quot;&gt;fixed builds shipped in 21 hours&lt;/a&gt;, &lt;a href=&quot;https://twitter.com/thezdi/status/1771296997787443370&quot;&gt;first of the vendors at the competition&lt;/a&gt;.&lt;/li&gt;
  5397. &lt;/ul&gt;</description>
  5398. <pubDate>Wed, 15 May 2024 17:00:00 +0000</pubDate>
  5399. </item>
  5400. <item>
  5401. <title>Mozilla Addons Blog: Manifest V3 Updates</title>
  5402. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9173</guid>
  5403. <link>https://blog.mozilla.org/addons/2024/05/14/manifest-v3-updates/</link>
  5404. <description>&lt;p&gt;Greetings add-on developers! We wanted to provide an update on some exciting engineering work planned for the next few Firefox releases in support of Manifest V3. The team continues to implement API changes that were previously defined in agreement with other browser vendors that participate in the WECG, ahead of Chrome’s MV2 deprecation. Another top area of focus has been around addressing some developer and end user friction related to MV3 host permissions.&lt;/p&gt;
  5405. &lt;p&gt;The table below details some MV3 changes that are going to be available in the Firefox release channel soon.&lt;/p&gt;
  5406. &lt;table class=&quot;data-table&quot; style=&quot;height: 335px;&quot; width=&quot;679&quot;&gt;
  5407. &lt;thead&gt;
  5408. &lt;tr&gt;
  5409. &lt;th&gt;Version&lt;/th&gt;
  5410. &lt;th&gt;Manifest V3 engineering updates&lt;/th&gt;
  5411. &lt;th&gt;Nightly&lt;/th&gt;
  5412. &lt;th&gt;Beta&lt;/th&gt;
  5413. &lt;th&gt;Release&lt;/th&gt;
  5414. &lt;/tr&gt;
  5415. &lt;/thead&gt;
  5416. &lt;tbody&gt;
  5417. &lt;tr&gt;
  5418. &lt;td&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/126#changes_for_add-on_developers&quot;&gt;126&lt;/a&gt;&lt;/td&gt;
  5419. &lt;td&gt;Chrome extension porting API enhancements:&lt;p&gt;&lt;/p&gt;
  5420. &lt;ul&gt;
  5421. &lt;li&gt;The “webRequestAuthProvider” permission is now supported to provide compatibility with Chrome for requesting permission for&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/webRequest/onAuthRequired&quot;&gt; webRequest.onAuthRequired&lt;/a&gt; in Manifest V3&lt;/li&gt;
  5422. &lt;li&gt;The&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_page&quot;&gt; options_page manifest key&lt;/a&gt; is provided as an alias of the&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui&quot;&gt; options_ui&lt;/a&gt; key to offer better extension compatibility with Chrome&lt;/li&gt;
  5423. &lt;/ul&gt;
  5424. &lt;/td&gt;
  5425. &lt;td style=&quot;text-align: center;&quot;&gt;3/18&lt;/td&gt;
  5426. &lt;td style=&quot;text-align: left;&quot;&gt;4/15&lt;/td&gt;
  5427. &lt;td style=&quot;text-align: center;&quot;&gt;5/14&lt;/td&gt;
  5428. &lt;/tr&gt;
  5429. &lt;tr&gt;
  5430. &lt;td&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Mozilla/Firefox/Releases/127#changes_for_add-on_developers&quot;&gt;127&lt;/a&gt;&lt;/td&gt;
  5431. &lt;td&gt;Updating MV3 host permissions on both desktop and mobile.&lt;/td&gt;
  5432. &lt;td style=&quot;text-align: center;&quot;&gt;4/15&lt;/td&gt;
  5433. &lt;td style=&quot;text-align: center;&quot;&gt;5/13&lt;/td&gt;
  5434. &lt;td style=&quot;text-align: center;&quot;&gt;6/11&lt;/td&gt;
  5435. &lt;/tr&gt;
  5436. &lt;tr&gt;
  5437. &lt;td&gt;128&lt;/td&gt;
  5438. &lt;td&gt;Implementing the UI necessary to control optional permissions and supporting host permissions on Android that landed in 127.&lt;/td&gt;
  5439. &lt;td style=&quot;text-align: center;&quot;&gt;5/13&lt;/td&gt;
  5440. &lt;td style=&quot;text-align: center;&quot;&gt;6/10&lt;/td&gt;
  5441. &lt;td style=&quot;text-align: center;&quot;&gt;7/9&lt;/td&gt;
  5442. &lt;/tr&gt;
  5443. &lt;/tbody&gt;
  5444. &lt;/table&gt;
  5445. &lt;p&gt;The Chrome extension porting API work that will land beginning in 126 will help ensure a higher level of compatibility and reduce friction for add-on developers supporting multiple browsers.&lt;/p&gt;
  5446. &lt;p&gt;Beginning with Firefox 127, users will be prompted to grant MV3 host permissions as part of the install flow (similar to MV2 extensions). We’re excited to deliver this work as based on feedback from Firefox users and extension developers, this has been a major hurdle for MV3 extensions in Firefox.&lt;/p&gt;
  5447. &lt;p&gt;However, unlike the host permission granted at install time for MV2 extensions, MV3 host permissions can still be revoked by the user at any time from the about:addons page on Firefox Desktop. Given that, MV3 extensions should still leverage the permissions API to ensure that the permissions required are already granted.&lt;/p&gt;
  5448. &lt;p&gt;Lastly, in Firefox for Android 128, the Add-ons Manager will include a new permissions UI as shown below — this new UI will allow users to do the same as above on Firefox for Android with regards to host permissions, while also granting or revoking other optional permissions on MV2 and MV3 extensions.&lt;/p&gt;
  5449. &lt;p&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;                 &lt;/span&gt; &lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-9177&quot; height=&quot;422&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/05/Screenshot-from-2024-05-15-12-35-36-580x930.png&quot; width=&quot;279&quot; /&gt;             &lt;img alt=&quot;&quot; class=&quot;alignnone wp-image-9176&quot; height=&quot;449&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/05/Screenshot-from-2024-05-15-11-50-56-580x930.png&quot; width=&quot;280&quot; /&gt;&lt;/p&gt;
  5450. &lt;p&gt;We also wanted to take this opportunity to address a couple common questions we’ve been seeing in the community, specifically around the webRequest API and MV2:&lt;/p&gt;
  5451. &lt;ol&gt;
  5452. &lt;li&gt;The webRequest API is not on a deprecation path in Firefox&lt;/li&gt;
  5453. &lt;li&gt;Mozilla has no current plans to deprecate MV2 as mentioned in our &lt;a href=&quot;https://blog.mozilla.org/addons/2024/03/13/manifest-v3-manifest-v2-march-2024-update/&quot;&gt;previous MV3 update&lt;/a&gt;&lt;/li&gt;
  5454. &lt;/ol&gt;
  5455. &lt;p&gt;For more information on adopting MV3, please see our &lt;a href=&quot;https://extensionworkshop.com/documentation/develop/manifest-v3-migration-guide/&quot;&gt;migration guide&lt;/a&gt;. Another great resource is the FOSDEM presentation a couple Mozilla engineers delivered recently, &lt;a href=&quot;https://fosdem.org/2024/schedule/event/fosdem-2024-2412-firefox-android-and-cross-browser-webextensions-in-2024/&quot;&gt;Firefox, Android, and Cross-browser WebExtensions in 2024&lt;/a&gt;.&lt;/p&gt;
  5456. &lt;p&gt;If you have questions or feedback on our Manifest V3 plans we would love to hear from you in the comments section below or if you prefer, drop us an &lt;a href=&quot;mailto:mozilla-add-ons-community@mozilla.com&quot;&gt;email&lt;/a&gt;.&lt;/p&gt;
  5457. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/05/14/manifest-v3-updates/&quot;&gt;Manifest V3 Updates&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  5458. <pubDate>Tue, 14 May 2024 22:41:23 +0000</pubDate>
  5459. <dc:creator>Edward Sullivan</dc:creator>
  5460. </item>
  5461. <item>
  5462. <title>Firefox Developer Experience: Firefox WebDriver Newsletter — 126</title>
  5463. <guid isPermaLink="false">https://fxdx.dev/?p=283</guid>
  5464. <link>https://fxdx.dev/firefox-webdriver-newsletter-126/</link>
  5465. <description>&lt;p&gt;&lt;em&gt;WebDriver is a remote control interface that enables introspection and control of user agents. As such it&lt;/em&gt; &lt;em&gt;can&lt;/em&gt; &lt;em&gt;help developers to verify that their websites are working and performing well with all major browsers. The protocol is standardized by the &lt;a href=&quot;https://www.w3.org/&quot;&gt;W3C&lt;/a&gt; and consists of two separate specifications: &lt;a href=&quot;https://w3c.github.io/webdriver/&quot;&gt;WebDriver classic&lt;/a&gt; (HTTP) and the new &lt;a href=&quot;https://w3c.github.io/webdriver-bidi/&quot;&gt;WebDriver BiDi &lt;/a&gt;(Bi-Directional).&lt;/em&gt;&lt;/p&gt;
  5466.  
  5467.  
  5468.  
  5469. &lt;p id=&quot;block-657c8643-6b93-4546-8626-3d7c3976c217&quot;&gt;&lt;em&gt;This newsletter gives an overview of the work we’ve done as part of the Firefox 126 release cycle&lt;/em&gt;.&lt;/p&gt;
  5470.  
  5471.  
  5472.  
  5473. &lt;h3&gt;Contributions&lt;/h3&gt;
  5474.  
  5475.  
  5476.  
  5477. &lt;p id=&quot;block-9278fa20-63dc-4975-a72b-e3ba73b202a4&quot;&gt;With Firefox being an open source project, we are grateful to get contributions from people outside of Mozilla:&lt;/p&gt;
  5478.  
  5479.  
  5480.  
  5481. &lt;ul&gt;
  5482. &lt;li&gt;Gravyant &lt;a href=&quot;https://bugzil.la/1838152&quot;&gt;improved the error message for the &lt;code&gt;session.new&lt;/code&gt; command&lt;/a&gt; when no capabilities are specified.&lt;/li&gt;
  5483. &lt;/ul&gt;
  5484.  
  5485.  
  5486.  
  5487. &lt;p id=&quot;block-f6e2b9b0-63b6-4a4b-aeea-cffbde1019dd&quot;&gt;WebDriver code is written in JavaScript, Python, and Rust so any web developer can contribute! Read &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools/getting-started/README.html&quot;&gt;how to setup the work environment&lt;/a&gt; and check &lt;a href=&quot;https://codetribute.mozilla.org/projects/automation&quot;&gt;the list of mentored issues&lt;/a&gt; for Marionette.&lt;/p&gt;
  5488.  
  5489.  
  5490.  
  5491. &lt;h3&gt;WebDriver BiDi&lt;/h3&gt;
  5492.  
  5493.  
  5494.  
  5495. &lt;h4&gt;&lt;a href=&quot;https://fxdx.dev/feed/&quot;&gt;New: Support for the “contexts” argument for the “network.addIntercept” command&lt;/a&gt;&lt;/h4&gt;
  5496.  
  5497.  
  5498.  
  5499. &lt;p&gt;Since the introduction of the &lt;code&gt;network.addIntercept&lt;/code&gt; command in Firefox 124, users could only apply network interceptions globally, affecting all open web pages across various tabs and windows. This necessitated the setup of specific filters to limit the impact to tabs requiring interception. However, this approach adversely affected performance, particularly when client code didn’t run locally, leading to increased data transmission over the network.&lt;/p&gt;
  5500.  
  5501.  
  5502.  
  5503. &lt;p&gt;To address these issues and simplify the use of network interception for specific tabs, we’ve &lt;a href=&quot;https://bugzil.la/1882260&quot;&gt;added the &lt;code&gt;context&lt;/code&gt;s argument in the &lt;code&gt;network.addIntercept&lt;/code&gt; command&lt;/a&gt;. This enhancement facilitates the targeting of specific top-level browsing contexts, enabling the restriction of network request interception to individual tabs even with the same web page open in multiple tabs.&lt;/p&gt;
  5504.  
  5505.  
  5506.  
  5507. &lt;h4&gt;Bug fixes&lt;/h4&gt;
  5508.  
  5509.  
  5510.  
  5511. &lt;ul&gt;
  5512. &lt;li&gt;Both the commands &lt;a href=&quot;https://bugzil.la/1887871&quot;&gt;&lt;code&gt;session.subscribe&lt;/code&gt; and &lt;code&gt;session.unsubscribe&lt;/code&gt; now raise an &lt;code&gt;invalid argument&lt;/code&gt;&lt;/a&gt; error when the value of the arguments &lt;code&gt;events&lt;/code&gt; or &lt;code&gt;contexts&lt;/code&gt; are empty arrays.&lt;/li&gt;
  5513.  
  5514.  
  5515.  
  5516. &lt;li&gt;Updated the implementation of &lt;a href=&quot;https://bugzil.la/1879503&quot;&gt;the &lt;code&gt;storage.getCookies&lt;/code&gt; command to align with the Gecko default cookie behavior&lt;/a&gt;. This allows the removal of the user value for the preference &lt;code&gt;network.cookie.cookieBehavior&lt;/code&gt;, which was only expected to be set for our experimental CDP implementation. &lt;/li&gt;
  5517.  
  5518.  
  5519.  
  5520. &lt;li&gt;&lt;a href=&quot;https://bugzil.la/1838152&quot;&gt;Removed the &lt;code&gt;ownership&lt;/code&gt; and &lt;code&gt;sandbox&lt;/code&gt; arguments for the &lt;code&gt;browsingContext.locateNodes&lt;/code&gt;&lt;/a&gt; command because they are no longer necessary. &lt;/li&gt;
  5521. &lt;/ul&gt;</description>
  5522. <pubDate>Tue, 14 May 2024 14:46:05 +0000</pubDate>
  5523. <dc:creator>Henrik Skupin</dc:creator>
  5524. </item>
  5525. <item>
  5526. <title>Firefox Nightly: Screenshots++ – These Weeks in Firefox: Issue 160</title>
  5527. <guid isPermaLink="false">https://blog.nightly.mozilla.org/?p=1635</guid>
  5528. <link>https://blog.nightly.mozilla.org/2024/05/09/screenshots-these-weeks-in-firefox-issue-160/</link>
  5529. <description>&lt;h3&gt;Highlights&lt;/h3&gt;
  5530. &lt;ul&gt;
  5531. &lt;li&gt;The &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1870127&quot;&gt;screenshots component pref just got enabled&lt;/a&gt; and is riding the trains in 127! This is a new implementation of the screenshots feature with a number of usability, accessibility and performance improvements over the original.&lt;/li&gt;
  5532. &lt;li&gt;Thanks to Joseph Webster for creating a brand new JWPlayer video wrapper (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891599&quot;&gt;bug&lt;/a&gt;) and for adding more sites under this wrapper to expand Picture-in-Picture captions support (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893061&quot;&gt;bug&lt;/a&gt;).
  5533. &lt;ul&gt;
  5534. &lt;li&gt;New supported sites include AOL, C-SPAN, CPAC, CNBC, Reuters, The Independent, Yahoo and more!&lt;/li&gt;
  5535. &lt;/ul&gt;
  5536. &lt;/li&gt;
  5537. &lt;li&gt;Irene landed the first part of refreshed text formatting controls for Reader Mode. Check them out by toggling reader.improved_text_menu.enabled (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880658&quot;&gt;bug 1880658&lt;/a&gt;)
  5538. &lt;ul&gt;
  5539. &lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/05/image2.png&quot;&gt;&lt;img alt=&quot;A panel in Firefox's Reader Mode is shown for controlling layout and text on the page. The panel lets users control the content width, line spacing, character spacing, word spacing, and text alignment of the text in reader mode.&quot; class=&quot;aligncenter size-full wp-image-1630&quot; height=&quot;688&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/05/image2.png&quot; width=&quot;430&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  5540. &lt;/ul&gt;
  5541. &lt;/li&gt;
  5542. &lt;li&gt;New tab wallpapers have landed in Nightly and will be released as an experiment in en-US. If you’d like to enable wallpapers, set browser.newtabpage.activity-stream.newtabWallpapers.enabled to true.
  5543. &lt;ul&gt;
  5544. &lt;li&gt;
  5545. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1616&quot; style=&quot;width: 1006px;&quot;&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/04/image2.png&quot;&gt;&lt;img alt=&quot;Firefox's New Tab page with a beautiful image of the aurora borealis set as the background wallpaper&quot; class=&quot;size-full wp-image-1616&quot; height=&quot;740&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/04/image2.png&quot; width=&quot;996&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1616&quot;&gt;Set a new look for new tabs!&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
  5546. &lt;/ul&gt;
  5547. &lt;/li&gt;
  5548. &lt;/ul&gt;
  5549. &lt;h3&gt;Friends of the Firefox team&lt;/h3&gt;
  5550. &lt;h3&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/buglist.cgi?title=Resolved%20bugs%20%28excluding%20employees%29&amp;amp;quicksearch=1856717%2C1888221%2C1887529%2C1887821%2C1889710%2C1887543%2C1886858%2C1838152%2C1883058%2C1876286%2C1880914%2C1825105%2C1891247%2C1891604%2C1870880%2C1844935%2C1891599%2C1869065%2C1836440%2C1891816%2C1893433%2C1893564%2C1893935%2C1893061&amp;amp;list_id=17012220&quot;&gt;Resolved bugs (excluding employees)&lt;/a&gt;&lt;/h3&gt;
  5551. &lt;p&gt;&lt;a href=&quot;https://github.com/niklasbaumgardner/NewContributorScraper&quot;&gt;Script to find new contributors from bug list&lt;/a&gt;&lt;/p&gt;
  5552. &lt;h4&gt;Volunteers that fixed more than one bug&lt;/h4&gt;
  5553. &lt;ul&gt;
  5554. &lt;li&gt;Camille&lt;/li&gt;
  5555. &lt;li&gt;gravyant&lt;/li&gt;
  5556. &lt;li&gt;Itiel Joseph&lt;/li&gt;
  5557. &lt;li&gt;Webster&lt;/li&gt;
  5558. &lt;li&gt;Magnus Melin [:mkmelin]&lt;/li&gt;
  5559. &lt;li&gt;Meera Murthy&lt;/li&gt;
  5560. &lt;li&gt;Steve P&lt;/li&gt;
  5561. &lt;/ul&gt;
  5562. &lt;h4&gt;New contributors (🌟 = first patch)&lt;/h4&gt;
  5563. &lt;ul&gt;
  5564. &lt;li&gt;🌟 endington543 &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891816&quot;&gt;refactored gOnceInitializedDeferred&lt;/a&gt; to use Promise.withResolvers&lt;/li&gt;
  5565. &lt;li&gt;gravyant &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1869065&quot;&gt;updated some of the element property names&lt;/a&gt; used in moz-message-bar and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1870880&quot;&gt;added isInstance assertion&lt;/a&gt; method to Assert.sys.mjs&lt;/li&gt;
  5566. &lt;li&gt;🌟 Joseph Webster &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891599&quot;&gt;created PiP JWPlayer wrapper&lt;/a&gt; and added &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893061&quot;&gt;PiP captions support for additional&lt;/a&gt; sites that use JWPlayer&lt;/li&gt;
  5567. &lt;li&gt;🌟 Steve P &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1836440&quot;&gt;updated some Firefox favicons&lt;/a&gt; to look better black/dark backgrounds and &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1844935&quot;&gt;replaced restart prompt&lt;/a&gt; when changing history settings with an in-content dialogue box&lt;/li&gt;
  5568. &lt;/ul&gt;
  5569. &lt;h3&gt;Project Updates&lt;/h3&gt;
  5570. &lt;h4&gt;Add-ons / Web Extensions&lt;/h4&gt;
  5571. &lt;h5&gt;Addon Manager &amp;amp; about:addons&lt;/h5&gt;
  5572. &lt;ul&gt;
  5573. &lt;li&gt;Starting from Firefox 127, installing new single-signed add-ons is disallowed (while already installed single-signed add-ons are still allowed to run). This behavior is currently only enabled in Nightly (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886157&quot;&gt;Bug 1886157&lt;/a&gt;) but it is expected to be extended to all channels later in the 127 cycle (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886160&quot;&gt;Bug 1886160&lt;/a&gt;)&lt;/li&gt;
  5574. &lt;li&gt;Fixed a styling issue hit by extensions options pages embedded in about:addons when the Dark mode is enabled (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888866&quot;&gt;Bug 1888866&lt;/a&gt;)&lt;/li&gt;
  5575. &lt;/ul&gt;
  5576. &lt;h5&gt;WebExtensions APIs&lt;/h5&gt;
  5577. &lt;ul&gt;
  5578. &lt;li&gt;As part of the ongoing work related to improving cross-browser compatibility for Manifest Version 3 extensions:
  5579. &lt;ul&gt;
  5580. &lt;li&gt;Customized keyboard shortcuts associated to _execute_browser_action command for Manifest Version 2 extensions will be automatically associated to the _execute_action command when the same extension migrates to Manifest Version 3 (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1797811&quot;&gt;Bug 1797811&lt;/a&gt;). This way, the custom keyboard shortcut will keep working as expected from a user perspective.&lt;/li&gt;
  5581. &lt;li&gt;DNR rule limits have been raised to match the limits enforced by other browsers (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1803370&quot;&gt;Bug 1803370&lt;/a&gt;)&lt;/li&gt;
  5582. &lt;li&gt;DNR getDynamicRules and getSessionRules API methods will be accepting the additional ruleIds filter as a parameter and improve compatibility with DNR API in more recent Chrome versions (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1820870&quot;&gt;Bug 1820870&lt;/a&gt;)&lt;/li&gt;
  5583. &lt;/ul&gt;
  5584. &lt;/li&gt;
  5585. &lt;li&gt;Improved errors logged when a content script file does not exist (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891502&quot;&gt;Bug 1891502&lt;/a&gt;)
  5586. &lt;ul&gt;
  5587. &lt;li&gt;the error is now expected to look like Unable to load script: moz-extension://UUID/path/to/script.js&lt;/li&gt;
  5588. &lt;/ul&gt;
  5589. &lt;/li&gt;
  5590. &lt;/ul&gt;
  5591. &lt;h4&gt;Developer Tools&lt;/h4&gt;
  5592. &lt;h5&gt;DevTools&lt;/h5&gt;
  5593. &lt;ul&gt;
  5594. &lt;li&gt;Julian reverted a change a few months ago so DevTools screenshots are saved in the same location as Firefox screenshots (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1845037&quot;&gt;#1845037&lt;/a&gt;)&lt;/li&gt;
  5595. &lt;li&gt;Alex fixed a Debugger crash (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891699&quot;&gt;#1891699&lt;/a&gt;)&lt;/li&gt;
  5596. &lt;li&gt;Nicolas fixed a visual glitch in the Debugger (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891681&quot;&gt;#1891681&lt;/a&gt;)&lt;/li&gt;
  5597. &lt;li&gt;Alex fixed an issue where Network request from iframe sent just before document destruction were not displayed in the Netmonitor (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887852&quot;&gt;#1887852&lt;/a&gt;)&lt;/li&gt;
  5598. &lt;li&gt;Nicolas replaced DevTools JS-based CSS lexer with a Rust-based version, using the same cssparser crate than Stylo (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887638&quot;&gt;#1887638&lt;/a&gt;, &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892895&quot;&gt;#1892895&lt;/a&gt;)
  5599. &lt;ul&gt;
  5600. &lt;li&gt;This brought a ~10% performance improvement when displaying rules in the inspector (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1888607&quot;&gt;#1888607&lt;/a&gt; + &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890552&quot;&gt;#1890552&lt;/a&gt;)&lt;/li&gt;
  5601. &lt;/ul&gt;
  5602. &lt;/li&gt;
  5603. &lt;li&gt;Thanks to :willdurand, we finally released a new version of the DevTools ADB extension used by about:debugging. The extension is now shipping with notarized binaries and can be used on recent macOS versions. (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1821449&quot;&gt;#1821449&lt;/a&gt;)&lt;/li&gt;
  5604. &lt;/ul&gt;
  5605. &lt;h5&gt;WebDriver BiDi&lt;/h5&gt;
  5606. &lt;ul&gt;
  5607. &lt;li&gt;Thanks to gravyant who implemented a new helper Assert.isInstance to check whether objects are instances of specific classes (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1870880&quot;&gt;#1870880&lt;/a&gt;)&lt;/li&gt;
  5608. &lt;li&gt;Henrik updated mozrunner/mozprocess to use “psutil” and support the new application restart mechanism on macos (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884401&quot;&gt;#1884401&lt;/a&gt;)&lt;/li&gt;
  5609. &lt;li&gt;Sasha added support for the a11y attributes locator for the browsingContext.locateNodes command (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885577&quot;&gt;#1885577&lt;/a&gt;)&lt;/li&gt;
  5610. &lt;li&gt;Sasha added support for the devicePixelRatio parameter for the browsingContext.setViewport command (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1857961&quot;&gt;#1857961&lt;/a&gt;)&lt;/li&gt;
  5611. &lt;li&gt;Henrik improved the way we check if an element is disabled when using the WebDriver ElementClear command (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1863266&quot;&gt;#1863266&lt;/a&gt;)&lt;/li&gt;
  5612. &lt;li&gt;Julian updated the vendored puppeteer version to v22.6.5, which enables new network interception features in Puppeteer using WebDriver BiDi (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891762&quot;&gt;#1891762&lt;/a&gt;)&lt;/li&gt;
  5613. &lt;/ul&gt;
  5614. &lt;h4&gt;Migration Improvements&lt;/h4&gt;
  5615. &lt;ul&gt;
  5616. &lt;li&gt;Profile backup / recovery
  5617. &lt;ul&gt;
  5618. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885369&quot;&gt;We’re 95% done the staging metabug&lt;/a&gt; – fchasen is just &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1886235&quot;&gt;trying to fix an absolute path problem&lt;/a&gt; we discovered in our WebExtensions code.&lt;/li&gt;
  5619. &lt;li&gt;We’re about half-way done with &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885955&quot;&gt;the recovery metabug&lt;/a&gt;. We’re at the point where most critical data can be recovered from a decompressed backup archive. If you’re feeling adventurous, you can tinker with this at chrome://browser/content/backup/debug.html on Nightly, but no warranty implied.&lt;/li&gt;
  5620. &lt;li&gt;We’re working with the Glean team to &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893650&quot;&gt;come up with a mechanism of transferring the Glean client identifier&lt;/a&gt; from the profile that initiates recovery.&lt;/li&gt;
  5621. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890579&quot;&gt;We’ve also prepared the backup management UI metabug&lt;/a&gt;. That’ll be next once we complete the recovery metabug.&lt;/li&gt;
  5622. &lt;/ul&gt;
  5623. &lt;/li&gt;
  5624. &lt;/ul&gt;
  5625. &lt;h4&gt;New Tab Page&lt;/h4&gt;
  5626. &lt;ul&gt;
  5627. &lt;li&gt;Work continues on a weather widget for new tab (borrowing logic from URL bar). Stay tuned!&lt;/li&gt;
  5628. &lt;/ul&gt;
  5629. &lt;h4&gt;Privacy &amp;amp; Security&lt;/h4&gt;
  5630. &lt;ul&gt;
  5631. &lt;li&gt;We’re working on a new anti-tracking feature: Bounce Tracking Protection. It works similar to the existing &lt;a href=&quot;https://blog.mozilla.org/security/2020/08/04/firefox-79-includes-protections-against-redirect-tracking/&quot;&gt;Cookie Purging&lt;/a&gt; feature in Firefox, but instead of a tracker list it relies on heuristics to detect bounce trackers.
  5632. &lt;ul&gt;
  5633. &lt;li&gt;It’s based on the &lt;a href=&quot;https://privacycg.github.io/nav-tracking-mitigations/#bounce-tracking-mitigations&quot;&gt;navigational-tracking-protections spec draft&lt;/a&gt; in the PrivacyCG&lt;/li&gt;
  5634. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877432&quot;&gt;Bug 1877432&lt;/a&gt; first enabled the feature in Nightly in “dry run mode” where we don’t purge tracker storage but only collect telemetry. We’re looking to fully enable it in Nightly soon once we think it’s stable enough.&lt;/li&gt;
  5635. &lt;/ul&gt;
  5636. &lt;/li&gt;
  5637. &lt;/ul&gt;
  5638. &lt;h4&gt;Profile Management (new this week!)&lt;/h4&gt;
  5639. &lt;ul&gt;
  5640. &lt;li&gt;We’re getting underway with improvements to multiple profiles support in Firefox!&lt;/li&gt;
  5641. &lt;li&gt;Eng discussion on Matrix: &lt;a href=&quot;https://matrix.to/#/#fx-profile-eng:mozilla.org&quot;&gt;#fx-profile-eng&lt;/a&gt;&lt;/li&gt;
  5642. &lt;li&gt;Backend work in toolkit/profile behind a build flag (MOZ_SELECTABLE_PROFILES)&lt;/li&gt;
  5643. &lt;li&gt;Frontend work in browser/components/profiles behind a pref (browser.profiles.enabled)&lt;/li&gt;
  5644. &lt;li&gt;Metabug is here: &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882882&quot;&gt;1882882&lt;/a&gt;&lt;/li&gt;
  5645. &lt;li&gt;Bugs landed so far:
  5646. &lt;ul&gt;
  5647. &lt;li&gt;Mossop added telemetry to record the version of the profiles database on startup and the number of profiles in it (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1878339&quot;&gt;bug 1878339&lt;/a&gt;)&lt;/li&gt;
  5648. &lt;li&gt;Niklas added the profiles browser component (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883143&quot;&gt;bug 1883143&lt;/a&gt;)&lt;/li&gt;
  5649. &lt;li&gt;Niklas added profiles menu items to the app menu (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1883155&quot;&gt;bug 1883155&lt;/a&gt;)&lt;/li&gt;
  5650. &lt;/ul&gt;
  5651. &lt;/li&gt;
  5652. &lt;li&gt;Coming soon: Docs, final UX, and good-first-bugs&lt;/li&gt;
  5653. &lt;/ul&gt;
  5654. &lt;h4&gt;Screenshots&lt;/h4&gt;
  5655. &lt;ul&gt;
  5656. &lt;li&gt;Niklas added a &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1873862&quot;&gt;border to the region pixel size card&lt;/a&gt; in the selected region
  5657. &lt;ul&gt;
  5658. &lt;li&gt;Before
  5659. &lt;ul&gt;
  5660. &lt;li&gt;
  5661. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1633&quot; style=&quot;width: 478px;&quot;&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/05/image5.png&quot;&gt;&lt;img alt=&quot;The screenshot region picker in Firefox is displayed over top of an article from Wikipedia. A display in the centre of the picker shows that the region is &amp;quot;948 x 205&amp;quot;. The display does not have a border around it, making it more difficult to distinguish it from the background.&quot; class=&quot;size-full wp-image-1633&quot; height=&quot;254&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/05/image5.png&quot; width=&quot;468&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1633&quot;&gt;Can you see the screenshot dimensions hidden in that text?&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
  5662. &lt;/ul&gt;
  5663. &lt;/li&gt;
  5664. &lt;li&gt;After
  5665. &lt;ul&gt;
  5666. &lt;li&gt;
  5667. &lt;p&gt;&lt;/p&gt;&lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1632&quot; style=&quot;width: 480px;&quot;&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/05/image4.png&quot;&gt;&lt;img alt=&quot;The screenshot region picker in Firefox is displayed over top of an article from Wikipedia. A display in the centre of the picker shows that the region is &amp;quot;948 x 205&amp;quot;. The display does has a border around it, making it easier to distinguish it from the background.&quot; class=&quot;size-full wp-image-1632&quot; height=&quot;236&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/05/image4.png&quot; width=&quot;470&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1632&quot;&gt;That’s easier!&lt;/p&gt;&lt;/div&gt;&lt;/li&gt;
  5668. &lt;/ul&gt;
  5669. &lt;/li&gt;
  5670. &lt;/ul&gt;
  5671. &lt;/li&gt;
  5672. &lt;li&gt;Niklas fixed a bug where the &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1887093&quot;&gt;selected text would get cleared&lt;/a&gt; when screenshotting a region
  5673. &lt;ul&gt;
  5674. &lt;li&gt;&lt;a href=&quot;https://blog.nightly.mozilla.org/files/2024/05/image3.png&quot;&gt;&lt;img alt=&quot;&amp;quot;Take screenshots in Firefox&amp;quot; is shown in text, with the word &amp;quot;screenshots&amp;quot; selected.&quot; class=&quot;aligncenter size-full wp-image-1631&quot; height=&quot;138&quot; src=&quot;https://blog.nightly.mozilla.org/files/2024/05/image3.png&quot; width=&quot;660&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
  5675. &lt;/ul&gt;
  5676. &lt;/li&gt;
  5677. &lt;/ul&gt;
  5678. &lt;h4&gt;Search and Navigation&lt;/h4&gt;
  5679. &lt;ul&gt;
  5680. &lt;li&gt;Marco &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1848715&quot;&gt;fixed editing and copying URLs when the protocol is hidden in the address bar&lt;/a&gt;
  5681. &lt;ul&gt;
  5682. &lt;li&gt;This was our main outstanding blocker for shipping hiding https:// instead of http://, so hopefully that should happen soon!&lt;/li&gt;
  5683. &lt;/ul&gt;
  5684. &lt;/li&gt;
  5685. &lt;li&gt;Dale &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1871206&quot;&gt;landed a prototype of secondary actions buttons in address bar results&lt;/a&gt;
  5686. &lt;ul&gt;
  5687. &lt;li&gt;As part of that secondary actions buttons effort, he also fixed some bugs with the (currently disabled by default) site-specific search feature:
  5688. &lt;ul&gt;
  5689. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893310&quot;&gt;Bug 1893310 – Contextual Search only searches first letter&lt;/a&gt;&lt;/li&gt;
  5690. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893823&quot;&gt;Bug 1893823 – Contextual search breaks urlbar when no engine&lt;/a&gt;&lt;/li&gt;
  5691. &lt;/ul&gt;
  5692. &lt;/li&gt;
  5693. &lt;/ul&gt;
  5694. &lt;/li&gt;
  5695. &lt;li&gt;Stephanie and James have been working on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1846381&quot;&gt;phase 2 of implementing Search Engine Result Page Search Term Categorization&lt;/a&gt;, specifically:
  5696. &lt;ul&gt;
  5697. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1882844&quot;&gt;Updated search-telemetry-v2 collection on Remote Settings to include selectors for Bing search result pages&lt;/a&gt;&lt;/li&gt;
  5698. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1892267&quot;&gt;Added the number of loaded and hidden ads to the categorization event&lt;/a&gt;&lt;/li&gt;
  5699. &lt;/ul&gt;
  5700. &lt;/li&gt;
  5701. &lt;li&gt;Standard8 and Mandy continued their work on &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1833829&quot;&gt;search-config-v2&lt;/a&gt;:
  5702. &lt;ul&gt;
  5703. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1889037&quot;&gt;Updated documentation for search-config-v2&lt;/a&gt;&lt;/li&gt;
  5704. &lt;li&gt;&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890378&quot;&gt;Changed some of the concept for search-config-v2 to avoid duplication and to simplify how variants are applied within the configuration&lt;/a&gt;&lt;/li&gt;
  5705. &lt;li&gt;We’re now rolling it out to 50% of beta users.&lt;/li&gt;
  5706. &lt;/ul&gt;
  5707. &lt;/li&gt;
  5708. &lt;li&gt;Daisuke &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891145&quot;&gt;implemented history flooding protection&lt;/a&gt; (currently disabled behind pref)&lt;/li&gt;
  5709. &lt;li&gt;Daisuke &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1891602&quot;&gt;added the “Manage Firefox Suggest” menu item for Navigational and Dynamic Wikipedia suggestions in the address bar&lt;/a&gt;&lt;/li&gt;
  5710. &lt;/ul&gt;
  5711. &lt;h4&gt;Storybook/Reusable Components&lt;/h4&gt;
  5712. &lt;ul&gt;
  5713. &lt;li&gt;hjones fixed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1803678&quot;&gt;Bug 1803678 – Enable on-demand/lazy loading for ESModule based reusable components&lt;/a&gt;
  5714. &lt;ul&gt;
  5715. &lt;li&gt;if you’ve ever had to use ensureCustomElements before this is relevant to you&lt;/li&gt;
  5716. &lt;/ul&gt;
  5717. &lt;/li&gt;
  5718. &lt;li&gt;hjones is working on re-landing &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1858812&quot;&gt;Bug 1858812 – Create a icon and text variant of moz-button&lt;/a&gt;&lt;/li&gt;
  5719. &lt;li&gt;jsudiaman fixed Firefox View stories in Storybook with the landing of &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1867614&quot;&gt;Bug 1867614 – fxview-tab-list story is broken, shows a “ChromeUtils is not defined” error&lt;/a&gt;&lt;/li&gt;
  5720. &lt;li&gt;gravyant cleaned up propertie names in moz-message-bar in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1869065&quot;&gt;Bug 1869065 – Re-visit some of the element property names used in moz-message-bar&lt;/a&gt;&lt;/li&gt;
  5721. &lt;li&gt;kcochrane landed &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1877826&quot;&gt;Bug 1877826 – Add MozPageNavLink custom component to MozPageNav&lt;/a&gt;
  5722. &lt;ul&gt;
  5723. &lt;li&gt;this will enable us to start replacing nav menus in about:addons and about:preferences to better align with the nav in Firefox View&lt;/li&gt;
  5724. &lt;/ul&gt;
  5725. &lt;/li&gt;
  5726. &lt;li&gt;mstriemer made it so that you can use moz-buttons as children of moz-button-group in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893218&quot;&gt;Bug 1893218 – moz-button-group should support moz-button children&lt;/a&gt;&lt;/li&gt;
  5727. &lt;li&gt;tgiles added a link to our new reusable components dashboard to Storybook &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893685&quot;&gt;Bug 1893685 – Add link to the “Reusable Component Adoption” chart in our docs&lt;/a&gt;&lt;/li&gt;
  5728. &lt;li&gt;The dashboard to track adoption in Firefox can be visited here: &lt;a href=&quot;https://firefoxux.github.io/recomp-metrics/&quot;&gt;https://firefoxux.github.io/recomp-metrics/&lt;/a&gt;&lt;/li&gt;
  5729. &lt;/ul&gt;</description>
  5730. <pubDate>Thu, 09 May 2024 16:20:17 +0000</pubDate>
  5731. <dc:creator>Mike Conley</dc:creator>
  5732. </item>
  5733. <item>
  5734. <title>Anne van Kesteren: Undue base URL influence</title>
  5735. <guid isPermaLink="false">tag:annevankesteren.nl,2024-05-08:/091232/undue-base-url-influence</guid>
  5736. <link>https://annevankesteren.nl/2024/05/undue-base-url-influence</link>
  5737. <description>&lt;p&gt;The URL parser has many quirks due to its origins in a time where conformance test suites were atypical and implementation requirements were hidden in the examples section. Some consider these quirks deeply problematic, but personally I don’t really mind that one can write a hundred slashes after a scheme instead of two and get identical results. Sure, it would be better if that were not the case, but in the end it is something that is normalized away and therefore does not impact the fundamental aspects of the URL ecosystem.&lt;/p&gt;
  5738.  
  5739. &lt;p&gt;I was reminded the other day that there is one quirk however that does yield rather undesirable results. In particular for certain (non-conforming) inputs, the result will not be failure, but the exact URL returned will depend on the presence and type of base URL. This might be best explained with examples:&lt;/p&gt;
  5740.  
  5741. &lt;table&gt;
  5742. &lt;thead&gt;
  5743.  &lt;tr&gt;&lt;th&gt;Input&lt;/th&gt;&lt;th&gt;Base URL (serialized)&lt;/th&gt;&lt;th&gt;Output (serialized)&lt;/th&gt;&lt;/tr&gt;
  5744. &lt;/thead&gt;
  5745. &lt;tbody&gt;
  5746.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;https:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://test/&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5747.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;https:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;http://example/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://test/&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5748.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;https:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://example/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;https://example/test&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5749.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;—&lt;/td&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5750.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;bye://example/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5751.  &lt;tr&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hello://example/&lt;/code&gt;&lt;/td&gt;&lt;td&gt;&lt;code&gt;hello:test&lt;/code&gt;&lt;/td&gt;&lt;/tr&gt;
  5752. &lt;/tbody&gt;
  5753. &lt;/table&gt;
  5754.  
  5755. &lt;p&gt;This quirk only impacts so-called &lt;a href=&quot;https://url.spec.whatwg.org/#special-scheme&quot;&gt;special schemes&lt;/a&gt;, which include &lt;code&gt;http&lt;/code&gt; and &lt;code&gt;https&lt;/code&gt;. And only when they match between the input and base URL. As a user of URLs you could work around this quirk by first parsing without a base URL and only if that returns failure, parse a second time with a base URL. That does have the unfortunate side effect of being inconsistent with the web platform (for non-conforming input), but depending on your use case that might be okay.&lt;/p&gt;
  5756.  
  5757. &lt;p&gt;I remember looking into whether this could be removed completely many years ago, but websites relied on it and &lt;a href=&quot;https://www.w3.org/TR/html-design-principles/#priority-of-constituencies&quot;&gt;end users trump theory&lt;/a&gt;.&lt;/p&gt;</description>
  5758. <pubDate>Wed, 08 May 2024 12:30:23 +0000</pubDate>
  5759. </item>
  5760. <item>
  5761. <title>Mozilla Thunderbird: Thunderbird for Android / K-9 Mail: April 2024 Progress Report</title>
  5762. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1744</guid>
  5763. <link>https://blog.thunderbird.net/2024/05/thunderbird-for-android-k-9-mail-april-2024-progress-report/</link>
  5764. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/blog-banner-logo-logo-FINAL-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  5765. &lt;p&gt;Welcome to our monthly report on turning K-9 Mail into Thunderbird for Android! &lt;a href=&quot;https://blog.thunderbird.net/2024/04/thunderbird-for-android-k-9-mail-march-2024-progress-report/&quot;&gt;Last month&lt;/a&gt; you could read about how we found and fixed bugs after publishing a new stable release. This month we start with… telling you that we fixed even more bugs.&lt;/p&gt;
  5766.  
  5767.  
  5768.  
  5769. &lt;h3&gt;Fixing bugs&lt;/h3&gt;
  5770.  
  5771.  
  5772.  
  5773. &lt;p&gt;After the release of K-9 Mail 6.800 we dedicated some time to fixing bugs. We published the first bugfix release in March and continued that work in April.&lt;/p&gt;
  5774.  
  5775.  
  5776.  
  5777. &lt;h4&gt;K-9 Mail 6.802&lt;/h4&gt;
  5778.  
  5779.  
  5780.  
  5781. &lt;p&gt;The second bugfix release contained these changes:&lt;/p&gt;
  5782.  
  5783.  
  5784.  
  5785. &lt;ul&gt;
  5786. &lt;li&gt;Push: Notify user if permission to schedule exact alarms is missing&lt;/li&gt;
  5787.  
  5788.  
  5789.  
  5790. &lt;li&gt;Renamed “Send client ID” setting to “Send client information”&lt;/li&gt;
  5791.  
  5792.  
  5793.  
  5794. &lt;li&gt;IMAP: Added support for the \NonExistent LIST response attribute&lt;/li&gt;
  5795.  
  5796.  
  5797.  
  5798. &lt;li&gt;IMAP: Issue EXPUNGE command after moving without MOVE extension&lt;/li&gt;
  5799.  
  5800.  
  5801.  
  5802. &lt;li&gt;Updated translations; added Hebrew translation&lt;/li&gt;
  5803. &lt;/ul&gt;
  5804.  
  5805.  
  5806.  
  5807. &lt;p&gt;I’m especially happy that we were able to add back the Hebrew translation. We removed it prior to the K-9 Mail 6.800 release due to the translation being less than 70% complete (it was at 49%). Since then volunteers translated the missing bits of the app and in April the translation was almost complete.&lt;/p&gt;
  5808.  
  5809.  
  5810.  
  5811. &lt;p&gt;Unfortunately, the same isn’t true for the Korean translation that was also removed. It was 69% complete, right below the threshold. Since then there has been no significant change. If you are a K-9 Mail user and a native Korean speaker, please consider &lt;a href=&quot;https://hosted.weblate.org/projects/tb-android/-/ko/&quot;&gt;helping out&lt;/a&gt;.&lt;/p&gt;
  5812.  
  5813.  
  5814.  
  5815. &lt;h4&gt;F-Droid metadata (again?)&lt;/h4&gt;
  5816.  
  5817.  
  5818.  
  5819. &lt;p&gt;In the previous progress report we described what change had led to the app description disappearing on F-Droid and how we intended to fix it. Unfortunately we found out that our approach to fixing the issue didn’t work due to the way F-Droid builds their app index. So we changed our approach once again and hope that the app description will be restored with the next app release.&lt;/p&gt;
  5820.  
  5821.  
  5822.  
  5823. &lt;h4&gt;Push &amp;amp; the permission to schedule alarms&lt;/h4&gt;
  5824.  
  5825.  
  5826.  
  5827. &lt;p&gt;K-9 Mail 6.802 notifies the user when Push is enabled in settings, but the permission to schedule exact alarms is missing. However, what we really want to do is ask the user for this permission before we allow them to enable Push.&lt;/p&gt;
  5828.  
  5829.  
  5830.  
  5831. &lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
  5832. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__push_folders__permission-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1747&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__push_folders__permission-1-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5833.  
  5834.  
  5835.  
  5836. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__push_folders__enabled-1.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1748&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__push_folders__enabled-1-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5837. &lt;/figure&gt;
  5838.  
  5839.  
  5840.  
  5841. &lt;p&gt;This change was completed in April and will be included in the next bugfix release, K-9 Mail 6.803.&lt;/p&gt;
  5842.  
  5843.  
  5844.  
  5845. &lt;h3&gt;Material 3&lt;/h3&gt;
  5846.  
  5847.  
  5848.  
  5849. &lt;p&gt;As briefly mentioned in March’s progress report, we’ve started work on switching the app to Google’s latest version of Material Design – &lt;a href=&quot;https://m3.material.io/&quot;&gt;Material 3&lt;/a&gt;. In April we completed the technical conversion. The app is now using Material 3 components instead of the Material Design 2 ones.&lt;/p&gt;
  5850.  
  5851.  
  5852.  
  5853. &lt;p&gt;The next step is to clean up the different screens in the app. This means adjusting spacings, text sizes, colors, and sometimes more extensive changes. &lt;/p&gt;
  5854.  
  5855.  
  5856.  
  5857. &lt;p&gt;We didn’t release any beta versions while the development version was still a mix of Material Design 2 and Material 3. Now that the first step is complete, we’ll resume publishing beta versions.&lt;/p&gt;
  5858.  
  5859.  
  5860.  
  5861. &lt;p&gt;If you are a beta tester, please be aware that the app still looks quite rough in a couple of places. While the app should be fully functional, you might want to &lt;a href=&quot;https://support.google.com/googleplay/answer/7003180&quot;&gt;leave the beta program&lt;/a&gt; for a while if the look of the app is important to you.&lt;/p&gt;
  5862.  
  5863.  
  5864.  
  5865. &lt;h3&gt;Targeting Android 14&lt;/h3&gt;
  5866.  
  5867.  
  5868.  
  5869. &lt;p&gt;Part of the necessary app maintenance is to update the app to target the latest Android version. This is required for the app to use the latest security features and to cope with added restrictions the system puts in place. It’s also required by Google in order to be able to publish updates on Google Play.&lt;/p&gt;
  5870.  
  5871.  
  5872.  
  5873. &lt;p&gt;The work to &lt;a href=&quot;https://developer.android.com/about/versions/14/behavior-changes-14&quot;&gt;target Android 14&lt;/a&gt; is now mostly complete. This involved some behind the scenes changes that users hopefully won’t notice at all. We’ll be testing these changes in a future beta version before including them in a K-9 Mail 6.8xx release.&lt;/p&gt;
  5874.  
  5875.  
  5876.  
  5877. &lt;h3&gt;Building two apps&lt;/h3&gt;
  5878.  
  5879.  
  5880.  
  5881. &lt;p&gt;If you’re reading this, it’s probably because you’re excited for Thunderbird for Android to be finally released. However, we’ve also heard numerous times that people love K-9 Mail and wished the app would stay around. That’s why we’ve &lt;a href=&quot;https://blog.thunderbird.net/2023/12/when-will-thunderbird-for-android-be-released/&quot;&gt;announced&lt;/a&gt; in December to do just that.&lt;/p&gt;
  5882.  
  5883.  
  5884.  
  5885. &lt;p&gt;We’ve started work on this and are now able to build two apps from the same source code. Thunderbird for Android already includes the fancy new Thunderbird logo and a first version of a blue theme.&lt;/p&gt;
  5886.  
  5887.  
  5888.  
  5889. &lt;figure class=&quot;wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex&quot;&gt;
  5890. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__welcome.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1750&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/k9mail__welcome-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5891.  
  5892.  
  5893.  
  5894. &lt;figure class=&quot;wp-block-image size-large&quot;&gt;&lt;a href=&quot;https://blog.thunderbird.net/files/2024/05/thunderbird__welcome__incomplete.png&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-1749&quot; height=&quot;1270&quot; src=&quot;https://blog.thunderbird.net/files/2024/05/thunderbird__welcome__incomplete-600x1270.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;/figure&gt;
  5895. &lt;/figure&gt;
  5896.  
  5897.  
  5898.  
  5899. &lt;p&gt;But as you can see in the screenshots above, we’re not quite done yet. We still have to change parts of the app where the app name is displayed to use a placeholder instead of a hard-coded string. Then there’s the About screen and a couple of other places that require app-specific behavior.&lt;/p&gt;
  5900.  
  5901.  
  5902.  
  5903. &lt;p&gt;We’ll keep you posted.&lt;/p&gt;
  5904.  
  5905.  
  5906.  
  5907. &lt;h3&gt;Releases&lt;/h3&gt;
  5908.  
  5909.  
  5910.  
  5911. &lt;p&gt;In April 2024 we published the following stable release:&lt;/p&gt;
  5912.  
  5913.  
  5914.  
  5915. &lt;ul&gt;
  5916. &lt;li&gt;&lt;a href=&quot;https://github.com/thunderbird/thunderbird-android/releases/tag/6.802&quot;&gt;K-9 Mail v6.802&lt;/a&gt; (2024-04-05)&lt;/li&gt;
  5917. &lt;/ul&gt;
  5918. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-for-android-k-9-mail-april-2024-progress-report/&quot;&gt;Thunderbird for Android / K-9 Mail: April 2024 Progress Report&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  5919. <pubDate>Wed, 08 May 2024 11:00:00 +0000</pubDate>
  5920. <dc:creator>cketti</dc:creator>
  5921. </item>
  5922. <item>
  5923. <title>Mozilla Addons Blog: Developer Spotlight: Port Authority</title>
  5924. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9169</guid>
  5925. <link>https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/</link>
  5926. <description>&lt;div class=&quot;wp-caption alignleft&quot; id=&quot;attachment_9170&quot; style=&quot;width: 334px;&quot;&gt;&lt;img alt=&quot;&quot; class=&quot;wp-image-9170&quot; height=&quot;590&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/05/blog_PA.png&quot; width=&quot;324&quot; /&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-9170&quot;&gt;Port Authority gives you intuitive control over global block settings, notifications, and allow-list customization.&lt;/p&gt;&lt;/div&gt;
  5927. &lt;p&gt;A few years ago a developer known as &lt;a href=&quot;https://github.com/ACK-J&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;ACK-J&lt;/a&gt; stumbled onto a tech article that revealed eBay was secretly port scanning their customers (i.e. scanning their users’ internet-facing devices to learn what apps and services are listening on the network). The article further claimed there was nothing anyone could do to prevent this privacy compromise. ACK-J took that as a challenge. “After going down many rabbit holes,” he says, “I found that this script, which was port scanning everyone, is in my opinion, malware.”&lt;/p&gt;
  5928. &lt;p&gt;We spoke with ACK-J to better understand the obscure privacy risks of port scanning and how his extension &lt;a href=&quot;https://addons.mozilla.org/en-US/firefox/addon/port-authority/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Port Authority&lt;/a&gt; offers unique protections.&lt;/p&gt;
  5929. &lt;p&gt;&lt;b&gt;Why does port scanning present a privacy risk?&lt;/b&gt;&lt;/p&gt;
  5930. &lt;p&gt;ACK-J: &lt;i&gt;There is a common misconception/ignorance around how far websites are able to peer into your private home network. While modern browsers limit this to an extent, it is still overly permissive in my opinion. The privacy implications arise when websites, such as&lt;/i&gt; &lt;i&gt;g&lt;/i&gt;&lt;i&gt;o&lt;/i&gt;&lt;i&gt;ogle.com&lt;/i&gt;&lt;i&gt;, have the ability to secretly interact with your router’s administrative interface, local services running on your computer and discover devices on your home network. This behavior should be blocked by the same-origin policy (SOP), a fundamental security mechanism built into every web browser since the mid 1990’s, however due to convenience it appears to be disabled for these requests. This caught a lot of people by surprise, including myself, and is why I wanted to make this type of traffic “opt-in” on my devices.&lt;/i&gt;&lt;/p&gt;
  5931. &lt;p&gt;&lt;b&gt;Do you consider port scanning “malware”? &lt;/b&gt;&lt;/p&gt;
  5932. &lt;p&gt;ACK-J: &lt;i&gt;I don’t necessarily consider port scanning malware, port scanning is commonplace and should be expected for any computer connected to the internet with a public IP address. On the other hand, devices on our home networks do not have public IP addresses and instead are protected from this scanning due to a technology called network address translation (NAT). Due to the nature of how browsers and websites work, the website code needs to be rendered on the user’s device (behind the protections put in place by NAT). This means websites are in a privileged position to communicate with devices on your home network (e.g. IOT devices, routers, TVs, etc.). There are certainly legitimate use cases for port scanning even on internal networks, the most common being communicating with a program running on your PC such as Discord. I prefer to be able to explicitly allow this type of behavior instead of leaving it wide open by default.&lt;/i&gt;&lt;/p&gt;
  5933. &lt;p&gt;&lt;b&gt;Is there a way to summarize how your extension addresses the privacy leak of port scanning?&lt;/b&gt;&lt;/p&gt;
  5934. &lt;p&gt;ACK-J: &lt;i&gt;Port Authority acts in a similar manner to a bouncer at a bar, whenever your computer tries to make a request, Port Authority will verify that the request is not trying to port scan your private network. If the request passes the check it is allowed in and everything functions as normal. If it fails the request is dropped. This all happens in a matter of milliseconds, but if a request is blocked you will get a notification.&lt;/i&gt;&lt;/p&gt;
  5935. &lt;p&gt;&lt;b&gt;Should Port Authority users expect occasional disruptions using websites that port scan, like eBay?&lt;/b&gt;&lt;/p&gt;
  5936. &lt;p&gt;ACK-J: &lt;i&gt;Nope, I’ve been using it for years along with many friends, family, and 1,000 other daily users. I’ve never received a single report that a website would not allow you to login, check-out, or other expected functionality due to the extension blocking port scans. There are instances where you’d like your browser to communicate with an app on your PC such as Discord, in this case you’ll receive an alert and could add Discord to an allow-list or simply click the “Blocking” toggle to disable blocking temporarily.&lt;/i&gt;&lt;/p&gt;
  5937. &lt;p&gt;&lt;b&gt;Do you see Port Authority growing in terms of a feature set, or do you feel it’s relatively feature complete and your focus is on maintenance/refinement?&lt;/b&gt;&lt;/p&gt;
  5938. &lt;p&gt;ACK-J: &lt;i&gt;I like extensions that serve a specific purpose so I don’t see it growing in features but I’d never say never. I’ve added an allow-list to explicitly permit certain domains to interact with services on your private network. I haven’t enabled this feature on the public extension yet but will soon.&lt;/i&gt;&lt;/p&gt;
  5939. &lt;p&gt;&lt;b&gt;Apart from Port Authority, do you have any plans to develop other extensions?&lt;/b&gt;&lt;/p&gt;
  5940. &lt;p&gt;ACK-J: &lt;i&gt;I actually do! I just finished writing up an extension called MailFail that checks the website you are on for misconfigurations in their email server that would allow someone to spoof emails using their domain. This will be posted soon!&lt;/i&gt;&lt;/p&gt;
  5941. &lt;hr /&gt;
  5942. &lt;p&gt;&lt;i&gt;Do you have an intriguing extension development story? Do tell! Maybe your story should appear on this blog. Contact us at &lt;/i&gt;&lt;b&gt;&lt;i&gt;amo-featured [at] mozilla [dot] org&lt;/i&gt;&lt;/b&gt;&lt;i&gt; and let us know a bit about your extension development journey. &lt;/i&gt;&lt;/p&gt;
  5943. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/05/07/developer-spotlight-port-authority/&quot;&gt;Developer Spotlight: Port Authority&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  5944. <pubDate>Tue, 07 May 2024 16:44:38 +0000</pubDate>
  5945. <dc:creator>Scott DeVaney</dc:creator>
  5946. </item>
  5947. <item>
  5948. <title>Firefox Developer Experience: Firefox DevTools Newsletter — 125</title>
  5949. <guid isPermaLink="false">https://fxdx.dev/?p=249</guid>
  5950. <link>https://fxdx.dev/firefox-devtools-newsletter-125/</link>
  5951. <description>&lt;p id=&quot;block-42a3529c-86fa-43e3-a037-427905914805&quot;&gt;&lt;em&gt;Developer Tools help developers write and debug websites on Firefox. This newsletter gives an overview of the work we’ve done as part of the Firefox 125 Nightly release cycle.&lt;/em&gt;&lt;/p&gt;
  5952.  
  5953.  
  5954.  
  5955. &lt;p id=&quot;block-af771a18-b7d9-4c63-9879-0a4a0dd015b4&quot;&gt;Firefox being an open source project, we are grateful to get contributions from people outside of Mozilla, like &lt;a href=&quot;https://bugzilla.mozilla.org/user_profile?user_id=750915&quot;&gt;Artem Manushenkov&lt;/a&gt; who updated the Debugger Watch Expressions panel input field placeholder (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1619201&quot;&gt;#1619201&lt;/a&gt;)&lt;/p&gt;
  5956.  
  5957.  
  5958.  
  5959. &lt;p class=&quot;has-text-align-center has-background-secondary-background-color has-background&quot; id=&quot;block-9944af63-0ae5-4c30-a32d-8ebfda4b5527&quot;&gt;Want to help? DevTools are written in HTML, CSS and JS so any web developer can contribute! Read &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools/getting-started/README.html&quot;&gt;how to setup the work environment&lt;/a&gt; and check &lt;a href=&quot;https://codetribute.mozilla.org/projects/devtools&quot;&gt;the list of mentored issues&lt;/a&gt;&lt;/p&gt;
  5960.  
  5961.  
  5962.  
  5963. &lt;h3&gt;Pop it up!&lt;/h3&gt;
  5964.  
  5965.  
  5966.  
  5967. &lt;p&gt;Firefox 125 adds support for the &lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Popover_API&quot;&gt;Popover API&lt;/a&gt;, which is now supported across all major browsers &lt;img alt=&quot;🎉&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/1f389.png&quot; style=&quot;height: 1em;&quot; /&gt;. As said on the related MDN page:&lt;/p&gt;
  5968.  
  5969.  
  5970.  
  5971. &lt;blockquote class=&quot;wp-block-quote&quot;&gt;
  5972. &lt;p&gt;The &lt;strong&gt;Popover API&lt;/strong&gt; provides developers with a standard, consistent, flexible mechanism for displaying popover content on top of other page content. Popover content can be controlled either declaratively using HTML attributes, or via JavaScript.&lt;/p&gt;
  5973. &lt;/blockquote&gt;
  5974.  
  5975.  
  5976.  
  5977. &lt;p&gt;In HTML, popover elements can be declared with a &lt;code&gt;popover&lt;/code&gt; attribute. The popover can then be toggled from a button element which specifies a &lt;code&gt;popovertarget&lt;/code&gt; attribute referencing the id of the popover element.&lt;/p&gt;
  5978.  
  5979.  
  5980.  
  5981. &lt;p&gt;&lt;br /&gt;&lt;/p&gt;
  5982.  
  5983.  
  5984.  
  5985. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox DevTools Inspector markup view. We can see a button with a popovertarget attribute and next to it a &amp;quot;select element&amp;quot; button. A div element with a popover attribute is displayed as well&quot; class=&quot;wp-image-277&quot; height=&quot;160&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-07-at-16.18.24-600x160.png&quot; width=&quot;600&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Inspector displayed on &lt;a href=&quot;https://mdn.github.io/dom-examples/popover-api/blur-background/&quot;&gt;https://mdn.github.io/dom-examples/popover-api/blur-background/&lt;/a&gt;&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  5986.  
  5987.  
  5988.  
  5989. &lt;p&gt;In the Inspector markup view, an icon is displayed next to the &lt;code&gt;popovertarget&lt;/code&gt; attribute so you can quickly jump to the popover element.&lt;br /&gt;Popover element can be toggled in Javascript &lt;code&gt;HTMLElement.showPopover&lt;/code&gt;, &lt;code&gt;HTMLElement.hidePopover&lt;/code&gt; and &lt;code&gt;HTMLElement.&lt;/code&gt;&lt;br /&gt;&lt;code&gt;togglePopover&lt;/code&gt;. &lt;code&gt;beforetoggle&lt;/code&gt; and &lt;code&gt;toggle&lt;/code&gt; elements are fired when a popover element is toggled, and the Debugger provides those events in &lt;a href=&quot;https://firefox-source-docs.mozilla.org/devtools-user/debugger/set_event_listener_breakpoints/index.html&quot;&gt;the Event Listeners Breakpoints panel&lt;/a&gt;.&lt;/p&gt;
  5990.  
  5991.  
  5992.  
  5993. &lt;p class=&quot;has-background-secondary-background-color has-background&quot;&gt;Note that we don’t display &lt;code&gt;::backdrop&lt;/code&gt; pseudo-element rules yet, but will be soon (target is Firefox 127, see &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1893644&quot;&gt;#1893644&lt;/a&gt;)&lt;br /&gt;&lt;/p&gt;
  5994.  
  5995.  
  5996.  
  5997. &lt;h3&gt;Performance&lt;/h3&gt;
  5998.  
  5999.  
  6000.  
  6001. &lt;p&gt;As announced in &lt;a href=&quot;https://fxdx.dev/firefox-devtools-newsletter-124/&quot;&gt;the last newsletter&lt;/a&gt;, we’re focusing on performance for a few months to provide a fast and snappy experience to our beloved users. We’re happy to report that the Style Editor panel is now up to &lt;strong&gt;20% faster&lt;/strong&gt; to open (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884072&quot;&gt;#1884072&lt;/a&gt;).&lt;/p&gt;
  6002.  
  6003.  
  6004.  
  6005. &lt;p&gt;&lt;/p&gt;
  6006.  
  6007.  
  6008.  
  6009. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Chart where x is the time and y is duration, where we can see the values going from 750ms to 600ms around March 14th&quot; class=&quot;wp-image-274&quot; height=&quot;176&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-07-at-14.58.50-600x176.png&quot; width=&quot;600&quot; /&gt;&amp;lt;figcaption class=&quot;wp-element-caption&quot;&amp;gt;Performance test duration going from ~750ms  to ~600ms&amp;lt;/figcaption&amp;gt;&lt;/figure&gt;
  6010.  
  6011.  
  6012.  
  6013. &lt;p&gt;We also improved the Debugger opening when a page contains a lot of Javascript sources (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1880809&quot;&gt;#1880809&lt;/a&gt;). In a specific case, we could spend around &lt;strong&gt;9 whole seconds&lt;/strong&gt; to process the different sources and populate the sources tree (&lt;a href=&quot;https://share.firefox.dev/3y1eIAr&quot;&gt;see the 124 Firefox profile&lt;/a&gt;). In 125, it now only take a bit more than &lt;strong&gt;600 milliseconds&lt;/strong&gt;, meaning &lt;strong&gt;it’s now 14 times faster&lt;/strong&gt; (&lt;a href=&quot;https://share.firefox.dev/3UyPwZS&quot;&gt;see the 125 Firefox profile&lt;/a&gt;).&lt;br /&gt;&lt;/p&gt;
  6014.  
  6015.  
  6016.  
  6017. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox Profiler Flame chart screenshot for the same function, on Firefox 124 and 125.&quot; class=&quot;wp-image-275&quot; height=&quot;212&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-07-at-15.26.29-600x212.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;
  6018.  
  6019.  
  6020.  
  6021. &lt;p&gt;This also shows up on less extreme cases: our performance tests reported an average of 3% improvement on Debugger opening.&lt;/p&gt;
  6022.  
  6023.  
  6024.  
  6025. &lt;h3&gt;Debugger&lt;/h3&gt;
  6026.  
  6027.  
  6028.  
  6029. &lt;p&gt;There is now a button indicating if the opened file is an original file or a bundle, or if there was an issue when trying to retrieve the Source Map file  (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1853899&quot;&gt;#1853899&lt;/a&gt;).&lt;/p&gt;
  6030.  
  6031.  
  6032.  
  6033. &lt;figure class=&quot;wp-block-image aligncenter size-large&quot;&gt;&lt;img alt=&quot;Firefox debugger with a tsx file opened. At the bottom of the file text, there a button saying &amp;quot;original file&amp;quot;. A popup menu is opened and has the following items: - Enable Source Maps - Show and open original location by default - Jump to the related original source - Open the Source Map file in a new tab&quot; class=&quot;wp-image-276&quot; height=&quot;409&quot; src=&quot;https://fxdx.dev/files/2024/05/CleanShot-2024-05-07-at-15.42.30-600x409.png&quot; width=&quot;600&quot; /&gt;&lt;/figure&gt;
  6034.  
  6035.  
  6036.  
  6037. &lt;p&gt;Clicking on the button opens a menu dedicated to Source Map, where you can:&lt;/p&gt;
  6038.  
  6039.  
  6040.  
  6041. &lt;ul&gt;
  6042. &lt;li&gt;enable or disable Source Map&lt;/li&gt;
  6043.  
  6044.  
  6045.  
  6046. &lt;li&gt;indicate if the Debugger should open original files by default&lt;/li&gt;
  6047.  
  6048.  
  6049.  
  6050. &lt;li&gt;select the related original/bundle source&lt;/li&gt;
  6051.  
  6052.  
  6053.  
  6054. &lt;li&gt;open the &lt;code&gt;.map&lt;/code&gt; file in a new Firefox tab&lt;/li&gt;
  6055. &lt;/ul&gt;
  6056.  
  6057.  
  6058.  
  6059. &lt;p&gt;We also fixed a glitch around text selection and line highlighting (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1878698&quot;&gt;#1878698&lt;/a&gt;), as well as an issue which was preventing the Outline panel to work properly (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1879322&quot;&gt;#1879322&lt;/a&gt;). Finally we added back the preference that allows to disable the paused debugger overlay (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1865439&quot;&gt;#1865439&lt;/a&gt;). If you want to do so, go to &lt;code&gt;about:config&lt;/code&gt; , search for &lt;code&gt;devtools.debugger.features.overlay&lt;/code&gt; and toggle it to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;
  6060.  
  6061.  
  6062.  
  6063. &lt;h3&gt;Miscellaneous&lt;/h3&gt;
  6064.  
  6065.  
  6066.  
  6067. &lt;ul&gt;
  6068. &lt;li&gt;CSP error messages in the Console now provide the effective directive (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1848315&quot;&gt;#1848315&lt;/a&gt;)&lt;/li&gt;
  6069.  
  6070.  
  6071.  
  6072. &lt;li&gt;&lt;code&gt;Infinity&lt;/code&gt; wasn’t visible in the Console auto-completion menu (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1698260&quot;&gt;#1698260&lt;/a&gt;)&lt;/li&gt;
  6073.  
  6074.  
  6075.  
  6076. &lt;li&gt;Clicking on a relative URL of an image in the Inspector now honor the document’s base URL (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1871391&quot;&gt;#1871391&lt;/a&gt;)&lt;/li&gt;
  6077.  
  6078.  
  6079.  
  6080. &lt;li&gt;An issue that could provoke crashes of the Network Monitor is now fixed  (&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1884571&quot;&gt;#1884571&lt;/a&gt;)&lt;/li&gt;
  6081. &lt;/ul&gt;
  6082.  
  6083.  
  6084.  
  6085. &lt;p class=&quot;has-text-align-center&quot;&gt;&lt;strong&gt;Thank you for reading this and using our tools, see you in a few weeks for a new round of updates &lt;img alt=&quot;🙂&quot; class=&quot;wp-smiley&quot; src=&quot;https://s.w.org/images/core/emoji/14.0.0/72x72/1f642.png&quot; style=&quot;height: 1em;&quot; /&gt;&lt;/strong&gt;&lt;/p&gt;</description>
  6086. <pubDate>Tue, 07 May 2024 14:56:57 +0000</pubDate>
  6087. <dc:creator>Nicolas Chevobbe</dc:creator>
  6088. </item>
  6089. <item>
  6090. <title>The Rust Programming Language Blog: Rust participates in OSPP 2024</title>
  6091. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/07/OSPP-2024.html</guid>
  6092. <link>https://blog.rust-lang.org/2024/05/07/OSPP-2024.html</link>
  6093. <description>&lt;p&gt;Similar to our &lt;a href=&quot;https://blog.rust-lang.org/2024/02/21/Rust-participates-in-GSoC-2024.html&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;https://blog.rust-lang.org/2024/05/01/gsoc-2024-selected-projects.html&quot;&gt;announcements&lt;/a&gt; of the Rust Project's participation in Google Summer of Code (GSoC), we are now announcing our participation in &lt;a href=&quot;https://summer-ospp.ac.cn/&quot;&gt;Open Source Promotion Plan (OSPP) 2024&lt;/a&gt;.&lt;/p&gt;
  6094. &lt;p&gt;OSPP is a program organized in large part by The Institute of Software Chinese Academy of Sciences. Its goal is to encourage college students to participate in developing and maintaining open source software. The Rust Project is &lt;a href=&quot;https://summer-ospp.ac.cn/org/orgdetail/11769be7-d00a-4931-be95-13595ac181e4?lang=en&quot;&gt;already registered&lt;/a&gt; and has a number of projects available for mentorship:&lt;/p&gt;
  6095. &lt;ul&gt;
  6096. &lt;li&gt;&lt;a href=&quot;https://summer-ospp.ac.cn/org/prodetail/241170274&quot;&gt;C codegen backend for rustc&lt;/a&gt;&lt;/li&gt;
  6097. &lt;li&gt;&lt;a href=&quot;https://summer-ospp.ac.cn/org/prodetail/241170275&quot;&gt;Extend annotate-snippets with features required by rustc&lt;/a&gt;&lt;/li&gt;
  6098. &lt;li&gt;&lt;a href=&quot;https://summer-ospp.ac.cn/org/prodetail/241170277&quot;&gt;Improve bootstrap&lt;/a&gt;&lt;/li&gt;
  6099. &lt;li&gt;&lt;a href=&quot;https://summer-ospp.ac.cn/org/prodetail/241170528&quot;&gt;Modernize the libc crate&lt;/a&gt;&lt;/li&gt;
  6100. &lt;li&gt;&lt;a href=&quot;https://summer-ospp.ac.cn/org/prodetail/241170529&quot;&gt;Improve infrastructure automation tools&lt;/a&gt;&lt;/li&gt;
  6101. &lt;/ul&gt;
  6102. &lt;p&gt;Eligibility is limited to students and there is a &lt;a href=&quot;https://summer-ospp.ac.cn/help/en/student/&quot;&gt;guide&lt;/a&gt; for potential participants. Student registration ends on the 3rd of June with the project application deadline a day later.&lt;/p&gt;
  6103. &lt;p&gt;Unlike GSoC which allows students to propose their own projects, OSPP requires that students only apply for one of the registered projects. We do have an &lt;a href=&quot;https://rust-lang.zulipchat.com/#narrow/stream/436418-ospp&quot;&gt;#ospp&lt;/a&gt; Zulip stream and potential contributors are encouraged to join and discuss details about the projects and connect with mentors.&lt;/p&gt;
  6104. &lt;p&gt;After the project application window closes on June 4th, we will review and select participants, which will be announced on June 26th. From there, students will participate through to the end of September.&lt;/p&gt;
  6105. &lt;p&gt;As with GSoC, this is our first year participating in this program. We are incredibly excited for this opportunity to further expand into new open source communities and we're hopeful for a productive and educational summer.&lt;/p&gt;</description>
  6106. <pubDate>Tue, 07 May 2024 00:00:00 +0000</pubDate>
  6107. <dc:creator>Amanieu d'Antras, Jack Huey, and Jakub Beránek</dc:creator>
  6108. </item>
  6109. <item>
  6110. <title>Support.Mozilla.Org: Make your support articles pop: Use the new Firefox Desktop Icon Gallery</title>
  6111. <guid isPermaLink="false">https://blog.mozilla.org/sumo/?p=4118</guid>
  6112. <link>https://blog.mozilla.org/sumo/2024/05/06/make-your-support-articles-pop-use-the-new-firefox-desktop-icon-gallery/</link>
  6113. <description>&lt;p&gt;Hello, SUMO community!&lt;/p&gt;
  6114. &lt;p&gt;We’re thrilled to roll out a new tool designed specifically for our contributors: the&lt;a href=&quot;https://support.mozilla.org/en-US/kb/icon-gallery-firefox-desktop&quot;&gt; &lt;b&gt;Firefox Desktop Icon Gallery&lt;/b&gt;&lt;/a&gt;. This gallery is crafted for quick access and is a key part of our strategy to&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/09/keeping-you-in-the-loop-whats-new-in-our-knowledge-base/?_gl=1*jjsqcb*_ga*NjcyOTQ2NzYxLjE2ODc5NTkxOTc.*_ga_2VC139B3XV*MTcxNDc1MTE0Mi4yNjkuMS4xNzE0NzUxMTQzLjAuMC4w&quot;&gt; reduce cognitive load&lt;/a&gt; in our Knowledge Base content. By providing a range of inline icons that accurately depict interface elements of Firefox Desktop, this resource makes it easier for readers to follow along without overwhelming visual information.&lt;/p&gt;
  6115. &lt;p&gt;&lt;b&gt;We want your feedback!&lt;/b&gt; Join the conversation in our&lt;a href=&quot;https://support.mozilla.org/en-US/forums/contributors/716947?last=87495&quot;&gt; SUMO forum thread&lt;/a&gt; to ask questions or suggest new icons. Your feedback is crucial for improving this tool.&lt;/p&gt;
  6116. &lt;p&gt;Thanks for helping us support the Firefox community. We can’t wait to see how you use these new icons to enrich our Knowledge Base!&lt;/p&gt;
  6117. &lt;p&gt;Stay engaged and keep rocking the helpful web!&lt;/p&gt;
  6118. &lt;p&gt; &lt;/p&gt;</description>
  6119. <pubDate>Mon, 06 May 2024 15:14:56 +0000</pubDate>
  6120. <dc:creator>Lucas Siebert</dc:creator>
  6121. </item>
  6122. <item>
  6123. <title>The Rust Programming Language Blog: Announcing Rustup 1.27.1</title>
  6124. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/06/Rustup-1.27.1.html</guid>
  6125. <link>https://blog.rust-lang.org/2024/05/06/Rustup-1.27.1.html</link>
  6126. <description>&lt;p&gt;The Rustup team is happy to announce the release of Rustup version 1.27.1.
  6127. &lt;a href=&quot;https://rustup.rs&quot;&gt;Rustup&lt;/a&gt; is the recommended tool to install &lt;a href=&quot;https://www.rust-lang.org&quot;&gt;Rust&lt;/a&gt;, a programming language that is empowering everyone to build reliable and efficient software.&lt;/p&gt;
  6128. &lt;p&gt;If you have a previous version of Rustup installed, getting Rustup 1.27.1 is as easy as stopping any programs which may be using Rustup (e.g. closing your IDE) and running:&lt;/p&gt;
  6129. &lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ rustup self update
  6130. &lt;/code&gt;&lt;/pre&gt;
  6131. &lt;p&gt;Rustup will also automatically update itself at the end of a normal toolchain update:&lt;/p&gt;
  6132. &lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ rustup update
  6133. &lt;/code&gt;&lt;/pre&gt;
  6134. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://rustup.rs&quot;&gt;get Rustup&lt;/a&gt; from the appropriate page on our website.&lt;/p&gt;
  6135. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/Rustup-1.27.1.html#whats-new-in-rustup-1271&quot; id=&quot;whats-new-in-rustup-1271&quot;&gt;&lt;/a&gt;What's new in Rustup 1.27.1&lt;/h3&gt;
  6136. &lt;p&gt;This new Rustup release involves some minor bug fixes.&lt;/p&gt;
  6137. &lt;p&gt;The headlines for this release are:&lt;/p&gt;
  6138. &lt;ol&gt;
  6139. &lt;li&gt;Prebuilt Rustup binaries should be working on older macOS versions again.&lt;/li&gt;
  6140. &lt;li&gt;&lt;code&gt;rustup-init&lt;/code&gt; will no longer fail when &lt;code&gt;fish&lt;/code&gt; is installed but &lt;code&gt;~/.config/fish/conf.d&lt;/code&gt; hasn't been created.&lt;/li&gt;
  6141. &lt;li&gt;Regressions regarding symlinked &lt;code&gt;RUSTUP_HOME/(toolchains|downloads|tmp)&lt;/code&gt; have been addressed.&lt;/li&gt;
  6142. &lt;/ol&gt;
  6143. &lt;p&gt;Full details are available in the &lt;a href=&quot;https://github.com/rust-lang/rustup/blob/stable/CHANGELOG.md&quot;&gt;changelog&lt;/a&gt;!&lt;/p&gt;
  6144. &lt;p&gt;Rustup's documentation is also available in &lt;a href=&quot;https://rust-lang.github.io/rustup/&quot;&gt;the Rustup Book&lt;/a&gt;.&lt;/p&gt;
  6145. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/Rustup-1.27.1.html#thanks&quot; id=&quot;thanks&quot;&gt;&lt;/a&gt;Thanks&lt;/h3&gt;
  6146. &lt;p&gt;Thanks again to all the contributors who made Rustup 1.27.1 possible!&lt;/p&gt;
  6147. &lt;ul&gt;
  6148. &lt;li&gt;Anas (0x61nas)&lt;/li&gt;
  6149. &lt;li&gt;cuiyourong (cuiyourong)&lt;/li&gt;
  6150. &lt;li&gt;Dirkjan Ochtman (djc)&lt;/li&gt;
  6151. &lt;li&gt;Eric Huss (ehuss)&lt;/li&gt;
  6152. &lt;li&gt;eth3lbert (eth3lbert)&lt;/li&gt;
  6153. &lt;li&gt;hev (heiher)&lt;/li&gt;
  6154. &lt;li&gt;klensy (klensy)&lt;/li&gt;
  6155. &lt;li&gt;Chih Wang (ongchi)&lt;/li&gt;
  6156. &lt;li&gt;Adam (pie-flavor)&lt;/li&gt;
  6157. &lt;li&gt;rami3l (rami3l)&lt;/li&gt;
  6158. &lt;li&gt;Robert (rben01)&lt;/li&gt;
  6159. &lt;li&gt;Robert Collins (rbtcollins)&lt;/li&gt;
  6160. &lt;li&gt;Sun Bin (shandongbinzhou)&lt;/li&gt;
  6161. &lt;li&gt;Samuel Moelius (smoelius)&lt;/li&gt;
  6162. &lt;li&gt;vpochapuis (vpochapuis)&lt;/li&gt;
  6163. &lt;li&gt;Renovate Bot (renovate)&lt;/li&gt;
  6164. &lt;/ul&gt;</description>
  6165. <pubDate>Mon, 06 May 2024 00:00:01 +0000</pubDate>
  6166. <dc:creator>The Rustup Team</dc:creator>
  6167. </item>
  6168. <item>
  6169. <title>The Rust Programming Language Blog: Automatic checking of cfgs at compile-time</title>
  6170. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/06/check-cfg.html</guid>
  6171. <link>https://blog.rust-lang.org/2024/05/06/check-cfg.html</link>
  6172. <description>&lt;p&gt;The Cargo and Compiler team are delighted to announce that starting with Rust 1.80 (or nightly-2024-05-05) every &lt;em&gt;reachable&lt;/em&gt; &lt;code&gt;#[cfg]&lt;/code&gt; will be &lt;strong&gt;automatically checked&lt;/strong&gt; that they match the &lt;strong&gt;expected config names and values&lt;/strong&gt;.&lt;/p&gt;
  6173. &lt;p&gt;This can help with verifying that the crate is correctly handling conditional compilation for different target platforms or features. It ensures that the cfg settings are consistent between what is intended and what is used, helping to catch potential bugs or errors early in the development process.&lt;/p&gt;
  6174. &lt;p&gt;This addresses a common pitfall for new and advanced users.&lt;/p&gt;
  6175. &lt;p&gt;This is another step to our commitment to provide user-focused tooling and we are eager and excited to finally see it fixed, after more than two years since the original &lt;a href=&quot;https://github.com/rust-lang/rfcs/pull/3013&quot;&gt;RFC 3013&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#fn-1&quot; id=&quot;fnref-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;
  6176. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#a-look-at-the-feature&quot; id=&quot;a-look-at-the-feature&quot;&gt;&lt;/a&gt;A look at the feature&lt;/h3&gt;
  6177. &lt;p&gt;Every time a Cargo feature is declared that feature is transformed into a config that is passed to &lt;code&gt;rustc&lt;/code&gt; (the Rust compiler) so it can verify with it along with &lt;a href=&quot;https://doc.rust-lang.org/nightly/rustc/check-cfg.html#well-known-names-and-values&quot;&gt;well known cfgs&lt;/a&gt; if any of the &lt;code&gt;#[cfg]&lt;/code&gt;, &lt;code&gt;#![cfg_attr]&lt;/code&gt; and &lt;code&gt;cfg!&lt;/code&gt; have unexpected configs and report a warning with the &lt;code&gt;unexpected_cfgs&lt;/code&gt; lint.&lt;/p&gt;
  6178. &lt;p&gt;&lt;em&gt;&lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/em&gt;:&lt;/p&gt;
  6179. &lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[package]
  6180. name = &quot;foo&quot;
  6181.  
  6182. [features]
  6183. lasers = []
  6184. zapping = []
  6185. &lt;/code&gt;&lt;/pre&gt;
  6186. &lt;p&gt;&lt;em&gt;&lt;code&gt;src/lib.rs&lt;/code&gt;:&lt;/em&gt;&lt;/p&gt;
  6187. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[cfg(feature = &quot;lasers&quot;)]  // This condition is expected
  6188.                            // as &quot;lasers&quot; is an expected value
  6189.                            // of the `feature` cfg
  6190. fn shoot_lasers() {}
  6191.  
  6192. #[cfg(feature = &quot;monkeys&quot;)] // This condition is UNEXPECTED
  6193.                            // as &quot;monkeys&quot; is NOT an expected
  6194.                            // value of the `feature` cfg
  6195. fn write_shakespeare() {}
  6196.  
  6197. #[cfg(windosw)]             // This condition is UNEXPECTED
  6198.                            // it's supposed to be `windows`
  6199. fn win() {}
  6200. &lt;/code&gt;&lt;/pre&gt;
  6201. &lt;p&gt;&lt;em&gt;&lt;code&gt;cargo check&lt;/code&gt;&lt;/em&gt;:&lt;/p&gt;
  6202. &lt;p&gt;&lt;img alt=&quot;cargo-check&quot; src=&quot;https://blog.rust-lang.org/../images/2024-05-06-check-cfg/cargo-check.svg&quot; /&gt;&lt;/p&gt;
  6203. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#expecting-custom-cfgs&quot; id=&quot;expecting-custom-cfgs&quot;&gt;&lt;/a&gt;Expecting custom cfgs&lt;/h3&gt;
  6204. &lt;p&gt;&lt;em&gt;UPDATE: This section was added with the release of nightly-2024-05-19.&lt;/em&gt;&lt;/p&gt;
  6205. &lt;blockquote&gt;
  6206. &lt;p&gt;In Cargo point-of-view: a custom cfg is one that is neither defined by &lt;code&gt;rustc&lt;/code&gt; nor by a Cargo feature. Think of &lt;code&gt;tokio_unstable&lt;/code&gt;, &lt;code&gt;has_foo&lt;/code&gt;, ... but not &lt;code&gt;feature = &quot;lasers&quot;&lt;/code&gt;, &lt;code&gt;unix&lt;/code&gt; or &lt;code&gt;debug_assertions&lt;/code&gt;&lt;/p&gt;
  6207. &lt;/blockquote&gt;
  6208. &lt;p&gt;Some crates might use custom cfgs, like &lt;code&gt;loom&lt;/code&gt;, &lt;code&gt;fuzzing&lt;/code&gt; or &lt;code&gt;tokio_unstable&lt;/code&gt; that they expected from the environment (&lt;code&gt;RUSTFLAGS&lt;/code&gt; or other means) and which are always statically known at compile time. For those cases, Cargo provides via the &lt;code&gt;[lints]&lt;/code&gt; table a way to statically declare those cfgs as expected.&lt;/p&gt;
  6209. &lt;p&gt;Defining those custom cfgs as expected is done through the special &lt;code&gt;check-cfg&lt;/code&gt; config under &lt;code&gt;[lints.rust.unexpected_cfgs]&lt;/code&gt;:&lt;/p&gt;
  6210. &lt;p&gt;&lt;em&gt;&lt;code&gt;Cargo.toml&lt;/code&gt;&lt;/em&gt;&lt;/p&gt;
  6211. &lt;pre&gt;&lt;code class=&quot;language-toml&quot;&gt;[lints.rust]
  6212. unexpected_cfgs = { level = &quot;warn&quot;, check-cfg = ['cfg(loom)', 'cfg(fuzzing)'] }
  6213. &lt;/code&gt;&lt;/pre&gt;
  6214. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#custom-cfgs-in-build-scripts&quot; id=&quot;custom-cfgs-in-build-scripts&quot;&gt;&lt;/a&gt;Custom cfgs in build scripts&lt;/h3&gt;
  6215. &lt;p&gt;On the other hand some crates use custom cfgs that are enabled by some logic in the crate &lt;code&gt;build.rs&lt;/code&gt;. For those crates Cargo provides a new instruction: &lt;a href=&quot;https://doc.rust-lang.org/nightly/cargo/reference/build-scripts.html#rustc-check-cfg&quot;&gt;&lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt;&lt;/a&gt;&lt;sup class=&quot;footnote-ref&quot;&gt;&lt;a href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#fn-2&quot; id=&quot;fnref-2&quot;&gt;2&lt;/a&gt;&lt;/sup&gt; (or &lt;code&gt;cargo:rustc-check-cfg&lt;/code&gt; for older Cargo version).&lt;/p&gt;
  6216. &lt;p&gt;The syntax to use is described in the &lt;a href=&quot;https://doc.rust-lang.org/nightly/rustc/&quot;&gt;rustc book&lt;/a&gt; section &lt;a href=&quot;https://doc.rust-lang.org/nightly/rustc/check-cfg.html&quot;&gt;checking configuration&lt;/a&gt;, but in a nutshell the basic syntax of &lt;code&gt;--check-cfg&lt;/code&gt; is:&lt;/p&gt;
  6217. &lt;pre&gt;&lt;code&gt;cfg(name, values(&quot;value1&quot;, &quot;value2&quot;, ..., &quot;valueN&quot;))
  6218. &lt;/code&gt;&lt;/pre&gt;
  6219. &lt;p&gt;Note that every custom cfgs must always be expected, regardless if the cfg is active or not!&lt;/p&gt;
  6220. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#buildrs-example&quot; id=&quot;buildrs-example&quot;&gt;&lt;/a&gt;&lt;code&gt;build.rs&lt;/code&gt; example&lt;/h4&gt;
  6221. &lt;p&gt;&lt;code&gt;build.rs&lt;/code&gt;:&lt;/p&gt;
  6222. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
  6223.    println!(&quot;cargo::rustc-check-cfg=cfg(has_foo)&quot;);
  6224.    //        ^^^^^^^^^^^^^^^^^^^^^^ new with Cargo 1.80
  6225.    if has_foo() {
  6226.        println!(&quot;cargo::rustc-cfg=has_foo&quot;);
  6227.    }
  6228. }
  6229. &lt;/code&gt;&lt;/pre&gt;
  6230. &lt;blockquote&gt;
  6231. &lt;p&gt;Each &lt;code&gt;cargo::rustc-cfg&lt;/code&gt; should have an accompanying &lt;strong&gt;unconditional&lt;/strong&gt; &lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt; directive to avoid warnings like this: &lt;code&gt;unexpected cfg condition name: has_foo&lt;/code&gt;.&lt;/p&gt;
  6232. &lt;/blockquote&gt;
  6233. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#equivalence-table&quot; id=&quot;equivalence-table&quot;&gt;&lt;/a&gt;Equivalence table&lt;/h4&gt;
  6234. &lt;table&gt;
  6235. &lt;thead&gt;
  6236. &lt;tr&gt;
  6237. &lt;th&gt;&lt;code&gt;cargo::rustc-cfg&lt;/code&gt;&lt;/th&gt;
  6238. &lt;th&gt;&lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt;&lt;/th&gt;
  6239. &lt;/tr&gt;
  6240. &lt;/thead&gt;
  6241. &lt;tbody&gt;
  6242. &lt;tr&gt;
  6243. &lt;td&gt;&lt;code&gt;foo&lt;/code&gt;&lt;/td&gt;
  6244. &lt;td&gt;&lt;code&gt;cfg(foo)&lt;/code&gt; or &lt;code&gt;cfg(foo, values(none()))&lt;/code&gt;&lt;/td&gt;
  6245. &lt;/tr&gt;
  6246. &lt;tr&gt;
  6247. &lt;td&gt;&lt;code&gt;foo=&quot;&quot;&lt;/code&gt;&lt;/td&gt;
  6248. &lt;td&gt;&lt;code&gt;cfg(foo, values(&quot;&quot;))&lt;/code&gt;&lt;/td&gt;
  6249. &lt;/tr&gt;
  6250. &lt;tr&gt;
  6251. &lt;td&gt;&lt;code&gt;foo=&quot;bar&quot;&lt;/code&gt;&lt;/td&gt;
  6252. &lt;td&gt;&lt;code&gt;cfg(foo, values(&quot;bar&quot;))&lt;/code&gt;&lt;/td&gt;
  6253. &lt;/tr&gt;
  6254. &lt;tr&gt;
  6255. &lt;td&gt;&lt;code&gt;foo=&quot;1&quot;&lt;/code&gt; and &lt;code&gt;foo=&quot;2&quot;&lt;/code&gt;&lt;/td&gt;
  6256. &lt;td&gt;&lt;code&gt;cfg(foo, values(&quot;1&quot;, &quot;2&quot;))&lt;/code&gt;&lt;/td&gt;
  6257. &lt;/tr&gt;
  6258. &lt;tr&gt;
  6259. &lt;td&gt;&lt;code&gt;foo=&quot;1&quot;&lt;/code&gt; and &lt;code&gt;bar=&quot;2&quot;&lt;/code&gt;&lt;/td&gt;
  6260. &lt;td&gt;&lt;code&gt;cfg(foo, values(&quot;1&quot;))&lt;/code&gt; and &lt;code&gt;cfg(bar, values(&quot;2&quot;))&lt;/code&gt;&lt;/td&gt;
  6261. &lt;/tr&gt;
  6262. &lt;tr&gt;
  6263. &lt;td&gt;&lt;code&gt;foo&lt;/code&gt; and &lt;code&gt;foo=&quot;bar&quot;&lt;/code&gt;&lt;/td&gt;
  6264. &lt;td&gt;&lt;code&gt;cfg(foo, values(none(), &quot;bar&quot;))&lt;/code&gt;&lt;/td&gt;
  6265. &lt;/tr&gt;
  6266. &lt;/tbody&gt;
  6267. &lt;/table&gt;
  6268. &lt;p&gt;More details can be found in the &lt;a href=&quot;https://doc.rust-lang.org/nightly/rustc/check-cfg.html&quot;&gt;&lt;code&gt;rustc&lt;/code&gt; book&lt;/a&gt;.&lt;/p&gt;
  6269. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#frequently-asked-questions&quot; id=&quot;frequently-asked-questions&quot;&gt;&lt;/a&gt;Frequently asked questions&lt;/h3&gt;
  6270. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#can-it-be-disabled&quot; id=&quot;can-it-be-disabled&quot;&gt;&lt;/a&gt;Can it be disabled?&lt;/h4&gt;
  6271. &lt;p&gt;For Cargo users, the feature is &lt;strong&gt;always on&lt;/strong&gt; and &lt;em&gt;cannot&lt;/em&gt; be disabled, but like any other lints it can be controlled: &lt;code&gt;#![warn(unexpected_cfgs)]&lt;/code&gt;.&lt;/p&gt;
  6272. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#does-the-lint-affect-dependencies&quot; id=&quot;does-the-lint-affect-dependencies&quot;&gt;&lt;/a&gt;Does the lint affect dependencies?&lt;/h4&gt;
  6273. &lt;p&gt;No, like most lints, &lt;code&gt;unexpected_cfgs&lt;/code&gt; will only be reported for local packages thanks to &lt;a href=&quot;https://doc.rust-lang.org/rustc/lints/levels.html#capping-lints&quot;&gt;cap-lints&lt;/a&gt;.&lt;/p&gt;
  6274. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#how-does-it-interact-with-the-rustflags-env&quot; id=&quot;how-does-it-interact-with-the-rustflags-env&quot;&gt;&lt;/a&gt;How does it interact with the &lt;code&gt;RUSTFLAGS&lt;/code&gt; env?&lt;/h4&gt;
  6275. &lt;p&gt;You should be able to use the &lt;code&gt;RUSTFLAGS&lt;/code&gt; environment variable like it was before.
  6276. &lt;em&gt;Currently &lt;code&gt;--cfg&lt;/code&gt; arguments are not checked, only usage in code are.&lt;/em&gt;&lt;/p&gt;
  6277. &lt;p&gt;This means that doing &lt;code&gt;RUSTFLAGS=&quot;--cfg tokio_unstable&quot; cargo check&lt;/code&gt; will not report any warnings, unless &lt;code&gt;tokio_unstable&lt;/code&gt; is used within your local crates, in which case crate author will need to make sure that that custom cfg is expected with &lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt; in the &lt;code&gt;build.rs&lt;/code&gt; of that crate.&lt;/p&gt;
  6278. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#how-to-expect-custom-cfgs-without-a-buildrs&quot; id=&quot;how-to-expect-custom-cfgs-without-a-buildrs&quot;&gt;&lt;/a&gt;How to expect custom cfgs without a &lt;code&gt;build.rs&lt;/code&gt;?&lt;/h4&gt;
  6279. &lt;p&gt;&lt;em&gt;UPDATE: Cargo with nightly-2024-05-19 now provides the &lt;code&gt;[lints.rust.unexpected_cfgs.check-cfg]&lt;/code&gt; config to address the statically known custom cfgs.&lt;/em&gt;&lt;/p&gt;
  6280. &lt;p&gt;&lt;del&gt;There is &lt;strong&gt;currently no way&lt;/strong&gt; to expect a custom cfg other than with &lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt; in a &lt;code&gt;build.rs&lt;/code&gt;.&lt;/del&gt;&lt;/p&gt;
  6281. &lt;p&gt;Crate authors that don't want to use a &lt;code&gt;build.rs&lt;/code&gt; and cannot use &lt;code&gt;[lints.rust.unexpected_cfgs.check-cfg]&lt;/code&gt;, are encouraged to use Cargo features instead.&lt;/p&gt;
  6282. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#how-does-it-interact-with-other-build-systems&quot; id=&quot;how-does-it-interact-with-other-build-systems&quot;&gt;&lt;/a&gt;How does it interact with other build systems?&lt;/h4&gt;
  6283. &lt;p&gt;Non-Cargo based build systems are not affected by the lint by default. Build system authors that wish to have the same functionality should look at the &lt;code&gt;rustc&lt;/code&gt; documentation for the &lt;a href=&quot;https://doc.rust-lang.org/nightly/rustc/check-cfg.html&quot;&gt;&lt;code&gt;--check-cfg&lt;/code&gt;&lt;/a&gt; flag for a detailed explanation of how to achieve the same functionality.&lt;/p&gt;
  6284. &lt;section class=&quot;footnotes&quot;&gt;
  6285. &lt;ol&gt;
  6286. &lt;li id=&quot;fn-1&quot;&gt;
  6287. &lt;p&gt;The stabilized implementation and RFC 3013 diverge significantly, in particular there is only one form for &lt;code&gt;--check-cfg&lt;/code&gt;: &lt;code&gt;cfg()&lt;/code&gt; (instead of &lt;code&gt;values()&lt;/code&gt; and &lt;code&gt;names()&lt;/code&gt; being incomplete and subtlety incompatible with each other). &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#fnref-1&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  6288. &lt;/li&gt;
  6289. &lt;li id=&quot;fn-2&quot;&gt;
  6290. &lt;p&gt;&lt;code&gt;cargo::rustc-check-cfg&lt;/code&gt; will start working in Rust 1.80 (or nightly-2024-05-05). From Rust 1.77 to Rust 1.79 &lt;em&gt;(inclusive)&lt;/em&gt; it is silently ignored. In Rust 1.76 and below a warning is emitted when used without the unstable Cargo flag &lt;code&gt;-Zcheck-cfg&lt;/code&gt;. &lt;a class=&quot;footnote-backref&quot; href=&quot;https://blog.rust-lang.org/2024/05/06/check-cfg.html#fnref-2&quot;&gt;↩&lt;/a&gt;&lt;/p&gt;
  6291. &lt;/li&gt;
  6292. &lt;/ol&gt;
  6293. &lt;/section&gt;</description>
  6294. <pubDate>Mon, 06 May 2024 00:00:00 +0000</pubDate>
  6295. <dc:creator>Urgau</dc:creator>
  6296. </item>
  6297. <item>
  6298. <title>Don Marti: an easy experiment to support behavioral advertising</title>
  6299. <guid isPermaLink="true">https://blog.zgp.org/easy-experiment-behavioral-advertising/</guid>
  6300. <link>https://blog.zgp.org/easy-experiment-behavioral-advertising/</link>
  6301. <description>&lt;p&gt;&lt;em&gt;This is a follow-up to a previous post on &lt;a href=&quot;https://blog.zgp.org/b-l-o-c-k-in-the-u-s-a/&quot;&gt;how a majority of US residents surveyed are now using an ad blocker&lt;/a&gt;, and how the survey found that privacy concerns are now the number one reason to block ads.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Almost as long as Internet privacy tools have been a thing, so have articles from personalized ad proponents telling us not to use them, because personalized ads are good actually. The policy debate over personalized (or surveillance, or cross-context behavioral, or tracking-based, or whatever you want to call it) advertising seems to keep repeating an endless argument that on the one hand, personalized advertising causes some risk or cost, &lt;span class=&quot;aside&quot;&gt;I’m not going to summarize the risks or costs here, go read &lt;a href=&quot;https://www.bobhoffmanswebsite.com/copy-of-audio-mall&quot;&gt;Bob Hoffman’s books&lt;/a&gt; or &lt;a href=&quot;https://cyberdefensereview.army.mil/CDR-Content/Articles/Article-View/Article/2537110/microtargeting-as-information-warfare/&quot;&gt;Microtargeting as Information Warfare&lt;/a&gt; for more info&lt;/span&gt; but on the other hand we have to somehow balance that against the &lt;em&gt;benefits&lt;/em&gt; of personalized advertising.&lt;/p&gt; &lt;p&gt;Benefits? Let’s see them. &lt;q&gt;Cross-context behavioral advertising is good for consumers&lt;/q&gt; should be straightforward to test. If ad personalization really helps &lt;a href=&quot;https://www.ft.com/partnercontent/facebook/how-products-are-finding-people.html&quot;&gt;match buyers and sellers in a market&lt;/a&gt;, then &lt;strong&gt;users of privacy tools and privacy settings must be buying worse products and services.&lt;/strong&gt; Research should show that the more privacy options you pick, the less happy you are with your stuff. And the more personalized your ad experience is, the more satisfied of a customer you are. This is different from asking whether or not people prefer to have ad personalization turned on. That has been pretty extensively covered, and the answer is that &lt;a href=&quot;https://blog.zgp.org/30-40-30/&quot;&gt;some people do, and some people don’t.&lt;/a&gt; This question isn’t about whether people &lt;em&gt;like&lt;/em&gt; personalized ads or not, it’s about whether people who get more personalized ads are happier with how they spend their money.&lt;/p&gt; &lt;p&gt;This should be a fairly low-cost project because in general, the companies that do the most personalized advertising are in the best position to do the research to support it. Are users of privacy tools and settings more or less satisfied with the products and services they buy than people who leave the personalized ad options on?&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;p&gt;Do privacy-protected users give lower ratings to the products they buy?&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Do privacy-protected users return or stop using more of their purchases?&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Are privacy-protected users more likely to buy a replacement, competing product after an unsuccessful first purchase in a category?&lt;/p&gt;&lt;/li&gt; &lt;li&gt;&lt;p&gt;Are privacy-protected users more likely to agree with general statements about a decline in quality and trustworthiness in business in general?&lt;/p&gt;&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The correlation between &lt;strong&gt;more privacy&lt;/strong&gt; and &lt;strong&gt;less satisfied consumer&lt;/strong&gt; would be detectable from a variety of angles. Vendors of browsers with &lt;a href=&quot;https://blog.zgp.org/google-chrome-checklist/&quot;&gt;preferences that affect ad targeting&lt;/a&gt; should be able to show that people who turn on the privacy settings are somehow worse off than people who don’t. Anti-adblock companies do research on ad blocker users—so how are shopping experiences different for those users? Any product that connects to a server for updates or telemetry is providing data on how long the buyer chooses to keep using it. And—the biggest opportunity here—any company that has an Apple iOS app (and that’s a lot of companies) should be able to compare satisfaction metrics between customers with App Tracking Transparency (ATT) on or off.&lt;/p&gt; &lt;p&gt;Ad platforms, search engines, social network companies, and online retailers all have access to the needed info on ads, privacy settings, locations, and purchases. Best of all, they’re constantly running customer surveys and experiments of all kinds. It would be straightforward for any of these companies to run yet another user satisfaction survey, to prove what should be an obvious, measurable effect. I’m really looking for any kind of research here, whether it’s a credit card company running a SQL query on existing data to point out that customers with iOS app tracking turned off have more chargebacks, or a longer-term customer satisfaction study, anything.&lt;/p&gt; &lt;h3&gt;looking at the data we do have&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;Update 16 May 2024:&lt;/strong&gt; &lt;a href=&quot;https://marketing.wharton.upenn.edu/wp-content/uploads/2023/10/11.09.2023-Korganbekova-Malika-PAPER-JMP.pdf&quot;&gt;Balancing User Privacy and Personalization by Malika Korganbekova and Cole Zuber&lt;/a&gt;. This study simulated the effects of a privacy feature by truncating browsing history for some Wayfair shoppers, and found that people who were assigned to the personalized group and chose a product personalized to them were 10% less likely to return it than people in the non-personalized group.&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4635884&quot;&gt;The Welfare Effects of Ad Blocking&lt;/a&gt; by Lin et al. was different—members of the treatment group got an ad blocker affecting all sites, not just one retail site.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;[P]articipants that were asked to install an ad-blocker become less likely to regret recent purchases, while participants that were asked to uninstall their ad-blocker report lower levels of satisfaction with their recent purchases.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;The ad blockers used in that study, however, were multi-purpose ones such as &lt;a href=&quot;https://github.com/gorhill/uBlock/wiki/Scientific-papers&quot;&gt;uBlock Origin&lt;/a&gt; that block ads in general, not just personalization.&lt;/p&gt; &lt;p&gt;The effect of privacy settings on scams goes two ways: you can avoid being specifically targeted for a scam, but more likely you can also &lt;a href=&quot;https://blog.zgp.org/deception-design/&quot;&gt;just get more scam ads by default if you feed in too little info to be targeted for the good ads&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The Internet as a whole is much more various in seller honesty level than the Wayfair platform is, which might help explain the difference in customer satisfaction seen between the Korganbekova and Zuber paper and the Lin et al. paper. Lin et al. showed that people were more satisfied as customers when receiving fewer ads in total, but they might have been even less satisified if they received more of the lower-quality ads that you’re more likely to get if adtech firms don’t have enough data to target you for a bigger-budget campaign.&lt;/p&gt; &lt;p&gt;Another related paper is &lt;a href=&quot;https://www.ftc.gov/system/files/ftc_gov/pdf/PrivacyCon-2022-Acquisiti-Mustri-Behavioral-Advertising-Consumer-Welfare.pdf&quot;&gt;Behavioral advertising and consumer welfare: An empirical investigation&lt;/a&gt;.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;The presence of low quality vendors, along with the recent increase in the use of ad blockers, makes it increasingly difficult for new, high quality vendors, to reach new clients. Consumers benefit from having access to new sellers that are able to meet their needs through behavioral ads, as long as they are good sellers.&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;but&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;targeted ads are more likely to be associated with lower quality vendors, and higher prices for identical products, compared to competing alternatives found in organic search results&lt;/p&gt; &lt;/blockquote&gt; &lt;p&gt;If you look back on the history of advertising, there has never been an ad medium that required so much legal and technical complexity to try to get people to accept it. Why is &lt;a href=&quot;https://techcrunch.com/2024/04/17/edpb-consent-or-pay-opinion/&quot;&gt;Meta going to so much trouble&lt;/a&gt; to try to come up with a legal way to require people in the EU to accept personalized ads? If ad personalization is so good for consumers, won’t they pick it on their own? Anyway, I’m looking for research on how personalization and privacy choices affect customer satisfaction.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/free-riders/&quot;&gt;free riding on future web ads?&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/reputation-signal/&quot;&gt;Reputation, signaling, and targeted ads&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/b-l-o-c-k-in-the-u-s-a/&quot;&gt;B L O C K in the U S A&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/banning-surveillance-advertising/&quot;&gt;banning surveillance advertising&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/privacy-econ-sources/&quot;&gt;privacy economics sources&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/when-can-deceptive-sellers-outbid-honest-sellers-for-ad-impressions/&quot;&gt;When can deceptive sellers outbid honest sellers for ad impressions?&lt;/a&gt;&lt;/p&gt;</description>
  6302. <pubDate>Sat, 04 May 2024 00:00:00 +0000</pubDate>
  6303. </item>
  6304. <item>
  6305. <title>Adrian Gaudebert: The challenges of teaching a complex game</title>
  6306. <guid isPermaLink="false">urn:md5:010cbc81f2b8194755897ca97bca68b0</guid>
  6307. <link>http://adrian.gaudebert.fr/blog/post/The-challenges-of-teaching-a-complex-game</link>
  6308. <description>&lt;p&gt;When I was 13, my mom bought me Civilization III from a retail shop, then went on to do some more shopping. I stayed in the car, with this elegant box in my hands, craving to play the game it contained. I opened the box, and there discovered something magical: the Civilization III Manual. Having nothing better to do, I started reading it…&lt;/p&gt;
  6309.  
  6310. &lt;figure&gt;&lt;a href=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-manual.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;The Civilization III manual&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/.civilization-III-manual_m.jpg&quot; style=&quot;width: 448px; height: 314px;&quot; /&gt;&lt;/a&gt;
  6311.  
  6312. &amp;lt;figcaption&amp;gt;&lt;em&gt;That game manual was THICK&lt;strong&gt;.&lt;/strong&gt;&lt;/em&gt;&amp;lt;/figcaption&amp;gt;
  6313. &lt;/figure&gt;        &lt;p&gt;More than 20 years later, I still remember how great reading that book felt. I was propelled into the game, learning about its systems and strategies, discovering screens of foggy maps and world wonders. It made me love the game before I had even played it! Since then I've played all Civilization games that came out — including Humankind, the unofficial 7th episode — and loved all of them. Would I have had the same connection to these games had I not read the manual? Impossible to tell. Would I have read that book had I not been trapped in a car with the game box on my laps? Definitely not! Even the developers of the game knew that nobody was reading those texts:&lt;/p&gt;
  6314.  
  6315. &lt;figure&gt;&lt;a href=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-quote.jpg&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;A quote from the Civilization III manual&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/civilization-III-quote.jpg&quot; /&gt;&lt;/a&gt;
  6316.  
  6317. &amp;lt;figcaption&amp;gt;&lt;em&gt;“The authors and developers of computer games know too well that most players never read the manual.”&lt;/em&gt;&amp;lt;/figcaption&amp;gt;
  6318. &lt;/figure&gt;
  6319.  
  6320. &lt;p&gt;Here's me now, 20-something years later, having made a game of my own and needing to teach it to potential players… Should I write a full-blown game manual, hoping that a little 13-years old will read it on a parking lot?&lt;/p&gt;
  6321.  
  6322. &lt;p&gt;Heck no! Ain't nobody got time for that!&lt;/p&gt;
  6323.  
  6324. &lt;h3&gt;Let's make a tutorial instead&lt;/h3&gt;
  6325.  
  6326. &lt;p&gt;Dawnmaker has been built almost like a board game, in the sense that it has complex rules that you have to learn before you can play. Physical board game players are used to that: someone has to go through the rules before they can explain them to the rest of their players group. But video games are a different beast, and we've long moved away from reading… well, almost anything at all, really, and certainly not rules. You can't put each player into a car on a parking lot with nothing else to do other than reading the rules of your game. If you were to present the video game player with a rules book, in today's world of abundance, they would just move on to the next game in their unending backlog.&lt;/p&gt;
  6327.  
  6328. &lt;p&gt;Teaching a game is thus incredibly difficult: it has to have as little text as possible, it has to be fun and rewarding, and it has to hook the player so that, by the end of the teaching phase, they still want to play the actual game.&lt;/p&gt;
  6329.  
  6330. &lt;p&gt;It's with all those things in mind that I started building Dawnmaker's tutorial. I set two main rules in place: first, use as little words as possible, and second, make the player learn while doing. The first iteration of the tutorial was very terse: you only had a small goal written at the top of the screen, and almost no explanations whatsoever about what you were to do, or why. It turns out, that didn't work too well. Players were lost, especially when it came to the most complex actions or features of the game. Past a certain point in the tutorial, almost all of the players stopped reading the objectives at the top of the screen. And finally, they were also lacking a sense of purpose.&lt;/p&gt;
  6331.  
  6332. &lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;media&quot; src=&quot;http://adrian.gaudebert.fr/blog/public/icones-billets/tutorial-tooltips.png&quot; style=&quot;float: right; margin: 0 0 1em 1em;&quot; /&gt;&lt;/p&gt;
  6333.  
  6334. &lt;p&gt;So for all my good intents, I had to revise my approach and write more words. The second iteration, which is now live in the game and demo, has a lot of small tooltips that pop up around the screen as the interface shows itself. I've tried to load information as slowly as possible, giving the player only what they need at a given moment. I think I approximately quadrupled the number of words in the tutorial, but such is the reality of teaching a complex game.&lt;/p&gt;
  6335.  
  6336. &lt;p&gt;The other big change I made was to give the player a better sense of progression in the tutorial. The objectives now stay visible in a box on the left-hand side of the screen. They have little animations and sounds that reward the player when they complete a task. Seeing that list grow shows how the player has progressed and is also rewarding by itself.&lt;/p&gt;
  6337.  
  6338. &lt;p&gt;Teaching the game doesn't only happen in the tutorial though, but also on the various signs and feedback we put around the game. Here's an example: during the tutorial, new players did not understand what was happening with the new building choice that was presented. The solution to this was not to explain with words what those buildings where, but to show a feedback. Now, whenever you gain a new building, you see that same building popping up in the center of the board, then moving towards the buildings roster. It's a double win: they understand that the building goes somewhere, they see where, and they are inclined to check that place and see what it is. I guess one feedback is worth a thousand words?&lt;/p&gt;
  6339.  
  6340. &lt;p&gt;This version of the tutorial is still far from perfect. But it is the first thing players interact with, and thus it is a piece of the game that really has to shine. We'll keep collecting feedback from new players, and use that to polish the tutorial until, like Eclairium, it shines bright.&lt;/p&gt;
  6341.  
  6342. &lt;p&gt;&lt;em&gt;BTW: unlike Eclairium, diamonds do not shine, they simply reflect light. &lt;a href=&quot;https://www.youtube.com/watch?v=lWA2pjMjpBs&quot;&gt;Rihanna has been lying to us all&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  6343.  
  6344. &lt;h3&gt;Next event: Geektouch in Lyon&lt;/h3&gt;
  6345.  
  6346. &lt;p&gt;If you're in Lyon or close to it, come and meet us at the &lt;a href=&quot;https://www.geektouch-festival.com/&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot; title=&quot;Geektouch 4 &amp;amp; 5 mai 2024 à Lyon Eurexpo - GEEKTOUCH&quot;&gt;Geektouch / Japan Touch festival&lt;/a&gt; in Eurexpo on May 4th and 5th! We'll have a stand on the Indie Game Lab space (lot A87). You will of course get to play with the latest version of Dawnmaker. We hope to see you there!&lt;/p&gt;
  6347.  
  6348. &lt;hr /&gt;
  6349. &lt;p&gt;This piece was initially sent out to the readers of our newsletter. Wanna join in on the fun? Head out to &lt;a href=&quot;https://arpentor.studio/games/dawnmaker/&quot; hreflang=&quot;en&quot;&gt;Dawnmaker's presentation page&lt;/a&gt; and fill the form. You'll receive regular stories about how we're making this game, the latest news of its development, as well as an exclusive access to Dawnmaker's alpha version!&lt;/p&gt;
  6350.  
  6351. &lt;p style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://arpentor.studio/games/dawnmaker/&quot; hreflang=&quot;en&quot; style=&quot;display: inline-block; border-radius: 1em; background-color: #C8D6AF; padding: 1em 2em; font-weight: bold; font-size: 1.1em;&quot;&gt;Join our community!&lt;/a&gt;&lt;/p&gt;</description>
  6352. <pubDate>Fri, 03 May 2024 14:29:14 +0000</pubDate>
  6353. <dc:creator>Adrian</dc:creator>
  6354. </item>
  6355. <item>
  6356. <title>Wil Clouser: I made a new hack poster</title>
  6357. <guid isPermaLink="false">http://192.168.10.201:4000/2024/05/03/I-made-a-new-hack-poster</guid>
  6358. <link>http://192.168.10.201:4000/2024/05/03/I-made-a-new-hack-poster/</link>
  6359. <description>&lt;p&gt;I was feeling nostalgic a couple months ago and built a hack poster out of
  6360. plywood.  It’s mostly modeled after the original but I added the radio tower
  6361. and changed the words.  “This technology could fall into the right hands” still
  6362. makes me smile when I see it out in the world.&lt;/p&gt;
  6363.  
  6364. &lt;p&gt;&lt;img alt=&quot;Poster hanging on the wall&quot; src=&quot;http://192.168.10.201:4000/assets/img/2024-art-hack-poster-1.jpg&quot; /&gt;
  6365. &lt;img alt=&quot;Close-up of radio tower&quot; src=&quot;http://192.168.10.201:4000/assets/img/2024-art-hack-poster-2.jpg&quot; /&gt;
  6366. &lt;img alt=&quot;Close-up of lettering&quot; src=&quot;http://192.168.10.201:4000/assets/img/2024-art-hack-poster-3.jpg&quot; /&gt;&lt;/p&gt;</description>
  6367. <pubDate>Fri, 03 May 2024 07:00:00 +0000</pubDate>
  6368. <dc:creator>Wil Clouser</dc:creator>
  6369. </item>
  6370. <item>
  6371. <title>Mozilla Addons Blog: 1000+ Firefox for Android extensions now available</title>
  6372. <guid isPermaLink="false">https://blog.mozilla.org/addons/?p=9166</guid>
  6373. <link>https://blog.mozilla.org/addons/2024/05/02/1000-firefox-for-android-extensions-now-available/</link>
  6374. <description>&lt;p&gt;&lt;img alt=&quot;&quot; class=&quot;alignleft size-medium wp-image-9167&quot; height=&quot;326&quot; src=&quot;https://blog.mozilla.org/addons/files/2024/05/android_pic-580x326.png&quot; width=&quot;580&quot; /&gt;The new open ecosystem of extensions on Firefox for Android &lt;a href=&quot;https://blog.mozilla.org/addons/2023/12/14/a-new-world-of-open-extensions-on-firefox-for-android-has-arrived/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;launched in December with just over 400 extensions&lt;/a&gt;. Less than five months later we’ve &lt;a href=&quot;https://addons.mozilla.org/android/search/?sort=users&amp;amp;type=extension&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;surpassed 1,000 Firefox for Android extensions&lt;/a&gt;. That’s an impressive achievement by this developer community! It’s exciting to see so many developers embrace the opportunity to explore new creative possibilities for mobile browser customization.&lt;/p&gt;
  6375. &lt;p&gt;If you’re a developer intrigued to learn more about building extensions on Firefox for Android, here’s a great place to &lt;a href=&quot;https://extensionworkshop.com/documentation/develop/developing-extensions-for-firefox-for-android/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;get started&lt;/a&gt;. Or maybe you already have some &lt;a href=&quot;https://discourse.mozilla.org/t/top-apis-mising-on-firefox-for-android/124506&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;feedback about missing API’s on Firefox for Android?&lt;/a&gt;&lt;/p&gt;
  6376. &lt;p&gt;What are some of your favorite new Firefox for Android extensions? Drop some props in the comments below.&lt;/p&gt;
  6377. &lt;p&gt;The post &lt;a href=&quot;https://blog.mozilla.org/addons/2024/05/02/1000-firefox-for-android-extensions-now-available/&quot;&gt;1000+ Firefox for Android extensions now available&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.mozilla.org/addons&quot;&gt;Mozilla Add-ons Community Blog&lt;/a&gt;.&lt;/p&gt;</description>
  6378. <pubDate>Thu, 02 May 2024 19:54:59 +0000</pubDate>
  6379. <dc:creator>Scott DeVaney</dc:creator>
  6380. </item>
  6381. <item>
  6382. <title>Mozilla Localization (L10N): L10n report: May 2024 Edition</title>
  6383. <guid isPermaLink="false">https://blog.mozilla.org/l10n/?p=1675</guid>
  6384. <link>https://blog.mozilla.org/l10n/2024/05/02/l10n-report-may-2024-edition/</link>
  6385. <description>&lt;p&gt;&lt;i&gt;Please note some of the information provided in this report may be subject to change as we are sometimes sharing information about projects that are still in early stages and are not final yet. &lt;/i&gt;&lt;/p&gt;
  6386. &lt;h3&gt;New content and projects&lt;/h3&gt;
  6387. &lt;h4&gt;What’s new or coming up in Firefox desktop&lt;/h4&gt;
  6388. &lt;p&gt;To start, a “logistic” announcement: on April 29 we changed the configuration of the Firefox project in Pontoon to use a different repository for source (English) strings. This is part of a larger change that will &lt;a href=&quot;https://groups.google.com/a/mozilla.org/g/firefox-dev/c/QnfydsDj48o/m/8WadV0_dBQAJ&quot;&gt;move Firefox development from Mercurial to Git&lt;/a&gt;.&lt;/p&gt;
  6389. &lt;p&gt;While the change was mostly transparent for localizers, there is an added benefit: as part of the Firefox project, you will now be able to localize about 40 strings that are used by &lt;a href=&quot;https://mozilla.github.io/geckoview/&quot;&gt;GeckoView&lt;/a&gt;, the core of our Android browsers (Firefox, Focus). For your convenience, these are grouped in a specific tag called GeckoView. Since these are mostly old strings dating back to Fennec (Firefox for Android up to version 68), you will also find that existing translations have been imported — in fact, we imported over 4 thousand translations.&lt;/p&gt;
  6390. &lt;p&gt;Going back to Firefox desktop, version 127 is currently in Nightly, and will move to Beta on May 13. Over the past few weeks there have been a few new features and updates that’s it’s worth testing to ensure the best experience for users.&lt;/p&gt;
  6391. &lt;p&gt;You are probably aware of the &lt;a href=&quot;https://support.mozilla.org/kb/website-translation&quot;&gt;Firefox Translations&lt;/a&gt; feature available for a growing number of languages. While this feature was originally available for full-page translation, now it’s also possible to select text in the page and translate it through the context menu.&lt;/p&gt;
  6392. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1682&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/select_translate.png&quot;&gt;&lt;img alt=&quot;Screenshot of the translation selection feature in Firefox.&quot; class=&quot;wp-image-1682 size-large&quot; height=&quot;388&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/select_translate-600x388.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1682&quot;&gt;Screenshot of the Translation selection feature in Firefox.&lt;/p&gt;&lt;/div&gt;
  6393. &lt;p&gt;&lt;a href=&quot;https://support.mozilla.org/kb/firefox-reader-view-clutter-free-web-pages&quot;&gt;Reader Mode&lt;/a&gt; is also in the process of getting a redesign, with more controls to customize the user experience.&lt;/p&gt;
  6394. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1681&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/reader_mode.png&quot;&gt;&lt;img alt=&quot;Screenshot of the Reader Mode settings in Firefox Nightly.&quot; class=&quot;wp-image-1681 size-large&quot; height=&quot;374&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/reader_mode-600x374.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1681&quot;&gt;Screenshot of the Reader Mode settings in Firefox Nightly.&lt;/p&gt;&lt;/div&gt;
  6395. &lt;p&gt;The New Tab page has a new wallpaper function: in order to test it, go to &lt;code&gt;about:config&lt;/code&gt; (see &lt;a href=&quot;https://support.mozilla.org/kb/about-config-editor-firefox&quot;&gt;this page&lt;/a&gt; if you’re unfamiliar), search for &lt;code&gt;browser.newtabpage.activity-stream.newtabWallpapers.enabled&lt;/code&gt; and flip its value to &lt;code&gt;true&lt;/code&gt; (double-click will work). At this point, open a new tab and click the gear icon in the top-right corner. Note that the available wallpapers change depending on the current theme (dark vs light).&lt;/p&gt;
  6396. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1678&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/newtab_wallpaper.png&quot;&gt;&lt;img alt=&quot;Screenshot of New Tab wallpaper selection in Nightly.&quot; class=&quot;size-large wp-image-1678&quot; height=&quot;504&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/newtab_wallpaper-600x504.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1678&quot;&gt;Screenshot of New Tab wallpaper selection in Nightly.&lt;/p&gt;&lt;/div&gt;
  6397. &lt;p&gt;Last but not least, make sure to test the new features available in the integrated PDF Reader, in particular the dialog to &lt;a href=&quot;https://support.mozilla.org/kb/view-pdf-files-firefox-or-choose-another-viewer#w_add-an-image-to-pdf-files&quot;&gt;add images&lt;/a&gt; and &lt;a href=&quot;https://support.mozilla.org/kb/view-pdf-files-firefox-or-choose-another-viewer#w_highlight-in-pdf-files&quot;&gt;highlight&lt;/a&gt; elements in the page.&lt;/p&gt;
  6398. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1679&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/pdf_viewer.png&quot;&gt;&lt;img alt=&quot;Screenshot of the PDF Viewer in Firefox, with the &amp;quot;Add image&amp;quot; UI.&quot; class=&quot;size-large wp-image-1679&quot; height=&quot;501&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/pdf_viewer-600x501.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1679&quot;&gt;Screenshot of the PDF Viewer in Firefox, with the “Add image” UI.&lt;/p&gt;&lt;/div&gt;
  6399. &lt;h4&gt;What’s new or coming up in mobile&lt;/h4&gt;
  6400. &lt;p&gt;The mobile team is currently redesigning the app menus in Firefox Android and iOS. There will be many new menu strings landing in the upcoming versions (you may have already noticed some prelanding), including some dynamic menu text that may get truncated for some locales – especially on smaller screens.&lt;/p&gt;
  6401. &lt;p&gt;Testing for this type of localization issues will be a focus: we’ll set expectations for it soon and send testing instructions (v130 or v131 releases are currently the target). Strings will be making their way incrementally in the new menus available through Firefox Nightly, allowing enough time for localizers to translate and test continuously.&lt;/p&gt;
  6402. &lt;h4&gt;What’s new or coming up in web projects&lt;/h4&gt;
  6403. &lt;h5&gt;Mozilla.org&lt;/h5&gt;
  6404. &lt;p&gt;The mozilla.org team is creating a regular cleanup routine by labeling the soon-to-be replaced strings with an expiration date, usually two months after the string has become obsolete. This approach will minimize communities’ time localizing strings no longer used. In other words, if you see a string labeled with a date, please skip it. Below is an example, and in this case, you want to localize the v2 string:&lt;/p&gt;
  6405. &lt;blockquote style=&quot;font-family: Monospace;&quot;&gt;&lt;p&gt;example-v2 = Security, reliability and speed — on every device, anywhere you go.&lt;/p&gt;
  6406. &lt;p&gt;# Obsolete string (expires: 2024-03-18)&lt;br /&gt;
  6407. example = Security, reliability and speed — from a name you can trust.&lt;/p&gt;&lt;/blockquote&gt;
  6408. &lt;h5&gt;Relay Website&lt;/h5&gt;
  6409. &lt;p&gt;This product is in maintenance mode and it will not be open for new locales until we remove obsolete strings and revert the content migration to mozilla.org (see also &lt;a href=&quot;https://blog.mozilla.org/l10n/2023/11/03/l10n-report-november-2023-edition/&quot;&gt;l10n report from November 2023&lt;/a&gt;).&lt;/p&gt;
  6410. &lt;h4&gt;What’s new or coming up in SUMO&lt;/h4&gt;
  6411. &lt;ul&gt;
  6412. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/03/25/introducing-konstantina/&quot;&gt;Konstantina&lt;/a&gt; is joining the SUMO force! She moved from the Marketing team to the Customer Experience team in late Q1. If you haven’t get to know her, please don’t hesitate to say hi!&lt;/li&gt;
  6413. &lt;li&gt;AI spam has been a big issue in our forum lately, so we decided to spin up a new contributor policy around the use of AI-generated tools. Please check&lt;a href=&quot;https://support.mozilla.org/forums/contributors/716669?last=86840&quot;&gt; this thread&lt;/a&gt; if you haven’t!&lt;/li&gt;
  6414. &lt;li&gt;We opened an&lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1885070&quot;&gt; AAQ for NL&lt;/a&gt; in our support forum. Thanks to Tim Maks and the rest of the NL community, who’ve been very supportive of this work.&lt;/li&gt;
  6415. &lt;li&gt;Are you contributing to our Knowledge Base? You may want to read the recent blog posts from the content team to get to know more about&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/09/keeping-you-in-the-loop-whats-new-in-our-knowledge-base/&quot;&gt; what they’re up to&lt;/a&gt;. In short, they’re doing a lot around&lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/18/freshening-up-the-knowledge-base-for-spring-2024/&quot;&gt; freshening up our knowledge base articles&lt;/a&gt;.&lt;/li&gt;
  6416. &lt;li&gt;Wanna know more about what we’ve done in Q1 2024, read the recap &lt;a href=&quot;https://blog.mozilla.org/sumo/2024/04/30/whats-up-with-sumo-q1-2024/&quot;&gt;here&lt;/a&gt;.&lt;/li&gt;
  6417. &lt;/ul&gt;
  6418. &lt;h4&gt;What’s new or coming up in Pontoon&lt;/h4&gt;
  6419. &lt;h5&gt;Large Language Model (LLM) Integration&lt;/h5&gt;
  6420. &lt;p&gt;We’re thrilled to announce the integration of LLM-assisted translations into Pontoon! For all locales utilizing Google Translate as a translation source, a new AI-powered option is now available within the ‘Machinery’ tab. This feature enhances Google Translate outputs by leveraging a Large Language Model (LLM). Users can now tailor translations to be more formal or informal and rephrase text for clarity and tone.&lt;/p&gt;
  6421. &lt;p&gt;Since January, our team has conducted extensive research to explore how other localization services are utilizing AI. We specifically focused on comparing the capabilities of Large Language Models (LLMs) against traditional machine translation methods and identifying industry best practices.&lt;/p&gt;
  6422. &lt;p&gt;Our findings revealed that while tools like Google Translate provide a solid foundation, they sometimes fall short, often translating text too literally. Recognizing the potential for improvement, we introduced functionality within Pontoon to adjust the tone and refine phrases directly.&lt;/p&gt;
  6423. &lt;p&gt;For example, consider the phrase “Firefox has your back” translated in the Italian locale. The suggestion provided by Google’s machine translation is literal and incorrect (“Firefox covers your shoulders”). The images below demonstrate the use of the “Rephrase” option:&lt;/p&gt;
  6424. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1677&quot; style=&quot;width: 472px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm2.png&quot;&gt;&lt;img alt=&quot;Screenshot of the LLM feature in Pontoon (before selecting a command).&quot; class=&quot;size-full wp-image-1677&quot; height=&quot;374&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm2.png&quot; width=&quot;462&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1677&quot;&gt;Dropdown to use the LLM feature&lt;/p&gt;&lt;/div&gt;
  6425. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1676&quot; style=&quot;width: 459px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm1.png&quot;&gt;&lt;img alt=&quot;Screenshot of the LLM feature in Pontoon (after selecting the rephrase command).&quot; class=&quot;size-full wp-image-1676&quot; height=&quot;351&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/llm1.png&quot; width=&quot;449&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1676&quot;&gt;Enhanced translation output from the LLM rephrasing the initial Google Translate result.&lt;/p&gt;&lt;/div&gt;
  6426. &lt;p&gt;Furthering our community engagement, on April 29th, we hosted a Localization Fireside Chat. During this session, we discussed the new feature in depth and provided a live demonstration. Catch the highlights of our discussion at the following recordings (the LLM feature is discussed at the 7:22 mark):&lt;/p&gt;
  6427. &lt;ul&gt;
  6428. &lt;li&gt;&lt;b&gt;AirMozilla:&lt;/b&gt;&lt;a href=&quot;https://mzl.la/localization-fireside-chat-2024-04-29&quot;&gt; View Recording&lt;/a&gt;&lt;/li&gt;
  6429. &lt;li&gt;&lt;b&gt;YouTube: &lt;/b&gt;&lt;a href=&quot;https://youtube.com/live/eUcHRDaaFe0?feature=share&quot;&gt;View Recording&lt;/a&gt;&lt;/li&gt;
  6430. &lt;/ul&gt;
  6431. &lt;h5&gt;Performance improvements&lt;/h5&gt;
  6432. &lt;p&gt;At the end of the last year we’ve &lt;a href=&quot;https://blog.mozilla.org/l10n/2023/12/20/2024-pontoon-survey-results/&quot;&gt;asked&lt;/a&gt; Mozilla localizers what areas of &lt;a href=&quot;https://pontoon.mozilla.org/&quot;&gt;Pontoon&lt;/a&gt; would they like to see improved. Performance optimizations were one of the top-voted requests and we’re happy to report we’ve landed several speedups since the beginning of the year.&lt;/p&gt;
  6433. &lt;p&gt;Most notable improvements were made to the dashboards, with Contributors, Insights and Tags pages now loading in a fraction of the time they took to load earlier in the year. We’ve also improved the loading times of Permissions tab, Notifications page and some filters.&lt;/p&gt;
  6434. &lt;p&gt;As shown in the chart below, almost all the pages and actions will now take less time to load.&lt;/p&gt;
  6435. &lt;div class=&quot;wp-caption aligncenter&quot; id=&quot;attachment_1680&quot; style=&quot;width: 610px;&quot;&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/files/2024/05/pontoon_perfs.png&quot;&gt;&lt;img alt=&quot;Chart showing the apdex score of several views in Pontoon.&quot; class=&quot;wp-image-1680 size-large&quot; height=&quot;283&quot; src=&quot;https://blog.mozilla.org/l10n/files/2024/05/pontoon_perfs-600x283.png&quot; width=&quot;600&quot; /&gt;&lt;/a&gt;&lt;p class=&quot;wp-caption-text&quot; id=&quot;caption-attachment-1680&quot;&gt;Chart showing the improved apdex score of several views in Pontoon.&lt;/p&gt;&lt;/div&gt;
  6436. &lt;h3&gt;Events&lt;/h3&gt;
  6437. &lt;p&gt;Watch our latest localization virtual events &lt;a href=&quot;https://mozilla.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%220e65cd7b-1564-4b1c-9537-aff1000a5aa5%22&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
  6438. &lt;p&gt;Want to showcase an event coming up that your community is participating in? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Contact us&lt;/a&gt; and we’ll include it.&lt;/p&gt;
  6439. &lt;h3&gt;Useful Links&lt;/h3&gt;
  6440. &lt;ul&gt;
  6441. &lt;li&gt;&lt;a href=&quot;https://chat.mozilla.org/#/room/#l10n-community:mozilla.org&quot;&gt;#l10n-community channel on Element (chat.mozilla.org)&lt;/a&gt;&lt;/li&gt;
  6442. &lt;li&gt;&lt;a href=&quot;https://discourse.mozilla.org/c/l10n/547&quot;&gt;Localization category on Discourse&lt;/a&gt;&lt;/li&gt;
  6443. &lt;li&gt;&lt;a href=&quot;https://twitter.com/mozilla_l10n&quot;&gt;Twitter&lt;/a&gt;&lt;/li&gt;
  6444. &lt;li&gt;&lt;a href=&quot;https://blog.mozilla.org/l10n/&quot;&gt;L10n blog&lt;/a&gt;&lt;/li&gt;
  6445. &lt;/ul&gt;
  6446. &lt;h3&gt;Questions? Want to get involved?&lt;/h3&gt;
  6447. &lt;p&gt;If you want to get involved, or have any question about l10n, reach out to:&lt;/p&gt;
  6448. &lt;ul&gt;
  6449. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/mZuzEFP7EcmgBBTbvtgJP2LFFTY/&quot;&gt;Francesco Lodolo (flod)&lt;/a&gt; – Engineering Manager&lt;/li&gt;
  6450. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/CMLZ_n1lNNSfQScLGE2yBmlS55w/&quot;&gt;Bryan&lt;/a&gt; – l10n Project Manager&lt;/li&gt;
  6451. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/3LPn77ppB_IQ9F6ruL5lw2IVrvQ/&quot;&gt;Delphine&lt;/a&gt; – l10n Project Manager for mobile&lt;/li&gt;
  6452. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/jIdunhnZ8Edgi9npILuSoFvf5ZY/&quot;&gt;Peiying (CocoMo)&lt;/a&gt; – l10n Project Manager for mozilla.org, marketing, and legal&lt;/li&gt;
  6453. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/m6r3HOfoijMdyeJNKKFHchjjRbw/&quot;&gt;Francis&lt;/a&gt; – l10n Project Manager for Common Voice, Mozilla Foundation&lt;/li&gt;
  6454. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/lY_FTvtnYcVoDP7JYZjMsm6tRno/&quot;&gt;Théo Chevalier&lt;/a&gt; – l10n Project Manager for Mozilla Foundation&lt;/li&gt;
  6455. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/dvgiVCmoeidF2xcqSnBHtpzLTFU/&quot;&gt;Matjaž (mathjazz)&lt;/a&gt; – Pontoon dev&lt;/li&gt;
  6456. &lt;li&gt;&lt;a href=&quot;https://pontoon.mozilla.org/contributors/pmz0uSCe_Mk9Td1cksHLI1y471k/&quot;&gt;Eemeli&lt;/a&gt; – Pontoon, Fluent dev&lt;/li&gt;
  6457. &lt;/ul&gt;
  6458. &lt;p&gt;Did you enjoy reading this report? &lt;a href=&quot;mailto:l10n-drivers@mozilla.org&quot;&gt;Let us know&lt;/a&gt; how we can improve it.&lt;/p&gt;</description>
  6459. <pubDate>Thu, 02 May 2024 16:01:16 +0000</pubDate>
  6460. <dc:creator>Francesco Lodolo [:flod]</dc:creator>
  6461. </item>
  6462. <item>
  6463. <title>The Rust Programming Language Blog: Announcing Rust 1.78.0</title>
  6464. <guid isPermaLink="true">https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html</guid>
  6465. <link>https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html</link>
  6466. <description>&lt;p&gt;The Rust team is happy to announce a new version of Rust, 1.78.0. Rust is a programming language empowering everyone to build reliable and efficient software.&lt;/p&gt;
  6467. &lt;p&gt;If you have a previous version of Rust installed via &lt;code&gt;rustup&lt;/code&gt;, you can get 1.78.0 with:&lt;/p&gt;
  6468. &lt;pre&gt;&lt;code class=&quot;language-console&quot;&gt;$ rustup update stable
  6469. &lt;/code&gt;&lt;/pre&gt;
  6470. &lt;p&gt;If you don't have it already, you can &lt;a href=&quot;https://www.rust-lang.org/install.html&quot;&gt;get &lt;code&gt;rustup&lt;/code&gt;&lt;/a&gt; from the appropriate page on our website, and check out the &lt;a href=&quot;https://doc.rust-lang.org/nightly/releases.html#version-1780-2024-05-02&quot;&gt;detailed release notes for 1.78.0&lt;/a&gt;.&lt;/p&gt;
  6471. &lt;p&gt;If you'd like to help us out by testing future releases, you might consider updating locally to use the beta channel (&lt;code&gt;rustup default beta&lt;/code&gt;) or the nightly channel (&lt;code&gt;rustup default nightly&lt;/code&gt;). Please &lt;a href=&quot;https://github.com/rust-lang/rust/issues/new/choose&quot;&gt;report&lt;/a&gt; any bugs you might come across!&lt;/p&gt;
  6472. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#whats-in-1780-stable&quot; id=&quot;whats-in-1780-stable&quot;&gt;&lt;/a&gt;What's in 1.78.0 stable&lt;/h3&gt;
  6473. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#diagnostic-attributes&quot; id=&quot;diagnostic-attributes&quot;&gt;&lt;/a&gt;Diagnostic attributes&lt;/h4&gt;
  6474. &lt;p&gt;Rust now supports a &lt;code&gt;#[diagnostic]&lt;/code&gt; attribute namespace to influence compiler error messages. These are treated as hints which the compiler is not &lt;em&gt;required&lt;/em&gt; to use, and it is also not an error to provide a diagnostic that the compiler doesn't recognize. This flexibility allows source code to provide diagnostics even when they're not supported by all compilers, whether those are different versions or entirely different implementations.&lt;/p&gt;
  6475. &lt;p&gt;With this namespace comes the first supported attribute, &lt;code&gt;#[diagnostic::on_unimplemented]&lt;/code&gt;, which can be placed on a trait to customize the message when that trait is required but hasn't been implemented on a type. Consider the example given in the &lt;a href=&quot;https://github.com/rust-lang/rust/pull/119888/&quot;&gt;stabilization pull request&lt;/a&gt;:&lt;/p&gt;
  6476. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[diagnostic::on_unimplemented(
  6477.    message = &quot;My Message for `ImportantTrait&amp;lt;{A}&amp;gt;` is not implemented for `{Self}`&quot;,
  6478.    label = &quot;My Label&quot;,
  6479.    note = &quot;Note 1&quot;,
  6480.    note = &quot;Note 2&quot;
  6481. )]
  6482. trait ImportantTrait&amp;lt;A&amp;gt; {}
  6483.  
  6484. fn use_my_trait(_: impl ImportantTrait&amp;lt;i32&amp;gt;) {}
  6485.  
  6486. fn main() {
  6487.    use_my_trait(String::new());
  6488. }
  6489. &lt;/code&gt;&lt;/pre&gt;
  6490. &lt;p&gt;Previously, the compiler would give a builtin error like this:&lt;/p&gt;
  6491. &lt;pre&gt;&lt;code&gt;error[E0277]: the trait bound `String: ImportantTrait&amp;lt;i32&amp;gt;` is not satisfied
  6492.  --&amp;gt; src/main.rs:12:18
  6493.   |
  6494. 12 |     use_my_trait(String::new());
  6495.   |     ------------ ^^^^^^^^^^^^^ the trait `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  6496.   |     |
  6497.   |     required by a bound introduced by this call
  6498.   |
  6499. &lt;/code&gt;&lt;/pre&gt;
  6500. &lt;p&gt;With &lt;code&gt;#[diagnostic::on_unimplemented]&lt;/code&gt;, its custom message fills the primary error line, and its custom label is placed on the source output. The original label is still written as help output, and any custom notes are written as well. (These exact details are subject to change.)&lt;/p&gt;
  6501. &lt;pre&gt;&lt;code&gt;error[E0277]: My Message for `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  6502.  --&amp;gt; src/main.rs:12:18
  6503.   |
  6504. 12 |     use_my_trait(String::new());
  6505.   |     ------------ ^^^^^^^^^^^^^ My Label
  6506.   |     |
  6507.   |     required by a bound introduced by this call
  6508.   |
  6509.   = help: the trait `ImportantTrait&amp;lt;i32&amp;gt;` is not implemented for `String`
  6510.   = note: Note 1
  6511.   = note: Note 2
  6512. &lt;/code&gt;&lt;/pre&gt;
  6513. &lt;p&gt;For trait authors, this kind of diagnostic is more useful if you can provide a better hint than just talking about the missing implementation itself. For example, this is an abridged sample from the standard library:&lt;/p&gt;
  6514. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;#[diagnostic::on_unimplemented(
  6515.    message = &quot;the size for values of type `{Self}` cannot be known at compilation time&quot;,
  6516.    label = &quot;doesn't have a size known at compile-time&quot;
  6517. )]
  6518. pub trait Sized {}
  6519. &lt;/code&gt;&lt;/pre&gt;
  6520. &lt;p&gt;For more information, see the reference section on &lt;a href=&quot;https://doc.rust-lang.org/nightly/reference/attributes/diagnostics.html#the-diagnostic-tool-attribute-namespace&quot;&gt;the &lt;code&gt;diagnostic&lt;/code&gt; tool attribute namespace&lt;/a&gt;.&lt;/p&gt;
  6521. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#asserting-unsafe-preconditions&quot; id=&quot;asserting-unsafe-preconditions&quot;&gt;&lt;/a&gt;Asserting &lt;code&gt;unsafe&lt;/code&gt; preconditions&lt;/h4&gt;
  6522. &lt;p&gt;The Rust standard library has a number of assertions for the preconditions of &lt;code&gt;unsafe&lt;/code&gt; functions, but historically they have only been enabled in &lt;code&gt;#[cfg(debug_assertions)]&lt;/code&gt; builds of the standard library to avoid affecting release performance. However, since the standard library is usually compiled and distributed in release mode, most Rust developers weren't ever executing these checks at all.&lt;/p&gt;
  6523. &lt;p&gt;Now, the condition for these assertions is delayed until code generation, so they will be checked depending on the user's own setting for debug assertions -- enabled by default in debug and test builds. This change helps users catch undefined behavior in their code, though the details of how much is checked are generally not stable.&lt;/p&gt;
  6524. &lt;p&gt;For example, &lt;a href=&quot;https://doc.rust-lang.org/std/slice/fn.from_raw_parts.html&quot;&gt;&lt;code&gt;slice::from_raw_parts&lt;/code&gt;&lt;/a&gt; requires an aligned non-null pointer. The following use of a purposely-misaligned pointer has undefined behavior, and while if you were unlucky it may have &lt;em&gt;appeared&lt;/em&gt; to &quot;work&quot; in the past, the debug assertion can now catch it:&lt;/p&gt;
  6525. &lt;pre&gt;&lt;code class=&quot;language-rust&quot;&gt;fn main() {
  6526.    let slice: &amp;amp;[u8] = &amp;amp;[1, 2, 3, 4, 5];
  6527.    let ptr = slice.as_ptr();
  6528.  
  6529.    // Create an offset from `ptr` that will always be one off from `u16`'s correct alignment
  6530.    let i = usize::from(ptr as usize &amp;amp; 1 == 0);
  6531.    
  6532.    let slice16: &amp;amp;[u16] = unsafe { std::slice::from_raw_parts(ptr.add(i).cast::&amp;lt;u16&amp;gt;(), 2) };
  6533.    dbg!(slice16);
  6534. }
  6535. &lt;/code&gt;&lt;/pre&gt;
  6536. &lt;pre&gt;&lt;code&gt;thread 'main' panicked at library/core/src/panicking.rs:220:5:
  6537. unsafe precondition(s) violated: slice::from_raw_parts requires the pointer to be aligned and non-null, and the total size of the slice not to exceed `isize::MAX`
  6538. note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
  6539. thread caused non-unwinding panic. aborting.
  6540. &lt;/code&gt;&lt;/pre&gt;
  6541. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#deterministic-realignment&quot; id=&quot;deterministic-realignment&quot;&gt;&lt;/a&gt;Deterministic realignment&lt;/h4&gt;
  6542. &lt;p&gt;The standard library has a few functions that change the alignment of pointers and slices, but they previously had caveats that made them difficult to rely on in practice, if you followed their documentation precisely. Those caveats primarily existed as a hedge against &lt;code&gt;const&lt;/code&gt; evaluation, but they're only stable for non-&lt;code&gt;const&lt;/code&gt; use anyway. They are now promised to have consistent runtime behavior according to their actual inputs.&lt;/p&gt;
  6543. &lt;ul&gt;
  6544. &lt;li&gt;
  6545. &lt;p&gt;&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.pointer.html#method.align_offset&quot;&gt;&lt;code&gt;pointer::align_offset&lt;/code&gt;&lt;/a&gt; computes the offset needed to change a pointer to the given alignment. It returns &lt;code&gt;usize::MAX&lt;/code&gt; if that is not possible, but it was previously permitted to &lt;em&gt;always&lt;/em&gt; return &lt;code&gt;usize::MAX&lt;/code&gt;, and now that behavior is removed.&lt;/p&gt;
  6546. &lt;/li&gt;
  6547. &lt;li&gt;
  6548. &lt;p&gt;&lt;a href=&quot;https://doc.rust-lang.org/std/primitive.slice.html#method.align_to&quot;&gt;&lt;code&gt;slice::align_to&lt;/code&gt;&lt;/a&gt; and &lt;a href=&quot;https://doc.rust-lang.org/std/primitive.slice.html#method.align_to_mut&quot;&gt;&lt;code&gt;slice::align_to_mut&lt;/code&gt;&lt;/a&gt; both transmute slices to an aligned middle slice and the remaining unaligned head and tail slices. These methods now promise to return the largest possible middle part, rather than allowing the implementation to return something less optimal like returning everything as the head slice.&lt;/p&gt;
  6549. &lt;/li&gt;
  6550. &lt;/ul&gt;
  6551. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#stabilized-apis&quot; id=&quot;stabilized-apis&quot;&gt;&lt;/a&gt;Stabilized APIs&lt;/h4&gt;
  6552. &lt;ul&gt;
  6553. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Stdin.html#impl-Read-for-%26Stdin&quot;&gt;&lt;code&gt;impl Read for &amp;amp;Stdin&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  6554. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/113833/&quot;&gt;Accept non &lt;code&gt;'static&lt;/code&gt; lifetimes for several &lt;code&gt;std::error::Error&lt;/code&gt; related implementations&lt;/a&gt;&lt;/li&gt;
  6555. &lt;li&gt;&lt;a href=&quot;https://github.com/rust-lang/rust/pull/114655/&quot;&gt;Make &lt;code&gt;impl&amp;lt;Fd: AsFd&amp;gt;&lt;/code&gt; impl take &lt;code&gt;?Sized&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  6556. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/io/struct.Error.html#impl-From%3CTryReserveError%3E-for-Error&quot;&gt;&lt;code&gt;impl From&amp;lt;TryReserveError&amp;gt; for io::Error&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  6557. &lt;/ul&gt;
  6558. &lt;p&gt;These APIs are now stable in const contexts:&lt;/p&gt;
  6559. &lt;ul&gt;
  6560. &lt;li&gt;&lt;a href=&quot;https://doc.rust-lang.org/stable/std/sync/struct.Barrier.html#method.new&quot;&gt;&lt;code&gt;Barrier::new()&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
  6561. &lt;/ul&gt;
  6562. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#compatibility-notes&quot; id=&quot;compatibility-notes&quot;&gt;&lt;/a&gt;Compatibility notes&lt;/h4&gt;
  6563. &lt;ul&gt;
  6564. &lt;li&gt;As &lt;a href=&quot;https://blog.rust-lang.org/2024/02/26/Windows-7.html&quot;&gt;previously announced&lt;/a&gt;, Rust 1.78 has increased its minimum requirement to Windows 10 for the following targets:
  6565. &lt;ul&gt;
  6566. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-msvc&lt;/code&gt;&lt;/li&gt;
  6567. &lt;li&gt;&lt;code&gt;i686-pc-windows-msvc&lt;/code&gt;&lt;/li&gt;
  6568. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-gnu&lt;/code&gt;&lt;/li&gt;
  6569. &lt;li&gt;&lt;code&gt;i686-pc-windows-gnu&lt;/code&gt;&lt;/li&gt;
  6570. &lt;li&gt;&lt;code&gt;x86_64-pc-windows-gnullvm&lt;/code&gt;&lt;/li&gt;
  6571. &lt;li&gt;&lt;code&gt;i686-pc-windows-gnullvm&lt;/code&gt;&lt;/li&gt;
  6572. &lt;/ul&gt;
  6573. &lt;/li&gt;
  6574. &lt;li&gt;Rust 1.78 has upgraded its bundled LLVM to version 18, completing the announced &lt;a href=&quot;https://blog.rust-lang.org/2024/03/30/i128-layout-update.html&quot;&gt;&lt;code&gt;u128&lt;/code&gt;/&lt;code&gt;i128&lt;/code&gt; ABI change&lt;/a&gt; for x86-32 and x86-64 targets. Distributors that use their own LLVM older than 18 may still face the calling convention bugs mentioned in that post.&lt;/li&gt;
  6575. &lt;/ul&gt;
  6576. &lt;h4&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#other-changes&quot; id=&quot;other-changes&quot;&gt;&lt;/a&gt;Other changes&lt;/h4&gt;
  6577. &lt;p&gt;Check out everything that changed in &lt;a href=&quot;https://github.com/rust-lang/rust/releases/tag/1.78.0&quot;&gt;Rust&lt;/a&gt;, &lt;a href=&quot;https://github.com/rust-lang/cargo/blob/master/CHANGELOG.md#cargo-178-2024-05-02&quot;&gt;Cargo&lt;/a&gt;, and &lt;a href=&quot;https://github.com/rust-lang/rust-clippy/blob/master/CHANGELOG.md#rust-178&quot;&gt;Clippy&lt;/a&gt;.&lt;/p&gt;
  6578. &lt;h3&gt;&lt;a class=&quot;anchor&quot; href=&quot;https://blog.rust-lang.org/2024/05/02/Rust-1.78.0.html#contributors-to-1780&quot; id=&quot;contributors-to-1780&quot;&gt;&lt;/a&gt;Contributors to 1.78.0&lt;/h3&gt;
  6579. &lt;p&gt;Many people came together to create Rust 1.78.0. We couldn't have done it without all of you. &lt;a href=&quot;https://thanks.rust-lang.org/rust/1.78.0/&quot;&gt;Thanks!&lt;/a&gt;&lt;/p&gt;</description>
  6580. <pubDate>Thu, 02 May 2024 00:00:00 +0000</pubDate>
  6581. <dc:creator>The Rust Release Team</dc:creator>
  6582. </item>
  6583. <item>
  6584. <title>Dave Townsend: Tests don't replace Code Review</title>
  6585. <guid isPermaLink="true">https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/</guid>
  6586. <link>https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/</link>
  6587. <description>&lt;img alt=&quot;Featured image of post Tests don't replace Code Review&quot; src=&quot;https://www.oxymoronical.com/blog/2024/05/tests-dont-replace-code-review/240401-105514.jpg&quot; /&gt;&lt;p&gt;I frequently see a bold claim come up in tech circles. That as a team you’re wasting time by doing code reviews. You should instead rely on automated tests to catch bugs. This surprises me because I can’t imagine anyone thinking that such a blanket statement is true. But then most of the time this is brought up in places like Twitter where nuance is impossible and engagement farming is rife. Still it got me thinking about why I think code review is important even if you have amazing tests.&lt;/p&gt;
  6588. &lt;p&gt;Before I elaborate I’ll point out what should be obvious. Different projects have different needs. You shouldn’t listen to me tell you that you must do code review any more than you should listen to anyone else tell you that you must not do code review. Be pragmatic in all things. Beware one-size-fits-all statements (in almost any context).&lt;/p&gt;
  6589. &lt;p&gt;We’ve been religiously performing code review on every (well almost every) patch at Mozilla since well before I joined the project which was quite some time ago. And in that time I’ve seen Firefox go from having practically no automated tests to a set of automated test suites that if run end to end on a single machine (which is impossible but let’s ignore that) would take nearly &lt;strong&gt;two months&lt;/strong&gt; (😱) to complete. And in that time I don’t think I’ve ever heard anyone suggest we should stop doing code review for anything that actually ships to users (we do allow documentation changes with no review). Why?&lt;/p&gt;
  6590. &lt;h4 id=&quot;a-good-set-of-automated-tests-doesnt-just-magically-appear&quot;&gt;
  6591.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#a-good-set-of-automated-tests-doesnt-just-magically-appear&quot;&gt;#&lt;/a&gt;
  6592.    A good set of automated tests doesn’t just magically appear
  6593. &lt;/h4&gt;&lt;p&gt;Let’s start with the obvious.&lt;/p&gt;
  6594. &lt;p&gt;Someone has to have written all of those tests. And others have to have verified all that. And even if your test suite is already perfect, how do you know that the developer building a new feature has also included the tests necessary to verify that feature going forwards?&lt;/p&gt;
  6595. &lt;p&gt;There are some helpful tools that exist, like code coverage. But these are more informative than indicative. Useful to track but should rarely be used by themselves.&lt;/p&gt;
  6596. &lt;h4 id=&quot;garbage-unmaintainable-code-passes-tests&quot;&gt;
  6597.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#garbage-unmaintainable-code-passes-tests&quot;&gt;#&lt;/a&gt;
  6598.    Garbage unmaintainable code passes tests
  6599. &lt;/h4&gt;&lt;p&gt;There are usually many ways to fix a bug or implement a feature. Some of those will be clear readable code with appropriate comments that a random developer in three years time can look at and understand quickly. Others will be spaghetti code that is to all intents and purposes obfuscated. Got a bug in there? It may take ten times longer to fix it. Lint rules can help with this to some extent, but a human code reviewer is going to spot unreadable code a mile away.&lt;/p&gt;
  6600. &lt;h4 id=&quot;you-cannot-test-everything&quot;&gt;
  6601.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#you-cannot-test-everything&quot;&gt;#&lt;/a&gt;
  6602.    You cannot test everything
  6603. &lt;/h4&gt;&lt;p&gt;It’s often not feasible to test for every possible case. Anywhere your code interacts with anything outside of itself, like a filesystem or a network, is going to have cases that are really hard to simulate. What if memory runs out at a critical moment? What if the OS suddenly decides that the disk is not writable? These are cases we have to handle all the time in Firefox. You could say we should build abstractions around everything so that tests can simulate all those cases. But abstractions are not cheap and performance is pretty critical for us.&lt;/p&gt;
  6604. &lt;h4 id=&quot;but-im-a-100x-developer-none-of-this-applies-to-me&quot;&gt;
  6605.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#but-im-a-100x-developer-none-of-this-applies-to-me&quot;&gt;#&lt;/a&gt;
  6606.    But I’m a 100x developer, none of this applies to me
  6607. &lt;/h4&gt;&lt;p&gt;I don’t care how senior a developer you are, you’ll make mistakes. I sure do. Now it’s true that there is something to be said for adjusting your review approach based on the developer who wrote the code. If I’m reviewing a patch by a junior developer I’m going to go over the patch with a fine tooth-comb and then when they re-submit I’m going to take care to make sure they addressed all my changes. Less so with a senior developer who I know knows the code at hand.&lt;/p&gt;
  6608. &lt;h4 id=&quot;so-do-tests-help-with-code-review-at-all&quot;&gt;
  6609.    &lt;a class=&quot;header-anchor&quot; href=&quot;http://www.oxymoronical.com/blog/category/technical/mozilla/feed#so-do-tests-help-with-code-review-at-all&quot;&gt;#&lt;/a&gt;
  6610.    So do tests help with code review at all?
  6611. &lt;/h4&gt;&lt;p&gt;Absolutely!&lt;/p&gt;
  6612. &lt;p&gt;Tests are there to automatically spot problems, ideally before a change even reaches the review stage. Code review is there to fill in the gaps. You can mostly skip over worrying about whether this breaks well tested functionality (just don’t assume all functionality is well tested!). Instead you can focus on what the change is doing that cannot be tested:&lt;/p&gt;
  6613. &lt;ul&gt;
  6614. &lt;li&gt;Is it actually fixing the problem at hand?&lt;/li&gt;
  6615. &lt;li&gt;Does it include appropriate changes to the automated tests?&lt;/li&gt;
  6616. &lt;li&gt;Is the code maintainable?&lt;/li&gt;
  6617. &lt;li&gt;Is the approach going to cause problems for other changes down the road?&lt;/li&gt;
  6618. &lt;li&gt;Could there be performance issues?&lt;/li&gt;
  6619. &lt;/ul&gt;
  6620. &lt;p&gt;Code review and automated tests are complimentary. I believe you’ll get the best result when you employ both sensibly. Assuming you have the resources to do so of course. I don’t think large projects can do without both.&lt;/p&gt;</description>
  6621. <pubDate>Wed, 01 May 2024 22:02:00 +0000</pubDate>
  6622. </item>
  6623. <item>
  6624. <title>Mozilla Thunderbird: Thunderbird Monthly Development Digest: April 2024</title>
  6625. <guid isPermaLink="false">https://blog.thunderbird.net/?p=1717</guid>
  6626. <link>https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/</link>
  6627. <description>&lt;p&gt;&lt;img alt=&quot;Graphic with text &amp;quot;Thunderbird Development Digest April 2024,&amp;quot; featuring abstract ASCII art on a dark Thunderbird logo background.&quot; class=&quot;attachment-640x360 size-640x360 wp-post-image&quot; height=&quot;360&quot; src=&quot;https://blog.thunderbird.net/files/2024/04/dev-digest-april-2024-768x432.jpg&quot; width=&quot;640&quot; /&gt;&lt;/p&gt;
  6628. &lt;div class=&quot;wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex&quot;&gt;
  6629. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=de&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Auf Deutsch übersetzen&lt;/a&gt;&lt;/div&gt;
  6630.  
  6631.  
  6632.  
  6633. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=fr&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;Traduire en français&lt;/a&gt;&lt;/div&gt;
  6634.  
  6635.  
  6636.  
  6637. &lt;div class=&quot;wp-block-button has-custom-font-size has-small-font-size&quot;&gt;&lt;a class=&quot;wp-block-button__link has-black-color has-white-background-color has-text-color has-background wp-element-button&quot; href=&quot;https://translate.google.com/translate?js=n&amp;amp;sl=auto&amp;amp;tl=ja&amp;amp;u=https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot; rel=&quot;noreferrer noopener&quot; target=&quot;_blank&quot;&gt;日本語に翻訳&lt;/a&gt;&lt;/div&gt;
  6638. &lt;/div&gt;
  6639.  
  6640.  
  6641.  
  6642. &lt;p&gt;Hello Thunderbird Community, and welcome back to the monthly Thunderbird development digest. April just ended and we’re running at full speed into May. We’re only a couple of months away from the next ESR, so things are landing faster and we’re seeing the finalization of a lot of parallel efforts.&lt;/p&gt;
  6643.  
  6644.  
  6645.  
  6646. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;20-Year-Old bugs&lt;/strong&gt;&lt;/h3&gt;
  6647.  
  6648.  
  6649.  
  6650. &lt;p&gt;Something that has been requested for almost 20 years finally landed on Daily. The ability to control the display of recipients in the message list and better distinguish unknown addresses from those saved in the Address Book was finally implemented in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=243258&quot;&gt;Bug 243258 – Show email address in message list&lt;/a&gt;.&lt;/p&gt;
  6651.  
  6652.  
  6653.  
  6654. &lt;p&gt;This is one of the many examples of features that in the past were very complicated and tricky to implement, but that we were finally able to address thanks to the improvements of our architecture and being able to work with a more flexible and modular code.&lt;/p&gt;
  6655.  
  6656.  
  6657.  
  6658. &lt;p&gt;We’re aiming at going through those very very old requests and slowly addressing them when possible.&lt;/p&gt;
  6659.  
  6660.  
  6661.  
  6662. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Exchange alpha&lt;/strong&gt;&lt;/h3&gt;
  6663.  
  6664.  
  6665.  
  6666. &lt;p&gt;More &lt;a href=&quot;https://blog.thunderbird.net/2024/04/adventures-in-rust-bringing-exchange-support-to-thunderbird/&quot;&gt;Exchange support&lt;/a&gt; improvements and features are landing on Daily almost…daily (pun intended). If you want to test things with a local build, you can follow &lt;a href=&quot;https://thunderbird.topicbox.com/groups/planning/T05e94ced3641f616/exchange-testing-our-patience&quot;&gt;this overview from Ikey.&lt;/a&gt;&lt;/p&gt;
  6667.  
  6668.  
  6669.  
  6670. &lt;p&gt;We will soon look at the possibility of enabling Rust builds by default, making sure that all users will be able to consume our Rust code from next beta, and only needing to switch a pref in order to test Exchange.&lt;/p&gt;
  6671.  
  6672.  
  6673.  
  6674. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Folder compaction&lt;/strong&gt;&lt;/h3&gt;
  6675.  
  6676.  
  6677.  
  6678. &lt;p&gt;If you’ve been tracking our most recent struggles, you’re probably aware of one of the lingering annoying issues which sees the bubbling up of the size of the user profile caused by local folder corruption.&lt;/p&gt;
  6679.  
  6680.  
  6681.  
  6682. &lt;p&gt;Ben dive bombed into the code and found a spaghetti mess that was hard to untangle. You can read more about his exploration and discoveries in his &lt;a href=&quot;https://thunderbird.topicbox.com/groups/developers/T181eda13fce07dd9/folder-compaction-rewrite&quot;&gt;recent post on TB-Planning&lt;/a&gt;.&lt;/p&gt;
  6683.  
  6684.  
  6685.  
  6686. &lt;p&gt;We’re aiming to land this code hopefully before the end of the week and start calling for some testing and feedback from the community to ensure that all the various issues have been addressed correctly.&lt;/p&gt;
  6687.  
  6688.  
  6689.  
  6690. &lt;p&gt;You can follow the progress in &lt;a href=&quot;https://bugzilla.mozilla.org/show_bug.cgi?id=1890448&quot;&gt;Bug 1890448 – Rewrite folder compaction&lt;/a&gt;.&lt;/p&gt;
  6691.  
  6692.  
  6693.  
  6694. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Cards View&lt;/strong&gt;&lt;/h3&gt;
  6695.  
  6696.  
  6697.  
  6698. &lt;p&gt;If you’re running Beta or Daily, you might have noticed some very fancy new UI for the Cards View. This has been a culmination of many weeks of UX analysis to ensure a flexible and consistent hover, selection, and focus state.&lt;/p&gt;
  6699.  
  6700.  
  6701.  
  6702. &lt;p&gt;Micah and Sol identified a total of 27 different interaction states on that list, and implementing visual consistency while guaranteeing optimal accessibility levels for all operating systems and potential custom themes was not easy.&lt;/p&gt;
  6703.  
  6704.  
  6705.  
  6706. &lt;p&gt;We’re very curious to hear your feedback.&lt;/p&gt;
  6707.  
  6708.  
  6709.  
  6710. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;Context menu&lt;/strong&gt;&lt;/h3&gt;
  6711.  
  6712.  
  6713.  
  6714. &lt;p&gt;A more refined and updated context menu for the message list also landed on Daily.&lt;/p&gt;
  6715.  
  6716.  
  6717.  
  6718. &lt;p&gt;A very detailed UX exploration and overview of the implementation was &lt;a href=&quot;https://thunderbird.topicbox.com/groups/ux/T3d84faa372bf41a8/message-context-menu-updates&quot;&gt;shared on the UX Mailing list&lt;/a&gt; a while ago.&lt;/p&gt;
  6719.  
  6720.  
  6721.  
  6722. &lt;p&gt;This update is only the first step of many more to come, so we apologize in advance if some things are not super polished or things seem temporarily off.&lt;/p&gt;
  6723.  
  6724.  
  6725.  
  6726. &lt;h3 class=&quot;wp-block-heading&quot;&gt;&lt;strong&gt;ESR Preview&lt;/strong&gt;&lt;/h3&gt;
  6727.  
  6728.  
  6729.  
  6730. &lt;p&gt;If you’re curious about what the next ESR will look like or checking new features, please consider downloading and installing Beta (preferably in another directory to not override your current profile.) Help us test this new upcoming release and find bugs early.&lt;/p&gt;
  6731.  
  6732.  
  6733.  
  6734. &lt;p&gt;&lt;em&gt;As usual, if you want to see things as they land you can always check the &lt;a href=&quot;https://hg.mozilla.org/comm-central/pushloghtml&quot;&gt;pushlog &lt;/a&gt;and &lt;a href=&quot;https://ftp.mozilla.org/pub/thunderbird/nightly/2024/&quot;&gt;try running daily&lt;/a&gt;, which would be immensely helpful for catching bugs early.&lt;/em&gt;&lt;/p&gt;
  6735.  
  6736.  
  6737.  
  6738. &lt;p&gt;See ya next month.&lt;/p&gt;
  6739.  
  6740.  
  6741.  
  6742. &lt;p&gt;&lt;strong&gt;Alessandro Castellani&lt;/strong&gt; &lt;em&gt;(he, him)&lt;br /&gt;&lt;/em&gt;&lt;strong&gt;Director, Desktop and Mobile Apps&lt;/strong&gt;&lt;/p&gt;
  6743.  
  6744.  
  6745.  
  6746. &lt;figure class=&quot;wp-block-pullquote&quot; style=&quot;border-width: 2px; border-radius: 10px; font-style: normal; font-weight: 400;&quot;&gt;&lt;blockquote&gt;&lt;p&gt;If you’re interested in joining the technical discussion around Thunderbird development, consider joining one or several of our &lt;a href=&quot;https://thunderbird.topicbox.com&quot;&gt;mailing list groups here&lt;/a&gt;. &lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;
  6747. &lt;p&gt;The post &lt;a href=&quot;https://blog.thunderbird.net/2024/05/thunderbird-monthly-development-digest-april-2024/&quot;&gt;Thunderbird Monthly Development Digest: April 2024&lt;/a&gt; appeared first on &lt;a href=&quot;https://blog.thunderbird.net&quot;&gt;The Thunderbird Blog&lt;/a&gt;.&lt;/p&gt;</description>
  6748. <pubDate>Wed, 01 May 2024 16:30:14 +0000</pubDate>
  6749. <dc:creator>Alessandro Castellani</dc:creator>
  6750. </item>
  6751. <item>
  6752. <title>William Durand: Moziversary #6</title>
  6753. <guid isPermaLink="false">https://williamdurand.fr/2024/05/01/moziversary-6</guid>
  6754. <link>https://williamdurand.fr/2024/05/01/moziversary-6/</link>
  6755. <description>&lt;p&gt;&lt;em&gt;Today is my sixth Moziversary 🎂 I joined Mozilla as a full-time employee on
  6756. May 1st, 2018. I previously blogged in &lt;del&gt;2019&lt;/del&gt;, &lt;a href=&quot;https://williamdurand.fr/2020/05/01/moziversary-2/&quot;&gt;2020&lt;/a&gt;, &lt;a href=&quot;https://williamdurand.fr/2021/05/01/moziversary-3/&quot;&gt;2021&lt;/a&gt;, &lt;a href=&quot;https://williamdurand.fr/2022/05/01/moziversary-4/&quot;&gt;2022&lt;/a&gt;,
  6757. and &lt;a href=&quot;https://williamdurand.fr/2023/05/01/moziversary-5/&quot;&gt;2023&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
  6758.  
  6759. &lt;p&gt;Last year, I mainly contributed to Firefox for Android as the lead engineer on a
  6760. project called “Add-ons General Availability (GA)”. The goal was to allow for
  6761. more add-ons on this platform. Success! &lt;a href=&quot;https://addons.mozilla.org/android/&quot;&gt;More than a thousand extensions are now
  6762. available on Android&lt;/a&gt; 🎉&lt;/p&gt;
  6763.  
  6764. &lt;p&gt;In addition, I worked on a Firefox feature called &lt;a href=&quot;https://support.mozilla.org/kb/quarantined-domains&quot;&gt;Quarantined Domains&lt;/a&gt; and
  6765. implemented a new abuse report form on &lt;a href=&quot;https://addons.mozilla.org/&quot;&gt;addons.mozilla.org&lt;/a&gt; (AMO) to comply
  6766. with the Digital Services Act (DSA). I was also involved in two other cross-team
  6767. efforts related to the Firefox installation funnel. I investigated various
  6768. issues (&lt;em&gt;e.g.&lt;/em&gt; this &lt;a href=&quot;https://bugzilla.opensuse.org/show_bug.cgi?id=1221531#c22&quot;&gt;openSUSE bug&lt;/a&gt;), and I coordinated the deprecation of
  6769. &lt;a href=&quot;https://discourse.mozilla.org/t/upgraded-add-on-signatures/129599&quot;&gt;weak add-on signatures&lt;/a&gt; and some more changes around certificates
  6770. lately, which is why I wrote &lt;a href=&quot;https://williamdurand.fr/xpidump/&quot;&gt;xpidump&lt;/a&gt;.&lt;/p&gt;
  6771.  
  6772. &lt;p&gt;Phew! There is no shortage of work.&lt;/p&gt;
  6773.  
  6774. &lt;p&gt;When I moved to the WebExtensions team in 2022, &lt;a href=&quot;https://williamdurand.fr/2022/01/25/new-team-mozilla/&quot;&gt;I wrote about this incredible
  6775. challenge&lt;/a&gt;. I echoed this sentiment several months later in my &lt;a href=&quot;https://williamdurand.fr/2022/05/01/moziversary-4/&quot;&gt;2022
  6776. Moziversary update&lt;/a&gt;. I couldn’t imagine how much I would achieve in two
  6777. years…&lt;/p&gt;
  6778.  
  6779. &lt;p&gt;Back then, I didn’t know what the next step in my career would be. I have been
  6780. aiming to bridge the gap between the AMO and WebExtensions engineering teams
  6781. since at least &lt;a href=&quot;https://williamdurand.fr/2021/05/01/moziversary-3/&quot;&gt;2021&lt;/a&gt; and that &lt;em&gt;is&lt;/em&gt; my “next step”.&lt;/p&gt;
  6782.  
  6783. &lt;p&gt;I recently took a new role as Add-ons Tech Lead. This is the continuation of
  6784. what I’ve been doing for some time but that comes with new challenges and
  6785. opportunities as well. We’ll see how it goes but I am excited!&lt;/p&gt;
  6786.  
  6787. &lt;p&gt;I’ll be forever grateful to my manager and coworkers. Thank you ❤️&lt;/p&gt;</description>
  6788. <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
  6789. </item>
  6790. <item>
  6791. <title>Don Marti: blog fix: remove stray files</title>
  6792. <guid isPermaLink="true">https://blog.zgp.org/blog-remove-stray-files/</guid>
  6793. <link>https://blog.zgp.org/blog-remove-stray-files/</link>
  6794. <description>&lt;p&gt;Another update from the blog. Quick recap: I’m re-doing this blog with mostly Pandoc and make, with a few helper scripts.&lt;/p&gt; &lt;p&gt;This is a personal web site and can be broken sometimes, and one of the breakage problems was: oops, I removed a draft post from the directory of source files (in &lt;a href=&quot;https://commonmark.org/&quot;&gt;CommonMark&lt;/a&gt;) but the HTML version got built and put in &lt;code&gt;public&lt;/code&gt; and copied to the server, possibly also affecting the &lt;code&gt;index.html&lt;/code&gt; and the RSS feed.&lt;/p&gt; &lt;p&gt;If you’re reading the RSS and got some half-baked drafts, that’s why.&lt;/p&gt; &lt;p&gt;So, to fix it, I need to ask &lt;code&gt;make&lt;/code&gt; if there’s anything in the &lt;code&gt;public&lt;/code&gt; directory that doesn’t have a corresponding source file or files and remove it. Quick helper script:&lt;/p&gt;   &lt;p&gt;That should mean a better RSS reading experience since you shouldn’t get it cluttered up with drafts if I make a mistake.&lt;/p&gt; &lt;p&gt;But I’m sure I have plenty of other mistakes I can make.&lt;/p&gt; &lt;h3&gt;Related&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/scale-2025/&quot;&gt;planning for SCALE 2025&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/automatically-run-make/&quot;&gt;Automatically run make when a file changes&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/favicon/&quot;&gt;Hey kids, favicon!&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://blog.zgp.org/responsive-ascii/&quot;&gt;responsive ascii art&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Bonus links&lt;/h3&gt; &lt;p&gt;&lt;a href=&quot;https://www.citationneeded.news/we-can-have-a-different-web/&quot;&gt;We can have a different web&lt;/a&gt; &lt;q&gt;Nothing about the web has changed that prevents us from going back. If anything, it’s become a lot easier.&lt;/q&gt;&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wired.com/story/meta-section-230-users-algorithm/&quot;&gt;A Lawsuit Argues Meta Is Required by Law to Let You Control Your Own Feed&lt;/a&gt; (Section 230 protection for a research extension? Makes sense to me.)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://platformpapers.substack.com/p/effects-of-banning-targeted-advertising&quot;&gt;Effects of Banning Targeted Advertising&lt;/a&gt; (The top 10 percent of Android apps for kids did better after an ad personalization policy change, while the bottom 90 percent lost revenue. If Sturgeon’s Law applies to Android apps, the average under-13 user might be better off?)&lt;/p&gt; &lt;p&gt;&lt;a href=&quot;https://www.wheresyoured.at/in-response-to-google/&quot;&gt;In Response To Google&lt;/a&gt; (Does anyone else notice more and more people working on ways to fix their personal information environment because of the search quality crisis? This blog series from Ed Zitron has some good background.)&lt;/p&gt;</description>
  6795. <pubDate>Wed, 01 May 2024 00:00:00 +0000</pubDate>
  6796. </item>
  6797.  
  6798. </channel>
  6799. </rss>
  6800.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//planet.mozilla.org/rss20.xml

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda