<!DOCTYPE html><html lang="en" class="theme-dark" data-astro-cid-37fxchfa> <head><!-- Global Metadata --><meta charset="utf-8"><meta name="viewport" content="width=device-width"><link rel="icon" type="image/jpeg" sizes="32x32" href="/meta/favicon.ico" media="(prefers-color-scheme: dark)"><link rel="icon" type="image/jpeg" sizes="32x32" href="/meta/favicon.ico"><link rel="icon" type="image/jpeg" sizes="180x180" href="/meta/ios-home.jpg"><link rel="icon" type="image/jpeg" sizes="192x192" href="/meta/android-home.jpg"><link rel="icon" type="image/jpeg" sizes="512x512" href="/meta/android-splash.jpg"><link rel="apple-touch-icon" type="image/jpeg" sizes="180x180" href="/meta/ios-home.jpg"><link rel="apple-touch-icon" type="image/jpeg" sizes="192x192" href="/meta/android-home.jpg"><link rel="apple-touch-icon" type="image/jpeg" sizes="512x512" href="/meta/android-splash.jpg"><link rel="canonical" href="https://blog.dave.io/"><!-- Primary Meta Tags --><title>Blog</title><meta name="title" content="Blog"><meta name="description" content="Latest articles"><!-- Open Graph / Facebook --><meta property="og:type" content="website"><meta property="og:url" content="https://blog.dave.io/blog"><meta property="og:title" content="Blog"><meta property="og:description" content="Latest articles"><meta property="og:image" content="https://blog.dave.io/meta/twitter-card-lg.jpg"><!-- Twitter --><meta name="twitter:card" content="summary"><meta property="twitter:url" content="https://blog.dave.io/blog"><meta property="twitter:title" content="Blog"><meta property="twitter:description" content="Latest articles"><meta property="twitter:image" content="https://blog.dave.io/meta/twitter-card-lg.jpg"><!-- TypeKit --><link rel="stylesheet" href="https://use.typekit.net/ecm5qze.css"><!-- ld+json --><script type="application/ld+json">
  {
      "@context": "http://schema.org",
      "@type": "WebSite",
      "name": "blog.dave.io",
      "url": "https://blog.dave.io"
  }
</script><!-- <ViewTransitions /> --><script type="text/partytown" async src="https://www.googletagmanager.com/gtag/js?id=G-DSDEK1KTTM"></script><script type="text/partytown">
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'G-DSDEK1KTTM');
</script><link rel="stylesheet" href="/_astro/about.DerZKgXE.css">
<style>h2[data-astro-cid-j7pv25f6],.post-item-footer[data-astro-cid-j7pv25f6]{font-family:var(--font-family-sans);font-weight:700}.post-item-date[data-astro-cid-j7pv25f6]{color:var(--text-secondary);text-align:left;text-transform:uppercase;margin-right:16px}hr[data-astro-cid-j7pv25f6]{margin:60px auto}
</style><script>!(function(w,p,f,c){if(!window.crossOriginIsolated && !navigator.serviceWorker) return;c=w[p]=Object.assign(w[p]||{},{"lib":"/~partytown/","debug":false});c[f]=(c[f]||[]).concat(["dataLayer.push"])})(window,'partytown','forward');/* Partytown 0.11.0 - MIT QwikDev */
const t={preserveBehavior:!1},e=e=>{if("string"==typeof e)return[e,t];const[n,r=t]=e;return[n,{...t,...r}]},n=Object.freeze((t=>{const e=new Set;let n=[];do{Object.getOwnPropertyNames(n).forEach((t=>{"function"==typeof n[t]&&e.add(t)}))}while((n=Object.getPrototypeOf(n))!==Object.prototype);return Array.from(e)})());!function(t,r,o,i,a,s,c,l,d,p,u=t,f){function h(){f||(f=1,"/"==(c=(s.lib||"/~partytown/")+(s.debug?"debug/":""))[0]&&(d=r.querySelectorAll('script[type="text/partytown"]'),i!=t?i.dispatchEvent(new CustomEvent("pt1",{detail:t})):(l=setTimeout(v,(null==s?void 0:s.fallbackTimeout)||1e4),r.addEventListener("pt0",w),a?y(1):o.serviceWorker?o.serviceWorker.register(c+(s.swPath||"partytown-sw.js"),{scope:c}).then((function(t){t.active?y():t.installing&&t.installing.addEventListener("statechange",(function(t){"activated"==t.target.state&&y()}))}),console.error):v())))}function y(e){p=r.createElement(e?"script":"iframe"),t._pttab=Date.now(),e||(p.style.display="block",p.style.width="0",p.style.height="0",p.style.border="0",p.style.visibility="hidden",p.setAttribute("aria-hidden",!0)),p.src=c+"partytown-"+(e?"atomics.js?v=0.11.0":"sandbox-sw.html?"+t._pttab),r.querySelector(s.sandboxParent||"body").appendChild(p)}function v(n,o){for(w(),i==t&&(s.forward||[]).map((function(n){const[r]=e(n);delete t[r.split(".")[0]]})),n=0;n<d.length;n++)(o=r.createElement("script")).innerHTML=d[n].innerHTML,o.nonce=s.nonce,r.head.appendChild(o);p&&p.parentNode.removeChild(p)}function w(){clearTimeout(l)}s=t.partytown||{},i==t&&(s.forward||[]).map((function(r){const[o,{preserveBehavior:i}]=e(r);u=t,o.split(".").map((function(e,r,o){var a;u=u[o[r]]=r+1<o.length?u[o[r]]||(a=o[r+1],n.includes(a)?[]:{}):(()=>{let e=null;if(i){const{methodOrProperty:n,thisObject:r}=((t,e)=>{let n=t;for(let t=0;t<e.length-1;t+=1)n=n[e[t]];return{thisObject:n,methodOrProperty:e.length>0?n[e[e.length-1]]:void 0}})(t,o);"function"==typeof n&&(e=(...t)=>n.apply(r,...t))}return function(){let n;return e&&(n=e(arguments)),(t._ptf=t._ptf||[]).push(o,arguments),n}})()}))})),"complete"==r.readyState?h():(t.addEventListener("DOMContentLoaded",h),t.addEventListener("load",h))}(window,document,navigator,top,window.crossOriginIsolated);;(e=>{e.addEventListener("astro:before-swap",e=>{let r=document.body.querySelector("iframe[src*='/~partytown/']");if(r)e.newDocument.body.append(r)})})(document);</script></head> <!-- Google tag (gtag.js) --> <body data-astro-cid-37fxchfa> <div class="layout" data-astro-cid-37fxchfa> <header data-astro-cid-3ef6ksr2> <a href="/" data-astro-cid-tvrurpns> <img alt="Blog Logo" src="/meta/logo.png" width="200" data-astro-cid-tvrurpns> </a> <nav data-astro-cid-dmqpwcec> <a class="selected" href="/" data-astro-cid-dmqpwcec>blog</a> <a class href="/about" data-astro-cid-dmqpwcec>about</a> </nav> </header> <main data-astro-cid-37fxchfa>  <div class="container" data-astro-cid-j7pv25f6> <div data-astro-cid-j7pv25f6>  <div class="post-item" data-astro-cid-j7pv25f6> <h2 data-astro-cid-j7pv25f6> <a href="/blog/20241216-meshtastic" data-astro-cid-j7pv25f6>Getting started with Meshtastic</a> </h2> <p data-astro-cid-j7pv25f6><img class="float-left pr-5 pb-5 pt-2" src="../../thumbnails/meshtastic.jpg" alt="Getting started with Meshtastic" width="200" height="200" data-astro-cid-j7pv25f6> Meshtastic is an innovative project that leverages
LoRa technology to enable long-distance
communication using low-power and compact hardware.
It allows users to send short text messages and
metadata over impressive distances, with the
potential to reach nodes 70 miles away or more with
the right antenna. To get started with Meshtastic,
you&#39;ll need a node, with options like the Heltec V3
for affordability and performance, the LILYGO T-Deck
Plus for a standalone experience, or the LILYGO
T-Watch S3 for a wearable solution. In the UK, it&#39;s
best to operate on the 868 MHz frequency, and using
the default &quot;LongFast&quot; modulation offers the broadest
connectivity. Once set up, users can explore the
network by leaving their device on to discover nearby
nodes and communicate on shared channels.
</p> <div class="post-item-footer" data-astro-cid-j7pv25f6> <span class="post-item-date" data-astro-cid-j7pv25f6>— 16 December 2024</span> </div> </div> </div><div data-astro-cid-j7pv25f6> <hr data-astro-cid-j7pv25f6> <div class="post-item" data-astro-cid-j7pv25f6> <h2 data-astro-cid-j7pv25f6> <a href="/blog/20241215-0x5f3759df" data-astro-cid-j7pv25f6>0x5f3759df - a true &#39;magic number&#39;</a> </h2> <p data-astro-cid-j7pv25f6><img class="float-left pr-5 pb-5 pt-2" src="../../thumbnails/quake3.jpg" alt="0x5f3759df - a true 'magic number'" width="200" height="200" data-astro-cid-j7pv25f6> The &#39;magic number&#39; `0x5f3759df`, used in Quake 3:
Arena&#39;s code, is an antipattern, often undocumented
and difficult for others to maintain. Despite this,
it enabled a fast approximation of the inverse square
root, crucial for 3D rendering. Carmack&#39;s code uses a
clever bit manipulation to achieve this efficiently,
with Newton&#39;s method refining the result. This
approach was much faster than traditional square root
calculations. The origin of this magic number is
unclear, with its discovery being a lost piece of
history.
</p> <div class="post-item-footer" data-astro-cid-j7pv25f6> <span class="post-item-date" data-astro-cid-j7pv25f6>— 15 December 2024</span> </div> </div> </div> </div>  </main> <footer data-astro-cid-sz7xmlte> <span data-astro-cid-sz7xmlte>
All content &copy; Dave Williams 2025.
</span> </footer>  </div> <!-- Cloudflare Pages Analytics --><script defer src='https://static.cloudflareinsights.com/beacon.min.js' data-cf-beacon='{"token": "2dc33b56e64146ac81606d53c83a35ed"}'></script><!-- Cloudflare Pages Analytics --></body></html> 