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

<channel>
	<title>programming &#8211; Noise</title>
	<atom:link href="https://noise.getoto.net/tag/programming/feed/" rel="self" type="application/rss+xml" />
	<link>https://noise.getoto.net</link>
	<description>The collective thoughts of the interwebz</description>
	<lastBuildDate>Wed, 08 Oct 2025 14:00:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>How we found a bug in Go&#8217;s arm64 compiler</title>
		<link>https://noise.getoto.net/2025/10/08/how-we-found-a-bug-in-gos-arm64-compiler/</link>
		
		<dc:creator><![CDATA[Thea Heinen]]></dc:creator>
		<pubDate>Wed, 08 Oct 2025 14:00:00 +0000</pubDate>
				<category><![CDATA[deep dive]]></category>
		<category><![CDATA[Go]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=20dd17392242c69bb01a2e6cc4c1cf3d</guid>

					<description><![CDATA[84 million requests a second means even rare bugs appear often. We'll reveal how we discovered a race condition in the Go arm64 compiler and got it fixed.]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>How to give your students structure as they learn programming skills</title>
		<link>https://noise.getoto.net/2025/06/19/how-to-give-your-students-structure-as-they-learn-programming-skills/</link>
		
		<dc:creator><![CDATA[Jan Ander]]></dc:creator>
		<pubDate>Thu, 19 Jun 2025 10:01:45 +0000</pubDate>
				<category><![CDATA[coding for kids]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[pedagogy]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.raspberrypi.org/?p=90522</guid>

					<description><![CDATA[<p>Creating a computer program involves many different skills — knowing how to code is just one part. When we teach programming to young people, we want to guide them to learn these skills in a structured way. The ‘levels of abstraction’ framework is a great tool for doing that. This blog describes how using the…</p>
<p>The post <a href="https://www.raspberrypi.org/blog/how-to-give-your-students-structure-as-they-learn-programming-skills/">How to give your students structure as they learn programming skills</a> appeared first on <a href="https://www.raspberrypi.org/">Raspberry Pi Foundation</a>.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>QUIC restarts, slow problems: udpgrm to the rescue</title>
		<link>https://noise.getoto.net/2025/05/07/quic-restarts-slow-problems-udpgrm-to-the-rescue/</link>
		
		<dc:creator><![CDATA[Marek Majkowski]]></dc:creator>
		<pubDate>Wed, 07 May 2025 13:00:00 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[udp]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=8b17e6540859a6902a2787240a6846b8</guid>

					<description><![CDATA[udpgrm is a lightweight daemon for graceful restarts of UDP servers. It leverages SO_REUSEPORT and eBPF to route new and existing flows to the correct server instance.]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Integrating generative AI into introductory programming classes</title>
		<link>https://noise.getoto.net/2025/03/06/integrating-generative-ai-into-introductory-programming-classes/</link>
		
		<dc:creator><![CDATA[Bonnie Sheppard]]></dc:creator>
		<pubDate>Thu, 06 Mar 2025 10:52:35 +0000</pubDate>
				<category><![CDATA[generative ai tools]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[research]]></category>
		<category><![CDATA[research seminar]]></category>
		<guid isPermaLink="false">https://www.raspberrypi.org/?p=89586</guid>

					<description><![CDATA[<p>Generative AI (GenAI) tools like GitHub Copilot and ChatGPT are rapidly changing how programming is taught and learnt. These tools can solve assignments with remarkable accuracy. GPT-4, for example, scored an impressive 99.5% on an undergraduate computer science exam, compared to Codex’s 78% just two years earlier. With such capabilities, researchers are shifting from asking,…</p>
<p>The post <a href="https://www.raspberrypi.org/blog/integrating-generative-ai-into-introductory-programming-classes/">Integrating generative AI into introductory programming classes</a> appeared first on <a href="https://www.raspberrypi.org/">Raspberry Pi Foundation</a>.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Against best practices</title>
		<link>https://noise.getoto.net/2024/11/16/against-best-practices/</link>
		
		<dc:creator><![CDATA[arp242.net]]></dc:creator>
		<pubDate>Sat, 16 Nov 2024 00:00:00 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.arp242.net/best-practices.html</guid>

					<description><![CDATA[I have come to believe that by and large “best practices” are doing more harm
than good. Not necessarily because they’re bad advice as such, but because
they’re mostly pounded by either 1) various types of zealots, idiots, and
assholes who abuse these ...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Improving C++</title>
		<link>https://noise.getoto.net/2024/03/15/improving-c/</link>
		
		<dc:creator><![CDATA[Bruce Schneier]]></dc:creator>
		<pubDate>Fri, 15 Mar 2024 11:05:41 +0000</pubDate>
				<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.schneier.com/?p=68616</guid>

					<description><![CDATA[<p>C++ guru Herb Sutter <a href="https://herbsutter.com/2024/03/11/safety-in-context/">writes</a> about how we can improve the programming language for better security.</p>
<blockquote><p>The immediate problem “is” that it’s Too Easy By Default™ to write security and safety vulnerabilities in C++ that would have been caught by stricter enforcement of known rules for <i>type, bounds, initialization</i>, and <i>lifetime</i> language safety.</p></blockquote>
<p>His conclusion:</p>
<blockquote><p>We need to improve software security and software safety across the industry, especially by improving programming language safety in C and C++, and in C++ a 98% improvement in the four most common problem areas is achievable in the medium term. But if we focus on programming language safety alone, we may find ourselves fighting yesterday’s war and missing larger past and future security dangers that affect software written in any language...</p></blockquote>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Introducing SafeTest: A Novel Approach to Front End Testing</title>
		<link>https://noise.getoto.net/2024/02/13/introducing-safetest-a-novel-approach-to-front-end-testing/</link>
		
		<dc:creator><![CDATA[Netflix Technology Blog]]></dc:creator>
		<pubDate>Tue, 13 Feb 2024 16:07:48 +0000</pubDate>
				<category><![CDATA[javascript]]></category>
		<category><![CDATA[Netflix]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[React]]></category>
		<category><![CDATA[testing]]></category>
		<guid isPermaLink="false">https://medium.com/p/37f9f88c152d</guid>

					<description><![CDATA[<p>by <a href="https://medium.com/u/a155da075195">Moshe Kolodny</a></p><p>In this post, we’re excited to introduce SafeTest, a revolutionary library that offers a fresh perspective on End-To-End (E2E) tests for web-based User Interface (UI) applications.</p><h3>The Challenges of Traditional UI Testing</h3><p>Traditionally, UI tests have been conducted through either unit testing or integration testing (also referred to as End-To-End (E2E) testing). However, each of these methods presents a unique trade-off: you have to choose between controlling the test fixture and setup, or controlling the test driver.</p><p>For instance, when using <a href="https://testing-library.com/docs/react-testing-library/intro/">react-testing-library</a>, a unit testing solution, you maintain complete control over what to render and how the underlying services and imports should behave. However, you lose the ability to interact with an actual page, which can lead to a myriad of pain points:</p><ul><li>Difficulty in interacting with complex UI elements like &#60;Dropdown /&#62; components.</li><li>Inability to test CORS setup or GraphQL calls.</li><li>Lack of visibility into z-index issues affecting click-ability of buttons.</li><li>Complex and unintuitive authoring and debugging of tests.</li></ul><p>Conversely, using integration testing tools like Cypress or Playwright provides control over the page, but sacrifices the ability to instrument the bootstrapping code for the app. These tools operate by remotely controlling a browser to visit a URL and interact with the page. This approach has its own set of challenges:</p><ul><li>Difficulty in making calls to an alternative API endpoint without implementing custom network layer API rewrite rules.</li><li>Inability to make assertions on spies/mocks or execute code within the app.</li><li>Testing something like dark mode entails clicking the theme switcher or knowing the localStorage mechanism to override.</li><li>Inability to test segments of the app, for example if a component is only visible after clicking a button and waiting for a 60 second timer to countdown, the test will need to run those actions and will be at least a minute long.</li></ul><p>Recognizing these challenges, solutions like E2E Component Testing have emerged, with offerings from <a href="https://docs.cypress.io/guides/component-testing/overview">Cypress</a> and <a href="https://playwright.dev/docs/test-components">Playwright</a>. While these tools attempt to rectify the shortcomings of traditional integration testing methods, they have other limitations due to their architecture. They start a dev server with bootstrapping code to load the component and/or setup code you want, which limits their ability to handle complex enterprise applications that might have OAuth or a complex build pipeline. Moreover, updating TypeScript usage could break your tests until the Cypress/Playwright team updates their runner.</p><h3>Welcome to SafeTest</h3><p>SafeTest aims to address these issues with a novel approach to UI testing. The main idea is to have a <a href="https://www.npmjs.com/package/safetest#bootstrapping-your-application">snippet of code in our application bootstrapping stage that injects hooks to run our tests</a> (see the <a href="https://www.npmjs.com/package/safetest#how-safetest-works">How Safetest Works</a> sections for more info on what this is doing). <strong>Note that how this works has no measurable impact on the regular usage of your app since SafeTest leverages lazy loading to dynamically load the tests only when running the tests (in the README example, the tests aren’t in the production bundle at all).</strong> Once that’s in place, we can use Playwright to run regular tests, thereby achieving the ideal browser control we want for our tests.</p><p>This approach also unlocks some exciting features:</p><ul><li>Deep linking to a specific test without needing to run a node test server.</li><li>Two-way communication between the browser and test (node) context.</li><li>Access to all the DX features that come with Playwright (excluding the ones that come with @playwright/test).</li><li>Video recording of tests, trace viewing, and pause page functionality for trying out different page selectors/actions.</li><li>Ability to make assertions on spies in the browser in node, matching snapshot of the call within the browser.</li></ul><h3>Test Examples with SafeTest</h3><p>SafeTest is designed to feel familiar to anyone who has conducted UI tests before, as it leverages the best parts of existing solutions. Here’s an example of how to test an entire application:</p><pre>import { describe, it, expect } from 'safetest/jest';<br>import { render } from 'safetest/react';<br><br>describe('my app', () =&#62; {<br>  it('loads the main page', async () =&#62; {<br>    const { page } = await render();<br><br>    await expect(page.getByText('Welcome to the app')).toBeVisible();<br>    expect(await page.screenshot()).toMatchImageSnapshot();<br>  });<br>});</pre><p>We can just as easily test a specific component</p><pre>import { describe, it, expect, browserMock } from 'safetest/jest';<br>import { render } from 'safetest/react';<br><br>describe('Header component', () =&#62; {<br>  it('has a normal mode', async () =&#62; {<br>    const { page } = await render(&#60;Header /&#62;);<br><br>    await expect(page.getByText('Admin')).not.toBeVisible();<br>   });<br><br>  it('has an admin mode', async () =&#62; {<br>    const { page } = await render(&#60;Header admin={true} /&#62;);<br><br>    await expect(page.getByText('Admin')).toBeVisible();<br>  });<br><br>  it('calls the logout handler when signing out', async () =&#62; {<br>    const spy = browserMock.fn();<br>    const { page } = await render(&#60;Header handleLogout={fn} /&#62;);<br><br>    await page.getByText('logout').click();<br>    expect(await spy).toHaveBeenCalledWith();<br>  });<br>});</pre><h3>Leveraging Overrides</h3><p>SafeTest utilizes React Context to allow for value overrides during tests. For an example of how this works, let’s assume we have a fetchPeople function used in a component:</p><pre>import { useAsync } from 'react-use';<br>import { fetchPerson } from './api/person';<br><br>export const People: React.FC = () =&#62; {<br>  const { data: people, loading, error } = useAsync(fetchPeople);<br>  <br>  if (loading) return &#60;Loader /&#62;;<br>  if (error) return &#60;ErrorPage error={error} /&#62;;<br>  return &#60;Table data={data} rows=[...] /&#62;;<br>}</pre><p>We can modify the People component to use an Override:</p><pre> import { fetchPerson } from './api/person';<br>+import { createOverride } from 'safetest/react';<br><br>+const FetchPerson = createOverride(fetchPerson);<br><br> export const People: React.FC = () =&#62; {<br>+  const fetchPeople = FetchPerson.useValue();<br>   const { data: people, loading, error } = useAsync(fetchPeople);<br>  <br>   if (loading) return &#60;Loader /&#62;;<br>   if (error) return &#60;ErrorPage error={error} /&#62;;<br>   return &#60;Table data={data} rows=[...] /&#62;;<br> }</pre><p>Now, in our test, we can override the response for this call:</p><pre>const pending = new Promise(r =&#62; { /* Do nothing */ });<br>const resolved = [{name: 'Foo', age: 23], {name: 'Bar', age: 32]}];<br>const error = new Error('Whoops');<br><br>describe('People', () =&#62; {<br>  it('has a loading state', async () =&#62; {<br>    const { page } = await render(<br>      &#60;FetchPerson.Override with={() =&#62; () =&#62; pending}&#62;<br>        &#60;People /&#62;<br>      &#60;/FetchPerson.Override&#62;<br>    );<br><br>    await expect(page.getByText('Loading')).toBeVisible();<br>  });<br><br>  it('has a loaded state', async () =&#62; {<br>    const { page } = await render(<br>      &#60;FetchPerson.Override with={() =&#62; async () =&#62; resolved}&#62;<br>        &#60;People /&#62;<br>      &#60;/FetchPerson.Override&#62;<br>    );<br><br>    await expect(page.getByText('User: Foo, name: 23')).toBeVisible();<br>  });<br><br>  it('has an error state', async () =&#62; {<br>    const { page } = await render(<br>      &#60;FetchPerson.Override with={() =&#62; async () =&#62; { throw error }}&#62;<br>        &#60;People /&#62;<br>      &#60;/FetchPerson.Override&#62;<br>    );<br><br>    await expect(page.getByText('Error getting users: "Whoops"')).toBeVisible();<br>  });<br>});</pre><p>The render function also accepts a function that will be passed the initial app component, allowing for the injection of any desired elements anywhere in the app:</p><pre>it('has a people loaded state', async () =&#62; {<br>  const { page } = await render(app =&#62;<br>    &#60;FetchPerson.Override with={() =&#62; async () =&#62; resolved}&#62;<br>      {app}<br>    &#60;/FetchPerson.Override&#62;<br>  );<br>   await expect(page.getByText('User: Foo, name: 23')).toBeVisible();<br>});</pre><p>With overrides, we can write complex test cases such as ensuring a service method which combines API requests from /foo, /bar, and /baz, has the correct retry mechanism for just the failed API requests and still maps the return value correctly. So if /bar takes 3 attempts to resolve the method will make a total of 5 API calls.</p><p>Overrides aren’t limited to just API calls (since we can use also use <a href="https://playwright.dev/docs/api/class-page#page-route">page.route</a>), we can also override specific app level values like feature flags or changing some static value:</p><pre>+const UseFlags = createOverride(useFlags);<br> export const Admin = () =&#62; {<br>+  const useFlags = UseFlags.useValue();<br>   const { isAdmin } = useFlags();<br>   if (!isAdmin) return &#60;div&#62;Permission error&#60;/div&#62;;<br>   // ...<br> }<br><br>+const Language = createOverride(navigator.language);<br> export const LanguageChanger = () =&#62; {<br>-  const language = navigator.language;<br>+  const language = Language.useValue();<br>   return &#60;div&#62;Current language is { language } &#60;/div&#62;;<br> }<br><br> describe('Admin', () =&#62; {<br>   it('works with admin flag', async () =&#62; {<br>     const { page } = await render(<br>       &#60;UseIsAdmin.Override with={oldHook =&#62; {<br>         const oldFlags = oldHook();<br>         return { ...oldFlags, isAdmin: true };<br>       }}&#62;<br>         &#60;MyComponent /&#62;<br>       &#60;/UseIsAdmin.Override&#62;<br>     );<br><br>     await expect(page.getByText('Permission error')).not.toBeVisible();<br>   });<br> });<br><br> describe('Language', () =&#62; {<br>   it('displays', async () =&#62; {<br>     const { page } = await render(<br>       &#60;Language.Override with={old =&#62; 'abc'}&#62;<br>         &#60;MyComponent /&#62;<br>       &#60;/Language.Override&#62;<br>     );<br><br>     await expect(page.getByText('Current language is abc')).toBeVisible();<br>   });<br> });</pre><p>Overrides are a powerful feature of SafeTest and the examples here only scratch the surface. For more information and examples, refer to the <a href="https://www.npmjs.com/package/safetest#overrides">Overrides section</a> on the <a href="https://github.com/kolodny/safetest/blob/main/README.md">README</a>.</p><h3>Reporting</h3><p>SafeTest comes out of the box with powerful reporting capabilities, such as automatic linking of video replays, Playwright trace viewer, and even <a href="https://safetest-two.vercel.app/vite-react-ts/?test_path=./Another.safetest&#38;test_name=Main2+can+do+many+interactions+fast">deep link directly to the mounted tested component</a>. The SafeTest repo <a href="https://github.com/kolodny/safetest/blob/main/README.md">README</a> links to all the <a href="https://safetest-two.vercel.app/">example apps</a> as well as the <a href="https://safetest-two.vercel.app/report.html#results=vite-react-ts/artifacts/results.json&#38;url=vite-react-ts/">reports</a></p><figure><img alt="Image of SafeTest report showing a video of a test run" src="https://cdn-images-1.medium.com/max/995/1*OFmV3PX7Is8X48-V9ryeig.png"></figure><h3>SafeTest in Corporate Environments</h3><p>Many large corporations need a form of authentication to use the app. Typically, navigating to localhost:3000 just results in a perpetually loading page. You need to go to a different port, like localhost:8000, which has a proxy server to check and/or inject auth credentials into underlying service calls. This limitation is one of the main reasons that Cypress/Playwright Component Tests aren’t suitable for use at Netflix.</p><p>However, there’s usually a service that can generate test users whose credentials we can use to log in and interact with the application. This facilitates creating a light wrapper around SafeTest to automatically generate and assume that test user. For instance, here’s basically how we do it at Netflix:</p><pre>import { setup } from 'safetest/setup';<br>import { createTestUser, addCookies } from 'netflix-test-helper';<br><br>type Setup = Parameters&#60;typeof setup&#62;[0] &#38; {<br>  extraUserOptions?: UserOptions;<br>};<br><br><br>export const setupNetflix = (options: Setup) =&#62; {<br>  setup({<br>    ...options,<br>    hooks: { beforeNavigate: [async page =&#62; addCookies(page)] },<br>  });<br><br>  beforeAll(async () =&#62; {<br>    createTestUser(options.extraUserOptions)<br>  });<br>};</pre><p>After setting this up, we simply import the above package in place of where we would have used safetest/setup.</p><h3>Beyond React</h3><p>While this post focused on how SafeTest works with React, it’s not limited to just React. SafeTest also works with Vue, Svelte, Angular, and even can run on NextJS or Gatsby. It also runs using either Jest or Vitest based on which test runner your scaffolding started you off with. The <a href="https://github.com/kolodny/safetest/tree/main/examples">examples folder</a> demonstrates how to use SafeTest with different tooling combinations, and we encourage contributions to add more cases.</p><p>At its core, SafeTest is an intelligent glue for a test runner, a UI library, and a browser runner. Though the most common usage at Netflix employs Jest/React/Playwright, it’s easy to add more adapters for other options.</p><h3>Conclusion</h3><p>SafeTest is a powerful testing framework that’s being adopted within Netflix. It allows for easy authoring of tests and provides comprehensive reports when and how any failures occurred, complete with links to view a playback video or manually run the test steps to see what broke. We’re excited to see how it will revolutionize UI testing and look forward to your feedback and contributions.</p><img src="https://medium.com/_/stat?event=post.clientViewed&#38;referrerSource=full_rss&#38;postId=37f9f88c152d" width="1" height="1" alt=""><hr><p><a href="https://netflixtechblog.com/introducing-safetest-a-novel-approach-to-front-end-testing-37f9f88c152d">Introducing SafeTest: A Novel Approach to Front End Testing</a> was originally published in <a href="https://netflixtechblog.com/">Netflix TechBlog</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Code Written with AI Assistants Is Less Secure</title>
		<link>https://noise.getoto.net/2024/01/17/code-written-with-ai-assistants-is-less-secure/</link>
		
		<dc:creator><![CDATA[Bruce Schneier]]></dc:creator>
		<pubDate>Wed, 17 Jan 2024 12:14:03 +0000</pubDate>
				<category><![CDATA[academic papers]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[security analysis]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://www.schneier.com/?p=68294</guid>

					<description><![CDATA[<p>Interesting research: “<a href="https://arxiv.org/abs/2211.03622">Do Users Write More Insecure Code with AI Assistants?</a>“:</p>
<blockquote><p><b>Abstract:</b> We conduct the first large-scale user study examining how users interact with an AI Code assistant to solve a variety of security related tasks across different programming languages. Overall, we find that participants who had access to an AI assistant based on OpenAI’s codex-davinci-002 model wrote significantly less secure code than those without access. Additionally, participants with access to an AI assistant were more likely to believe they wrote secure code than those without access to the AI assistant. Furthermore, we find that participants who trusted the AI less and engaged more with the language and format of their prompts (e.g. re-phrasing, adjusting temperature) provided code with fewer security vulnerabilities. Finally, in order to better inform the design of future AI-based Code assistants, we provide an in-depth analysis of participants’ language and interaction behavior, as well as release our user interface as an instrument to conduct similar studies in the future...</p></blockquote>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Celebrating the community: Selin</title>
		<link>https://noise.getoto.net/2022/11/24/celebrating-the-community-selin/</link>
		
		<dc:creator><![CDATA[Rosa Brown]]></dc:creator>
		<pubDate>Thu, 24 Nov 2022 09:58:31 +0000</pubDate>
				<category><![CDATA[community]]></category>
		<category><![CDATA[coolest projects]]></category>
		<category><![CDATA[digital making]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[robotics]]></category>
		<guid isPermaLink="false">https://www.raspberrypi.org/?p=82188</guid>

					<description><![CDATA[<p>We are so excited to share another story from the community! Our series of community stories takes you across the world to hear from young people and educators who are engaging with creating digital technologies in their own personal ways.  In this story we introduce you to Selin, a digital maker from Istanbul, Turkey, who…</p>
<p>The post <a rel="nofollow" href="https://www.raspberrypi.org/blog/celebrating-the-community-selin/">Celebrating the community: Selin</a> appeared first on <a rel="nofollow" href="https://www.raspberrypi.org/">Raspberry Pi</a>.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Take part in the Hour of Code</title>
		<link>https://noise.getoto.net/2022/11/15/take-part-in-the-hour-of-code/</link>
		
		<dc:creator><![CDATA[Liz Smart]]></dc:creator>
		<pubDate>Tue, 15 Nov 2022 11:18:31 +0000</pubDate>
				<category><![CDATA[coding for kids]]></category>
		<category><![CDATA[digital making]]></category>
		<category><![CDATA[education]]></category>
		<category><![CDATA[hour of code]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[physical computing]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Project paths]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[scratch]]></category>
		<guid isPermaLink="false">https://www.raspberrypi.org/?p=81982</guid>

					<description><![CDATA[<p>Launched in 2013, Hour of Code is an initiative to introduce young people to computer science using fun one-hour tutorials. To date, over 100 million young people have completed an hour of code with it.  Although the Hour of Code website is accessible all year round, every December for Computer Science Education Week people worldwide…</p>
<p>The post <a rel="nofollow" href="https://www.raspberrypi.org/blog/hour-of-code-activities/">Take part in the Hour of Code</a> appeared first on <a rel="nofollow" href="https://www.raspberrypi.org/">Raspberry Pi</a>.</p>]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Live-patching security vulnerabilities inside the Linux kernel with eBPF Linux Security Module</title>
		<link>https://noise.getoto.net/2022/06/29/live-patching-security-vulnerabilities-inside-the-linux-kernel-with-ebpf-linux-security-module/</link>
		
		<dc:creator><![CDATA[Frederick Lawler]]></dc:creator>
		<pubDate>Wed, 29 Jun 2022 11:45:00 +0000</pubDate>
				<category><![CDATA[deep dive]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=a392114905cd7882bdbd936d108f90c1</guid>

					<description><![CDATA[Learn how to patch Linux security vulnerabilities without rebooting the hardware and how to tighten the security of your Linux operating system with eBPF Linux Security Module]]></description>
		
		
		<enclosure url="http://blog.cloudflare.com/content/images/2022/06/Linux---Warp.png" length="0" type="" />

			</item>
		<item>
		<title>How to execute an object file: Part 3</title>
		<link>https://noise.getoto.net/2021/09/10/how-to-execute-an-object-file-part-3/</link>
		
		<dc:creator><![CDATA[Ignat Korchagin]]></dc:creator>
		<pubDate>Fri, 10 Sep 2021 12:58:20 +0000</pubDate>
				<category><![CDATA[Compiler]]></category>
		<category><![CDATA[deep dive]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=ef783891951733c401a52631391c7ea7</guid>

					<description><![CDATA[Continue learning how to import and execute code from an object file. In this part we will handle external library dependencies.]]></description>
		
		
		<enclosure url="https://blog.cloudflare.com/content/images/2021/09/image1.jpg" length="0" type="" />

			</item>
		<item>
		<title>How to execute an object file: Part 1</title>
		<link>https://noise.getoto.net/2021/03/02/how-to-execute-an-object-file-part-1/</link>
		
		<dc:creator><![CDATA[Ignat Korchagin]]></dc:creator>
		<pubDate>Tue, 02 Mar 2021 12:00:00 +0000</pubDate>
				<category><![CDATA[Compiler]]></category>
		<category><![CDATA[deep dive]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[software]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=67177b101f7dbc5137d1bc7261ca577c</guid>

					<description><![CDATA[Ever wondered if it is possible to execute an object file without linking? Or use any object file as a library? Follow along to learn how to decompose an object file and import code from it along the way.]]></description>
		
		
		<enclosure url="https://blog.cloudflare.com/content/images/2021/03/image3.png" length="0" type="" />

			</item>
		<item>
		<title>Go is not an easy language</title>
		<link>https://noise.getoto.net/2021/02/22/go-is-not-an-easy-language/</link>
		
		<dc:creator><![CDATA[arp242.net]]></dc:creator>
		<pubDate>Mon, 22 Feb 2021 00:00:00 +0000</pubDate>
				<category><![CDATA[Go]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.arp242.net/go-easy.html</guid>

					<description><![CDATA[Go is not an easy programming language. It is simple in many ways: the syntax
is simple, most of the semantics are simple. But a language is more than just
syntax; it’s about doing useful stuff. And doing useful stuff is not always
easy in Go.

Turns o...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Bitmasks for nicer APIs</title>
		<link>https://noise.getoto.net/2020/12/10/bitmasks-for-nicer-apis/</link>
		
		<dc:creator><![CDATA[arp242.net]]></dc:creator>
		<pubDate>Thu, 10 Dec 2020 00:00:00 +0000</pubDate>
				<category><![CDATA[Go]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.arp242.net/bitmask.html</guid>

					<description><![CDATA[Bitmasks is one of those things where the basic idea is simple to understand:
it’s just 0s and 1s being toggled on and off. But actually “having it click”
to the point where it’s easy to work with can be a bit trickier. At least, it is
(or rather, was)...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Stupid light software</title>
		<link>https://noise.getoto.net/2020/11/29/stupid-light-software/</link>
		
		<dc:creator><![CDATA[arp242.net]]></dc:creator>
		<pubDate>Sun, 29 Nov 2020 00:00:00 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.arp242.net/stupid-light.html</guid>

					<description><![CDATA[The ultralight hiking community is – as you may gather from the name – very
focused on ultralight equipment and minimalism. Turns out that saving a bit of
weight ten times actually adds up to a significant weight savings, making hikes
– especially long...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>An API is a user interface</title>
		<link>https://noise.getoto.net/2020/11/25/an-api-is-a-user-interface/</link>
		
		<dc:creator><![CDATA[arp242.net]]></dc:creator>
		<pubDate>Wed, 25 Nov 2020 00:00:00 +0000</pubDate>
				<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">https://www.arp242.net/api-ux.html</guid>

					<description><![CDATA[An API is a user interface for programmers and is essentially no different from
a graphical user interface, command-line user interface, or any other interface
a human (“user”) is expected to work with. Whenever you create a publicly
callable function ...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>Diving into /proc/[pid]/mem</title>
		<link>https://noise.getoto.net/2020/10/27/diving-into-proc-pid-mem/</link>
		
		<dc:creator><![CDATA[Lennart Espe]]></dc:creator>
		<pubDate>Tue, 27 Oct 2020 12:00:00 +0000</pubDate>
				<category><![CDATA[deep dive]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=1c0d868448e6ab05ea8f5f3e4ab76673</guid>

					<description><![CDATA[A few months ago, after reading about Cloudflare doubling its intern class, I quickly dusted off my CV and applied for an internship. Long story short: now, a couple of months later, I found myself staring at Linux kernel code and adding a pretty cool feature to gVisor.]]></description>
		
		
		<enclosure url="https://blog.cloudflare.com/content/images/2020/10/image2-27.png" length="0" type="" />

			</item>
		<item>
		<title>Raking the floods: How to protect UDP services from DoS attacks with eBPF</title>
		<link>https://noise.getoto.net/2020/09/18/raking-the-floods-how-to-protect-udp-services-from-dos-attacks-with-ebpf/</link>
		
		<dc:creator><![CDATA[Jonas Otten]]></dc:creator>
		<pubDate>Fri, 18 Sep 2020 11:00:00 +0000</pubDate>
				<category><![CDATA[eBPF]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[udp]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=0e462d28efee1c6b38ea3dd53307d005</guid>

					<description><![CDATA[SYN-cookies help mitigating SYN-floods for TCP, but how can we protect services from similar attacks that use UDP? We designed an algorithm and a library to fill this gap, and it&#8217;s open source!]]></description>
		
		
		<enclosure url="https://blog-cloudflare-com-assets.storage.googleapis.com/2020/09/raking-sandbox@2x.png" length="0" type="" />

			</item>
		<item>
		<title>My perl-cwmp patches are merged</title>
		<link>https://noise.getoto.net/2014/10/22/my-perl-cwmp-patches-are-merged/</link>
		
		<dc:creator><![CDATA[Anonymous]]></dc:creator>
		<pubDate>Wed, 22 Oct 2014 13:26:00 +0000</pubDate>
				<category><![CDATA[cwmp]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[perl-cwmp]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[tr-069]]></category>
		<guid isPermaLink="false">http://noise.getoto.net/?guid=909df93e135ded3a78542c2a204311fb</guid>

					<description><![CDATA[


Hello,

I've used perl-cwmp here and there. It is a nice, really small, really light and simple TR-069  ACS, with a very easy install and no heavy requirements. You can read the whole code for few minutes and you can make your own modifications. I a...]]></description>
		
		
		<enclosure url="" length="0" type="" />

			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Object Caching 58/373 objects using Memcached
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Database Caching using Memcached

Served from: noise.getoto.net @ 2025-12-11 14:42:59 by W3 Total Cache
-->