[{"content":"Welcome. Recent posts appear below.\n","date":"1 June 2026","externalUrl":null,"permalink":"/","section":"Based Practice","summary":"","title":"Based Practice","type":"page"},{"content":"Everything I\u0026rsquo;ve published, grouped by year.\n","date":"1 June 2026","externalUrl":null,"permalink":"/posts/","section":"Blog","summary":"","title":"Blog","type":"posts"},{"content":" Modern Dev Tools At Breakneck Speed # Lately I\u0026rsquo;ve spent a lot of time exploring new developer tools or reading the documentation (sometimes because you have to), and I\u0026rsquo;ve noticed a recurring theme: everything assumes a pristine, unencumbered environment. The modern developer experience is built for a MacBook sitting on a coffee shop Wi-Fi network, and owned by a start-up that is yet to even utter words like \u0026ldquo;IT\u0026rdquo; or \u0026ldquo;device maangement\u0026rdquo;.\nBut step into an enterprise environment, where infrastructure and security operations actually govern the way we can do work (safely), and that frictionless experience hits a brick wall.\nThere is a massive disconnect between how software engineering tools are built and how they are expected to operate within corporate guardrails. Vendors are optimizing for the solo developer\u0026rsquo;s \u0026ldquo;time-to-first-hello-world,\u0026rdquo; completely ignoring the reality of fleet management, endpoint security, and compliance.\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e \u003c!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"\u003e WARNING: CONTAINS COMPLAINTS\nMuch of what I complain about in this post has to do with my own experiences in environments I\u0026rsquo;ve worked within. Your mileage may vary. Please feel free to hit me up on Bluesky if you have tips or thoughts. The Proxy Problem: When Local Dev Meets DLP # Let’s start with the one connection to rule them all: the corporate proxy.\nIf your organization handles sensitive data, you are likely running some form of deep packet inspection or TLS/SSL interception for Data Loss Prevention (DLP). This is standard operational security. But the moment you introduce a custom internal Root CA to inspect that traffic, the modern local development stack completely loses its mind.\nPackage managers, CLIs, and build tools routinely fail to respect the native OS certificate keychain. Instead of checking the system trust store, they bundle their own rigid certificate chains or enforce strict certificate pinning. The result? A local development workflow that simply halts. Engineers spend hours wrestling with environment variables, writing custom scripts to inject corporate certificates into Docker containers, or trying to figure out why their shiny new CLI tool is throwing an x509: certificate signed by unknown authority error.\nThe alternative is to bypass the offending tool or site. This inherently weaknes the security posture, as inspection of traffic cannot be performed. No Data Loss Prevention scanning, no sandboxing of files, and more opportunities for compromised packages to be used in local development.\nSecurity isn\u0026rsquo;t an edge case. If a developer tool cannot gracefully handle a standard enterprise proxy and packet inspection, it is not enterprise-ready.\nCheck out my write-up of my months-long battle to get Android Studio to play ball: Corporate Proxy SSL inspection and Pain (Zscaler + Android Studio emulator) 12 December 2025\u0026middot;1791 words\u0026middot;9 mins Technical Zscaler Tech Information Technology I spent far too much time solving for Zscaler\u0026rsquo;s SSL Inspection impacting Android Studio, until one late-nigth, I stumble on the answer. The AI Tooling Mirage: Great Features, Little Manageability # This friction has only accelerated with the massive push to adopt AI in the engineering workflow. Every vendor is rushing to embed an AI agent into the IDE, the terminal, and the local stack. The capabilities are impressive, but the enterprise device management requirements are largely absent.\nTake the DX AI Code Insights agent. It promises incredible visibility into codebases, but when you look under the hood at how it actually deploys across a fleet of thousands of endpoints, the cracks show. There is often no straightforward mechanism for automatic, silent background updates via standard MDM platforms. You are left with agents that go out of date, drift from compliance, or require manual developer intervention to patch. And that\u0026rsquo;s even considering how I have been largely impressed at DX\u0026rsquo;s documentation and implementation. Unfortunately due to how the agent\u0026rsquo;s installer is gated behind an admin panel without a method to handle updates automatically or programmatically, this is still a major gap. Please DX, you\u0026rsquo;re so close to making this device management nerd happy.\nWe can also look at something like Claude Cowork. The push to run sophisticated local models or isolated agent workflows often requires virtualization on the endpoint. But managing client-side virtualization at an enterprise level feels straight-forward, but appears to break regularly. This is only exhasperated by the absolute break-neck speed which tools AI tools are updated, leading for more opportunities for installation/update errors.\nFun fact: # Cursor received 13 product updates in the month of May, with product versions jumping from 3.3 to 3.6. In April, there were 8 product updates with products jumping from 3.0 to 3.3 in that timeframe.\nThe DX AI Code Insights went through 18 version updates in the month of May. There are days with multiple version releases.\nCould you like, chill out a bit?\nBuilding for the Real World # The gap between \u0026ldquo;works on my machine\u0026rdquo; and \u0026ldquo;works on a managed corporate endpoint\u0026rdquo; is widening. We are sacrificing operational stability for some semblance of velocity.\nWe need to steer back towards best practices (based practices?). Tool creators and AI vendors need to recognize that enterprise security controls, proxies, endpoint management, DLP, automatic updates, and so on, are not obstacles to be bypassed or ignored; they are the environment. Until modern tooling is designed to be managed, updated, and secured at scale by default, the promise of a frictionless developer experience will remain nothing more than a localized illusion.\n(Unless you\u0026rsquo;re Matt, living the startup life. Hi Matt.)\nZscaler Zenith Live 2026 in Las Vegas, Nevada # Next week, I will be attending Zscaler\u0026rsquo;s Zenith Live 2026 in Las Vegas! I\u0026rsquo;m hoping to use this opportunity to continue learn new concepts, strategies, and soak in as much knowledge from all of the big-brains that will be in attendance.\n(With WWDC happening at the same time, that is going to be one busy week!)\n","date":"1 June 2026","externalUrl":null,"permalink":"/posts/built-for-enterprise-kinda/","section":"Blog","summary":"Dear software engineers, does it really have to be this way? A complaint about tools and platforms not truly being built for enterprise.","title":"Built for Enterprise... kinda?","type":"posts"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/tags/information-technology/","section":"Tags","summary":"","title":"Information Technology","type":"tags"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/tags/opinion/","section":"Tags","summary":"","title":"Opinion","type":"tags"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/tags/tech/","section":"Tags","summary":"","title":"Tech","type":"tags"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/categories/technical/","section":"Categories","summary":"","title":"Technical","type":"categories"},{"content":"","date":"1 June 2026","externalUrl":null,"permalink":"/tags/zscaler/","section":"Tags","summary":"","title":"Zscaler","type":"tags"},{"content":"The good stuff. Probably.\n","date":"31 May 2026","externalUrl":null,"permalink":"/categories/sh-tpost/","section":"Categories","summary":"","title":"sh!tpost","type":"categories"},{"content":" \u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e \u003c!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"\u003e Wyoming is a chunk error.\n","date":"31 May 2026","externalUrl":null,"permalink":"/posts/wyoming/","section":"Blog","summary":"Wyoming","title":"wyoming","type":"posts"},{"content":"","date":"27 May 2026","externalUrl":null,"permalink":"/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"Blowfish — the Hugo theme this site runs on.\nWhy it made the list:\nSensible defaults with deep customization Built-in search, dark mode, card layouts Admonitions and shortcodes that don\u0026rsquo;t fight you Docs that exist and are useful Personal Opinion Most theme docs are a README and vibes. Blowfish actually explains how things work.\nIf you\u0026rsquo;re building a personal site on Hugo, start here.\n","date":"27 May 2026","externalUrl":null,"permalink":"/posts/stuff-i-like-blowfish/","section":"Blog","summary":"A Hugo theme that’s flexible, pretty, and actually documented.","title":"Stuff I Like: Blowfish Theme","type":"posts"},{"content":"","date":"27 May 2026","externalUrl":null,"permalink":"/categories/stuff-i-like/","section":"Categories","summary":"","title":"Stuff-I-Like","type":"categories"},{"content":"","date":"27 May 2026","externalUrl":null,"permalink":"/tags/web/","section":"Tags","summary":"","title":"Web","type":"tags"},{"content":" I’m Just the Man in the Middle! # We recently rolled out Zscaler at our org, which has been real “fun” to do. It has definitely come with quite a number of pain points. For those who don’t know, one of Zscaler’s core features is to proxy web traffic largely to perform content filtering, threat analysis, and more. One of the ways this occurs is through SSL inspection, where the SSL certificate is swapped at the proxy with a new trusted cert (by default, a Zscaler CA cert for your org). Funny enough, this is effectively a Man-in-the-Middle (MitM). For most things, this is fine, because you will have deployed the Zscaler certificate to your device’s trust store (keychain on macOS), which most applications and tools use. However, many applications are more sensitive to MitM because they have their own trust stores (fun fact, even Firefox has its own trust store!).\nTo restore the trust for those applications or tools, you either have to tell it to use the system trust store (which many applications don’t have the option to do), or you have to tell that tool to trust the Zscaler cert, typically by pointing to it or adding it to its own trust store. Else, you have to bypass SSL inspection entirely for the particular FQDNs/IPs (that is, to not inspect that traffic, therefore not swapping the SSL certificate at the proxy so it keeps its natural cert). In particular, developer tools and applications such as Docker, NPM, Python pip and requests, and so on, are all highly sensitive and have their own trust stores. Along with this, is Android Studio.\nZscaler “helpfully” (throw in another 6 or so air quotes for me?) provides a page that details how to add custom certificates to application-specific trust stores, but it’s helpfulness is mixed at best (particularly because some of the steps are not clear, outdated, or wrong). Android Studio is listed which is cool and good, however the steps there are really only for helping Android Studio itself trust the cert. However, what this is missing, is for the emulator itself to be able to trust the certificate. Along with the multi-month game of whack-a-mole dealing with SSL inspection woes, Android Studio in particular was pure pain, leading to over a week of research, trial and error, and blocking far too many teams. This issue isn’t unique to Android Studio either, Xcode has the same issue where the iOS simulator also does not trust the certificate. In both cases, it’s not obvious how to get the emulator/simulator to trust the certificate. For the iOS simulator in Xcode though, the answer was bizarrely simple: drag-and-drop the cert onto the simulator, and then verify the cert is installed. Far too easy. For Android Studio however, it was not so simple.\nSymptom – Blank Page (it no worky) # One of the symptoms of the issue, is any WebView shows up as a blank page. Temporarily disabling Internet Security in Zscaler so that the traffic is not proxied (therefore, not inspected) will result in the WebView working as desired.\nTrust but Verify – do it myself # Because this was issue taking up so much time and to avoid having to pester our app devs, I set out to set up my own Android Studio. I had not touched anything Android development related in many, many years, so of course all my knowledge went out the window, so this took some doing to reacquaint myself. I created a simple application using one of the example apps, in order to create a WebView to test with.\nThis allowed me to experiment and see for myself the results as a I furthered my research.\nGoing Nowhere (fast) – the light(speed) at the end of the tunnel # The days of research were getting quite long, involving reading dozens of Stack Overflow and Google developer community posts, joining Discord and slack communities, making forum and Reddit posts, all not yielding any results. That is until late one night (yeah, after midnight), I was continuing my research in hopes of an answer, when I stumbled across a random one-off Stack Overflow response, with a link to Google’s recommendation to use debug builds to trust a the CA.\nThis got me pretty curious, because everything it was saying made technical sense. Equipped with my extremely basic test app where I could then replicate any failures or successes, and verify with the blank page symptom and SSL errors, I decided to give it a shot. This was probably going to be my final attempt before giving up.\nSteps to Resolve – 🎵every step I make # I placed the Zscaler Root CA cert (.pem) at a res/raw/zscalerroot.pem Created res/xml/network_security_config.xml \u0026lt;?xml version=\u0026#34;1.0\u0026#34; encoding=\u0026#34;utf-8\u0026#34;?\u0026gt; \u0026lt;network-security-config\u0026gt; \u0026lt;debug-overrides\u0026gt; \u0026lt;trust-anchors\u0026gt; \u0026lt;certificates src=\u0026#34;@raw/zscalerroot\u0026#34;/\u0026gt; \u0026lt;/trust-anchors\u0026gt; \u0026lt;/debug-overrides\u0026gt; \u0026lt;/network-security-config\u0026gt; Added to the manifest the following:\nandroid:networkSecurityConfig=\u0026#34;@xml/network_security_config\u0026#34; android:debuggable=\u0026#34;true\u0026#34; Success! (it worky) # To my surprise, this worked! After building the app and running it, the WebView loaded the page as desired.\nAt that point, it was 1:19am when I sent the message in Slack to explain the steps and share the results. I then proceeded to stay awake a bit longer fueled by the adrenaline of finally squashing that issue (and being confident that it will work for the impacted teams), and finally went to bed.\nAnd yep, it does work for the teams as expected!\n(Thank you Robert, you Stack Overflow mad lad) \u003c?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?\u003e \u003c!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\" \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\"\u003e Bonus Thoughts # Don’t ship the cert; Debug mode instead? # Earlier on in the research, we did have the idea to simply put the cert in the app during development. However, nobody should ship their Zscaler cert with their app. That just seems like a bad idea. Which it more interesting that a similar approach is exactly what is going on here. By using the debug-overrides, we are able to specify the trust-anchors key in a relatively safe way, where this will only get applied when the app is being ran in debug within the emulator device. Don’t quote me on this part, but from what I read, this is also safeguarded by app stores (the Google Play Store) automatically rejecting applications that include a debug configuration. Android Studio also helpfully cautions against hardcoding the debug in the manifest, with “Avoid hardcoding the debug mode; leaving it out allows debug and release builds to automatically assign one”. It helpfully provides the option to ignore hardcoded debug mode, with “tools:ignore=“HardcodedDebugMode””. However, this should be unnecessary since Android Studio also has, well, a debug button right there.\nThis isn’t just for Zscaler; Why not just bypass? # SSL inspection happens with many other proxy tools (Netskope for example). So if you’re running into the same thing when implementing your own proxied SSL inspection but you don’t use Zscaler, that’s okay! The concepts are exactly the same. And while it didn’t directly lead to the answer, some of my research did involve using other proxy tools such as Netskope in my key words.\nOne of the common approaches that many recommended, including some fairly knowledgeable Zscaler experts (where their team’s sole role is working with Zscaler implementation), and those that use other proxy tools, is to simply bypass it and move in. Which, if all else fails, is basically the only way to go, accepting the risk that the traffic cannot be inspected. This is often the case for applications or tools that use SSL pinning. However, it’s generally a good practice to not bypass things unless you have to.\nWe\u0026rsquo;ve generally taken this approach to remediating issues:\nSolve the issue through other means first (adding certs to trust stores, making sure related traffic isn\u0026rsquo;t blocked): This can be painful particularly for developer tools, but it\u0026rsquo;s better to keep traffic proxied and inspected than to just yolo stuff on through Bypass SSL inspection: If something is particularly sensitive (MDM related things for example), we will bypass it for SSL but keep it proxied Bypass in the PAC: Some things are just pain and cannot be resolved through other means, so we bypass FQDNs/IPs in PACs if no other option works (because Zscaler does not have application-specific bypasses for macOS since they do not yet have packet-based filtering implemented and has been delayed again and again…). There’s also the aspect where some things need to be bypassed for one application, but not others, because of the exact same work you’re doing elsewhere. For example, the app devs might be working on an app that involves a WebView for say, app.thethinkingsir.com. If all else had failed, we could have simply bypassed that and any other FQDN. However, another team could be interacting with an API in the same FQDN (say, app.thethinkingsir.com/api/v1), through python. Because they’re making other requests inPython to many other FQDNs including that one, they will have ended up setting the env variables to point Python’s requests and pip at the certificate to have it trusted. The issue shows up when bypassing the FQDN for the app devs, that now winds up breaking the environment for the devs using Python, because Python is even more sensitive – when you tell it to expect a cert, it really really expects it and no longer relies on the system trust store. And because it gets set globally in their environment, you can’t just remove that env variable for just that one FQDN, it applies to everything. You then end up in an endless chain of deciding what to bypass, what not to bypass, that by the time you’re done, you’ve bypassed everything and the entire exercise was pointless. Similarly, every single FQDN would have to be bypassed, and you might end up playing an excessive game of whack-a-mole bypassing each and every FQDN, only to find out more have to be bypassed because you’ve gotten one step further and discovered more things aren’t loading. It can truly never end. So ideally, do our best to do what needs to be done to get the application or tool to work without simply going around it.\nYou probably know more than me # This entire journey of research and headaches was largely due to not having the answers up front, and probably not knowing enough context to reach the conclusion as quickly as I could have. I am not an Android developer, nor do I live in a dev world. It just so happens that the org has a few hundred devs, some of which are app devs. But despite all of the headaches, this was a fun learning experience and resulted in a quality hit of dopamine when the solution finally presented itself.\ntl;dr: it worky now # -Mark\n","date":"12 December 2025","externalUrl":null,"permalink":"/posts/im-just-a-man-in-the-middle/","section":"Blog","summary":"I spent far too much time solving for Zscaler’s SSL Inspection impacting Android Studio, until one late-nigth, I stumble on the answer.","title":"Corporate Proxy SSL inspection and Pain (Zscaler + Android Studio emulator)","type":"posts"},{"content":"I can\u0026rsquo;t count how many times I\u0026rsquo;ve found myself in this situation: it\u0026rsquo;s a peaceful evening, maybe after a long day at work or just some random weekend, and my friends and I are hanging out on Discord, chatting and hunting for a game to play. “Hey, check this one out!”. “This looks awesome!\u0026quot;. “Oh, but it’s single-player.” And that\u0026rsquo;s where we lose interest and keep scrolling. This can happen over and over again during a Steam store browsing session. There are countless amazing games I\u0026rsquo;ve passed on for one simple reason: they\u0026rsquo;re not multiplayer.\nWhat\u0026rsquo;s the deal with that? Is making a multiplayer game really that difficult? Are developers just not interested in adding it? Or are they stuck in the past? For many devs, the answer seems to be yes. Creating and maintaining a functional multiplayer experience that meets the demands of today\u0026rsquo;s gamers requires an enormous amount of planning and development time. Then there\u0026rsquo;s the concern about what multiplayer might do to the overall experience. Some aspects of a game, like its scenic beauty or immersive style, might be best enjoyed solo. Not every game is meant to be anything but a single-player experience. Plus, some gamers simply value their time alone. And then, of course, there are developers who seem to be lagging behind by about 15 years.\nOn the other hand, the world has become incredibly social. More and more, we find ourselves craving daily interactions. Some people may use single-player games as an escape from all that, but I use multiplayer to embrace it. I\u0026rsquo;ve made some wonderful friends through gaming, shared many memorable moments, and created lasting memories. Sure, I\u0026rsquo;ve enjoyed my fair share of single-player titles, and my Steam library continues to grow with games I hope to eventually play (though let\u0026rsquo;s be honest, the odds aren\u0026rsquo;t great in this era of Steam library overload). But, like with everything else in life, there\u0026rsquo;s something I\u0026rsquo;d rather do more: have a good time playing multiplayer games with friends.\nYet, I keep getting stuck in this loop of searching for a game to play, only to pass up so many because the developers chose not to make their game multiplayer. Or worse, they tease that multiplayer is “planned,” in that frustrating trend of early access. But here\u0026rsquo;s the thing—I just want to throw my money at multiplayer games that tick the right boxes. For instance, why are there so few multiplayer city-builders or tycoon games?\nThat brings me to Parkitect, which launched on Steam in 2018 and channels the nostalgic spirit of one of my favorite childhood series, Rollercoaster Tycoon. In Parkitect, much like its inspiration, you take on the role of the all-powerful manager, designer, and CEO of a theme park. You get to design rides, like roller coasters, sell food and souvenirs, and even create a little chaos by sending unfinished coasters flying into the sky. The goal? Make tons of money by running a successful theme park. These tycoon/management/builder games are a fantastic way to spend an evening and have traditionally been a solo experience. But I\u0026rsquo;ve always dreamed of a game like this being multiplayer or co-op, so I could team up with friends to build our tycoon empire. With few exceptions, this hasn’t been possible, especially with modern titles. That is, until December 2020, when Parkitect released a multiplayer update. This small studio managed to accomplish what many other studios, big and small, have either failed or chosen not to do. And I absolutely love it.\nI\u0026rsquo;ve spent countless hours playing Parkitect with friends, designing and managing our ultimate theme park. From pirate-themed zones to food courts, and even to ultra-dangerous coasters that simultaneously flambé unsuspecting park-goers while launching them into orbit, we\u0026rsquo;ve had countless laughs and good times together. Sometimes, just chilling and playing the same game is enough. And when just two friends picked up Parkitect, and within weeks that number grew to 5-10, solely because it added multiplayer, it really shows how much these types of multiplayer experiences are wanted within friend groups and communities.\nSo I ask again—game devs, why no multiplayer?\n","date":"3 September 2024","externalUrl":null,"permalink":"/posts/game-devs-why-no-multiplayer/","section":"Blog","summary":"A plea to game studios and publishers for more multiplayer support in unusual places, and how Parkitect’s co-op update proved the point.","title":"Game Devs, Why No Multi-player?","type":"posts"},{"content":"","date":"3 September 2024","externalUrl":null,"permalink":"/categories/gaming/","section":"Categories","summary":"","title":"Gaming","type":"categories"},{"content":"","date":"3 September 2024","externalUrl":null,"permalink":"/tags/gaming/","section":"Tags","summary":"","title":"Gaming","type":"tags"},{"content":"For decades, \u0026ldquo;hello, world!\u0026rdquo; has been the defacto standard way to start things off, be it the output of our first code written or the first post we make on a new medium. To keep in line with tradition,\nhello, world!\nI\u0026rsquo;m Mark, nice to meet you! By profession I\u0026rsquo;m a Senior IT Operations Engineer, working with anything from Apple device management (#MacAdmins anyone?) to Zscaler, identity \u0026amp; access management, to various automation tooling, SaaS applications, and more. I\u0026rsquo;ve worked within small business, managed services, education, corporate, healthcare, and all sorts of different organizations. I\u0026rsquo;ve even been fortunate to have worked for one of the big makers of Apple device management software. Odds are, a good chunk of my posts will speak towards my experiences and opinions in my field.\nAside from that, I spend my time dabbling in a variety of other interests. I\u0026rsquo;ve always been an avid gamer, and you will likely come across the occasional related post. I also work with tech for fun, progressing my skills and doing fun side projects. I\u0026rsquo;m getting more into being a maker, and am doing my best to put my 3D printer to actual use.\nAnd now, I shall pay the cat tax.\n","date":"2 September 2024","externalUrl":null,"permalink":"/posts/hello-world/","section":"Blog","summary":"Tradition demands a hello, world. Meet Mark — IT ops by day, gamer and maker by night, cat tax at the end.","title":"hello, world!","type":"posts"},{"content":"","date":"2 September 2024","externalUrl":null,"permalink":"/tags/introduction/","section":"Tags","summary":"","title":"Introduction","type":"tags"},{"content":"","date":"2 September 2024","externalUrl":null,"permalink":"/tags/meta/","section":"Tags","summary":"","title":"Meta","type":"tags"},{"content":"","date":"2 September 2024","externalUrl":null,"permalink":"/categories/personal/","section":"Categories","summary":"","title":"Personal","type":"categories"},{"content":"I\u0026rsquo;m Mark. This is my corner of the internet for things I build, play, think about, and occasionally sh!tpost.\nPosts are organized by category — personal, technical, gaming, sh!tpost, and stuff I like. Technical posts use tags for topics like homelab, cloudflare, and whatever else I\u0026rsquo;m tinkering with.\nNot everything here is advice. Not everything here will be serious. Some of it will be pretty cool.\nAll opinions are my own. ","externalUrl":null,"permalink":"/about/","section":"Based Practice","summary":"","title":"About","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]