rationaldev.com Ads.txt file

<!DOCTYPE html>
<html lang="en" class="astro-5Z7XTYGO">
<head>
<!-- Use Google Fonts, if you don't wanna prefer a self-hosted version --><!-- <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fira+Code:wght@300;400;500;600;700&display=swap" rel="stylesheet"> --><meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Blog</title>
<meta name="title" content="Blog">
<link rel="canonical" href="https://rationaldev.com/">

<meta name="description" content="RationalDev is collection of computer programming thoughts from reading internet articles, books, commercial experience and attempted rational thinking to help others in the future">

<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon.png">
<link rel="shortcut icon" type="image/png" sizes="16x16" href="/favicon.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5">

<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/browserconfig.xml">
<meta name="theme-color" content="#ffffff">

<!-- Open Graph Tags (Facebook) -->
<meta property="og:type" content="website">
<meta property="og:title" content="Blog">

<meta property="og:description" content="RationalDev is collection of computer programming thoughts from reading internet articles, books, commercial experience and attempted rational thinking to help others in the future">


<!-- Twitter -->
<meta property="twitter:card" content="summary_large_image">
<meta property="twitter:title" content="Blog">

<meta property="twitter:description" content="RationalDev is collection of computer programming thoughts from reading internet articles, books, commercial experience and attempted rational thinking to help others in the future">

<link rel="stylesheet" href="/_astro/_...page_.8847f7b1.css" />
<link rel="stylesheet" href="/_astro/_...page_.59edf7e6.css" />
<link rel="stylesheet" href="/_astro/_...page_.a6670260.css" />
<link rel="stylesheet" href="/_astro/_...page_.6d307df8.css" />
<link rel="stylesheet" href="/_astro/access-denied-error-moss-2007-sharepoint-designer.04ce3480.css" /><script type="module">(function(o,w,i){var a=o.history,r=document,u=navigator||{},d=localStorage,p=encodeURIComponent,m=a.pushState,S=function(){return Math.random().toString(36)},y=function(){return d.cid||(d.cid=S()),d.cid},z=function(e){var n=[];for(var t in e)e.hasOwnProperty(t)&&e[t]!==void 0&&n.push(p(t)+"="+p(e[t]));return n.join("&")},c=function(e,n,t,s,l,x,v){var h="https://www.google-analytics.com/collect",f=z({v:"1",ds:"web",aip:i.anonymizeIp?1:void 0,tid:w,cid:y(),t:e||"pageview",sd:i.colorDepth&&screen.colorDepth?screen.colorDepth+"-bits":void 0,dr:r.referrer||void 0,dt:r.title,dl:r.location.origin+r.location.pathname+r.location.search,ul:i.language?(u.language||"").toLowerCase():void 0,de:i.characterSet?r.characterSet:void 0,sr:i.screenSize?(o.screen||{}).width+"x"+(o.screen||{}).height:void 0,vp:i.screenSize&&o.visualViewport?(o.visualViewport||{}).width+"x"+(o.visualViewport||{}).height:void 0,ec:n||void 0,ea:t||void 0,el:s||void 0,ev:l||void 0,exd:x||void 0,exf:typeof v<"u"&&!v?0:void 0});if(u.sendBeacon)u.sendBeacon(h,f);else{var g=new XMLHttpRequest;g.open("POST",h,!0),g.send(f)}};a.pushState=function(e){return typeof a.onpushstate=="function"&&a.onpushstate({state:e}),setTimeout(c,i.delay||10),m.apply(a,arguments)},c(),o.ma={trackEvent:function(n,t,s,l){return c("event",n,t,s,l)},trackException:function(n,t){return c("exception",null,null,null,null,n,t)}}})(window,"UA-54389315-1",{anonymizeIp:!0,colorDepth:!0,characterSet:!0,screenSize:!0,language:!0});
</script></head>
<body class="font-sans antialiased">
<script>
if (localStorage.getItem('theme') === 'dark' || (!('theme' in localStorage) && window.matchMedia(`
(prefers-color-scheme: dark)`).matches))
window.document.body.classList.add('dark')
else
window.document.body.classList.add('light')
</script>

<div style="min-height: 100vh" class="bg-gray-100 dark:bg-blueGray-900 transition-colors">
<main class="mx-auto max-w-4xl px-4 md:px-0">
<style>astro-island,astro-slot{display:contents}</style><script>(self.Astro=self.Astro||{}).visible=(s,c,n)=>{const r=async()=>{await(await s())()};let i=new IntersectionObserver(e=>{for(const t of e)if(!!t.isIntersecting){i.disconnect(),r();break}});for(let e=0;e<n.children.length;e++){const t=n.children[e];i.observe(t)}},window.dispatchEvent(new Event("astro:visible"));var l;{const c={0:t=>t,1:t=>JSON.parse(t,o),2:t=>new RegExp(t),3:t=>new Date(t),4:t=>new Map(JSON.parse(t,o)),5:t=>new Set(JSON.parse(t,o)),6:t=>BigInt(t),7:t=>new URL(t),8:t=>new Uint8Array(JSON.parse(t)),9:t=>new Uint16Array(JSON.parse(t)),10:t=>new Uint32Array(JSON.parse(t))},o=(t,s)=>{if(t===""||!Array.isArray(s))return s;const[e,n]=s;return e in c?c[e](n):void 0};customElements.get("astro-island")||customElements.define("astro-island",(l=class extends HTMLElement{constructor(){super(...arguments);this.hydrate=()=>{if(!this.hydrator||this.parentElement&&this.parentElement.closest("astro-island[ssr]"))return;const s=this.querySelectorAll("astro-slot"),e={},n=this.querySelectorAll("template[data-astro-template]");for(const r of n){const i=r.closest(this.tagName);!i||!i.isSameNode(this)||(e[r.getAttribute("data-astro-template")||"default"]=r.innerHTML,r.remove())}for(const r of s){const i=r.closest(this.tagName);!i||!i.isSameNode(this)||(e[r.getAttribute("name")||"default"]=r.innerHTML)}const a=this.hasAttribute("props")?JSON.parse(this.getAttribute("props"),o):{};this.hydrator(this)(this.Component,a,e,{client:this.getAttribute("client")}),this.removeAttribute("ssr"),window.removeEventListener("astro:hydrate",this.hydrate),window.dispatchEvent(new CustomEvent("astro:hydrate"))}}connectedCallback(){!this.hasAttribute("await-children")||this.firstChild?this.childrenConnectedCallback():new MutationObserver((s,e)=>{e.disconnect(),this.childrenConnectedCallback()}).observe(this,{childList:!0})}async childrenConnectedCallback(){window.addEventListener("astro:hydrate",this.hydrate);let s=this.getAttribute("before-hydration-url");s&&await import(s),this.start()}start(){const s=JSON.parse(this.getAttribute("opts")),e=this.getAttribute("client");if(Astro[e]===void 0){window.addEventListener(`astro:${e}`,()=>this.start(),{once:!0});return}Astro[e](async()=>{const n=this.getAttribute("renderer-url"),[a,{default:r}]=await Promise.all([import(this.getAttribute("component-url")),n?import(n):()=>()=>{}]),i=this.getAttribute("component-export")||"default";if(!i.includes("."))this.Component=a[i];else{this.Component=a;for(const d of i.split("."))this.Component=this.Component[d]}return this.hydrator=r,this.hydrate},s,this)}attributeChangedCallback(){this.hydrator&&this.hydrate()}},l.observedAttributes=["props"],l))}</script><script>(self.Astro=self.Astro||{}).load=a=>{(async()=>await(await a())())()},window.dispatchEvent(new Event("astro:load"));</script><br class="my-4 astro-FHDT7AN5"><header class="flex gap-4 border-b py-3">
<div class="header__meta flex-1">
<div class="text-3xl font-extrabold md:text-3xl mb-4 text-primary dark:text-primaryDark">
<a href="https://rationaldev.com">RationalDev</a>
</div>
<div class="header__meta-more flex">
<p class="text-xl flex-1 dark:text-gray-200">
more of an aspiration than a claim
</p>
<nav class="header__nav flex">
<ul class="flex space-x-4 text-gray-400">
<li>
<astro-island uid="1gElKm" component-url="/_astro/SearchBtn.e286f1af.js" component-export="default" renderer-url="/_astro/client.c4e17359.js" props="{}" ssr="" client="visible" opts="{&quot;name&quot;:&quot;SearchBtn&quot;,&quot;value&quot;:true}" await-children=""><button aria-label="search"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path fill-rule="evenodd" clip-rule="evenodd" d="M16.2071 4.89344C19.0923 7.77862 19.3131 12.3193 16.8693 15.4578C16.8846 15.4713 16.8996 15.4854 16.9143 15.5L21.1569 19.7427C21.5474 20.1332 21.5474 20.7664 21.1569 21.1569C20.7664 21.5474 20.1332 21.5474 19.7427 21.1569L15.5 16.9143C15.4854 16.8996 15.4713 16.8846 15.4578 16.8693C12.3193 19.3131 7.77862 19.0923 4.89344 16.2071C1.76924 13.083 1.76924 8.01763 4.89344 4.89344C8.01763 1.76924 13.083 1.76924 16.2071 4.89344ZM14.7929 14.7929C17.1361 12.4498 17.1361 8.6508 14.7929 6.30765C12.4498 3.96451 8.6508 3.96451 6.30765 6.30765C3.96451 8.6508 3.96451 12.4498 6.30765 14.7929C8.6508 17.1361 12.4498 17.1361 14.7929 14.7929Z" fill="currentColor"></path></svg></button></astro-island>
</li>
<li>
<a href="https://twitter.com/1rdev" title="Twitter">
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M22.46 6c-.77.35-1.6.58-2.46.69c.88-.53 1.56-1.37 1.88-2.38c-.83.5-1.75.85-2.72 1.05C18.37 4.5 17.26 4 16 4c-2.35 0-4.27 1.92-4.27 4.29c0 .34.04.67.11.98C8.28 9.09 5.11 7.38 3 4.79c-.37.63-.58 1.37-.58 2.15c0 1.49.75 2.81 1.91 3.56c-.71 0-1.37-.2-1.95-.5v.03c0 2.08 1.48 3.82 3.44 4.21a4.22 4.22 0 0 1-1.93.07a4.28 4.28 0 0 0 4 2.98a8.521 8.521 0 0 1-5.33 1.84c-.34 0-.68-.02-1.02-.06C3.44 20.29 5.7 21 8.12 21C16 21 20.33 14.46 20.33 8.79c0-.19 0-.37-.01-.56c.84-.6 1.56-1.36 2.14-2.23z"></path>
</svg>
</a>
</li>
<li>
<astro-island uid="EfaxO" component-url="/_astro/ModeSwitcherBtn.4ad448aa.js" component-export="default" renderer-url="/_astro/client.c4e17359.js" props="{}" ssr="" client="visible" opts="{&quot;name&quot;:&quot;ModeSwitcherBtn&quot;,&quot;value&quot;:true}" await-children=""><button aria-label="theme switcher"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></button></astro-island>
</li>
</ul>
</nav>
</div>
</div>
</header><nav class="nav py-2">
<ul class="inline-flex list-none gap-8 text-xl font-semibold text-primarySecondary dark:text-primarySecondaryDark py-2 flex-wrap">
<li>
<a class="hover:underline" href="/" title="home">Home</a>
</li><li>
<a class="hover:underline" href="/tags" title="tags">Tags</a>
</li>
</ul>
</nav><div class="content astro-FHDT7AN5">
<div class="page__header astro-5Z7XTYGO">
<h1 class="text-5xl font-extrabold text-primary dark:text-primaryDark mb-3 astro-5Z7XTYGO">Blog</h1>
<p class="page__desc text-gray-600 dark:text-gray-400 astro-5Z7XTYGO">RationalDev is collection of computer programming thoughts from reading internet articles, books, commercial experience and attempted rational thinking to help others in the future</p>
</div><section class="flex flex-col gap-12">
<div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">9</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Mar 2023</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/how-to-structure-your-code-files-using-domain-and-functional-approach" title="How to Structure Your Code Files: Use Domain and Functional Approach Instead of Technology" class="astro-JZQ3EVCU">How to Structure Your Code Files: Use Domain and Functional Approach Instead of Technology</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
This article explores the benefits of using a domain and functional-based file structure for organizing your code files, instead of a technology-based approach. Learn how to implement this method effectively for a more modular, maintainable, and scalable codebase.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">5</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Mar 2023</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/cloudflare-web-analytics-vs-google-analytics-which-web-analytics-tool-is-right-for-your-website" title="Cloudflare Web Analytics vs. Google Analytics: Which Web Analytics Tool is Right for Your Website?" class="astro-JZQ3EVCU">Cloudflare Web Analytics vs. Google Analytics: Which Web Analytics Tool is Right for Your Website?</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
Comparing Cloudflare Web Analytics and Google Analytics to help you choose the right web analytics tool for your website. Learn about the pros and cons of each option, including data ownership, privacy, customization, and cost. Make an informed decision to improve your website&#39;s performance and user experience.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">17</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Feb 2023</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/node-version-managers" title="Node Version Managers" class="astro-JZQ3EVCU">Node Version Managers</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
I did not realise there were so many options for node version management tools.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">17</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Oct 2022</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/microsoft-teams-native-m1-install" title="Microsoft Teams Native M1 Install" class="astro-JZQ3EVCU">Microsoft Teams Native M1 Install</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
How to install the native M1 install of Microsoft Teams.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">6</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Feb 2022</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/choosing-react-state-management-libraries" title="Choosing React State Management Libraries" class="astro-JZQ3EVCU">Choosing React State Management Libraries</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
There are so many React state manangement libraries, how to choose one?
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">14</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Feb 2021</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/new-amazon-product-advertising-api-v5-for-node" title="New Amazon Product Advertising API V5 for Node" class="astro-JZQ3EVCU">New Amazon Product Advertising API V5 for Node</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
Learn how to use the Amazon Affiliates API in node.js.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">9</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Feb 2021</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/cooler-master-td-500-mesh-argb-connector-for-gigabyte-motherboard" title="Cooler Master TD500 Mesh ARGB Connector for Gigabyte Motherboard" class="astro-JZQ3EVCU">Cooler Master TD500 Mesh ARGB Connector for Gigabyte Motherboard</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
Figuring out how to connect ARGB in a Cooler Master TD500 Mesh Case to an Gigabyte Motherboard.
</p>
</div>
</div><div class="post-preview astro-JZQ3EVCU">
<div class="sm:w-20 md:w-32 astro-JZQ3EVCU">
<div class="post-preview__date astro-JZQ3EVCU">
<span class="text-6xl font-semibold text-gray-500 dark:text-gray-300 astro-JZQ3EVCU">27</span>
<span class="post-preview__date__month-n-year text-gray-600 dark:text-gray-400 astro-JZQ3EVCU">Apr 2019</span>
</div>
</div>
<div class="flex-1 astro-JZQ3EVCU">
<h2 class="text-2xl font-semibold text-primary dark:text-primaryDark hover:underline mb-2 astro-JZQ3EVCU">
<a href="/firebase-overview-and-tips" title="Firebase Overview and Tips" class="astro-JZQ3EVCU">Firebase Overview and Tips</a>
</h2>
<p class="text-lg leading-6 line-clamp-2 dark:text-white astro-JZQ3EVCU">
Learn about Firebase and some of its features and competitors.
</p>
</div>
</div>
</section><div class="page__actions astro-PLU6ZLL4">

<a class="text-base uppercase text-gray-600 dark:text-gray-400 hover:underline astro-PLU6ZLL4" href="/2" title="Go to Next">Next &rarr;</a>
</div>
</div><br class="my-4 astro-FHDT7AN5"><footer class="py-6 border-t">
<nav class="nav">
<div>2022 &copy; Copyright | <a href="https://rationaldev.com" title="RationalDev'">RationalDev</a> | <a href="/tos">terms of service</a> | <a href="/privacy">privacy policy</a> | <a href="/disclaimer">disclaimer</a></div>
</nav>
</footer><div class="portal-root">
<astro-island uid="1WeOjs" component-url="/_astro/SearchModal.b3eb5603.js" component-export="default" renderer-url="/_astro/client.c4e17359.js" props="{&quot;class&quot;:[0,&quot;astro-FHDT7AN5&quot;]}" ssr="" client="load" opts="{&quot;name&quot;:&quot;SearchModal&quot;,&quot;value&quot;:true}"></astro-island>
</div>
</main>
</div>
</body>
</html>

Ads.Txt Alerts - A trading name of Red Volcano Limited

Waterloo Buildings, Second Floor Rear, 53 London Road, Southampton, Hampshire, United Kingdom, SO15 2AD

© Red Volcano 2020. All Rights Reserved.