<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mackenly Jones</title>
    <description>The latest articles on DEV Community by Mackenly Jones (@mackenly).</description>
    <link>https://dev.to/mackenly</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F767186%2F5eb85c2e-5d2c-40e4-89ce-0518d61892ea.jpeg</url>
      <title>DEV Community: Mackenly Jones</title>
      <link>https://dev.to/mackenly</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mackenly"/>
    <language>en</language>
    <item>
      <title>The Cumulative Advantage</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Thu, 19 Sep 2024 16:46:06 +0000</pubDate>
      <link>https://dev.to/mackenly/the-cumulative-advantage-2aj6</link>
      <guid>https://dev.to/mackenly/the-cumulative-advantage-2aj6</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BQpJ1IZA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1502085671122-2d218cd434e6%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fG1vdW50YWlufGVufDB8fHx8MTcyNjc2MjM0N3ww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BQpJ1IZA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1502085671122-2d218cd434e6%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDR8fG1vdW50YWlufGVufDB8fHx8MTcyNjc2MjM0N3ww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="The Cumulative Advantage" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the early days of Google, a well-known test occurred dubbed &lt;a href="http://www.nytimes.com/2009/03/01/business/01marissa.html?pagewanted=3&amp;amp;ref=crtv.dev" rel="noopener noreferrer"&gt;Google's 41 Shade of Blue&lt;/a&gt;. This test arose out of a disagreement between design and product. Design preferred a "bluer" blue, while product preferred a "greener" blue. What to do? Google employee #20, Marissa Mayer, who was known as the gatekeeper of Google's home page and a big believer in quantitative decision-making, decided to A/B test 41 different shades of blue. Whichever color performed best would win.&lt;/p&gt;

&lt;p&gt;It's been &lt;a href="https://medium.com/accredian/googles-41-shades-of-blue-a-b-testing-impact-185c6067f3c9?ref=crtv.dev" rel="noopener noreferrer"&gt;claimed&lt;/a&gt; that this color choice resulted in an increase of $200,000,000 in advertising revenue.&lt;/p&gt;

&lt;p&gt;It would be easy to read that story and think, "Wow, the colors I choose have a really big impact on my business, so I should probably A/B test colors like Google did." After all, there are many such stories where small changes resulted in claims of large rewards. But that would ignore the fact that you're not Google.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is it that makes such seemingly simple decisions or ideas result in big impacts?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Something I often see on X/Twitter is large build-in-public style influencers who say things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"All you have to do is launch!"&lt;/li&gt;
&lt;li&gt;"Presells are the way to go! You can validate and sell before you build."&lt;/li&gt;
&lt;li&gt;"The most important thing is to ship!"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And for them, and others like them, that might be great advice, but when every day people try to take those "easy" steps, it often doesn't result in the instant success that those giving it experience time after time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So, can anyone really do it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GcaoALgD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://crtv.dev/content/images/2024/09/DALL-E-2024-09-19-11.42.34---An-intense-scene-illustrating--Founder-Mode---featuring-a-dedicated-startup-founder-working-late-at-night-in-a-modern-workspace.-The-founder-is-focuse.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GcaoALgD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://crtv.dev/content/images/2024/09/DALL-E-2024-09-19-11.42.34---An-intense-scene-illustrating--Founder-Mode---featuring-a-dedicated-startup-founder-working-late-at-night-in-a-modern-workspace.-The-founder-is-focuse.webp" alt="The Cumulative Advantage" width="800" height="457"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo generated with DALL-E&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategic Advantages
&lt;/h2&gt;

&lt;p&gt;The traditional thought process behind why some succeed and others do not is the possession of "true" strategic advantages. I put emphasis on true, because if something doesn't work out, all that has to be argued is that it wasn't a "true" advantage. These advantages are formally identified through a SWOT analysis matrix:&lt;/p&gt;

&lt;h2&gt;
  
  
  Strengths
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Strong brand recognition&lt;/li&gt;
&lt;li&gt;Innovative product line&lt;/li&gt;
&lt;li&gt;Experienced management team&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Weaknesses
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Limited market presence&lt;/li&gt;
&lt;li&gt;High production costs&lt;/li&gt;
&lt;li&gt;Dependence on key suppliers&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Opportunities
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Expanding into new markets&lt;/li&gt;
&lt;li&gt;Developing strategic partnerships&lt;/li&gt;
&lt;li&gt;Leveraging new technologies&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Threats
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Increasing competition&lt;/li&gt;
&lt;li&gt;Changing consumer preferences&lt;/li&gt;
&lt;li&gt;Economic uncertainties&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You look at your business and try to determine the strengths, weaknesses, opportunities, and threats—a good exercise for becoming more self-aware—then you should be able to identify some strategic advantages that are unique to your firm.&lt;/p&gt;

&lt;p&gt;In theory, if a firm mitigates its threats, leverages opportunities, fixes weaknesses, and uses strengths it will be successful. That may be true, but it doesn't really explain why some founders and firms can take small actions and receive big rewards. There's something more to it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cumulative Advantage
&lt;/h2&gt;

&lt;p&gt;This term was coined in the 80s as a part of &lt;a href="https://doi.org/10.1086%2F354848?ref=crtv.dev" rel="noopener noreferrer"&gt;cumulative disadvantage theory&lt;/a&gt; The general idea is that our actions and experiences and consequently our failures and successes do not occur in a vacuum or sterile environment.&lt;/p&gt;

&lt;p&gt;In programming, we might think of it like this: If our life were a class, it wouldn't get re-instantiated every time we call a method; instead, the state persists until we go out of scope.&lt;/p&gt;

&lt;p&gt;Things happen to us personally and professionally and to our business ventures that impact the future successes and failures of our efforts. As a result, it matters where and when we apply our effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  Application to Founders
&lt;/h2&gt;

&lt;p&gt;Now, we're getting to the main thought behind this post. It matters when you do something and what you've done in the past:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Effort spent with no cumulative advantage won't have a big impact. Sorry, but changing the color of the button on your $1m gross ecommerce store is not going to turn it into a $201m store.&lt;/li&gt;
&lt;li&gt;Starting a product and posting about it on X/Twitter when you have 160 followers (&lt;a href="https://x.com/mackenlyjones?ref=crtv.dev" rel="noopener noreferrer"&gt;like me&lt;/a&gt;) won't be enough to validate your idea or generate significant sales. &lt;/li&gt;
&lt;li&gt;Making a $200m mistake won't be the end of the world for Google, but it would be for most businesses.&lt;/li&gt;
&lt;li&gt;You get the point.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's easy to see stories from those who have built up a significant amount of cumulative advantage and be tempted to copy or do the same thing that works for them. When you're the underdog, that's just not how it works. Having or building a competitive advantage is useless if you haven't built up enough cumulative advantage to truly leverage it.&lt;/p&gt;

&lt;p&gt;For a competitive advantage to be useful, it has to have some momentum behind it. It's not as simple as working nights and weekends, making a design adjustment, or sharing on social media. Advantages are relative and can only be used successfully if they are the right thing at the right time. There's truly some luck involved, but that luck is only useful when you've put in the work in the past to build up the foundation upon which you can put your effort.&lt;/p&gt;

&lt;p&gt;It's important not to let this concept become discouraging. The path to entrepreneurial success is rarely linear, and even those who seem to have overnight success started somewhere, even if they didn't document it or share it with the world. While the concept of cumulative advantage is real, it doesn't mean that you don't have control. The key is to start, stay committed, and continuously build upon each step forward. Shortcuts and get-rich tricks likely won't work, but persistent, incremental wins will.&lt;/p&gt;

&lt;p&gt;If you're curious, it turned out that the greener blue was the one that performed best. But please don't take that as a reason to go change all your links and button colors. :-)&lt;/p&gt;

</description>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>Cool Tools for Google Tag Manager</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Thu, 20 Jun 2024 01:23:03 +0000</pubDate>
      <link>https://dev.to/mackenly/cool-tools-for-google-tag-manager-fjb</link>
      <guid>https://dev.to/mackenly/cool-tools-for-google-tag-manager-fjb</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oumwYIrl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1541417904950-b855846fe074%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDI3fHxzdW1tZXJ8ZW58MHx8fHwxNzE4ODQ1OTU3fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oumwYIrl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1541417904950-b855846fe074%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDI3fHxzdW1tZXJ8ZW58MHx8fHwxNzE4ODQ1OTU3fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Cool Tools for Google Tag Manager" width="800" height="552"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this post, I share a few tools I've been using lately for data analytics, tracking, and marketing, specifically looking at tools related to Google Tag Manager. As a software engineer, I've encountered a need to work with analytics tools quite frequently. I would much rather be coding than "button clicking" and thanks to these tools I can spend less time navigating dashboard menus and more time making sure the data I need is sent to the right place.&lt;/p&gt;

&lt;p&gt;I hope that this article, or at least the links attached, find their way into your favorites bar and save you some time, as they have for me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Request Map Generator
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://requestmap.webperf.tools/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://requestmap.webperf.tools/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool allows you to quickly scan a website and visualize its requests. This is valuable for determining what is loading on a website.&lt;/p&gt;

&lt;p&gt;Critiques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There's little in terms of analysis beyond requests and their timing data.&lt;/li&gt;
&lt;li&gt;I would love to see a better visualization of how the requests affect load time (sorta like a flame graph).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, great tool with helpful export features. Keep up the good work &lt;a href="https://x.com/simonhearne?ref=crtv.dev" rel="noopener noreferrer"&gt;Simon Hearne&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For example, in the screenshot below, I'm loading Plausible Analytics, Adobe Typekit, and Google Fonts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwge7397s1kxsnaif6y3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwge7397s1kxsnaif6y3.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Request Map for Tricities Media Group's site&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tag Stack
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://tagstack.io/?ref=crtv.dev" rel="noopener noreferrer"&gt;tagstack.io - tracking stack from any website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tag Stack is unique among the tools in this list in that 1. it has paid tiers and 2. also integrates lead prospecting. Rather than just a container analysis tool, Tag Stack allows you to scan a website and reverse engineer the container's config. This allows you to scan sites you don't have access to (without needing to download/copy the container config) and, in the Enterprise tier, even download the GTM JSON, potentially allowing you to clone a container if you lose access to the container in GTM. Pretty nice!&lt;/p&gt;

&lt;p&gt;In addition to the scan functionality, Tag Stack also includes a lead search engine. Accoridng to the site, it has &lt;a href="https://tagstack.io/?ref=crtv.dev" rel="noopener noreferrer"&gt;over 1.4 million&lt;/a&gt; containers scanned and searchable. This makes the service a valuable prospecting tool since users can query based on not using modern standards or based on technology (if, for example, you specialize in tagging Acme Social pixels). You can think of it as &lt;a href="https://shodan.io/?ref=crtv.dev" rel="noopener noreferrer"&gt;Shodan.io&lt;/a&gt; but for analytics data.&lt;/p&gt;

&lt;p&gt;Critiques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The lowest paid tier for the service starts at € 225 or about $240 per month. This makes this tool somewhat prohibitive due to the cost for casual or freelance users. I'm personally on the free tier, which includes 10 scans and 10 lookups per month. This has been enough for my relatively casual usage, but if I regularly needed it, I'd quickly run into the limits. I'd love to see a more affordable scan-only tier for users who do not need the prospecting features.&lt;/li&gt;
&lt;li&gt;It hasn't picked up the container on a few sites I've tried (I'm not sure what the cause might be).&lt;/li&gt;
&lt;li&gt;I'd love to see a mapping style feature like GTM Utility and a report generation tool with data similar to GTM Visualizer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Shoutout to &lt;a href="https://www.linkedin.com/in/lucas-kostka-998a7643/?ref=crtv.dev" rel="noopener noreferrer"&gt;Lucas Kosta&lt;/a&gt;, the creator!&lt;/p&gt;

&lt;h3&gt;
  
  
  Walk Through
&lt;/h3&gt;

&lt;p&gt;After completing a scan, the user is shown a page reminiscent of GTM's previewer, except with the addition of an audit and more detail on containers without needing access.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx37xyoj6fs6e80899h3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx37xyoj6fs6e80899h3h.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tag Stack Scan Results&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Notice how it shows the various features the container has and lets me dive into the individual tags and triggers:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8dfanub5celpmq7hq2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8dfanub5celpmq7hq2w.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tag Stack Scan Containers&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When clicking a tag, you can see more details, including parameters and connected triggers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz6mci79iqx47e675l1u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnz6mci79iqx47e675l1u.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Tag Stack Scan Tag Details&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GTM Visualizer
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://yuhui.github.io/gtmvisualizer/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://yuhui.github.io/gtmvisualizer/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This tool allows you to paste in your config and then see it broken down, illustrating which relationships are present throughout your container. Viewing these details is helpful since it let's you, at a glance, understand where and how various tags and triggers are used. Yes, you can find similar information in the GTM console, but this format is much easier to digest.&lt;/p&gt;

&lt;p&gt;Critiques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The UI design is a bit dated, but that's fine.&lt;/li&gt;
&lt;li&gt;It would be nice to be able to click on a trigger/tag/variable's name and view it in its relevant list. Instead, the list is static (though the colors are a helpful touch).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As an added benefit, this tool is open-source (though not maintained), which is reassuring since it requires you to paste in your config or sign in. Big thanks to &lt;a href="https://github.com/yuhui/gtmvisualizer?ref=crtv.dev" rel="noopener noreferrer"&gt;yuhui/gtmvisualizer&lt;/a&gt; on GitHub.&lt;/p&gt;

&lt;p&gt;Using the tool is super easy. Just paste in a GTM JSON or Sign In with your Google Account (I didn't try the latter).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0yktdch0rs9zg7nk3nq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0yktdch0rs9zg7nk3nq.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Screenshot of GTM Visualizer&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  GTM Utility
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://gtmutility.com/?ref=crtv.dev" rel="noopener noreferrer"&gt;Visualize Google Tag Manager Container&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I really like how it shows everything in a graph network. This view helps to visualize how the different Tags, Triggers, and Variables interact.&lt;/p&gt;

&lt;p&gt;Critiques:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You can't drag around the canvas, instead relying on scroll bars.&lt;/li&gt;
&lt;li&gt;Because of how the scroll bars are setup you can't use a full page screenshot tool.&lt;/li&gt;
&lt;li&gt;There's no export option. Ideally, it should allow saving as a image, PDF, and/or interactive HTML file. If you trying saving as a HTML file, the functionality breaks. &lt;/li&gt;
&lt;li&gt;When you select a node it shows only the relationships connected to that node. This is nice! But I would also like to see a side bar appear with more details about the node rather than just the name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, it's a great tool and a great price (free)! Kudos to &lt;a href="https://www.linkedin.com/in/igor-smirnov-igsm/?ref=crtv.dev" rel="noopener noreferrer"&gt;Igor Smirnov&lt;/a&gt; 🔥&lt;/p&gt;

&lt;p&gt;Using the tool is very similar to GTM Visualizer. Paste in your GTM JSON or Sign in with Google.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs7irq08p4p7jklic7w0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjs7irq08p4p7jklic7w0.png" alt="Cool Tools for Google Tag Manager" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Screenshot of GTM Utility&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At the risk of sounding like Buggs Bunny, that's all folks. If you're looking for help with your data and analytics, I'd love to chat. I am a &lt;a href="https://blog.cloudflare.com/enhancing-zaraz-support-introducing-certified-developers?ref=crtv.dev" rel="noopener noreferrer"&gt;certified Zaraz developer&lt;/a&gt;, which is a Cloudflare owned GTM alternative that takes the heavy lifting off of user browsers and onto the edge, with benefits including speed, interactivity, and privacy control. To get in touch, send over an email or directly book a paid 1-hour call where I'll try to work through your problem and/or give suggestions: &lt;a href="https://tricitiesmediagroup.com/contact?ref=crtv.dev" rel="noopener noreferrer"&gt;https://tricitiesmediagroup.com/contact&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I realize this is a departure from the more technical content I typically post on this blog, but rest assured, my drafts are piling up with content covering my approach to testing, an article on building a faster version of &lt;em&gt;dig&lt;/em&gt; for name server lookups, and a deep dive from keyboard to cloud.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>gtm</category>
      <category>zaraz</category>
    </item>
    <item>
      <title>Functional vs. Dysfunctional Conflict in a Project</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Fri, 05 Apr 2024 20:49:07 +0000</pubDate>
      <link>https://dev.to/mackenly/functional-vs-dysfunctional-conflict-in-a-project-blp</link>
      <guid>https://dev.to/mackenly/functional-vs-dysfunctional-conflict-in-a-project-blp</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa32xq9gh5mas9ognuha.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faa32xq9gh5mas9ognuha.jpg" alt="Functional vs. Dysfunctional Conflict in a Project" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As developers, we often work on projects with teams of people. Believe it or not, people do not always get along. Developers might not agree with UI, ops might not agree with developers, and developers might not agree with one another! Understanding how to frame conflict within a project can make you a better developer and teammate. In this short post, I look at the two types of conflict and how they can be used to increase project effectiveness.&lt;/p&gt;

&lt;p&gt;On the surface, conflict within a project team sounds like a bad thing. However, in some cases, conflict can lead to a more effective project and better outcome. If a conflict leads to furthering the objectives of a project without damaging future productivity capabilities, it can be classified as functional.&lt;/p&gt;

&lt;p&gt;In essence, conflict is okay when it results in better project outcomes but not when it inhibits team members’ ability to work together effectively.&lt;/p&gt;

&lt;p&gt;The level and style of conflict that falls within the dysfunctional category can depend on the culture and maturity of the team members. In some cultures, using profanity generously is the norm, while in other cultures or in other companies, that would be considered unprofessional and offensive. Alternatively, one team member might not respond well to feedback, or another member might not be good at giving constructive feedback. Either way leads to dysfunctional conflict.&lt;/p&gt;

&lt;p&gt;Project managers can encourage functional conflict by designating a team member as the devil’s advocate and protecting contrarians. Having a devil’s advocate ensures that even if the team is in total agreement, contrasting viewpoints will be considered. Functional conflict is valuable because it enables everyone’s viewpoints to be considered and evaluated. If everyone agrees, the project will suffer from a lack of diverse viewpoints. A devil’s advocate can help fix this issue by highlighting “the other side” of every problem.&lt;/p&gt;

&lt;p&gt;Going further, in project teams, a phenomenon known as groupthink may occur when, either through peer pressure or the curse of knowledge, a team becomes too cohesive. Designating a devil's advocate ensures that someone brings to the table a variety of options to consider when making a decision, encouraging functional conflict and overall team growth.&lt;/p&gt;

&lt;p&gt;That's all for now!&lt;/p&gt;

</description>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>Cloudflare Magic Linker: Chrome Extension Project</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sat, 30 Dec 2023 23:43:42 +0000</pubDate>
      <link>https://dev.to/mackenly/cloudflare-magic-linker-chrome-extension-project-4p16</link>
      <guid>https://dev.to/mackenly/cloudflare-magic-linker-chrome-extension-project-4p16</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iPajBD6c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1515165562839-978bbcf18277%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDV8fHRyYWlufGVufDB8fHx8MTcwMzk3NjU2NHww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iPajBD6c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1515165562839-978bbcf18277%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDV8fHRyYWlufGVufDB8fHx8MTcwMzk3NjU2NHww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Cloudflare Magic Linker: Chrome Extension Project" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Beginning as a personal project, over Christmas, I decided to create a Chrome extension to make copying deep or magic links from the Cloudflare dashboard easier. In this post, I discuss the need for this tool, my process of building it, and how to install it yourself.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Are "Magic" Links?
&lt;/h2&gt;

&lt;p&gt;The Cloudflare dashboard supports several deep link variables (affectionately known as magic links by the community) to make sharing links into the dashboard easier. These links work by replacing various IDs found within the dashboard's URLs with variables that are intercepted by the deep linker. When a user visits a link like in the example found below, they're shown a selection screen to choose the Cloudflare account they would like to use, then directed to select the zone they'd like to use.&lt;/p&gt;

&lt;p&gt;💡 Read all about Accounts vs. Zones vs. Profiles &lt;a href="https://crtv.dev/how-to-add-users-to-a-cloudflare-account/#:~:text=As%20a%20prerequisite%2C%20let%27s%20take%20a%20quick%20moment%20to%20look%20at%20three%20different%20Cloudflare%20terms%20that%20will%20be%20important%3A%20Zones%2C%20Profiles%2C%20and%20Accounts." rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After making both selections, they're redirected, in this case, to the Zaraz tools configuration page.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://dash.cloudflare.com/?to=/:account/:zone/zaraz/tools-config/tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;...converts into...&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://dash.cloudflare.com/1234567890poiuytrewq/bogus.studio/zaraz/tools-config/tools
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This feature of the dashboard is extremely useful for sharing links in blog posts like this, helping others in GitHub issues or forums, or sharing links with coworkers. But before now, the only way to create them was to manually replace the values or to use a bot within the &lt;a href="https://discord.gg/cloudflaredev?ref=crtv.dev" rel="noopener noreferrer"&gt;Cloudflare Discord community&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Building the Extension
&lt;/h2&gt;

&lt;p&gt;I've built several extensions before (mostly for removing ads on random sites and other random customizations that &lt;a href="https://arc.net/?ref=crtv.dev" rel="noopener noreferrer"&gt;Arc&lt;/a&gt; could probably replace), but never have I published one of the Chrome Webstore. The process itself isn't hard; you mostly just have to pay $5 to create a developer account and fill out some paperwork saying you're not loading remote code and that you're not doing anything sketchy with user data.&lt;/p&gt;

&lt;p&gt;Still, the documentation leaves much to be desired. The manifest v3 migration, which I have heard lots of rumors suggesting is designed to make tools like adblockers less effective, seems to have caused a bit of chaos as far as documentation goes. The documentation is there, but it's hard to tell what version it's for; I found several broken links within Google's own help docs, and the general process feels chaotic. Thankfully, the actual functionality of my extension is relatively basic, with a &lt;a href="https://github.com/mackenly/cloudflare-magic-linker/blob/main/manifest.json?ref=crtv.dev" rel="noopener noreferrer"&gt;simple manifest&lt;/a&gt;, a small bit of &lt;a href="https://github.com/mackenly/cloudflare-magic-linker/blob/main/src/popup.html?ref=crtv.dev" rel="noopener noreferrer"&gt;HTML&lt;/a&gt;+ &lt;a href="https://github.com/mackenly/cloudflare-magic-linker/blob/main/src/styles/popup.css?ref=crtv.dev" rel="noopener noreferrer"&gt;CSS&lt;/a&gt;, and straightforward &lt;a href="https://github.com/mackenly/cloudflare-magic-linker/blob/main/src/scripts/popup.js?ref=crtv.dev" rel="noopener noreferrer"&gt;JavaScript&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "manifest_version": 3,
    "name": "Cloudflare Magic Linker",
    "version": "1.0.0",
    "description": "Create magic deep links for the Cloudflare dashboard.",
    "icons": {
        "128": "src/images/icon128.png"
    },
    "action": {
        "default_popup": "src/popup.html"
    },
    "host_permissions": [
        "https://dash.cloudflare.com/*",
        "https://one.dash.cloudflare.com/*"
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I think the most challenging part was creating the extension's icon, but ChatGPT was able to come to the rescue and, on the first try, generated an icon that looked exactly as I wanted.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl61gzw3uw6umowmttpca.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl61gzw3uw6umowmttpca.png" alt="Cloudflare Magic Linker: Chrome Extension Project" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;ChatGPT Generating Icon&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Community Feedback and Collaboration
&lt;/h2&gt;

&lt;p&gt;One of the most valuable parts of Cloudflare as a company is its community of users. After creating a quick MVP of the extension, I decided to make it public and ask the community for feedback and if anyone was aware of any more deep link variables that could be used (I don't think they're documented anywhere, at least publically). Within the community Discord, I &lt;a href="https://discord.com/channels/595317990191398933/1190097743167893524?ref=crtv.dev" rel="noopener noreferrer"&gt;created a post&lt;/a&gt; asking for feedback where several community members quickly added helpful comments and suggestions. A big shoutout to &lt;a href="https://github.com/Cherry?ref=crtv.dev" rel="noopener noreferrer"&gt;James&lt;/a&gt;, &lt;a href="https://github.com/Tyler-OBrien?ref=crtv.dev" rel="noopener noreferrer"&gt;Chaika&lt;/a&gt;, and &lt;a href="https://github.com/Erisa?ref=crtv.dev" rel="noopener noreferrer"&gt;Erisa&lt;/a&gt; for bringing up the &lt;code&gt;:pages-deployment&lt;/code&gt; variable and that Zero Trust supports &lt;code&gt;:account&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the Extension
&lt;/h2&gt;

&lt;p&gt;To try out the extension yourself, you can either install it from the &lt;a href="https://chromewebstore.google.com/detail/fongdcpejhfehpdcahcjncgfhkepoico?ref=crtv.dev" rel="noopener noreferrer"&gt;Chrome Webstore&lt;/a&gt; like a normal Chrome extension or load it unpacked from the source using developer mode by &lt;a href="https://github.com/mackenly/cloudflare-magic-linker?ref=crtv.dev" rel="noopener noreferrer"&gt;cloning the repository&lt;/a&gt; to your local machine. The source code is licensed under the &lt;a href="https://github.com/mackenly/cloudflare-magic-linker/blob/main/LICENSE?ref=crtv.dev" rel="noopener noreferrer"&gt;GPL-3.0 license&lt;/a&gt; and is open to issues and PRs.&lt;/p&gt;

&lt;p&gt;Once installed, simply go to a page within the Cloudflare dashboard or Zero Trust dashboard, click on the extension, and copy the link. I would recommend testing the link first. At the time of writing, support for magic links in Zero Trust isn't complete, and some pages in the regular dashboard, like Workers, don't have full support for deep links. I hope to update the extension in the future, if wider support is added to the magic link system by the Cloudflare team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5q334seal0c03ju838x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl5q334seal0c03ju838x.png" alt="Cloudflare Magic Linker: Chrome Extension Project" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Using the Extension to Copy and Link&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you've found this post or extension valuable, I'd love it if you &lt;a href="https://github.com/mackenly/cloudflare-magic-linker?ref=crtv.dev" rel="noopener noreferrer"&gt;gave it a star&lt;/a&gt;, and subscribed to my blog. In addition, you can &lt;a href="https://github.com/sponsors/mackenly/?ref=crtv.dev" rel="noopener noreferrer"&gt;sponsor me on GitHub&lt;/a&gt;, or get in touch about career opportunities on &lt;a href="https://mackenly.com/?ref=crtv.dev" rel="noopener noreferrer"&gt;my personal site&lt;/a&gt;. Thank you for reading this far, and happy coding! 🔥&lt;/p&gt;

</description>
      <category>chromeextension</category>
      <category>cloudflare</category>
      <category>cloudflaremagiclinke</category>
      <category>chromewebstore</category>
    </item>
    <item>
      <title>Review of Uptime Kuma Self-hosted Status Monitoring Tool</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sat, 11 Nov 2023 06:20:34 +0000</pubDate>
      <link>https://dev.to/mackenly/review-of-uptime-kuma-self-hosted-status-monitoring-tool-4cn3</link>
      <guid>https://dev.to/mackenly/review-of-uptime-kuma-self-hosted-status-monitoring-tool-4cn3</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TYCxijwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1494825514961-674db1ac2700%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDIwfHxmb3Jlc3R8ZW58MHx8fHwxNjk5NjY0NjQ0fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TYCxijwA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1494825514961-674db1ac2700%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDIwfHxmb3Jlc3R8ZW58MHx8fHwxNjk5NjY0NjQ0fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Review of Uptime Kuma Self-hosted Status Monitoring Tool" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Monitoring uptime statuses can be a complicated task, and SaaS services typically target enterprise users and have enterprise pricing. For small team and personal projects, uptime monitoring is often overlooked. Observability&lt;/p&gt;

&lt;p&gt;Still, uptime monitoring is a valuable tool for incident response and tracking problems. If your servers go down at 2:00 AM on Saturday morning, it might be hard to catch unless you're a night owl like me. By the time you find out your critical service isn't functioning, it may be Monday or whenever customers or clients start sending support requests. That's no fun for anyone and makes it harder to gain visibility into what is broken.&lt;/p&gt;

&lt;p&gt;That's where uptime monitoring tools come into play. A health check is run every few seconds or minutes to see if the server or endpoint is behaving as expected. The history of these checks and metrics on response speed is logged in a database for future review. If there's a problem, alarms or notifications can be triggered to ensure the right people know there's a problem as soon as it happens.&lt;/p&gt;

&lt;p&gt;Tricities Media Group, my consultancy, is currently a single-person business, so I don't have a large team (or large budget) to configure enterprise monitoring solutions. But my client and my personal projects can still benefit from a comprehensive status monitoring system.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Solution
&lt;/h2&gt;

&lt;p&gt;I decided upon a tool called Uptime Kuma, which is an open-source self-hosted monitoring tool that can be run with Docker. I'm using Portainer on my Synology NAS to host the container and Cloudflare Zero Trust's Tunnels tool to securely expose it to the internet. This combo works great by using existing hardware that I already have running and allows for easy administration and maintenance.&lt;/p&gt;

&lt;p&gt;Overall, I'm super happy with how it's working and plan to expand my use of this tool in the future. This tool is open-source, MIT-licensed, and community-supported, so while there are a few potential cons, they are opportunities for improvement rather than complaints.&lt;/p&gt;

&lt;p&gt;💡&lt;a href="https://mariushosting.com/how-to-install-uptime-kuma-on-your-synology-nas/?ref=crtv.dev" rel="noopener noreferrer"&gt;This tutorial by Marius Hosting&lt;/a&gt; is an excellent resource for installing Uptime Kuma on Synologys. &lt;/p&gt;

&lt;h2&gt;
  
  
  Pros of Uptime Kuma
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;So. many. notification. options. This screenshot only shows about a quarter of the options. From Discord and Slack to Twilio and PagerTree, there are few notification tools that I can think of that don't exist. If, for some odd reason, the one you use isn't there, it also supports Webhooks with a custom body and headers, letting you send a request pretty much anywhere.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfm366iptipspv4c7y5y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmfm366iptipspv4c7y5y.png" alt="Review of Uptime Kuma Self-hosted Status Monitoring Tool" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;There are lots of options for customizing health check requests. You can change the HTTP method, encoding, body, headers, and specify authentication (basic auth, OAuth2, NTLM, and mTLS). With that many options, there's few things you can't do. You could even use it for HTTP CRONs.&lt;/li&gt;
&lt;li&gt;A variety of check types. In addition to standard HTTP request and ping checks, there's also support for TCP, DNS, and other Docker containers. Many of these options support response validation to check if expected results are returned. One handy feature is a push URL that your application calls every x seconds. On top of that, there's support for a variety of database and server types, such as Postgres, MySQL, Radius, and MQTT.&lt;/li&gt;
&lt;li&gt;The biggest feature for me is integration with Cloudflare Tunnels for reverse proxy. It's as easy as pasting in the tunnel token.&lt;/li&gt;
&lt;li&gt;Status pages let you create custom statuses with groups of services you select. This allows for creating a status page for each client, for each application, or one for all of your applications. The sky is the limit. In addition, you can pin custom error or warning messages to highlight incident statuses as you correct any issues.&lt;/li&gt;
&lt;li&gt;Custom domains for status pages. You can create custom domains for your status pages allowing for a single instance of Uptime Kuma to handle a variety of products and services.&lt;/li&gt;
&lt;li&gt;If you run the tool on-prem like I'm doing in your home or office you can setup checks for systems on your local network. This let's you ping computers, security cameras, or anything really to see if they're running and awake. This opens a lot of options and the potential for using statuses as triggers for automation. For example, if all of the office computers are offline and it's after hours, schedule the lights to turn off in 5 minutes. Or if the smart refrigerator stops responding to health checks it may be worth checking in on. Just an idea. 🤔&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cons of Uptime Kuma
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The base page of the app directs to login rather than a status page. For example, when a user visits status.example.com you would expect to be taken to a status page, but instead, you're taken to the status page admin login. A great change would be the ability to set a default status page to live at the app's base. A potential workaround for this is to host your app at a different URL and use custom domains for your status pages. This one might just be user error, but I'd appreciate the option either way.&lt;/li&gt;
&lt;li&gt;Creating an incident isn't intuitive, especially at first. To create an incident message/update, you have to go to the status page's editor as if you were changing the page's title or style. A dedicated page within the main dashboard would be more intuitive and feel like a more seamless solution. &lt;/li&gt;
&lt;li&gt;Lack of REST HTTP API. An API would superpower the capabilities of this project and make things like incidents much more programmable. Being able to send updates directly from an incident management system or form would help make automation much more seamless.&lt;/li&gt;
&lt;li&gt;Automation integrations. This is probably something held back by not having an API, but it would be great to see integrations with tools like n8n or Zapier to trigger automation outside of the existing notification destinations. This can kinda be done using the webhooks feature, but still, there's an opportunity to let automation tools do things like set maintenance windows and incident messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Resiliency and Disaster Readiness
&lt;/h2&gt;

&lt;p&gt;To wrap up, I have to add a quick note about resiliency. Many companies have made the mistake of hosting their uptime monitoring and error visibility tooling with the same infrastructure dependencies as the services they monitor. It's easy to see how this can go wrong. If there's a major problem and your systems go down, it's likely your uptime monitor will go down as well, making it useless.&lt;/p&gt;

&lt;p&gt;For my purposes, I'm self-hosting it locally and using Cloudflare as the tunneling service. I, of course, do not host any of my services or sites locally, so as far as ISP, server, power, and network resiliency go, I should be fairly good. But I do use Cloudflare extensively. If Cloudflare's DNS or Tunneling went down, my entire infrastructure would be taken out. There are always going to be risks, but it's important to identify those risks and consider them when planning a solution. For my purposes, that's within my acceptable tolerance of risk, so I'm not going to spend the resources required to go a different route. If you're a large company or a dependency in your infrastructure is less reliable or more critical, I would suggest getting as much separation as possible between your core application services and your uptime solution. (read: Host on a different continent, use a different DNS, a different domain name registrar, and use an alternative payment method to pay for it)&lt;/p&gt;

&lt;p&gt;If you enjoyed this post or want to chat directly, let's connect on &lt;a href="https://www.linkedin.com/in/mackenly?ref=crtv.dev" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, &lt;a href="https://x.com/mackenlyjones?ref=crtv.dev" rel="noopener noreferrer"&gt;X/Twitter&lt;/a&gt;, or contact me about business opportunities at &lt;a href="https://tricitiesmediagroup.com/contact?ref=dev.to"&gt;tricitiesmediagroup.com/contact&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>monitoring</category>
      <category>cybersecurity</category>
      <category>observability</category>
      <category>statusmonitoring</category>
    </item>
    <item>
      <title>Hacktoberfest 2023 👕</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Wed, 18 Oct 2023 00:06:01 +0000</pubDate>
      <link>https://dev.to/mackenly/hacktoberfest-2023-4nd8</link>
      <guid>https://dev.to/mackenly/hacktoberfest-2023-4nd8</guid>
      <description>&lt;h3&gt;
  
  
  Intro
&lt;/h3&gt;

&lt;p&gt;Hi, my name is Mackenly and this was my fourth year participating in Hacktoberfest. I'm a full-stack developer mostly focused on web front and backend development. &lt;/p&gt;

&lt;p&gt;This year I focused my contributions on three projects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link Shortener: 
A new project building a Cloudflare Workers based link-shortening application. 
&lt;a href="https://github.com/mackenly/link-shortener" rel="noopener noreferrer"&gt;https://github.com/mackenly/link-shortener&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cloudflare Documentation Improvements: 
I worked on improving the Cloudflare developer docs by fixing some errors and visual bugs.&lt;/li&gt;
&lt;li&gt;Meetup Scrapper: 
My local developer meetup hosted a Hacktoberfest event where I worked on a project to scrap the latest meeting from meetup.com. This was also Cloudflare Workers based and will eventually be used as a part of the meetup's web page at tricities.dev&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Highs and Lows
&lt;/h3&gt;

&lt;p&gt;My biggest disappointment was the lack of Hacktoberfest t-shirts this year. Hacktoberfest certainly doesn't feel the same and it has lost much of the fun that previous years had. Still, it wasn't all bad. Getting to work with others at a dedicated event was great and I look forward to future events like that.&lt;/p&gt;

&lt;p&gt;Thank you to all the maintainers, contributors, event organizers, and sponsors!&lt;/p&gt;

</description>
      <category>hack23contributor</category>
      <category>hack23maintainer</category>
    </item>
    <item>
      <title>The Ethics of Hourly Billing</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Thu, 24 Aug 2023 02:33:49 +0000</pubDate>
      <link>https://dev.to/mackenly/the-ethics-of-hourly-billing-a1m</link>
      <guid>https://dev.to/mackenly/the-ethics-of-hourly-billing-a1m</guid>
      <description>&lt;p&gt;One of the most obvious but often overlooked ethical conflicts within the workplace is workers who are paid hourly. By definition, those who are paid hourly get paid based on how many hours they work. (Indeed, 2023) It seems like a simple concept. But as information technology professionals, most of what we do involves making systems and processes more efficient.&lt;/p&gt;

&lt;p&gt;But what does that mean if we're paid hourly?&lt;/p&gt;

&lt;p&gt;Even if it might not seem that way, there is a finite amount of IT work that an organization can realistically need. So, by creating more efficient systems and processes, we're effectively reducing our earning potential even though we're adding value to the organization. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There are downsides to being salaried as well, where a reduction of overall headcount may occur instead of a reduction of hours.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Diving deeper, hourly billing is rooted in the Labor Theory of Value, a foundation of Marxism, where the value of labor is emphasized in the production process and ideal distribution of wealth. (Taylor, 1996) The idea that a worker's time is valuable is popularized by workers who argue they should be compensated based on how much time they spend working rather than the value they provide. This is where the concepts of minimum wages and pay ceilings come from. An example would be saying, "Workers who work 60 hours per week should make more per year than those who work 40 hours because the 60-hour worker works harder."&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9IPHZevq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1526688442562-41eb8259db9e%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDEwfHxjbG9jayUyMGlufGVufDB8fHx8MTY5MjgzOTE1NXww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9IPHZevq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1526688442562-41eb8259db9e%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDEwfHxjbG9jayUyMGlufGVufDB8fHx8MTY5MjgzOTE1NXww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="The Ethics of Hourly Billing" width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by Hans Eiskonen / Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;By being a truly effective IT professional by providing the maximum value to your employer or client, you're optimizing yourself out of a job. So what's the alternative? Make things more complicated? Here are a few approaches that are taken:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Put effort into developing complex and hard-to-understand policies, procedures, and guidelines to ensure that bureaucracy slows down the organization and increases the amount of required labor.&lt;/li&gt;
&lt;li&gt;Increase the barrier of entry by requiring additional qualifications, certifications, government-mandated licenses, and other means to reduce and limit the talent pool.&lt;/li&gt;
&lt;li&gt;Avoid tools that make us more efficient, such as modern IDEs (integrated development environments) and &lt;a href="https://github.com/features/copilot?ref=crtv.dev" rel="noopener noreferrer"&gt;GitHub Copilot&lt;/a&gt; (AI code autocomplete).&lt;/li&gt;
&lt;li&gt;Unionize to pressure employers to let us increase the amount of time we spend by limiting change and innovation to protect union member jobs while increasing benefits and compensation. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bPKPjzrf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://external-content.duckduckgo.com/iu/%3Fu%3Dhttps%253A%252F%252Fi.imgflip.com%252F1efqtj.jpg%26f%3D1%26nofb%3D1%26ipt%3D7d206e3dfa924505d4c62ef8504d60b2684f8647db89654e239ab02e6b9ad026%26ipo%3Dimages" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bPKPjzrf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://external-content.duckduckgo.com/iu/%3Fu%3Dhttps%253A%252F%252Fi.imgflip.com%252F1efqtj.jpg%26f%3D1%26nofb%3D1%26ipt%3D7d206e3dfa924505d4c62ef8504d60b2684f8647db89654e239ab02e6b9ad026%26ipo%3Dimages" alt="The Ethics of Hourly Billing" width="504" height="500"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;via imgflip&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;All of those options are commonly taken (not just in IT), but are they ethical? That question is answered based on your personal opinions and economic ideas. An alternative could be to incentivize employees to create value in a way that attempts to minimize the disincentivizing nature of increased efficiency and automation, but there are few mainstream examples of that within IT.&lt;/p&gt;

&lt;p&gt;So that brings us to the title of this article: The Ethics of Hourly Billing&lt;/p&gt;

&lt;p&gt;If employees aren't incentivized to be good at their jobs, that raises the question of how employees can behave ethically. I'm of the persuasion that people never behave counter to their incentives, so to create an ethical workforce, hourly compensation can't be the sole motivator.&lt;/p&gt;

&lt;p&gt;A few types of employees may include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Employees who see it as their moral duty to society to do their best at their jobs. &lt;/li&gt;
&lt;li&gt;Those who simply do not consider the true economic incentives associated with their job. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most people probably fall within these two categories rather than maliciously sabotaging their workplace but likely do participate in activities that ensure their job security without even realizing it.&lt;/p&gt;

&lt;p&gt;The traditional solution to this problem in the tech startup world is &lt;a href="https://www.investopedia.com/terms/s/stockoption.asp?ref=crtv.dev" rel="noopener noreferrer"&gt;stock options&lt;/a&gt; mirroring the long-standing practice of incentivizing executives by getting stock and/or full equity. When employees can earn favorable stock options, restricted stock, phantom stock, etc. they're given an opportunity to invest in their efforts and hopefully benefit from the profits of the company. But this doesn't necessarily make sense for every company (especially for small companies and those owned privately).&lt;/p&gt;

&lt;p&gt;💰&lt;/p&gt;

&lt;p&gt;Startups are often messy. Sometimes the incentive to build a company up enough to be able to get an exit payday results in a sacrifice in quality control and security that ultimately hurts the startup's growth. Just giving employees stock probably isn't the answer either because that just incentivizes employees to work towards raising the company's valuation, which doesn't necessarily equal true business success.&lt;/p&gt;

&lt;p&gt;So, what's the best solution to this ethical dilemma? I don't know. It's clear that employees whose roles are to minimize inefficiencies and to effectively automate their own jobs (and the jobs of others) aren't incentivized to act in the best interest of their company causing an ethics conflict. But it's not clear the best way to universally fix this issue. And complex hard-to-understand questions like this are why economists have job security. 😉😂&lt;/p&gt;




&lt;p&gt;If you'd like to read more on this topic, I wrote another post on hourly billing and labor theories over on The Church Factory, where I take a look at the similarities between traditional hourly billing and value-based pricing. Surprisingly, there are similarities, but also big differences.&lt;/p&gt;

&lt;p&gt;If you’re a freelancer or independent consultant pricing your services based on value is essential. However, there is a common theme among value pricing advocates that suggests hourly workers don’t value price, which simply isn’t true.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://thechurchfactory.com/value-pricing-vs-hourly-billing/?ref=dev.to"&gt;The Ethics of Hourly Billing on The Church Factory&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  References
&lt;/h4&gt;



&lt;p&gt;Indeed. (2023). &lt;em&gt;What Is an Hourly Employee and How Do Employers Pay Them?&lt;/em&gt; Www.indeed.com; Indeed. &lt;a href="https://www.indeed.com/career-advice/career-development/hourly-employee?ref=crtv.dev" rel="noopener noreferrer"&gt;https://www.indeed.com/career-advice/career-development/hourly-employee&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Taylor, K. S. (1996). &lt;em&gt;Human Society and the Global Economy&lt;/em&gt;. &lt;a href="http://www.d.umn.edu" rel="noopener noreferrer"&gt;www.d.umn.edu&lt;/a&gt;; University of Minnesota. &lt;a href="https://www.d.umn.edu/cla/faculty/jhamlin/4111/2111-home/value.htm?ref=crtv.dev" rel="noopener noreferrer"&gt;https://www.d.umn.edu/cla/faculty/jhamlin/4111/2111-home/value.htm&lt;/a&gt;&lt;/p&gt;

</description>
      <category>random</category>
      <category>economics</category>
    </item>
    <item>
      <title>How to add users to a Cloudflare account</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Tue, 15 Aug 2023 01:22:26 +0000</pubDate>
      <link>https://dev.to/mackenly/how-to-add-users-to-a-cloudflare-account-4nfl</link>
      <guid>https://dev.to/mackenly/how-to-add-users-to-a-cloudflare-account-4nfl</guid>
      <description>&lt;p&gt;A break from this site's usual higher-level tech posts, this post walks through the process of adding users to a Cloudflare account ad briefly covers a few account-related terms.&lt;/p&gt;

&lt;p&gt;As a prerequisite, let's take a quick moment to look at three different Cloudflare terms that will be important: Zones, Profiles, and Accounts. If someone asks for access to your Cloudflare account, they're not asking for your username and password, instead, they're asking you to create a profile for them within your account.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zones&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A zone is most closely related to a domain but not to be confused with a website. Your Zones can be found within the homepage of the Cloudflare dashboard and serve as the hub for everything related to a domain using Cloudflare.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I disagree.   &lt;/p&gt;

&lt;p&gt;Websites have been called zones in the APIs and other places for as long as I remember so relabeling in the dashboard lowers confusion.  &lt;/p&gt;

&lt;p&gt;In addition a zone in cloudflare doesn't represent a website. Multiple websites can be under the same zone (subdomains, different…&lt;/p&gt;

&lt;p&gt;— Mackenly Jones (@mackenlyjones) &lt;a href="https://twitter.com/mackenlyjones/status/1686144145537040384?ref_src=twsrc%5Etfw&amp;amp;ref=crtv.dev" rel="noopener noreferrer"&gt;July 31, 2023&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;An X of Me Tweeting&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Profiles&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you're reading this post, you're probably looking to add a profile to your account. Profiles are individual user logins attached to a single person and should never be shared between team members. A user's profile is tied directly to them and their email address. Profiles have a one-to-many relationship with accounts because a single profile can have access to multiple Cloudflare accounts, which in turn can give a profile access to many different zones.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncp12vfhzf58tdlsbxua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fncp12vfhzf58tdlsbxua.png" alt="How to add users to a Cloudflare account" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Chart Showing a "User Profile" from Cloudflare Docs&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Accounts&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Accounts serve as a container for all of your organization's Cloudflare resources. Accounts hold all your Zones, Workers, Page, D1 databases, etc. One account can have many different profile members, each with their own roles and permissions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu8ixv6ho70h0s7tixs8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffu8ixv6ho70h0s7tixs8.png" alt="How to add users to a Cloudflare account" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Chart Showing an "Account" from Cloudflare Docs&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Members Page
&lt;/h3&gt;

&lt;p&gt;First, log into your Cloudflare account. Then from the Cloudflare home dashboard, navigate to the side panel and select “Members” from within the “Manage Account” sub-menu.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3u57gc1bm4nlc7g5ija.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs3u57gc1bm4nlc7g5ija.png" alt="How to add users to a Cloudflare account" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Manage Account Sub-Menu&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Invite a New Member
&lt;/h3&gt;

&lt;p&gt;From the manage account "Members" page, press the invite button or edit an existing member.&lt;/p&gt;

&lt;p&gt;If you haven't already, now it a great time to enable "Member 2FA enforcement" to ensure that all of your users have a 2FA method enabled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0h2xbq6b5z2q6elhfw7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0h2xbq6b5z2q6elhfw7.png" alt="How to add users to a Cloudflare account" width="" height=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Manage Account Members Page&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Configure Account Privileges
&lt;/h3&gt;

&lt;p&gt;From the invite page, first, enter the email address for your new user(s). Then within the scope section, select either "include" or "exclude" for your scope rule operator. Next, under "Type", select between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;All domains:&lt;/strong&gt; Gives the user access to all domains (aka zones) on the account. This option is required to give the user access to account-level resources such as R2, Pages, Workers, Images, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A specific domain:&lt;/strong&gt; Select a single domain (or zone) to give the user access to. (You can add multiple zones by adding a rule for each).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain group:&lt;/strong&gt; Select a predefined group of domains (zones).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a zone?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
In Cloudflare, a DNS Zone is a single domain name.   &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;These would be in the same zone: example.com, blog.example.com, and example.com/about
&lt;/li&gt;
&lt;li&gt;These would be in separate zones: example.com, example.co, example.co.uk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After selecting the scope for the user, you can now configure the domain-scoped rules. These permissions allow you to control the new user's access level. For example, you may want only to grant read access. Always follow the &lt;a href="https://en.wikipedia.org/wiki/Principle_of_least_privilege?ref=crtv.dev" rel="noopener noreferrer"&gt;principle of least privilege&lt;/a&gt; when assigning access. Once permissions are selected, press “Continue to summary.” Confirm the options are correct, and finally send the invite.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc6d4f1sdkzznmxda8b5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkc6d4f1sdkzznmxda8b5.png" alt="How to add users to a Cloudflare account" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now your new user will receive an invite email allowing them to join your Cloudflare account. If you ever need to change privileges or remove users, you can return to the "Members" submenu item under "Manage Account."&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>cloudflare</category>
    </item>
    <item>
      <title>Design Systems</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sun, 06 Aug 2023 04:21:49 +0000</pubDate>
      <link>https://dev.to/mackenly/design-systems-54o7</link>
      <guid>https://dev.to/mackenly/design-systems-54o7</guid>
      <description>&lt;h3&gt;
  
  
  &lt;strong&gt;What are design systems?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;According to UX research firm Neilson Norman, "A design system is a complete set of standards intended to manage design at scale using reusable components and patterns." (Fessenden, 2021) To summarize, design systems are style guides, component libraries, color swatches, typography selections, etc., which together form a system of design. As a whole, a design system enables users throughout an organization to create applications, creatives, and other design elements in a way that matches and feels cohesive.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Well-Known Design Systems&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Several well-known design systems include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fluent:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Developed by Microsoft, Fluent is the design system used by Windows 11 and other Microsoft apps like Word. &lt;a href="https://fluent2.microsoft.design/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://fluent2.microsoft.design/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Material:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Developed by Google, Material is found all across Google products and services, plus used by many Android apps. &lt;a href="https://m3.material.io/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://m3.material.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human Interface Guidelines:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Developed by Apple and found across many Mac and iOS devices, apps, and services. &lt;a href="https://developer.apple.com/design/human-interface-guidelines/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://developer.apple.com/design/human-interface-guidelines/&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;SDLC Benefits&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Design systems are about more than which colors and fonts to use. Design systems enable apps to become a part of an ecosystem. If your organization has a design system or follows another company's design system, it will be easy for users of your system to pick up your app's interface quickly. When components and layouts look the same across systems, users can bring their familiarity with them even when they've never used your new application.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Spillover Benefits&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In addition to useability advantages, design systems also simplify the app design process, make building wireframes a breeze, and streamline the development process. Developers following a design system only have to implement components once. They can use your organization's component library across various apps, reducing repeated UI code and speeding up the development process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ox8tSsdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1606161290889-77950cfb67d3%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGZpZ21hfGVufDB8fHx8MTY5MTI5NTYxOHww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ox8tSsdH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1606161290889-77950cfb67d3%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDN8fGZpZ21hfGVufDB8fHx8MTY5MTI5NTYxOHww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Design Systems" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by Mario Gogh / Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;References&lt;/p&gt;

&lt;p&gt;Fessenden, T. (2021, April 11). &lt;em&gt;Design Systems 101&lt;/em&gt;. Nielsen Norman Group. &lt;a href="https://www.nngroup.com/articles/design-systems-101/?ref=crtv.dev" rel="noopener noreferrer"&gt;https://www.nngroup.com/articles/design-systems-101/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>uiux</category>
      <category>systemsanalysis</category>
      <category>projectmanagement</category>
    </item>
    <item>
      <title>Social Engineering</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sun, 09 Jul 2023 05:51:01 +0000</pubDate>
      <link>https://dev.to/mackenly/social-engineering-53e1</link>
      <guid>https://dev.to/mackenly/social-engineering-53e1</guid>
      <description>&lt;p&gt;What is social engineering?&lt;/p&gt;

&lt;p&gt;Social engineering is one of the oldest forms of malicious or unethical hacking. Scammers and con artists have used social engineering long before computers and the internet were ever created. The first social engineering attack comes from the story or legend of the Trojan Horse. According to legend, the Greeks hid inside a wooden horse and tricked the Trojans into letting them into the gated city.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W8snqudh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1635338349068-e1b91866217e%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDJ8fHRyb2phbiUyMGhvcnNlfGVufDB8fHx8MTY4ODg4MDc4MXww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W8snqudh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1635338349068-e1b91866217e%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDJ8fHRyb2phbiUyMGhvcnNlfGVufDB8fHx8MTY4ODg4MDc4MXww%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Social Engineering" width="800" height="1200"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Photo by Tayla Kohler / Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Another example of social engineering is the well-known Nigerian Prince email scam. You may think that the seemingly obvious scam is a new invention that came about because of low-cost email sending (cast a wide net, eh?), but that isn't the case. The Nigerian Prince scam traces its roots as far back as the 1800s when it was known as the &lt;a href="https://www.businessinsider.com/charles-seife-writes-about-the-origin-of-the-spanish-prisoner-scam-2014-7?ref=crtv.dev" rel="noopener noreferrer"&gt;Spanish Prisoner scam&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd1v32ffgtsf74z118hp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftd1v32ffgtsf74z118hp.gif" alt="Social Engineering" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All throughout history, humans have been trying to trick, manipulate, and take advantage of one another. The recent phenomena of internet-based social engineering attacks is merely a chapter in social engineering's long history. As ethical hackers, our role is not to trick people maliciously but to educate and train our coworkers and clients to identify malicious actors who use their psychological knowledge to further their own interests.&lt;/p&gt;

&lt;p&gt;Scammers, hackers, and con artists have used social engineering for millennia, and the general idea hasn't changed much, but the actual implementations of the attacks are always evolving to take advantage of emerging technologies and to outpace the public's awareness of tactics. Here are two current examples of age-old attacks that are being updated with modern tech:&lt;/p&gt;

&lt;h3&gt;
  
  
  New Phishing Domain Names
&lt;/h3&gt;

&lt;p&gt;The #1 type of social engineering attack is phishing. Phishing comes in many forms (such as spam emails), but a recent threat has emerged that will likely be a headache for cyber security professionals who try to educate their coworkers on identifying phishing attacks. This new threat is the creation of the .zip and .mov TLD (top-level domains) by Google, which means anyone can register domain names using this extension. I share &lt;a href="https://twitter.com/SwiftOnSecurity/status/1657165035326566407?ref=crtv.dev" rel="noopener noreferrer"&gt;SwiftOnSecurity&lt;/a&gt;, a popular cyber security Twitter commentator's, sentiment in calling this move "dumb."&lt;/p&gt;

&lt;p&gt;Let's look at an example of how this could be exploited in this infographic from Twitter user &lt;a href="https://twitter.com/hnasr/status/1658853944037351424?ref=crtv.dev" rel="noopener noreferrer"&gt;@hnasr&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What is the difference between the two urls?&lt;br&gt;&lt;br&gt;
one has an @ and one doesn't.  &lt;/p&gt;

&lt;p&gt;But also the first downloads version 15 of postgres from GitHub and the second one resolves to v15 dot zip domain which can also downloads a zip file that sure doesn't have postgres in it.  &lt;/p&gt;

&lt;p&gt;You see,… &lt;a href="https://t.co/muGU1ruYdD?ref=crtv.dev" rel="noopener noreferrer"&gt;pic.twitter.com/muGU1ruYdD&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;— Hussein Nasser (@hnasr) &lt;a href="https://twitter.com/hnasr/status/1658853944037351424?ref_src=twsrc%5Etfw&amp;amp;ref=crtv.dev" rel="noopener noreferrer"&gt;May 17, 2023&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wIUG6YGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pbs.twimg.com/media/FwVttO3WwAI-3Gw%3Fformat%3Dpng%26name%3Dsmall" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wIUG6YGI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://pbs.twimg.com/media/FwVttO3WwAI-3Gw%3Fformat%3Dpng%26name%3Dsmall" alt="Infographic" width="680" height="383"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These new domains will make it even easier to hackers to create realistic-looking phishing URLs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vishing
&lt;/h3&gt;

&lt;p&gt;Vishing is a term assigned to phishing-style attacks conducted on the phone using the attacker's voice.&lt;/p&gt;

&lt;p&gt;Most people are fairly alert when it comes to random spam calls; however, when combined with information gained from reconnaissance, sophisticated attackers can be very believable. When used in combination with another attack adding a phone call into the mix can add credibility to an otherwise suspicious attack by making it seem more genuine rather than just a bot.&lt;/p&gt;

&lt;p&gt;If you've been keeping up with tech news as of late, you've probably seen demos where a clip of someone speaking is fed into an AI-powered tool, and the user gets a custom text-to-speech tool. This is great for attackers. With enough digging, you can find a video of most people (especially well-known business people) on social media. If you want to go full James Bond, you could even directly obtain audio recordings. All you've got to do is get audio clips (doesn't matter how), and you can create a fake voice that sounds exactly like an authority figure which you could use to manipulate a subordinate into transferring money or other action via a vishing call. This kind of thing used to only live in the imaginations of movie and TV writers, but it's now a reality.&lt;/p&gt;

&lt;p&gt;An interesting &lt;a href="https://www.hhs.gov/sites/default/files/vishing-attacks-on-the-hph-sector-analyst-note.pdf?ref=crtv.dev" rel="noopener noreferrer"&gt;report published by the US HHS's Office of Information Security&lt;/a&gt; claims a form of vishing called "hybrid vishing" increased by 625% in Q2 of 2022. A hybrid vishing attack is typically characterized by a multistage vishing process where the attacker calls back or introduces other stages to their attack.&lt;/p&gt;

&lt;p&gt;One common variation is where the attacker sends a phishing email that instructs the victim to call a number. Adding a phone call increases the perceived legitimacy of the email, making victims feel more comfortable with the attacker. From my own personal experiences, I know I've seen many companies say that they will never ask for passwords over the phone, but they obviously do ask for them through websites. If I get a call asking me to verify by opening a link sent to my email and to check my spam, I might feel comfortable enough to do it since that's an authentication method deployed by many legitimate companies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Think of it like this. Both malicious hackers and ethical hackers follow a similar strategy for successfully meeting their objectives. To defend a system, cyber security professionals rely on a concept called "layered defense," where multiple security controls or defenses are layered on top of each other so that even if one fails or is breached, the overall system isn't completely exposed. Attackers can utilize the same concept by implementing a "layered attack" where multiple steps are combined to increase the chances of success. Just sending a phishing email or just making a vishing call isn't likely to succeed. But when combined into a hybrid vishing attack, the attacker has a much greater chance of success.&lt;/p&gt;

&lt;p&gt;Just like a single attack is more likely to fail, so is a single defense. Defense strategies with single points of failure (while sometimes hard to avoid) are likely to eventually be breached. As information technology professionals, it's our job to identify weak points in the systems we design and develop so that we can add multiple layers of security between our protected assets and attack surfaces.&lt;/p&gt;

&lt;p&gt;Social engineering attacks are as old as dirt, but that doesn't mean they're unstoppable. Using multiple layers of defenses and ensuring accountability is maintained helps mitigate the threat of social engineering to an organization. Like all cyber security threats, your organization will never be 100% safe, but investing resources and training into improving your odds could mean the difference between disaster and identifying an attack before it succeeds.&lt;/p&gt;

</description>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>The Wayback Machine</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sun, 09 Jul 2023 05:26:32 +0000</pubDate>
      <link>https://dev.to/mackenly/the-wayback-machine-3m31</link>
      <guid>https://dev.to/mackenly/the-wayback-machine-3m31</guid>
      <description>&lt;p&gt;In an ever-evolving digital world, websites come and go, often taking valuable information with them. The Wayback Machine, a digital web page archive created by the Internet Archive, seeks to preserve these moments in time for future generations to get a snapshot into the past.&lt;/p&gt;

&lt;p&gt;Regularly used by journalists, researchers, and even web developers (to see the history of pages), the Wayback Machine has become an increasingly valuable tool for time traveling through the internet.&lt;/p&gt;

&lt;p&gt;The Wayback Machine works by crawling websites, following links, and saving the content the crawler finds. The site boasts of having over 805 billion web pages archived.&lt;/p&gt;

&lt;p&gt;The data archived by the Wayback Machine can be very useful for cyber security professionals, black hat hackers, and Open Source Intelligence (OSINT) gatherers. As a developer, there are several potential dangers of your website being achieved:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Comments in the code revealing sensitive data could expose your company to attack&lt;/li&gt;
&lt;li&gt;Contact information on the site could be used in phishing attacks&lt;/li&gt;
&lt;li&gt;Blog posts or other public content could reveal sensitive information about your organization's policies and procedures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even though the Wayback Machine does present a security challenge, the Internet Archive's important mission of preserving the web for future generations benefits everyone. It's important to be aware of the fact that anything posted to the internet is probably archived somewhere. Cyber security specialists can help educate and inform their community, employers, and clients of the importance of not sharing potentially compromising information publicly on the web by knowing about and understanding tools like the Wayback Machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can developers utilize the Wayback Machine?
&lt;/h3&gt;

&lt;p&gt;If you work with clients or are on a dysfunctional team you may be familiar with stories like this... "Our website is down because our hosting server got deleted and we don't have backups!" This issue could be caused by someone not paying the bill, a malicious threat actor, or an incompetent employee. Either way, it's your responsibility to fix it.&lt;/p&gt;

&lt;p&gt;Without a live website to restore or access the actual data on the servers, your options are limited. You might have never even visited the website you're trying to recover. This is where Wayback comes in. Using the Wayback Machine you can look back in time and see archived versions of the site, hopefully enabling you to rebuild the site. Not a great resolution, but without Wayback you would have had to start 100% from scratch.&lt;/p&gt;

&lt;p&gt;Another common use case for Wayback is Always Online tools. Cloudflare in particular, has a feature powered by the Wayback Machine that enables their customers to opt into an Always Online feature. When your site's server is offline or otherwise unreachable, an archived version of your site is shown to your users with a little banner that lets them know this is an archived version. This feature is invaluable during downtime or other cases where your server may be offline. This is all thanks to the efforts of the Internet Archive and the contributors to the Wayback Machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I protect myself from the potential security vulnerabilities associated with the Wayback Machine?
&lt;/h3&gt;

&lt;p&gt;Wayback in and of itself isn't a malicious or otherwise harmful service. In fact, as the previous section discussed, Wayback can be valuable to developers and IT professionals. The issues arise when site owners carelessly expose sensitive information that could be used by malicious threat actors to build out a target profile or as clues to conduct better-informed attacks.&lt;/p&gt;

&lt;p&gt;Information security is paramount when it comes to the internet because any number of actors are constantly scraping the internet and saving what they find. Search engines like Google do this to provide better search results, the Wayback Machine does this to compile an internet library, and well-funded malicious actors such as nation-states and organized crime groups may be scraping the internet to gather intelligence and leverage. Because of these reasons, it must not be forgotten that anything you post on the internet might as well be published on the front page of every newspaper in the world and memorialized in lights on every billboard from Time Square in New York to Moscow, Russia and everywhere in between.&lt;/p&gt;

&lt;h3&gt;
  
  
  What policies can my organization implement to minimize the threat of scrapping archives?
&lt;/h3&gt;

&lt;p&gt;Every organization's information security policies should dictate the importance of ensuring confidential data stays confidential. A few helpful ideas include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Utilize secret scanning tools like GitHub's code scanning features with push protection: &lt;a href="https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning?ref=crtv.dev" rel="noopener noreferrer"&gt;https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Don't publically expose internal documentation and resources/tooling.&lt;/li&gt;
&lt;li&gt;Require peer code reviews and ensure that secure programming practices are followed.&lt;/li&gt;
&lt;li&gt;Avoid disclosure of confidential information or specific technologies in job postings. Rather than saying we use WordPress version 2.0 and MySQL say we use CMSs like WordPress, Sanity, Druple, and Contentful along with database technologies like MongoDB, MySQL, and PostgreSQL.&lt;/li&gt;
&lt;li&gt;Never put personal employee contact details on your website.&lt;/li&gt;
&lt;li&gt;Restrict employees from disclosing confidential information about the internals of your systems in interviews, podcasts, engineering articles, etc.&lt;/li&gt;
&lt;li&gt;Utilize a tool or build step that removes comments from your code. It's a great practice to write descriptive comments in your code, but it's not a great practice to share those comments with an attacker attempting to reverse engineer your site.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>cybersecurity</category>
      <category>waybackmachine</category>
      <category>osint</category>
    </item>
    <item>
      <title>Choosing the Right Java Data Types</title>
      <dc:creator>Mackenly Jones</dc:creator>
      <pubDate>Sun, 09 Jul 2023 04:33:25 +0000</pubDate>
      <link>https://dev.to/mackenly/choosing-the-right-java-data-types-1ame</link>
      <guid>https://dev.to/mackenly/choosing-the-right-java-data-types-1ame</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--JxN5BYT9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1550016598-add5550c93ac%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDQ4fHxjb3JhbCUyMHJlZWZ8ZW58MHx8fHwxNjg4ODc1NTg1fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JxN5BYT9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://images.unsplash.com/photo-1550016598-add5550c93ac%3Fcrop%3Dentropy%26cs%3Dtinysrgb%26fit%3Dmax%26fm%3Djpg%26ixid%3DM3wxMTc3M3wwfDF8c2VhcmNofDQ4fHxjb3JhbCUyMHJlZWZ8ZW58MHx8fHwxNjg4ODc1NTg1fDA%26ixlib%3Drb-4.0.3%26q%3D80%26w%3D2000" alt="Choosing the Right Java Data Types" width="800" height="541"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are several reasons for Java having different data types. Java has eight primitive data types:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;byte&lt;/li&gt;
&lt;li&gt;short&lt;/li&gt;
&lt;li&gt;int&lt;/li&gt;
&lt;li&gt;long&lt;/li&gt;
&lt;li&gt;float&lt;/li&gt;
&lt;li&gt;double&lt;/li&gt;
&lt;li&gt;char&lt;/li&gt;
&lt;li&gt;boolean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of those eight, six are used to represent numbers. Byte, short, int, and long are all used to represent integers, while float and double are used to represent floating-point numbers.&lt;/p&gt;

&lt;p&gt;You may be asking, "Why do we need to memorize six different data types just to store numbers?" Well, here are a few reasons:&lt;/p&gt;

&lt;h3&gt;
  
  
  Size / Performance
&lt;/h3&gt;

&lt;p&gt;Primitive data types store their values directly in the memory location that's allocated for them. As a result, primitive data types have a fixed memory size. An int will always and only take up 4 bytes (32 bits) regardless of its value. The number 7 can be represented in the smallest Java data type, which is a byte (8 bits), or it can be represented as an int which is 4 bytes (32 bits).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seven as a byte: 00000111&lt;/li&gt;
&lt;li&gt;Seven as an int: 00000000000000000000000000000111&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On most modern computers with hefty amounts of RAM, most programmers might not think they have to worry about how much memory their programs consume. After all, unless you're doing embedded systems programming where memory is limited, storing someone's age as an int rather than byte or short isn't going to cause your program to crash. But if your program is storing or processing a billion people's age, that's a different story. I've heard many stories where developers choose the wrong data type, resulting in unnecessary costs or performance issues for their applications. At scale, consuming four times the necessary memory or storage has real performance implications and can cost your organization millions of dollars. This is the key reason for needing so many data types. Only using what you need means there's less data for the computer to process and less data being stored in memory, files, and databases.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquf7bkbfptf14yqpknqc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquf7bkbfptf14yqpknqc.gif" alt="Choosing the Right Java Data Types" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Precision
&lt;/h3&gt;

&lt;p&gt;The other major reason is precision. This is inherently a side effect of saving space by selecting smaller data types. If you use a data type that's smaller, by definition, it can hold less data. This can become an issue when accuracy and precision are important when you don't know ahead of time how large of a value you need to store. According to our textbook, Doubles can hold up to 14 or 15 significant digits, while Float holds up to 6 or 7 significant digits. If you attempt to assign the value 3.1415926535 to a float, you're going to be out of luck. Java will truncate the value to 3.1415927 and your IDE will scream at you. Java gives us multiple data types so that we can select the best type for the data we're storing, but it's up to us as programmers to know what each type can hold and which will work best for our use case.&lt;/p&gt;

&lt;h3&gt;
  
  
  Type Capacity (Bonus)
&lt;/h3&gt;

&lt;p&gt;Different data types can, of course, hold different maximum and minimum values. But one additional thing to consider is why can a short hold -32,768 to 32,767 rather than -32,768 to 32,768? Since data is stored in binary (which is a base-two number system), it would seem to make sense that the max number would be divisible by two. But that doesn't take into account zero.&lt;/p&gt;

&lt;p&gt;Two bytes (the size of a short) contains 16 bits. With signed binary, that means there's a total of 15 bits that can be used to represent numbers (one is used to switch positive/negative). A total of 32,768 values are being stored within those 15 bits, whether positive or negative. However, there's one less positive number because with a positive number, all zeros mean zero; with a negative number, all zeros mean the lowest possible number. Positive numbers have to give up one value to be able to represent zero.&lt;/p&gt;

&lt;p&gt;With any length of bits, the maximum number of values that can be represented is always divisible by two, but that doesn't mean what the values represent always will be since zero must be counted as a possible value.&lt;/p&gt;

&lt;p&gt;Here's an illustration from my IDE's debugger showing the binary values of each variable:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsunlw4v369oq13hcm02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsunlw4v369oq13hcm02.png" alt="Choosing the Right Java Data Types" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>datatypes</category>
    </item>
  </channel>
</rss>
